漂,是飘零的意思。南宋文天祥有“辛苦遭逢起一经,干戈寥落四周星。山河破碎风飘絮,身世浮沉雨打萍。”的飘零之叹。作为后世敬仰的民族英雄,他叹的是国家兴亡,而今我也经常用它来描述我作为一个北漂的真实的生存状态。
南宋自贾似道弄权以来,便以风雨飘摇,被蒙古或者大金灭掉那只是时间问题。而此时心怀匡国之志的文天祥不计之前在朝廷上所受的排挤,在蒙古军攻陷
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#
当然这是一个很简单的例子,许多问题还需要各位去研究。
在没有具体阅读《重构》之前,我认为重构就是将代码变的容易理解,容易维护,但在阅读了《重构》之后才发现重构不仅可以利用到重新构造已有的代码,也可以帮助我们在阅读代码的过程中增加我们的对代码理解的速度。其实我想每个学习编写代码的同行都在学习的过程中阅读过别人的代码,然后还有可能将别人的代码拿到计算机上编译运行来查看结果表现。实际上我认为这在某种意义上属于重构,只是重构的粒度有多大,或许你修改别人的代码一部分来查看修改的结果,从而帮助自己掌握软件中的更多特性。Martin Flower说的就是如此,我们如果没有得到别人完整的文档,那我们怎么样才能理解别人的代码来,好的办法就是我们一边阅读别人的代码,一边部分部分的修改他人的代码,然后测试每次修改的结果与以前的结果是否一样,如果一样,那么你的重构代码是正确,那么你肯定能够理解你自己写的代码吧(自己都不理解自己的代码就不要干了);别人的代码就这样在我们一部分一部分修改当中被我们理解了。
以前我们写代码的时候喜欢设计,设计的我们认为很详细,然后开始将所有的功能一下子写完,接着就是调试了,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。
以前认为代码当中注释越多越好。Martin Flower又一次给我们教训说,写注释是因为你的代码已经不能告诉代码阅读者他的真实意思了。是的,好的代码可以通过很多方式来表达其本身的含义,例如变量的名称,函数的名称等,就比如一个条件判断来说,我们给这个即使很短的条件判断上抽取一个方法来告诉读者,这个判断的真实意义,比直接使用即使很短的判断好。那么重构可以得到这个目的,于是让我们重构吧。
在之前我也认为重构会花费很大代码,因为我们要理解代码,重新编写;但为了修改BUG,Martin Flower告诉我们重构是最快的。也许不相信,我也不相信,但他说的有道理,容易修改的BUG,当然早就被修改了,那么剩下的BUG就很难找了,主要因为代码中的逻辑不清楚,重构可以改变这种情况,让我们的代码有条有理,那么当然BUG就无处藏身了。
勇于接受变化。以前认为用户频繁的变化需求是不可理喻,实际上是我们自己不可理喻,他们花钱当然需要能提供高质量的服务;而Martin Flower认为不用怕改变,我们有重构工具,重构可以让我们代码任何时候都是清楚的,容易修改的,那么变化是件快乐的事情不再象以前那样艰难了。
重构与性能不是是对立的。重构让代码容易理解,而性能让代码变的难以理解,不过我们在开始的时候应该考虑怎么样让代码容易理解和维护,这样我们可以在后面适当的时候对代码的某部分进行轻松的性能改进工作,因此他们不是对立的,性能以重构为基础的。
其实通过《重构》,最主要的目的是让我们的代码更清晰,更轻巧,更容易被维护,那么也就是我们有良好的代码,于是我们还惧怕什么,什么都可以轻松搞定。
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). 根据语境不同意义有所区别,但一般都是还没搞定的意思
对.net框架中的类或组件进行重写,或重载能够使组件灵活的服务与自己的程序,
这就涉及到许多低层的东西,这需要对.net的基础类有比较深刻的认识和理解。并且能够懂得如何重写这些基类。
例如:
1 | class MyForm:Form |
在需求明确、准备开始编码之前,要做概要设计,而详细设计可能大部分公司没有做,有做的也大部分是和编码同步进行,或者在编码之后。因此,对大部分的公司来说,概要设计文档是唯一的设计文档,对后面的开发、测试、实施、维护工作起到关键性的影响。
代码体系、接口规约、命名规则。这是项目小组今后共同作战的基础,有了开发规范和程序模块之间和项目成员彼此之间的接口规则、方式方法,大家就有了共同的工作语言、共同的工作平台,使整个软件开发工作可以协调有序地进行。
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