在过去写给未来孩子的信

此文送给多多8岁生日,是爸爸在过去你还未出生时写下的。希望你过的每天都快乐并且有意义。我们一起加油吧!


 

2011年2月25日
16:27
这天也许是普通的一天,但是同时你让大家知道了你在孕育中.
这让上海,北京,分隔两地的,你的爸妈.倍儿感动.那天我冥冥中无法入眠,因为
你妈说,她买了个测试怀孕的东东,因为,好久没来事了.(至于啥事等会儿,我跟
你解释)反正,我也是对着电脑,无法入睡,便开始写作至凌晨4点,当我被7点,你
妈的电话叫醒时,我还伏在桌上.这个消息,让我很想高喊,想飞上天.不过,旁边
还有同事在睡觉,我便把这份欣喜放到了心里的深处.我要记得这一刻,就不如把
它写下来,并把它用自己的方式记录.所以,这是永远的,新的开始.你的,我的,
大家的…

要想让一个孩子,变成大人,那就给他一个孩子…
如果要想加快这个进程,那就再来一个。

事实上,上帝怕我成熟太慢,后来又给我一个女娃子,让我成了女儿奴。当然也没有想到你当哥哥情况,但对你的期望现在多了一条,就是再当个好哥哥。

当你差不多明年5月出来的时候,
你要首先感谢你妈,她很不容易的,开始时一个人在北京,怀着你,还天天上班,即
使嗜睡,呕吐,还要猛吃食物来补充营养.并不顾对少女苗条体型的留恋,总之,她
的一切都牵动着五个人的心,你外公,外婆,爷,奶还有我.孕育你出生,就是一家
之望,不容有失.本来我想担任这个任务,后来考虑了一下,还是算了.

希望你以后是个健康个孩子.小学时品优学可以不优.素质教育从小做起.
至于原因,你得9-10岁时才能整明白,在这期间,我得培养你的动脑筋,爱读书的
兴趣.不会有很多学业的压力.我不像你爷和奶一样教育我,我的童年基本上被我
的童年给毁了.到了你上13-14岁时,你应该有一项天赋被我发现了,并起步了.虽
然,你爸妈没啥太多艺术细胞,但生你时,上帝不会打盹儿的.如果你是个男孩,可
能会爱足球,没办法,老鼠的孩子会打洞.但你不能成为职业球员.因为,别看他们
风光,出名的还是不多,而且,人运动的黄金时间一般只能是4年左右,此后,你还
是需要其它的技能来打拼.更重要的一点,你不能踢职业足球,因为你在中国,就
算进了国足,算了,还是进行下一话题.该上初高中了,这时你应该有些欲望,那
就是通过努力,达成目标的想法.上好的高中,让你爸妈都有面子,并且,还能少
操点心.因为,基础教育还是很重要的.

学历虽然也只是一纸黑字,但还是要有,既然如此,把它搞定不就得了嘛.也不用
太高,研究生就OK了.学久了,我还怕你傻了呢.我还是愿意你成为学霸的,毕竟
在你们的时代里,只要你主动,就会有资源,有资源了就会被推向更高阔的天空。

在我毕业多年的时候,才悟出来教育其实就是一个骗局,在里面你什么也学不到,
除非自己思考,主动追求.你老爸我就是受害者.幸好,我悬崖拉马,没有越陷越
深,阿门,上帝,耶酥啥的~~
大学时,你会找到真正的方向,但你要学会聆听自己的心声.发现,你最喜欢,最
专注做的那件事,和做事时的那个感觉.
if (boy==you)

IT术语,意思是如果你是个男孩

读大学时,你自由了,警告你,什么不敢尝试,就去做什么,因为,年轻是你的本钱.
我当然会有些监管,你是否挥霍无道.处了对象,也别掖着藏着,爱情,选修一下吧.
不然,你到社会还是不解风情,甚至,不懂女人就会很受伤~~~.
的瑟了差不多了就多看几本书.大一至大三,每年,我都会给你开出书单,当然是
有考核的.看完书后,要给我讲一便.
交一帮哥们儿去,但要有几个靠谱的,将来,他们可能是你可以倚重的人。
if (girl==you)

IT术语,意思是如果你是个女孩,这块的内容可以让佳音听听

总不能非主流,早恋吧。这个要你妈多费心了。学习她是相夫之术,你妈眼睛
就是独,看人很准,全方位评估。
我就试过被施三十六计,不过,你学个十计就够用了。
但注意,想同时拿毕业证和结婚证是不允许的。你还需要经过一下社会的诱惑
和考验,方可知道何是爱情。

进入社会后,大的原则保持住.
那就是不吸烟,不酗酒,不涉黄赌毒,不涉黑,不进娱乐圈.
好像说的比较严重,因为正规流水线下来之后,世界观,价值观都成型了,沾不着
这些,但天知道,你们那时代,世风日下会到什么程度。

附记:
只所以有if boy or girl,因为当时你未出世。而现在又有仙女下凡到我家了。你已经快上了三年级,感谢一切。

