又他娘的地震了!
周六晚上躺在床上看书,发现一只老鼠在我的床边看着我,眼睛滴溜溜的,似有所求,我挥了挥手中的平板,示意它离开,它却丝毫不懂我的意思,仍然专注的看着我,我起身去拿相机,想给拍照,它却迅速爬下床,不见了踪影。
刚搬进来不久的房子怎么会有老鼠呢,也许是从外面草地上溜进来的,看来明天该收拾房子了。我突然明天该怎么处理这只小老鼠呢?如果刚才我手中是一本书,我当时就摔了过去。这只老鼠显然是不太明白事理,它可以在进出我的房间里,但是不能在我的眼前晃来晃去,因为任何肉食动物都有防卫自己领地的意识,更何况人呢,更何况这房子是我租的,凭什么老鼠说来就来,招呼都不打一个,更不用说交房租了。
卧榻之侧岂容他人鼾睡。更何况不懂礼数的小老鼠呢,我想周日有三种方案对付这只不速之客,一曰,留一扇门让它光明正大的走出去,二曰,让它急风骤雨般的跑出去,三曰,让它躺着出去。
这让我想起以前在家里时对待这种不请自来的老鼠都是棍棒,只要它见了我的面,我一般是像秋风扫落叶一般的残忍的把它干掉。因为在农村老鼠是天经地义的人们的敌人。我曾亲眼见过老鼠的破坏性,自己舍不得穿的衣服,它给穿个洞,存的粮食它会去糟蹋。所谓见敌之害,方有恨敌之心。
可是随着慢慢的远离自然的生活,我却渐渐的忘了老鼠这害处的。况且我也没了以前生擒老鼠的勇气,甚至于有时候竟然起怜悯之心。突然觉得这上下班的生活让我消磨了对抗自然的勇气和意识。
面对我屋里的这只老鼠,我想环视看运气吧,现在来看,我不是不想伤害它,我已然是没了伤害它的本事了。
2007年,我上大三。那一年有一个病毒很恐怖,他的名字叫“熊猫烧香”,很幸运,那时候我没亲身看过他的发作。
今天重温了一下那个源代码,很邪恶,但是也很普通。说他邪恶,是因为他的破坏力足够强,说他普通是因为使用的技术并不高深。
但就是这么一个普通的病毒程序竟然席卷全国,让人惊愕,他给我们一个警醒:网络带来的不仅仅是馅饼,还有陷阱。
这个事件伴着一个个的专杀和武汉男孩的忏悔书而慢慢消失匿迹。
但是时至今日,类似程序仍运行在神州大地的数不清的的电脑上,比如6*60,他就像狗皮膏药一样,你一旦使用,就贴在了你的电脑上,他也像野草,一旦在你的机器上发芽开花,用不了多久,你的机器就会成为一片垃圾软件的草场。
网络时代,每个人都是网络的主人翁,守护网络安全,人人有责。维护网络健康,人人有份。
这阵子终于忙过去了,虽然还有两个遗留的bug,但是我也可以暂时性的不用去管了。
说是一阵子,其实是半年有余,突然发现自己还是喜欢比较紧张充实的生活节奏。
这阵子一直要约得的人没有约成,聚餐的机会也错过了,好吧,希望他们以后还能给我机会弥补。
有些遗憾,不过要迎来我的2012下半年的第一个双休了,高兴。
这阵子电视看得很多,从《天天向上》到《爱笑会议室》,从《爱情公寓3》到《新白发魔女传》,从《锵锵三人行》到《第一财经》,
这阵子从电视上看认识很多演员,知道了马苏,知道了修睿,还知道了吴奇隆原来是小虎队的,不是飞虎队的。
这阵子书读的很少,买的很多,很担心搬家的时候会怎样。
这阵子很少进城,不知道城里还堵不堵车。
这阵子bug很多,不能解的也很多。
这阵子的工作受敏捷理念的影响,但是身体却越来越不敏捷了。
这阵子结婚的朋友很多,很替他们高兴,随份子钱的时候我都会对着红包吹口气,祈祷他们这是最后一次结婚。
这阵子有很多事,都拖延着。。。。
这阵子很忙,下阵子更忙,因为下阵子要把这阵子拖延的事完成。
传说世界末日要到了。。。。。。
爷爷说,忙死总比闲死好。
beijing的繁荣实质在于政治,大大小小,林林总总的衙门不知道养活了多少的公司和掮客。政治运转的具体表现之一就是公司了。这儿的公司与其他地方公司的不同之处在于:其他地方的公司在于创造社会价值,而很多北京的公司在于转移社会价值。北京是中国政治、文化、教育和国际交流中心,而唯独不是工业实业中心。而政治、文化、教育和国际交流中心基本上属于扯淡的事,所以这就不难理解北京人的扯淡精神了。所以北京的很多公司也传承和发扬了“扯淡”这一光荣传统。
公司里,人来人往,尔虞我诈,貌似规则齐整,实则一盘散沙。没有人认可”牺牲自我,成就大家“的理念,有的是“宁可我负天下人 不可天下人负我” 的曹操主义。公司外时时刻刻上演着春秋战国般的商业战,宋襄公自古是被人耻笑的对象,今天就更是了。人心不古,廉耻不存。游戏规则越多,我们离分崩离析越近。
站在远大路东口的天桥上,望着停车场上连绵不绝的小车,琳琅满目的小车品牌,哥只能站在桥上,深呼吸一口,让自己淡定。
身边的妹儿白衣飘飘,车上的哥儿煞有介事。金源这个地方就像是个催化剂,昂首挺胸进去,垂头丧气出来。一套家具20万,一个手镯七八千,我靠,这日子咋过?
有时候真想成为周》》》克。。。花,轰轰烈烈一辈子,后事都不用自己操心。有时候也想成为干。。。露。露。。炒作炒作一陈子,稀里哗啦挣票子。醒了发现自己不是亡命之徒,也不是犯贱之人。只能从了上天的安排,乖乖做人。
北漂就是这样,你总是想成为一个牛B的人,哪怕是混蛋中的极致,哪怕小姐中的花魁,只要它是是貌似nb的样子,就有很多人追随,模仿。很多人在高档的写字楼办公,晚上却住在低矮肮脏的民宅,每天ta都穿梭在北京两个极致的角落,路过灯红酒绿,享受歌舞升平,回到自己的窝,只剩下寂寞和疲乏。没有人关注北漂的精神世界,更没有制度引导北漂的行为,北漂族心里每天在潮起潮落,这种变化是理想与现实的激烈对撞,白天你发现理想实现近在咫尺,晚上的时候,理想却远在梦乡。
于是,北漂写就煎熬。
于是,北漂养成贪婪,成就浮躁。
近日遇到这样的一个程序需求:把sql server2005 数据库的数据表导入到excel文件中,整理出来和大家一起分析讨论。
完成这个功能需要的几个集合和对象:Application、Workbooks、Workbook、Worksheets还有Worksheet和Range。Application创建Excel应用,Workbooks打开Excel文档,Workbook获得Excel文档工作薄,Worksheets操作工作表集合,Worksheet获得单个工作表。.net支持用C#操作操作这些对象。
关于Excel编程的其他细节请参阅Excel VBA帮助。
1、 添加应用excel.dll和office.dll (常用的2种方法)
A 、添加引Microsoft.Excel.x.0.Object.Library,Microsoft.Office.x.0.Object.Library
引用的Office组建版本是个敏感问题,不同版本之间有细微差别,需要分别处理。
建议安装正版OFFICE,而且版本在11.0以上(Office2003以上)。使用这种方式时在程序里使用的命名空间是:using Microsoft.Office.Interop.Excel;using Microsoft.Office.Core;
B、添加引用Excel.dll,office.dll。注意:注意在MS office 2003以下的版本中,可能找不到Excel.dll,但是要在Visual C#中使用非受管代码的COM组件,就必须把它们转换成受管代码的类库。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。具体方法如下: tlbimp /out:excel.dll “C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE”
这样就得到了execl.dll和office.dll了
使用这种方式时在程序里使用的命名空间是:using Excel;
我在示例程序中使用第二种。使用两种引用后,语言的实现上略有不同。
2、 将数据表中的数据导出到excel文件中。
A、获取要导出的数据表数据。这个不属于我们今天的话题,我们暂且不去关注。
B、新建一个excel文件。
首先建立一个Execl应用,然后建立Workbooks,Workbook,Worksheets,Worksheet实例。示例代码如下:
1
2
3
4
5
6
7System.Reflection.Missing miss = System.Reflection.Missing.Value;
Excel.ApplicationClass m_Excel = new Excel.ApplicationClass();
m_Excel.Visible = false;
Excel.Workbooks m_Books = (Excel.Workbooks)m_Excel.Workbooks;
Excel.Workbook m_Book = (Excel.Workbook)(m_Books.Add(miss));
Excel.Worksheet m_Sheet = (Excel.Worksheet)m_Book.ActiveSheet;
Excel.Range ER = null;
其中Excel.Range 代表某一单元格、某一行、某一列、某一选定区域(该选定区域可包含一个或若干连续单元格区域)或者某一三维区域。
C、根据表结构建立excel模板。
建立模板的过程就是操作execl的过程。
假设我们要导出的数据表有两列分别是编号,姓名。exel模板需要有列标题。
(1)我们要在工作簿的sheet1的第一行第一列和第二列写入编号和姓名。示例代码如下:
1
2
3
4
ER = m_Sheet.get_Range((object)"A1", System.Reflection.Missing.Value);
ER.Value2 = "编号";
ER = m_Sheet.get_Range((object)"B1", System.Reflection.Missing.Value);
ER.Value2 = "姓名";
其中 get_Range 方法中以 A1 样式的记号引用单元格和单元格区域。
通过value2设置单元格的属性。
(2) 设置单元格的格式。示例程序如下:
1 | range3.Borders.Color = Color.FromArgb(123, 231, 32).ToArgb(); |
D、写入数据,保存。
利用循环将DataTable中的数据写到excel文件中。
m_Book.SaveAs(SavePath, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
E、关闭资源。
m_Book.Close(false, miss, miss);
m_Books.Close();
m_Excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ER);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Sheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Books);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Excel);
GC.Collect();
```c#
当然这是一个很简单的例子,许多问题还需要各位去研究。
PR: Pull Request. 拉取请求,给其他项目提交代码
LGTM: Looks Good To Me. 代码已经过 review,可以合并
SGTM: Sounds Good To Me. 和上面那句意思差不多,也是已经通过了 review 的意思
WIP: Work In Progress. 传说中提 PR 的最佳实践是,如果你有个改动很大的 PR,可以在写了一部分的情况下先提交,但是在标题里写上 WIP,以告诉项目维护者这个功能还未完成,方便维护者提前 review 部分提交的代码。
PTAL: Please Take A Look.
TBR: To Be Reviewed. 提示维护者进行 review
TL;DR: Too Long; Didn’t Read. 简略描述
TBD: To Be Done (or Defined/Discussed/Decided/Determined). 根据语境不同意义有所区别,但一般都是还没搞定的意思
在没有具体阅读《重构》之前,我认为重构就是将代码变的容易理解,容易维护,但在阅读了《重构》之后才发现重构不仅可以利用到重新构造已有的代码,也可以帮助我们在阅读代码的过程中增加我们的对代码理解的速度。其实我想每个学习编写代码的同行都在学习的过程中阅读过别人的代码,然后还有可能将别人的代码拿到计算机上编译运行来查看结果表现。实际上我认为这在某种意义上属于重构,只是重构的粒度有多大,或许你修改别人的代码一部分来查看修改的结果,从而帮助自己掌握软件中的更多特性。Martin Flower说的就是如此,我们如果没有得到别人完整的文档,那我们怎么样才能理解别人的代码来,好的办法就是我们一边阅读别人的代码,一边部分部分的修改他人的代码,然后测试每次修改的结果与以前的结果是否一样,如果一样,那么你的重构代码是正确,那么你肯定能够理解你自己写的代码吧(自己都不理解自己的代码就不要干了);别人的代码就这样在我们一部分一部分修改当中被我们理解了。
以前我们写代码的时候喜欢设计,设计的我们认为很详细,然后开始将所有的功能一下子写完,接着就是调试了,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。
以前认为代码当中注释越多越好。Martin Flower又一次给我们教训说,写注释是因为你的代码已经不能告诉代码阅读者他的真实意思了。是的,好的代码可以通过很多方式来表达其本身的含义,例如变量的名称,函数的名称等,就比如一个条件判断来说,我们给这个即使很短的条件判断上抽取一个方法来告诉读者,这个判断的真实意义,比直接使用即使很短的判断好。那么重构可以得到这个目的,于是让我们重构吧。
在之前我也认为重构会花费很大代码,因为我们要理解代码,重新编写;但为了修改BUG,Martin Flower告诉我们重构是最快的。也许不相信,我也不相信,但他说的有道理,容易修改的BUG,当然早就被修改了,那么剩下的BUG就很难找了,主要因为代码中的逻辑不清楚,重构可以改变这种情况,让我们的代码有条有理,那么当然BUG就无处藏身了。
勇于接受变化。以前认为用户频繁的变化需求是不可理喻,实际上是我们自己不可理喻,他们花钱当然需要能提供高质量的服务;而Martin Flower认为不用怕改变,我们有重构工具,重构可以让我们代码任何时候都是清楚的,容易修改的,那么变化是件快乐的事情不再象以前那样艰难了。
重构与性能不是是对立的。重构让代码容易理解,而性能让代码变的难以理解,不过我们在开始的时候应该考虑怎么样让代码容易理解和维护,这样我们可以在后面适当的时候对代码的某部分进行轻松的性能改进工作,因此他们不是对立的,性能以重构为基础的。
其实通过《重构》,最主要的目的是让我们的代码更清晰,更轻巧,更容易被维护,那么也就是我们有良好的代码,于是我们还惧怕什么,什么都可以轻松搞定。
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true