1、打开android studio,新建项目,选择模板,点击next
2、填写项目名称,选择项目路径和开发语言,点击finish
文件目录如下:
这两个放置的是android studio自动生成的文件,无需关心,无需手动编辑。
项目中的代码、资源都在这个目录下。
app中目录如下:
存放第三方的jar包
1、androidtest
主要编写android test测试用例,可以对项目进行自动化测试。
2、main
java中放置所有的java代码或kotlin代码
res中存放项目中使用到的所有图片、布局、字符等资源。
drawable存放图片,layout存放布局,values存放字符串。
AndroidManifest.xml是整个Android项目的配置文件。
3、test
用来编写Unit Test测试用例
1、.gitigore
用于将app模块内指定的目录或文件排除在版本控制之外。
2、build.gradle
app模块的gradle构建脚本
包含gradle wrapper的配置文件
学习之路永无止境
直接收录了网上内容www.ngui.cc整理的不错
]]>软件开发领域两大架构,分别是B/S与C/S。
B/S模式下软件工程师,对web应用服务器没有不了解的,经过20年发展,web应用服务器也大不相同了。如早期websphere\weblogic\tomcat等等,现如今springboot天下,内置web应用服务器成为主流,也契合微服务发展趋势,tomcat\jetty内置到应用系统内部,成为一个组件包方式部署;
websphere\weblogic 属于商用领域里佼佼者,大型应用服务器;tomcat属于开源领域里,非常优先,使用范围也最广的。我进入软件领域10多年了,入门也是从了解tomcat开始的,后续逐步使用springboot的tomcat内核\jetty内核。
最近搞一个非常古老的项目,采用jsp/osgi/struct那套框架开发的,eclipse年代,对我来说已经10几年前东西了,现今的工程师怕都不知道是啥。我也是有关短暂的eclipse rcp开发经历,才接触一些osgi知识。
但,对于应用服务器来说,websphere整体设计和功能完善性真的非常棒,比tomcat全太多太多了。我认为,不论技术如何演进发展,软件设计是一样的思路和架构,围绕场景的解决方案也是不变的。简单来说,问题还是那个问题,换一种技术你还得解决。
未来不论是tomcat的继续,还是完全内置方式,应用服务器所面临的问题都还在,也许都会进入应用系统内部,成为其一部分(目前已看到这样趋势);也或者,完全抛弃,交给独立三方解决,而应用服务越来越小、越来越精简。
做产品,一套架构很多年,架构演进迭代也是渐进式;
做项目,一个客户一套架构,预算不变架构永远不改;
谁更好呢?
]]>应用开发绝大多数人都是正向逻辑,能够把反向场景想到并修复调的极少,特别是国内几乎未曾见过,不知是国内外文化不同,还是国内竞争压力太大;
2B市场,软件系统的交付往往伴随‘安全性’自证,关于这个‘自证’本身非常值得吐槽,特别是金融市场的客户,几乎都是网络封闭环境,TMD的漏洞检测。
漏洞扫描市场是非常大,其本身也非常专业,有较高门槛(对于大多数软件开发人员来说);这个门槛,也说明了在安全领域了这么多家企业的存在是有价值的,还有好几家都上市了。
这次的漏洞主要围绕应用软件系统,不包括服务器、数据库之类。
借着本次机会,盘点了漏洞扫描市场现状。首先,从0开始自己扫描这条路非安全领域内人员请不要尝试;其次,采用开源的检测工具,围绕怎么用好它展开,又或者采购服务商检测软件或者能力;最后,在开源基础上二次开发(加入特性),非大平台不建议。
漏洞扫描AST,分为SAST、DAST、IAST几种,“静态、动态、集成”应用程序安全测试;
百度开源的,主动检测类型,就是安装好后他会主动发起检测。
北京火线安全提供,属于被动类型,需要主动点击功能,通过javaagent模式检测。
留给未来反思总结
]]>本次安装版本:fmw_12.1.3.0.0_wls.jar
java:jdk1.7.0_80
weblogic安装和websphere类似,都是较为复杂,和开源绿色软件不同风格,本质是一个大型软件系统。
管理启动cmd命令,这一步是关键;之后运行java -jar fmw_12.1.3.0.0_wls.jar会弹出安装操作界面,按步骤往下即可,采用默认配置。
linux安装比较复杂,没有弹框界面,必须采用’静默‘方式运行:-silent
/usr/java/jdk1.7.0_80/bin/java -jar /opt/weblogic/fmw_12.1.3.0.0_wls.jar -silent -responseFile /opt/weblogic/wls.rsp -invPtrLoc /opt/weblogic/oraInst.loc
确认jdk安装完成,建议1.7(不超过1.8);
WebLogic 无法在 root 用户下安装,所以先来创建一个用户,然后给刚刚新建的用户 weblogic 设置密码
useradd weblogicpasswd weblogic
在 /opt 目录下新建 weblogic 文件夹,
mkdir /opt/weblogic
把weblogic安装包fmw_14.1.1.0.0_wls_lite_generic.jar上传到服务器,
然后移动到 /opt/weblogic 目录下,
mv fmw_14.1.1.0.0_wls_lite_generic.jar /opt/weblogic/
设置 weblogic 文件夹所有者为 weblogic,
chown -R weblogic:weblogic /opt/weblogic
切换到 /opt/weblogic 目录,输入命令:cd /opt/weblogic
新增两个文件
vim oraInst.loc
Inventory_loc=/opt/weblogic/oraInventoryInst_group=weblogic
vim wls.rsp
[ENGINE]Response File Version=1.0.0.0.0[GENERIC]ORACLE_HOME=/opt/weblogic/oracle/middlewareINSTALL_TYPE=WebLogic ServerDECLINE_SECURITY_UPDATES=trueSECURITY_UPDATES_VIA_MYORACLESUPPORT=false
切换 weblogic 用户,
su weblogic
#安装命令
/usr/java/jdk1.7.0_80/bin/java -jar /opt/weblogic/fmw_12.1.3.0.0_wls.jar -silent -responseFile /opt/weblogic/wls.rsp -invPtrLoc /opt/weblogic/oraInst.loc
切换回 root 用户
切换目录
cd /opt/weblogic/oracle/middleware/wlserver/common/bin/
执行wlst.sh文件,开始创建域,
./wlst.sh
依次下列命令:
readTemplate('/opt/weblogic/oracle/middleware/wlserver/common/templates/wls/wls.jar')cd('Servers/AdminServer')set('ListenAddress','')set('ListenPort', 7001)cd('/')cd('Security/base_domain/User/weblogic')cmo.setPassword('weblogic1234')setOption('OverwriteDomain', 'true')writeDomain('/opt/weblogic/oracle/middleware/user_projects/domains')closeTemplate()exit()
cd /opt/weblogic/oracle/middleware/user_projects/domains/bin
使用后台启动模式,命令:nohup ./startWebLogic.sh &
./stopWebLogic.sh
有防火墙的,记得开放下7001端口
访问weblogic,输入:http://192.168.224.11:7001/console
输入登录用户和密码就可以了(weblogic/weblogic1234)
https://blog.csdn.net/qq_55494759/article/details/131324000
https://blog.csdn.net/weixin_54093404/article/details/127897690
]]>对其起源不是很清楚,推测与阿里有关系,他们首先提出的。近些年来看,阿里对这个领域推进不是很积极,加上又拆分,后续真不好说。
数据中台,这块业务方向是有价值的,不然也不会有很多人响应。我真正进入该领域是2022年,偶然机会加入了数据中台团队,早在2013年我有数据仓库在银行信贷领域的经验,也算是步入老本行。
在这近1年的时间里,发现(起码是我们目前的团队)大家对‘数据中台’的理解本质还是‘数据仓库’,加了WEB界面加以控制。数仓领域,数据模型和ETL是核心业务,中台里‘数仓’是其很重要的一部分,但不仅仅是数据仓库。
数据中台,还包括‘元数据管理、数据源、数据标准、数据建模、数据质量、调度、数据地图、数据服务、数据管控、数据血缘、多源比对’等业务。这其中,数据建模、数据服务、调度是数据主业务流程,数据质量、数据地图、数据血缘、多源比对更多是一个辅助业务流程,价值相对次之。
一年时间看着不短,其也不长,将将够把’数据质量‘玩透。调研了市面竞品不下20家,大版本迭代也近5轮,基本形成了较为标准的产品体系,经历多场景客户实际运行认可。客户的认可,对整个团队起到非常大的鼓舞。
数据质量的核心逻辑,是检查数据内容是否满足要求,将发行的问题反馈给对应人员修正,检查对象主要是’数据库‘。
整体功能设计:
写点项目与产品的感悟,过往多年一直在产品化的路线上奔跑,而如今在一个项目部的团队中,这里考核重心是“成本、资源、时间“,对于”标准化“是认可但融合遗忘。
简单点,选择加入产品团队,对个人来说也许是低成本的。但对于产品、项目的合作模式的探索来说,这只是逃避,问题还在那。也许有些公司不存在此类问题,路已经趟过,但我目前面临的是一个’产品化方向‘不明阶段,需要借助项目实施来积累摸索一条产品化之路。离不开,项目实施经验,或者说真实客户的需求场景。
遇到几个问题:
数据中台本身也契合’数字化‘的大趋势。
]]>通过jenkins配置react工程流水线部署。
原本构建部署都很简单,npm install&npm run build,dist搬迁到部署路径即可。
相对于自己公司的npm registry,这种registry一般是开启账号/密码,必须要登录进行package依赖下载。在流水线里通过脚本执行命令,是无法人工输入账号密码的。本地手动可以command中断等待输入,流水线完全行不通。
解决方案就出在npm上,npm的命令拉取不同的registry是可以指定的,全局指定一个私服,或者某些前缀依赖拉取指定registry。
npm本身提供机制来解决下载包时的授权问题,文件:.npmrc
npm读取.npmrc的优先级关系:
项目配置文件: /project/.npmrc
用户配置文件:~/.npmrc
全局配置文件:/etc/npmrc
对于.npmrc文件格式:
registry=http://221.238.115.163:18080/verdaccio///http://221.238.115.163:18080/verdaccio/:_auth=LW4gJWluOjEyMzQ1NicgDQo=
这里面的"_auth"是“admin:password"格式,并且base64编码的结果。可以使用命令echo "admin:123"|openssl base64
。
另外,在_auth机制外还有_authToken方式可以解决。
]]>学习python对于我来说不是为了进入编程,而是为了丰富我自己编程世界的边界,不想被一两门语言而限制自身发展,限制有趣的方向。Java是我立身语言,入行的敲门砖,已经10年多了,玩的很溜,一路成长为架构师。
语言其实已经掌握很多了,如:java、sql、javascript、go、perl、shell、react、vue、scala等。因为每个语言的诞生都是有自身的定位,它是为了某个场景某个领域而被创造出来,所以它天然尤其生命特性,也有其自身弊端。选择多学一门语言,能很好帮助工程师跨领域积累知识,开阔思路,也有打开职业机会。
Python和Java有着自身特性,现在回来对比。我认为,python替代java还为时尚早、还很早,但python有着java无法跨越的优势,解释型语言和编译型语言相比,在类似脚本类任务场景是十分突出的优势,另外python语法的不严谨也降低了入门难度,这样的降低让它非常迅速的积累了生态,甚至生态更甚,如科学计算相关函数库。python在科学计算领域的积累,奠定了其江湖地位,占领了庞大的市场。
特地在年底不太忙时间里,系统了学习python,包括“语法、系统库、框架、三方优秀库”,对工程搭建、运行、部署都做了充分实战练习。因为本身10多年编程积累,再去学一门新的语言确实是触类旁通的,短短2周拿下,还接了一个地图数据清洗的活,也算干成了项目。
早前也学过go,当时是一眼就喜欢上了,简洁的语法特性,让人着迷。另外go对系统api的支持,做java对jvm的了解,让我们对go汗颜。要是go出现早些,我肯定学go去了,可是后端及web领域,已经有个java了并且掌握很好,再学go有点多余,出发抛弃java全力转型,确实有很多互联网公司全员转go,考虑到当前情况,我只选择了掌握入门语法,帮助自己能看懂。另外go在硬件设备领域,有着c/c++无法超越的优势,这个领域必然选go。
python对我来说是补充,这些年一直在找一门语言弥补java在脚本领域-短、平、块的不足,让我很快速方便的做一些小事情,特别是文件、数据、网络之类。在b/s这块web开发,当是java天下,短时间无法取代,就是后起之秀迅猛,但这个市场java任然很好。我想未来,是年轻人的,为了避开软件开发高速发展的拉扯,我下沉到了数据领域-我的老本行。
我认为数据是软件的后市场,规模很大,竞争强度也不低。
python有几点对我十分有益:一个是,可快速搭建脚本处理问题,不要java这个工程那个框架的;另一个是,桌面程序封装,简单开发一个桌面交互,从而实现流转使用,比java-swing之类轻多了;最后一个,是python的庞大生态,github库大量python项目可借鉴,能看懂加使用和稍微修改,这就是能力的边界。
从此,我是java和pyhon并行。
]]>本篇就是第三个目标的调研结果分享,前两个以及完成。
python web开发框架django目前引用很广泛,也十分的成熟,首先对它的调研学习。把官网的Tutorial的用例全套学习下来,各种用例手动写并运行、分析。搞了不少天,收获非常大,对django开发web系统的project有了全局了解,包括路由、页面、静态资源、数据库、持久化、sql、接口等等。
对django框架的使用,总结来说分以下节点。
感受下来,django和freemarker之类属于同一模式的,比这些框架要全面而强大。但是,非主要前端开发语言,有学习成本,适用性属于小众市场,大型web系统没见过用它的,并且真正用起来怕是会非常难受。
]]>作为辅助脚本语言的python,我的定位是工程java语言的补充,所以对于做一些小工具的语言进行学习,自然离不开GUI库掌握。
python3自带官方库 tkinter 已经算是小场景下的全面工具集。
引用源码tkinter.init介绍
Tkinter provides classes which allow the display, positioning and
control of widgets. Toplevel widgets are Tk and Toplevel. Other
widgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton,
Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox
LabelFrame and PanedWindow.
Properties of the widgets are specified with keyword arguments.
Keyword arguments have the same name as the corresponding resource
under Tk.
Widgets are positioned with one of the geometry managers Place, Pack
or Grid. These managers can be called with methods place, pack, grid
available in every Widget.
Actions are bound to events by resources (e.g. keyword argument
command) or with the method bind.
Example (Hello, World):
import tkinter
from tkinter.constants import *
tk = tkinter.Tk()
frame = tkinter.Frame(tk, relief=RIDGE, borderwidth=2)
frame.pack(fill=BOTH,expand=1)
label = tkinter.Label(frame, text=“Hello, World”)
label.pack(fill=X, expand=1)
button = tkinter.Button(frame,text=“Exit”,command=tk.destroy)
button.pack(side=BOTTOM)
tk.mainloop()
tkinter的简单已用,超级吸引到我了。随便写了个交互界面,发现就十几行代码,这简直让人不可思议。真的是时代进步了,新语言已经解决了过去各种棘手问题。在java世界里,GWT Swing 包也可以写GUI程序,但总受制于java特性,太重。
有一种很普遍场景,在window或者mac下做一些小程序,用来处理一些数据或者文件文件转换,或者内容格式化等等。用python的GUI界面,用户只需要简单界面配置,然后“启动”按钮一点,等待一会就能完成目标。这样的小工具,对于很多不懂技术的人来说,牛上天了。
使用机制和Swing差不多,编程上看却简化太多,我只要一个py脚本即可完成小工具开发,真无论如何都是吸引人的。
可执行程序exe
python打包一个exe程序,居然也是如此便捷,让人乍舌。
pip install pyinstaller
安装 pyinstaller工具即可。
进入工程文件所在目录,直接pyinstaller src/app.py
就会在当前目录下生成一个dist文件夹,里面有个app目录,这app目录里就是完成可执行程序。复制window电脑,进入目录里,找到exe后缀程序,直接双击运行。
小技巧:将.py文件后缀改成.pyw,这样启动的程序即可隐藏控制台。
Python学习,快如闪电
目前了解下来python是没有打包构建可执行文件,类似java的flat jar概念的。我想这正和‘解释型语言’与‘编译型语言’的区别,.java文件先要编译.class文件才能执行,而.py直接即能执行。
所以在python的部署里,只要把工程文件全部copy或者zip下放到服务器上,再把python环境在服务器上安装好即可,对于有venv环境的,三方包已经在venv的site-packages下,所以理论上copy过去就能直接python app.py
这般执行。
也支持类似nohup命令 nohup /bin/python3 app.py>/dev/null 2>&1 &
是可行的,这个java -jar app.jar
是一样。
特地借用python标准库中http包,写了一个简单的http服务器,这样就能保持服务一直拉起状态,方便测试。
import http.serverimport httpclass request_handle(http.server.SimpleHTTPRequestHandler): """ 自定义请求处理类 """ def do_GET(self): print('client_address', self.client_address) print('headers', self.headers) print('path', self.path) print("command:", self.command) self.send_response(200) self.wfile.write("i get your message by get".encode("utf-8")) def do_POST(self): print('client_address', self.client_address) print('headers', self.headers) print('path', self.path) print("command:", self.command) self.send_response(200) self.wfile.write("i get your message by post".encode("utf-8"))def my_server(): addr = "127.0.0.1" port = 8080 server_o = (addr, port) httpd = http.server.HTTPServer(server_o, request_handle) return httpddef info(): print('http...')if __name__ == '__main__': info() my_server().serve_forever()
通过命令curl http:/127.0.0.1:8080/test/ok
测试。
另外像docker一样部署,也完全是与java一致,或者说docker部署可编程语言是解耦的,docker 的 cmd []
命令只要拉起程序就行。
FROM python:3.9WORKDIR /appADD . /appRUN pip install -r requirements.txtCMD ["python","app.py"]
docker 部署启动,构建image起本质与服务器上直接python启动是相同的,只是对加了一个沙盒。
工程目录直接zip,然后在服务器上unzip,用python命令启动也挺快。有时候一个单文件的脚本.py的移动并可执行,真的是很方便。确实在这块来说,比java吸引人,特别是哪些只是作为一个脚本用的人来说。
学海无涯,苦作舟
虚拟环境变量,virtualenv 本身是一个工具,命令行工具
通过 pip install virtualenv
安装
pip是一个package管理工具,有点java maven、node webpack & npm &yarn。和npm非常像。
virtualenv 目的是在你工程目录下创建一个独立的python命令及相关命令库,同时把依赖的第三方包都房主工程目录下统一管理。也就是每个project的运行环境独立了,用java的体系来讲就是每个project有个自己的jdk和三方jar库。这个也和前端工程目录结构类似,node_modules 就是跟工程走,而不是全局的,因为每个工程对用的package有自己的版本诉求。
这里的site-package就是三分包安装目录。通过 pip install package_name
安装。
问题:
pycharm 和 cmd 两种方式都试了virtualenv机制,同时测试 --system-site-packages 参数,都不太好用。少数情况下安装在虚拟目录中,大多安装在全局目录下,这块问题待后续慢慢查找吧。要么理论没学好(文档少),要么python自身bug。
类机制作为一个高级语言是必备支持能力,就是面向对象编程理论。python也不例外的支持class。学习class就得学习命名空间和变量作用域,这个一定得懂,不然看不懂代码。
官网给了一段code,非常准确的描述了作用域关系。
def scope_test(): def do_local(): spam = "local spam" def do_nonlocal(): nonlocal spam spam = "nonlocal spam" def do_global(): global spam spam = "global spam" spam = "test spam" do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam)scope_test()print("In global scope:", spam)
运行结果:
After local assignment: test spamAfter nonlocal assignment: nonlocal spamAfter global assignment: nonlocal spamIn global scope: global spam
原理(看懂这个,跨一大步):
局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。
如conda 工具值 anaconda、miniconda的使用,和pip&virtualenv是一样的。
学海无涯,逆行而上。
学海苦行,逆流而上
本地跑些py脚本,加上自带的lib,可以完成很多场景的应用开发。和java一样,你就使用jdk自带tool,也可以完成一座大楼的建立,就是苦了些(一切从头来)。python也是如此,自带库肯定是必须掌握的,很多无网情况下,只能人肉从头开发。
高级就是要站在巨人肩膀上。
类似java的maven中央仓库,python也有自己中央仓库pip:https://pypi.org/
还有想docker image registry一样,都是中央仓库机制,同时支持私服(私有仓库)。
类似maven,pip也是本地一个工具,python install pip安装即可。pip有个本地仓库site-packages,和maven的repository一样。默认site-packages在python安装目录lib里,idea工具会把这个目录加载进开发环境,所以在代码里import package-names 即可用。
项目迁移高效做法就是直接负责site-packages文件夹,和maven的repository直接复制一样,提供迁移效率(网络永远只是辅助)。
特地引入了requests包,用来演示pip引入机制。顺道,研究了module机制,就是引入自己的packge,一版就是目录级管理。高级的就是上传自己的package到中央仓库供别人使用(暂时不研究了,以后出现场景时,再搞也不迟)。
def post(url, data=None, json=None, **kwargs): r"""Sends a POST request. :param url: URL for the new :class:`Request` object. :param data: (optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of the :class:`Request`. :param json: (optional) json data to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :return: :class:`Response <Response>` object :rtype: requests.Response """ return request('post', url, data=data, json=json, **kwargs)
python搞定一个http post请求真心简单,这里json数据格式可直接写,和javastrict语法机制一样,天然支持json。json要是在java里写很麻烦,一堆“{}”,容易缺这缺那。
还是回到python定为,在我个人看来,作为一个万能的脚本,搞定‘短平快’需求,python处于绝对地位,想perl、shell、bat之类脚本靠后、靠后。
]]>安装一个python软件,创建一个*.py文本,直接python *.py已经没有任何难度,剩下的就是熟悉内置各种包,但是这个需要项目或者场景的支持才能够深入掌握包。目前,大致记住有这么一个lib即可,自带的挺丰富。
近期把python自带的doc打开,发现新天地。和jdk安装包一个思路,python3的安装包自带该版本全部文档,这东西和研究jdk包是一样的,经常回顾就能建立知识体系。掌握一门语言,翻包,是基本能力,还有翻源码习惯。
进阶学,发现python的thread模块居然这么全面。像:线程本地数据、队列、锁、并发、事件,和java很类似(虽然没有细看每个模块的定义,但既然是编程语言,详细和java之类不会反着来)。
新建一个thread:
python:threading.Thread(),构造方法支持几个参数
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)¶
相对于java的new Thread or new Running,这个参数量真的很少了。参数里面target就是thread要执行的模块,可以引入一个function,函数式编程这里提醒出便捷,def 一个function直接作为参数传入thread,真心方便。
另外python还支持Lock和RLock,特别是RLock全程 reentrant lock,可重入锁,完全和java一致。
在这里python的class居然支持重写method,这点厉害了(学到这里,理解了python为何这么火,全球第一火)。在编程语言创立圈子里,应该也有“标准化委员会”或者“非一致委员会”,像JRE标准、SQL标准等等,编程语言里面逻辑、数据类型、class、function等等定义,都有着基本标准(虽不是强一致,但大家都会遵守)。所以,才有掌握一门语言,其他语言也易学。
高阶python里,还有multiprocessing 之Pool Process,有 sched(调度),完全把一门语言搞到精通、架构级别,考自学基本知识是很难的,得有大量项目历练。
学海无涯苦作舟,沧海一叶!!!
]]>class 定义语法格式虽与java不同,但理念是一样的,也支持继承夫类,重写父类方法,这里叫函数,本职都相同。
python里没有接口一说,这点却是显著的不同。
异常模块
python的异常,最父级是BaseException类,Exception是继承自它,还有一堆XXXError继承自Exception。像自定义异常直接继承Exception,也是官方推荐方式。
像 try except finally 结构也是一样,raise 就是 java里的throw 。
这两块属于python的基本知识点,学起来很快,看几遍文档基本就掌握了。
总结
写到这里,对Python的掌握其实进入了一个里程碑,很多场景是够用了。处理一些临时问题,直接*.py文件即可处理,环境的安装也比较简单,推荐python原生环境,conda作为辅助。也有例外,项目构建选啥,就延续下去。
我对python的学习,还有2块要突破,分别是:
先从可执行包开始吧,研究python怎么处理。
]]>在技术语言这条路上,再加一”城墙“,语言越多越”好“
这条路目标还是学会python这门技术的运用,这样在任何环境下都可以结合业务进行落地。
python.exe 环境比较好装,直接官网(www.python.org)下载安装包即可,支持window、linux、mac多个操作系统。
语言本身也开源,有能力的可以基于源代码构建安装包。
和jdk思路差不多
pycharm idea安装,官网 www.jetbrains.com 可以自己下载。学习阶段我直接安装社区版,免费的,将来考虑破解或者购买正版(显然,从未买过)。
环境搭建至此,完成
python做一些桌面小应用,这不错!
推荐几个网站,重点推进《菜鸟教程》。
这三个基本够用。
另外python安装包路径下有html版的doc,本机可直接查看。
写到这里,python的基础学习,我已经到了”掌握常用lib阶段“,对”命令行命令“还需要再补补,语法过了有几轮(必须常动手,容易忘)。
期待”进阶“阶段了。
demo会在”抓取数据“和”数据分析“两个方向尝试。
]]>达梦数据库,是武汉达梦数据库股份有限公司的拳头产品,数据库名就叫”达梦数据库“,目前已经更新到了DM8版本。
商业数据库,没有开源,也就没有社区版本,官方支持1年的试用。(1年很多场景能够跑起来验证,个人觉得还是不错的,额外的需求相信淘宝也能支持)
2000年成立的公司,支持不少2G企业。国产趋势里,达梦占比是比较高的,已经不是第一次听到这款数据库产品。
下载了它们DM8数据库产品,zip包700+M,windows支持iso安装,安装工具很标准,跟oracle、mysql类似的。
工具集也很丰富,客户端工具、数据库服务、命令行工具,监控和管理服务都很齐。
另外,文档真心详细,很用心了。比如,像我这样第一次用的小白,四个文档解决了我关心的问题,”DBA、Instal、Program、SQL“.pdf。安装先搞定,再查看DBA文档,搞定数据库系统本身的字典表,基本了解7788,最后查看应用基础文档,像jdbc这种及spring、mybaits这种搞清楚,标准sql基本数据厂商都会去支持,差异可以后期遇到再慢慢看。
客户端工具,界面简洁,拖拽做的挺好,集成很多后期数据库客户端便捷功能,比如选中表-拖拽到sql编辑框-自动生成sql完整语句,这个就真心的从用户角度来考虑,体验非常好。
数据库架构:user、schema、view、function、proc、table,和国际标准数据模式都是兼容的,达梦很类似oracle,dba.pdf里有非常详细的运维介绍,包括存储表空间、页、日志、性能等等。
可借鉴我的思路:
达梦DM8驱动已支持有:ODBC、JDBC、PHP、.NET、NODE、GO。像Node、Go的支持,值得思考(入行语言优先参考),另外pyhton的支持被单独拉出一章进行介绍,文档也是独立的。
信创,国内是一个风口,目前趋势来看还要扩大。特别是数据及工具产品,在2G、2F上都是上升,2C目前还不明朗。
]]>Postman这个工具是个“新生代农民工”,我想就没有人不知道是什么。
Postman,一个API调试工具。目前已知最主流的,且市场占有率不低于50%,机会所有后端研发工程师都用过它,甚至一直用它。
今天推荐的是另外一个工具Apifox,这是一个桌面工具也支持带web页面展现工具。还有点像项目Swagger工具,但它的优势是不用集成到代码里面,没有耦合,同时页面也好看非常多。
桌面特性同Postman是一样的,win与mac都有支持。
Apifox支持“发布”,会直接生成一个API的网站,这个就很厉害了。
比如,Axure也支持发布,可以在WEB页面上查看,但是它是单账户的。每个项目每个公司只能看自己的,或者自己主动分享。Apifox支持分享自己平台API,相当于公开API接口展现给其他人,这点同Github思路差不多,也能自己搜索。创新上,这不是什么高升能力或者模式,但是之前就没有人做出来和做的好的,比较早期盈利模式还没有,搭出来的平台就是成本。
对于小的团队来说,这个工具非常实用方便。
架构师这个岗位,或者这个工种,并没有大家想象的那般诱人。事实往往恰好相反,这是一个非常辛苦的职位,不论是在或大或小的企业里,都是如此,压力是巨大且无止境的。
前面文章我有分享过研发工程师的段位梯队,初-中-高-专家-架构师-技术总监-首席技术官,看看架构师所处的位置也能明白一些,为何我认为这是十分辛苦的岗位。
如果只是使用技术把需求实现,或者解决某个技术难点,又或者搞出了新鲜的轮子,这些都不会有太大的压力,时间上门都能过给予弹性的。架构师以下的工程师基本按照这个思路做事,职业总统是很顺的,年龄到了要么转行要么做管理。而架构师就是这群人中特别的,还要追求技术之上的设计,同时兼顾方方面面复合能力,说白了就是自己挑战自己的极限。拼技术“开发”能力,肯定搞不过20多岁小伙子的,也不专职做,谈不上专业管理水平,还要被人(总监)管。
这个问题本身也是行业的发展不足导致的,很多人认为架构师就是比高级技术在厉害一些的技术,高级技术3天工作量,架构师1天就能搞定。有这种想法真是打错特错。
架构师,可以称为设计师,是整个系统的设计者角色。
这就好比你盖房子,要找个人给你设计好画出图纸,这个建筑设计师就好比软件的架构师。对于设计者来说最大的压力是风险,对整体设计产生任何偏差的风险,而风险几乎是无处不在的,想要完全规避是得绞尽脑汁的,不掉几根毛头发是绝无可能的。
对于我们架构师来说,不单单要设计出来,还要保证试试过程顺利到位,全程无死角跟进,这里面风险最大的就是执行的“人”,这是风险最大的变数。做过管理的人都明白,最难管的就是“人”。要保证系统研发顺利,不单单是技术问题,根据我多年经验,这里面技术方案反而是最简单的,最难的是研发团队实施过程管控(保质保量),还有个就是“向上”管理的持续能力。
架构师,真不容易的,且行且珍惜!
]]>从以下几个角度分析两者优劣势:
1)Github点赞量看,xxljob是略胜
2)功能上ltsjob明显丰富较多
3)分布式能力都具备,不相上下
4)失败保存和恢复能力都具备,不相上下
5)开放源码,两者都开放
6)ltsjob账户分为多级按节点授权,明显胜出
7)xxljob社区热度较高
8)xxljob支持maven中央仓库,优势明显
9)xxljob支持监控并邮件通知,优势明显
归纳来看ltsjob有几点属于硬伤:
1)任务监控和邮件通知能力缺失
2)maven中央仓库未编译提交
自从来到这边,网络被限制后,一直无法关注开源社区和自己的项目,内心有些无奈。工作强度也明显大了很多,回到家都9-10点了,周末还有忙着照顾家人。自己已经明显感受到技术在逐步脱节,担心再这么下去,自己那点技术优势都得葬送在这家公司。
办公室外网被禁,这样的公司环境可以说是“巨差、巨差”,这个年代真的难以忍受,特别是互联网技术是更新非常快,非常快。
]]>工程组织结构通用化。
研发学习成本最小化。
运行和部署自动化。
非业务功能组件化。
服务质量的逐步提升。
抽象分为:技术选型、工程机构、通信协议、环境定义、版本流程、日志规范、部署统一、配置统一。
解决研发团队遇到的各种问题。
让团队做事情更加高效。
让系统运行稳定。
]]>