我变成了另一个基类(IT面象对象开发术语),需要初始化好成员,并且析构函数声明成virtual,防止内存泄露,最好来几个纯虚函数,以免扩展性差,尤其是今生未了之梦想……,就不玩模板了,他的人生自己设蓝图。

同时当了爹,也就是成了鸡肋哈,虽然说地位低了,并且父母不再唠叨了,但负担大了,要承上启下了。生活更有意义了,以前不屑于当一个挣钱机器,但现在你会为了几斗米折腰,也会为了失掉一个职位而担心。所以,我们家人一起相互理解,共同努力吧!

80后的40岁

再过几个月,80后的第一批“一支花”将隆重上岗。

再过几个月,年代星球上,生活和居住在80区的人们将迎接第一缕曙光,能率先观测到这一“百年不遇”,“一生一次”的奇观的是出生在1980年人

再过几个月,盛大的,持续十年的大型原创征文比赛将拉开序幕,征文的题目要求是:不限篇幅长短,不限文体语言,只要与80的40有关系即可。大赛组委会将在未来十年内评定论证,并在“知天命”节点给予颁奖。

没错,我是在夸大某个时间节点的意义,但纵观古代至今,明月,思乡,秋凉,蝉呜……,贤可往,我亦可追。80后们用你切身的纪念,不为名利,只为共鸣和情怀。赵雷会不会给四十岁的女人再写一首歌不知道,但可以确定每个喜欢文学的都应该留一篇与自己不惑之年的小文。再看了《飞驰人生》后,我这只小花,更有表达的冲动,开始表演吧。

相比于其它年代,80后文人算是寥寥的,这事实上有些必然,80后是一批社会主义生产线的产品。没有了“大江大河”的背景。让他们用想象的经历和情感去打动有真实经历的前一代人?还是给眼球经济下,读图时代的后一代人描绘他们懂的东东?有点玩笑吧。
但我坚信如果我们80后作家坚持写作,20年后会有一茬文人。最近,韩寒,刘慈欣比较火。他选对了方向。写生活的好作品都是需要根植于自我的经历的。PK老江湖?况且上一代的老革命没有交班的意思。而科幻是他们早早放弃的领域。而城市化的人们,又最想抛弃钢筋水泥去看看外面空间和宇宙。流浪地球很不错,点赞。

当今时代,每个擅长悟的人都在努力寻找属于自己的独特性。然后换钱,然后欺世盗名,再放任自我,沉沦在圈里。当然后半句是我style的,能习惯最好了。青黄不接,百废待兴,困兽犹斗。庆幸80后是过来人,但需要反思浮躁的过往。近日,偶得我太爷爷的一本线装书,实在是感叹先人之用功。毛笔小楷,隽永秀美。同时,书中的言论也尽是国学经典。以下摘录一二吧。

兄弟同胞一母生,祖辈遗业何须争。
一番相见一番老,能再几时为弟兄。

宝珠玉不如宝善论,珠玉有毁也,而善为至宝……

这块我还特意严谨去百度上找找,只看到一条是如下:

【晋商家训】
宝珠玉不如宝善,友富贵莫若友仁。——语出灵石王家大院楹联。

异曲同工,这也和犹太人教子的价值关一致。生命为善,钱财在外。妻子也把线装书页页扫描,让它成为育子利器,精神支撑。看来太爷在点拨我宋家为数不多的男性文化人。说到这里,清明将近了,愚孙回乡亲上坟时,一定多叩首,望你九泉含笑知。
震撼先人用功,吾辈岂做蓬蒿人。

读了些大家的散文,花草物事皆入文,信手拈来,最多是喜欢看他们讲童年,而我们总是感叹,为何他们讲起琐事有趣,难道是我们没有经历童年,没有经历贫穷和旧中国丰富的发展阶段。这都是给自己找的借口。在我们记忆的沙砾中一定也能找到宝钻,只要80后用心去再次经历,二次曝光和再发酵。重要的是放下手机,先拿起笔。

人生整明白后,就是一过河小卒,就是投石问路,就是一个C语言的指针,指向不同的对象在不同的上下文中。看似君临天下,实则冥冥注定。说“不惑”,古人有点戏谑了。因为这时的大叔是最可能“自惑”或“被众惑”的时候。心大之人,就拿不惑两个字来快刀乱麻,痛快的与自己平合,与世事不争,与青春告别,做点自己喜欢的,想做不敢做的事。借用高晓松的书名《我们终于老到可以谈谈未来》。
40岁的人能在独处是幸福的,也是无耐的。有些人在乱中寻找独处,有些人被逼,风欲静而风不止,欲养恩而亲不待。独处是前提,有悟,则喜。而悟是一种需要不断修炼的能力。每个生命经历40年,都值得喝彩和聆听。这时,我姥要听到这话,一定笑话,她都快90了,我有啥出奇的,也对,低调点,回头带礼物给她。文化革命时,还有人提出过了60就要处理的言论。所以,40岁再不醒就可能要长辞了。

动物世界里,赵老师总会给成年的角马,羚羊,狮子更多的磁性解说,因为他们才能代表草原的生活状态,他们是统计数字背后与我们共享天地的生灵。说到数字,渐渐的娱乐场所的出勤率40先告别了。夜太美,尽管再危险 总有人黑着眼眶熬着夜,反正大叔我看球都要考虑,更不能摇晃红酒杯,暂时霸占嘴唇像染着鲜血的皮囊。当然,即使偶尔去玩一二次了,也更肆无忌惮。就像40岁的男人在大街看到PPMM,眼光会毫无保留的赤热,不眼软,但君子赏美不上手,更与猥琐无关。只是看透了女人的心理。她们精心打扮,我们顺水推舟,即使擦肩后,MM白眼,嘲讽,但她们心里是窃喜的,心情也好上几小时。这就是40岁带给我们的能力,鉴赏人的一套技法。别说大于40的你没有,可能水平比我还高,不善表达而已。

40岁还有一项技法—现实。在商场,看到喜欢的东东,问问价钱然后一笑而过。理个发都要在40元以内解决,的确,太多的装饰对现实的大叔没有意义。当然,我保养的还可以,顶上发,发际线,眼角纹都控制好好。大叔做的更有意义的事是让孩子和家人过更好一点的生活,发现自己越来越像我爸,这是好事。记得很久以前春晚有个小品,夫妻开早餐店,收了个50的假币,老婆又想办法找钱给了某个顾客,回头向老公汇报了,希望老公批评,可是老公说了句让我坚持看春晚这么久的可爱的话,“我就是喜欢看你缺德的样子!”哈,每个40岁的人,为别人活的意义渐大于为自己活。所有,他们有更强的生命力,更大的决心和韧性。我们已经来不及惑,也不再困惑于那些不值得困惑的人或事情上。

男人40后面往往还有“一枝花”,而我这朵花下还有两个果,老婆还没到“豆腐渣”。古人对此花厚爱,让开的晚了一点,也希望能开的久一点,给绿叶和果实们更多的爱和关怀。
80后,你们过的好吗?青春就酱,再见。

python的debug方法

经过摸索在两大层面都可以进行debug调试。
一,命令行
debug是编码是非常重要的调试技巧,通过在运行过程中设置断点,帮助开发人员更好的理解运行过程。
Python中debug不像JAVA或者C++那样在IDE中设置断点那么直观。
Python的debug有两种方式: 1.在命令行中运行, 2.在脚本当中运行。两种方式都需要使用pdb模块。
方式一:在命令行中运行
$ python -m pdb my_script.py
方式二:脚本中运行

在需要设置断点的地方,插入方法 pdb.set_trace()

import pdb

def make_bread():
pdb.set_trace()
return “I don’t have time”

print(make_bread())
命令: 在进入调试状态之后,就可以输入命令进行调试了。
c: (continue)继续执行
w:(words)显示当前行的上下文信息
a:(arguments)打印当前函数的参数列表
s:(stop)执行当前行,并在顶一个可能的时机停止
n:(next)继续执行直到当前函数的下一行或者函数返回值

二,IDE中
本人使用IDLE(即python安装时带的)。
打开shell,代码窗口,和debugger。三大窗口。
第一步,在代码中可以加断点。
第二步,
在shell命令行中可以准备些环境引用,包括,
import sys
sys.path.append(“”)
当然,可以再import你写的包,或者第三方的包。
第三步,可以通过包引用来选择测试你要的任意函数。在单步调试时,可以看到所有的变量,一目了然。

对于IDE中调试,改了代码后,要重启shell,并再次引用。这一点来看不如命令行调试。

VC权威剖析:MFC原理、机制与开发实例—-读后感

基础概念和消息映射

Image
窗口:
按级别分:
桌面窗口
     顶级窗口
          子窗口
     重叠或弹出窗口
CS_PARENTDC:
     有此属性(并不是窗口风格),它可以继承父窗口的显示设备上下文。edit,button都是如此的。
WS_CHILD:
     纯子窗口,只有客户区,并且客户区的显示界面要在WM_PAINT消息处理中进行绘制。edit,button都是如此的。
WS_OVERLAPPED:
     若不同时指定WS_CHILD那么它是顶级窗口,总有标题栏WS_CAPTION和边框,并且自动设置WS_CLIPSIBLINGS。创建重叠窗口时可以指定默认大小选项CW_USEDEFAULT。
WS_POPUP:
     弹出窗口创建时,也会自动设置WS_CLIPSIBLINGS。但其它风格必须专门指定,包括WS_CAPTION,也不能指定默认大小选项。
检索窗口:可以跨进程找到窗口的句柄,因为用的是CWnd的静态函数,如下:
FindWindow()
GetWindow()
以下相对来说是内部查找了。
用于找父窗口的:
CWnd::GetParent(),可以省略CWnd
但有可能父又是别人的子,所以
CWnd::GetParentOwner()
用于找子窗口的:
CWnd::GetTopWindow()
CWnd::GetDlgItem()
CWnd::GetDescendantWindow()——–通过ID号取得窗口指针
CWnd::GetWindowFromPoint(POINT)函数取得占用父窗口客户区指定点的子窗口。实参POINT是客户区坐标。
消息:
Image
窗口消息(区别于线程消息):
     窗口消息:除了WM_COMMAND外,所有WM_开关的消息。与某类窗口紧密相关。
1,系统自动生成的窗口消息映射
2,通过类向导来生成的消息映射
3,通过宏ON_MESSAGE(message,memberFxn)
主要讲解以下三类消息,原因是类向导不能自动帮助生成,也没有系统建立好,要手工添加。包括自定义消息。
     命令消息
          菜单(工具栏,加速键)、按钮向窗口发送,要求执行某个功能操作的消息,与程序动作相关。
          用宏ON_COMMAND(id,memberFxn)来建立消息映射。加入数组的第二参数为,CN_COMMAND(内容是0,而通知消息则是非零值)
     通知消息
          MFC为每个通知消息都定义了宏,如果控件的内容变化ON_EN_CHANGE,ON_EN_UPDATE,鼠标滚动等。
          通过ON_CONTROL(wNotifyCode,id,memberFxn)来生成消息映射。其实它是ON_COMAND的重载而己。新控件都使用专门的ON_NOTIFY来建立了。它能传递更多的附加信息。如:
         纯正,新式的通知消息使用如下:
          ON_NOTIFY(TVN_KEYDOWN,IDC_TREE,OnKeydown)
          注:在两层面变化了,通知代码和处理的函数原型上,后者有实参,并引入新的结构了。
          不通过ON_CONTROL来消息映射的特殊通知消息。WM_CTLCOLOR
     反射消息
          由主窗口通过CWnd::ReflectLastMsg()发给子窗口,此函数调用了子窗口的OnChildNotify()—-ReflectChildNotify()
          在其中,就是原始的switch了。
               对旧式通知消息的反射消息和通知消息的反射消息时
               —–OnCmdMsg()
Image
命令ID:
     [0x8000,0xF000)———–全局命令,可由不同对象处理。菜单项的的ID值都在此范围内。
     小于0x8000—————-局部命令,按钮
MFC应用程序角度—-CWndApp分析

接开发者地气的些设计。它的父和子,都是一个程序从生到死的维护者。在继承的应用类实例中,把这爷仨的属性都设置了,找到相应的归宿。
有三种主窗口:单选的。事实看看MFC应用程序向导即可。
单,多文档的主窗口都是CFrameWnd(后者派生的)。而基于对话框的就不用多说了。
Image
m_pszAppName
向导中填写的工程名称,可以在CWndApp构造时传参指定。如果没有指定,会使用字符串资源“AFX_IDS_APP_TITLE”,如果还没设置这个串,将由可执行文件名代替。
属于CWndApp类
m_pszExeName
属于CWndApp类
m_pszProfileName
应用程序的INI配置文件名,在继承应用类中设置自己的配置文件 。
GetProfileString()等系列函数来配合。
属于CWndApp类(默认是执行程序.ini)
m_hInstance
模块在进程中的装入地址
属于CWndApp类
m_pMainWnd
在CSingleDocTemplate或CMultiDocTemplate构造时,就把资源文件绑定和主窗口框架类,文档类,视图类全都实例化,同时设置了此指针。基于对话框的也按其方式会设置此指针。注:没有命令行参数时,默认执行ID_FILE_NEW
文档,视图,都是MFC管理的,实例在堆上,不用手动回收。
当设置好,别忘记
ShowWindow(SW_SHOW);
UpdateWindow();
SetWindowText(“XXX程序”);
这样这个主窗口的消息循环,在Run时触发。
属于CWinThread。设置了此指针的UI窗口,在销毁时,都是安全的。
用向导也好,自己个性化改造也好,反正重载的initInstance函数至少有有模有样了。
命令行参数功能,有时在不同进程启动的相互调用时很有用。

双系统搭建及ubuntu和CentOS下安装Qt5

把大象放冰箱里需要三步,同样,玩linux也需要。第一,制作USB启动盘,第二,安装系统,第三,安装Qt5。

第一篇,材料准备

有多种方式来制作USB启动盘。本人实验了两个,用vmware12和ultraISO.

虚机方式:

建立好空白虚机后,就是提示第一坑。
第一个坑,就是开启intel VT-x.从bios中设置。
重启,再来,可以了,不要装vmware-tool先,不然就在抢占CD-rom。
在我本机S1 yoga的bios上设置两处:
一,sercurity中的安全引导去掉
二,startup中的boot中选择both,即允许传统模式。
用烧录方式:
当然就是把ISO用ultraISO来烧录到USB中了。这个方式不用过多介绍。
当做好USB启用盘后,你F12引导从U盘进入系统,你会看到try和安装两个大按键的情况。我们即可进入第二篇章了。
第二篇章,系统安家
你是租房还是要买房?系统放到你的U盘上还是,想系统在你的硬盘上?这个问题赶快想,尤其是安装步骤到了分区时。但不管如何,选择安装到硬盘是入口。
如果是想在USB上玩linux,那当然安全,不会破环原来的系统。但是磁盘空间,硬件支持和使用体验必须是要慢被理解的。分区方法如下:(我的U盘就16G)
要在U盘上/dev/sdb建立新分支,一个主15G,一个交换分区9百M。
安装不必细说,当出现提示重启时,拔出U盘即可。
当你是个老司机,硬盘富余,且酷的话,来吧,装在硬盘上。并且让windows来当房东。这个意义深远了,因为,如果你想linux撤出,只要格式下那个分区即可。方便的代价就是要懂得原理并实现,还有找到利器,比如easybcd。
原理其实就是:
MBR—-grub2—-bootmgr(由grub来接管系统,在它的分支中选择windows还是linux)
现在:
MBR—-bootmgr—-grub(由windows提供的引导菜单,它当房东,grub就只管引导linux即可,不用去学习grub命令行,好主意)
那个利器就是编辑bootmgr的。所以,我用后面的引导模式了。
用windows的磁盘管理,压缩卷,把最后一个分区给缩小,然后就会多出一个空闲分区,这个就是给硬盘linux的“新房”。
然后,重启用U盘引导,这次同样选择安装到硬盘选项。在分区时,需要充分小心了。
先看看前人的指导:http://blog.csdn.net/pop_rain/article/details/70477085
在我的环境中最终分三个,/,/boot,/home分别为10G,200M,50G,注意引导要放在与/boot同映射的分区上。注意没有/swap区。
因为据说17.04后的版本不需要分交换分区了,而变成了交换文件的方式。
并且,如果你把引导装在了/boot对应的分区,grub2不会跑出来作怪,这是让windows来引导的前提。不然,得用工具修复MBR,所以,装完ubuntu,再重启应该是熟悉的wiondows不是grub。如果是后者,你分区错了。
当你再重启发现进入了熟悉的windows了,没有错,因为,房东管理着客户linux。此时,搬家已经完成,linux入住了,但房东没有给配好钥匙。进系统后,找那个利器吧。easybcd中加一个引导条目,分区选择为/boot那个系统分区。
再重启,windows给你选择权了,让你进linux去吧。不过,我碰到了问题。
最大的坑是:ext4 superblock checksum 。没错,这个是硬盘格式的错误。卡了我一下午。
一个国外帖子搞定了。
先用USB安装盘,启动进去,用root修复好挂载/的那个分区/dev/sda7.
然后,重启硬盘引导后发现可以有root的命令行,看来修复硬盘格式有戏。
然后,就是把其它的两个linux分区修复。之后,ubuntu17.04的用户登陆界面出现。
但最后,反朴归真了,发现在busybox的initramfs的命令提示符下,用 (sudo) fsck.ext4 /dev/sda7,8,9,三次命令后,reboot即可。
终于是躺在我硬盘里的,与win7同床的,让微软引导的小弟系统呀。
第一件事,开启root。
技巧把$变成#,sudo -s.或sudo su
此时安装东东已经够了,但如果你想用root来登陆系统。继续下面操作。
然后执行: vi /etc/lightdm/lightdm.conf.
增加 greeter-show-manual-login=true  allow-guest=false  . 修改完的整个配置文件是
[SetDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码
allow-guest=false   #不允许guest登录
然后我们启动root帐号:
sudo passwd root
根据提示输入root帐号密码。
重启ubuntu,登录窗口会有“登录”选项,这时候我们就可以通过root登录了。
第三篇章 系统装修
与房东win7磨合得不错,但linux下没啥好玩的就有些寒酸了。装个Qt5来。
如果你是CentOS,这可以这么玩了。
{
一,编译器准备:
yum check-update
yum -y install gcc
yum -y install gcc-c++
—–解释
gcc: yum install gcc
g++: yum install gcc-c++
此外还有以下方法:
yum install make
– 或者
yum groupinstall “Development Tools”
– 或者(这个省事,把系列工具全搞定)
yum install gcc gcc-c++ kernel-devel
二,Qt5依赖库准备:
#yum install mesa-libGL-devel mesa-libGLU-devel
#yum install freeglut-devel

}//end CentOS

ubuntu:
{
首先不可或缺的就是编译器与基本的函式库,如果系统没有安装的话,依照下面的方式安装:
  $ sudo apt-get install build-essential
安装OpenGL Library
  $ sudo apt-get install libgl1-mesa-dev
安装OpenGL Utilities
  $ sudo apt-get install libglu1-mesa-dev
  OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函式,使 OpenGL 更强大且更容易使用。
安装OpenGL Utility Toolkit
如果不行就把,sudo apt-get install libglut-dev命令改成
$ sudo apt-get install freeglut3-dev
}//end ubuntu
三.直接运行安装包
#sh qt-opensource-linux-x64-5.5.1.run
四.安装好之后,需要添加环境变量
#vim /etc/profile
在最后一行,添加以下内容:
export PATH=”/opt/Qt5.5.1/5.5/gcc_64/bin:$PATH”
export PATH=”/opt/Qt5.5.1/Tools/QtCreator/bin:$PATH”
如果第四步没有搞好,编译好的测试项目不能运行执行文件。本人就碰到了xcb的插件要求报错。原来在5.5以上的高级Qt版本中,引用了platform的概念。所以,要使用LD_LIBRARY_PATH来找那些库。当然,你找那个qtcreator.sh执行,里面有自动配置好系统环境的处理。
until now,enjoy!

git局网实战

介绍个轻量级方案,让局网下使用git方便,抛砖引玉了。

第一步,首先在A机上,把代码的目录变成仓库。
用git init或者用GUI操作,这没啥新鲜的。
第二步,在A机某个共享文件夹中建立个裸仓库(基于第一步的仓库)
即使用命令:在第一步的目录中,而share则是本机的共享目录。
git clone –bare . /c/Users/Administrator/Downloads/share/bare-cad.git
但,此时,第一步的仓库并没有把第二步刚建立的仓库当成远程仓库。所以,还要手工建立联系。
git remote add origin /c/Users/Administrator/Downloads/share/bare-cad.git
再加上一个
git push –set-upstream origin master
可保万全,它设置了第一步仓库的上游或者说远端源是第二步仓库了。不信,你用git branch -a或git push来测试。
到此,A机内循环通道完毕。
第三步,在局网的其它机器B上,映射驱动器为A机的那个共享目录。
Y:/bare-cad.git就是那个第二步建立的仓库。
并同时克隆一个仓库在自己喜欢的目录下。
git clone /Y/bare-cad.git
上游或远程关系自动建立好,git pull/push都没问题了。
第四步,开始协同开发,推拉自如。好像装箱和开箱,而这个中转箱,则为bare-cad.git.

翻墙小记

以为下了chrome和ssh 隧道技术以国外主机做支点,即可访问google了。
非也。因为,chrome不能使用默认的代理服务器功能。它需要专用的扩展。这块,它不如360,因为,在那里一设置好socks,百度ip查询一下,就显示为境外ip了。
但360也有不如chrome的地方,当所有的环节都通了时,facebook,youtube和google。这种大名鼎鼎的网站还是访问不了的,因为,360毕竟是要吃饭的。这几个url已经被硬编码进了浏览器。
当然,这是猜的。
总之,两个工具配合起来就完全太棒了。
首先,用翻墙了的360去查chrome的扩展,那可是海量的应用呀,大开眼界,虽然这些也能和360来配合。但我不做这种强扭瓜甜的事。
于是,找到了proxy_switchyomega2.4.5这个扩展的网页,拷贝出它的id。注意在网址中截取像ID的一串码,位长度多少忘记了。
然后,在一个专门提供离线扩展下载的网址里输入此id后,就能下载到crt文件。
这个就是扩展的安装包。可以被chrome无缝的使用,可以说是想插就插,方便的很呀。把下载的
Proxy-SwitchyOmega_v2.4.5.crx
直接拖入chrome后,就可以配置代理服务器的ip和端口了。
应用设置后,在chrome地址栏的右侧,可以看到启动和关闭代理服务器的开关了。
你来控制,说翻就翻吧。
装了这个chrome扩展后,后面的扩展和应用就会让你忍都忍不住,因为实在是太好用,太方便了。
随便推荐两个。
gmail和diigo annotate

git学习笔记

基础概念:
合并(merge):一般在分支到主线
     快进:另一分支并没有更改过。
     合并:两分支各自变化了,需要解决冲突
比如,如果要将开发中的分支(develop),合并到稳定分支(master),
  首先切换的master分支:git checkout master。
  然后执行合并操作:git merge develop。
  如果有冲突,会提示你,调用git status查看冲突文件。
  解决冲突,然后调用git add或git rm将解决后的文件暂存。
  所有冲突解决后,git commit 提交更改。
分支衍合(rebase):一般在主线到分支
     最好的场景是把主线的修复推向需要的支线。
分支衍合和分支合并的差别在于,分支衍合不会保留合并的日志,不留痕迹,而 分支合并则会保留合并的日志。
  要将开发中的分支(develop),衍合到稳定分支(master)。
  首先切换的master分支:git checkout master。
  然后执行衍和操作:git rebase develop。
  如果有冲突,会提示你,调用git status查看冲突文件。
  解决冲突,然后调用git add或git rm将解决后的文件暂存。
  所有冲突解决后,git rebase –continue 提交更改
     一个对象名,是根据内容sha出来的40字符串。
     二个目录:git目录,工作目录
     三个:
          index,staging area,未入仓库的,由仓库管理的,暂存区
     四种对象:每个对象都包括三部分:类型,大小和内容。
          blob,git show
          tree,git ls-tree
          commit,git show -s –pretty=raw ,一个commit只指向一个tree,它用来标记某一个特定时间点的状态。包括时间戳,提交者,(parent)指向上次提交对象的指针,(tree)。
          tag,git cat-file tag v1.5.0 用来标识某个提交的方法,包括对象名,对象类型,标签名,,标签创建者名字。
以下转来的思路清楚的后台逻辑:
————————————-

设想你现在位于 alpha/ 目录下,这里有一个文本文件 number.txt,里面的内容只有一个词:“first”。

现在执行 git init 将这个 alpha 文件夹初始化为 Git 仓库。

执行 git add number.txt 会将 number.txt 添加到 Git 的索引(index)中。这个索引记录了所有 Git 保持追踪的文件,现在它有了一个映射记录 number.txt -> first,同时 add 命令还会把一个包含了 first 字符串的二进制对象加入 Git 的对象数据库里。

现在执行 git commit -m first。这条命令会做三件事情。首先在对象数据库内创建一个树对象,用以记录 alpha 目录下的文件列表,这个对象有一个指针指向前面 git add 命令创建的 first 二进制对象;第二,这条命令还会创建一个 commit 对象用以代表刚刚提交的版本,它包含一个指针指向刚刚的树对象;第三,master 分支也会指向这个新创建的 commit 对象。

现在执行 git clone . ../beta。它会创建一个新目录 beta 并将其初始化为 Git 仓库,然后把 alpha 仓库的对象数据库中所有对象拷贝给 beta 的对象数据库,将 beta 的 master 分支像 alpha 的 master 一样指向相应的对象。它还根据 first提交的内容配置索引,并根据索引更新目录下的文件——也就是 number.txt

现在切换到 beta 目录,修改 number.txt 的内容为“second”,执行 git add number.txt 和 git commit -m second,新创建的提交对象 second(译注:姑且称之为 second)会有一个指向父提交(first)的指针,表示 second 继承自 first,而 master 分支则指向 second 提交。

回到 alpha 目录,执行 git remote add beta ../beta,将 beta 仓库设为远程仓库。然后执行 git pull beta master

在这条命令背后,它其实会执行 git fetch beta master,从 beta 仓库中找到 second 提交的相关对象拷贝到 alpha 仓库;把 alpha 中关于 beta 的 master 分支记录指向这个 second 提交;更新 FETCH_HEAD 指向刚刚从 beta 仓库拉取的 master 分支,还是这个 second 提交。

此外,pull 命令还会执行 git merge FETCH_HEAD。从 FETCH_HEAD 得知最近拉取的分支是 beta 仓库的 master 分支,据此拿到相应的对象,也就是 second 提交对象。此时 alpha 的 master 分支指着 first 提交,正好是 second 的祖先提交,于是对于 merge 命令来说只需要将 master 分支指向 second 提交即可。接下来 merge 命令还会更新索引以匹配 second 提交的内容,并且相应更新工作目录中的文件。

现在执行 git branch red,创建一个名为“red”、指向 second 提交的新分支。

然后执行 git checkout red。在 checkout 之前,HEAD 指向 master 分支,执行命令之后它就指向了 red 分支,使得 red 成为当前分支。

接下来把 number.txt 的内容修改为 “third”,执行 git add numbers.txt 和 run git commit -m third

之后再执行 git push beta red,这条命令会把 alpha 仓库内跟 third 提交相关的对象拷贝至 beta 仓库,并且将(alpha 仓库内记录的)beta 仓库 red 分支指向 third 提交。就酱。

—————————-

事实上只有理解后台的动作,才能在命令中游刃有余。下面个人总结的,请大家抛砖。

后台的勤劳者
git clone
—后台把新仓库的同名分支和旧仓库的远程分支(相对于新仓库)做“自动追踪”映射了。
手工改的命令是:
git branch –set-upstream master origin/next
–set-upstream-to=origin/next master
在push后加下面的效果一致(关联阅读):注远程没有next也会生推过去,并设置了跟踪关系。
-u origin next
git pull <远程主机或仓库默认origin> <远程分支>:<本地分支>
—后台的动作包括fetch FETCH_HEAD(默认是远程的master并设置,在不加参数情况下,它也会全取来远程下面的所有分支)
—后台还有merge动作。前提是当前分支与远程分支存在追踪关系了。
git push<远程主机或仓库默认origin> <本地分支>:<远程分支>
—注意这是危险的,要先pull才好。它在后台只接受“快进”,并且要注意冒号前的分支所属
rebase
—后台有个删除动作的,为了让树看起来漂亮,他会像橡皮一样擦除本分支内的commit对象,然后做好搬运合并。所以,这一般都在非主分支上。
附个技巧:有点像“月光宝盒”哟
#保留你当前状态,包括未跟踪的垃圾文件,并最后再搞回来
git stash
git checkout fe9c4
#看代码等操作
git checkout master
git stash pop
注意pop是会删除stash对象的,而apply不会,要有多个stash时,用stash@{num}来指代。

git工作流设计

对于源码管理和产品线管理为了避免混乱,应该有个大致的管理方案:
项目名假如为:tj_dj
则产品管理线:(主机)
主分支–master
开发分支–develop-tj_dj
发布分支–release-tj_dj
特性分支(短生命线分支)–f-[特性名]-tj_dj
修复分支–hotfix-tj_dj

轻量级开发情况:(AB机间没有网络)
在各自本机建立环境,本地建立好bare仓库和本地开发仓库。
总体上要求,bare仓库是同名的,但在自己的本地开发仓库中把远程仓库命名个性化。Dell为例:
dell-前缀。
技巧:
bare仓库用来fetch和push的“箱子”,为远程仓库。
使用拷贝方式来和其它机共享bare仓库。
各机器为主工作时,则要使用很多分支技术来merge其它机的进度代码。

多人联合开发情况:
这里就仁者见仁,智者见智了。但是最典型的就是gitflow了。但不是起对了几个分支名就行了。要得其要领。
原则:
master和develop分支是稳定分支,一直存在。
master只允许release和hotfix分支来的merge
develop日常开发
feature上开发功能,功能成熟后合并到develop上
release是从develop上分出来,bug修复后,打上tag后,要同时合并回develop和master
很小的bug修复会则会在hotfix上进行。
1). 首先将远程代码拉取到本地
  git clone xxx
  git checkout -b develop origin/develop
2).新建feature分支
  git checkout -b feature
3).多人在feature上开发,如果中途需要将develop的变更合入feature,所有人需要将本地的代码变更提交到远程
  git fetch origin
  git rebase origin/feature
  git push origin feature
然后由feature负责人rebase develop分支,删除原来feature分支,重新新建feature分支;
  git fetch origin
  git rebase origin/feature
  git rebase develop
  git push origin :feature
  git push origin feature
这样可以保证feature保持线性变更;
4).feature开发完成后,所有人需要将本地的代码变更提交到远程
  git fetch origin
  git rebase origin/feature
  git push origin feature
然后由feature负责人rebase develop分支,然后将feature分支合入develop,删除feature;
  git fetch origin
  git rebase origin/feature
  git rebase develop
  git checkout develop
  git merge feature
  git push origin :feature
这样可以保证develop保持线性变更,各feature的变更完整可追溯;
5).合入feature后拉出对应的release/feature分支,后续bug修复在release/feature上
  git checkout develop
  git checkout -b release/feature
release/feature分支的同步合并与feature分支相同
6).release/feature分支bug修复完成后,拉取对应的tag推送远程进行发布
  git tag -a v1.0 -m ‘feature发布’
  git push origin v1.0
之后将release/feature合入develop分支,然后删除
  git rebase develop
  git checkout develop
  git merge release/feature
  git push origin :release/feature
7).发布完成后将release合入master分支,保证master为最新稳定版本(实际操作为发起merge request)

写给三十岁以上的程序员

本人80年生,这一般是个适合开始的,也是个容易总结的年份,总结就是一种创新,所以我的话就多。

中国IT圈,是有传统特色的,你会找到江湖的味道。那么,混不好的话你就可能挨几刀或者走火入魔。

做技术的你真的需要职业规划,个人战略,运气,勤劳,魄力,以及聆听自己的心声。

切记一,江湖上的传说都留给别人吧,富二代,财团,那些争夺虚名的胜利者。

切记二,心静了,也不能滥学,不然你会被半浅不深的技术淹死,半熟不热的噎死,千万别“以苦做舟”,没兴趣,不快乐的话,快点闪人,时间和精力有限,别等开进了胡同倒不出车。—-入魔的

我的一个同学R,做开发工作5年时,就嘴上总挂着转行,不想搞开发。心理的呼唤,没有理,况他也不忍失掉机会成本,因为不做技术,去新行业又拿不到高薪,由奢入俭难,然后先干着,一晃几年又过去了,嘴上又挂着转行,但这时可能就是被外界种种逼的。—-挨刀的

如果你没有保持对新技术的敏感

如果你没有对技术掌握的成就感,好奇心

如果你没有自己家里的开发环境和实验码田

如果你没有技术微博和一箱子的书和案头的手册

如果你没有最想深入了解的技术方向

如果你没有无数个深夜面着电脑搞这搞那儿,忘记吃饭和睡觉

如果你没有承担40岁后失业勇气

如果有,全有。

亲,那么恭喜你,我们进阶吧。

 

IT带来的不是多少个职位和行业,而是一个时代。虽然你30岁多了,但是你是这个时代的建设者和亲历见证者,你有权要求发声音,也应该有了担当来发声音。

一,认清大环境

中国的IT业还不是个完全市场导向的,因为这是共产主义国家。

传统行业的信息化和新行业相比,后者才是IT圈新贵们蛰伏的乐土,但是急功近利。

程序员想搞科研去大学,研究所,少在老板面前晃悠,等你真去了说不定,他主动找上你,在你眼前晃悠了。但我劝大家,IT只是工具和手段,应用科学需求量总是比理论高,就是个金字塔型的下端之于上端。

二,认清生存元素

好的IT公司是应该有自己的擅长的领域并且能留人。就像天龙八部里的少林,藏经阁里的扫地僧。

那些领域更适合你

三,认清自己的风格

你是哪类程序员,喜欢静,宅,喜欢看百家讲坛多过于娱乐频道。

白天求生存,夜晚求发展

人们从他的身上感觉到一股力量。

以上是几年前写的,现在我在一个不以技术为主的,以业务实体更看重的公司(甲方是国企),这样的确是比较稳定的,对技术人员也很尊重,(一个有老程序员较多的公司坏不了多少),我放弃许多挑战自己的骨气和机会,只为稳定,也不知对不对,希望这观点别太深的影响你的判断。