程序员拿什么来学英语

以前有个意大利的朋友,他怀着环游世界的梦想来到中国,在上海靠教小朋友英语挣点旅游经费,因缘际会一起去香港玩,在香港的太平山顶的山道上散步,天南海北地聊天。现在想想当时的画面应该很奇怪,一个带着南欧口音的意大利人和一个中式口音的中国人在用英语谈着人生和理想。偶然间聊到了中国的英语教育,于是有了如下的对话:

「中国人一般从什么时候开始学英语?」
「我是从初中开始学,但现在的小孩子最晚要从小学三年级就开始学了。像你们学校里应该有很多还没上小学的小朋友吧。」
「所有人吗?」,他表示很惊讶。
「是的。」
「你们为什么对英语这么执迷,那不是所有人大学毕业时都学了十多年了吗,但我见到的情况好像不太像啊?」
「大部分像我这样的学英语只是为了应付考试。」
「哦,对,你们好像要考CET才可以毕业,看来你们是用的太少了。」

KK笔记:kknotes.com
本文链接地址: 程序员拿什么来学英语

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

如何设计良好的系统架构(clean code阅读笔记之十)

设计良好的系统

注:正文中的引用是直接引用作者的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。

本章讲的是「如何设计良好的系统架构」,读起来比较困难,不论是从结构上还是从文字上。结构上作者从「建设一个城市」开讲,之后花了很大的篇幅讲面向切面编程,最后又加上了几个方法论上的东西。文字上本章作者很多说法使用的单词和其他地方看到的的略有不同。但回过头来看,作者的思想是一脉相承的,整个章节其实只讲了一件事情——隔离。

本文会一直提到一个词「关注」,原文中使用的是concern,表达的是在软件开发中对某个问题的解决方案或者某个模块担任的职责(感觉还是不够贴切)。


本章有一个「结论」的小节,就先把她放上来了,内容在后边的小节里慢慢展开。

结论

  1. 系统整体架构的设计同样需要简洁优雅(作者此处指的是系统各个抽象层面之间要解耦),不然会带来各种各样的坏处;
  2. 在所有的抽象层面上,系统的目的要清晰(此处指的是单一职责,非侵入性)。为了达到这个目的,请使用AOP;
  3. 不论你是在设计一个系统,或者一个单独的模块,永远不要忘记使用最简单的实现

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

iOS开发的那些坑

最近重新拿起了iOS的开发,使用OC和Swift混编,碰到了一些比较棘手的问题,在这里记录下来,方便自己以后或他人不再入坑。这篇文章的内容包含:

  1. UITableViewCell的真实结构
  2. 在iOS的环境下使用正则表达式
  3. 如何优雅的隐藏tabbar
  4. 如何修改navigationbar的颜色
  5. 运行时修改使用autolayout的view
  6. navigation controller子view偏移问题
  7. CoreData的使用总结
  8. 解决git的Xcode冲突

1.UITableViewCell的真实结构

目标是想把UITableview在editing模式下的drag按钮去掉,换成自己的样式,但又想保留原生拖动排序的行为,所以研究了很多方法,最后还是找到了UITableViewCell的结构,并将拖动按钮替换。不多说,上代码。


//打印出来的自定义的cell在editing模式下的结构    
(lldb) po self
<QKZhi_iOS.EditingCell: 0x7c148800; baseClass = UITableViewCell; frame = (0 0; 320 56); autoresize = W; layer = <CALayer: 0x7d086b40>>

(lldb) po self.subviews
 5 elements
  - [0] : <UITableViewCellContentView: 0x7d086d10; frame = (38 0; 242 55.5); opaque = NO; gestureRecognizers = <NSArray: 0x7d0882b0>; layer = <CALayer: 0x7d086de0>>
  - [1] : <_UITableViewCellSeparatorView: 0x7d087c40; frame = (15 55; 305 1); layer = <CALayer: 0x7d0852c0>>
  - [2] : <_UITableViewCellSeparatorView: 0x7b163240; frame = (15 55.5; 305 0.5); layer = <CALayer: 0x7b162de0>>
  - [3] : <UITableViewCellEditControl: 0x7b164700; frame = (0 0; 47 56); opaque = NO; layer = <CALayer: 0x7b164950>>
  - [4] : <UITableViewCellReorderControl: 0x7b164d10; frame = (268 0; 52 56); opaque = NO; autoresize = LM; layer = <CALayer: 0x7b164f60>>

(lldb) po self.subviews.last
   Optional<UIView>
    - Some : <UITableViewCellReorderControl: 0x7b164d10; frame = (268 0; 52 56); opaque = NO; autoresize = LM; layer = <CALayer: 0x7b164f60>>

(lldb) po self.subviews.last?.subviews
   Optional<Array<UIView>>
     Some : 1 elements
      - [0] : <UIImageView: 0x7b165130; frame = (15 24; 22 8.5); opaque = NO; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x7b165210>>

(lldb)

KK笔记:kknotes.com
本文链接地址: iOS开发的那些坑

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

如何设计优雅的类结构(clean code阅读笔记之九)

 类结构如何写出优雅的类结构

注:正文中的引用是直接引用作者的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。

「Clean Code」这本书从这一章开始文风有些变化,感觉比较乱,很多概念在之前的章节也提到过,因为这本书的某些章节是不同的人编写的,所以这种情况也难免,所以可能会有些小节我会几句话简单带过。

本章讲的是类的组织结构,其实很多这些概念我们在学校里学习OOP时可能都有学到过,有些人可能会觉得讲得比较虚,但文中确实有些细节还是解开了一些之前的疑惑,姑且当做复习面向对象的概念也好。


在前面的章节中详细讨论了命名、方法和数据结构等等这些概念,它们能够帮助我们更好地理解在代码行或者代码块的级别里如何写出简洁优雅。在此基础上,我们还是要在更高的层面上去探究代码简洁之道。在现代的高级语言编程世界里,类是系统的基本组成部分,这章就着重讨论一下如何写出好的类。

KK笔记:kknotes.com
本文链接地址: 如何设计优雅的类结构(clean code阅读笔记之九)

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

代码中的边界问题(clean code阅读笔记之七)

不要轻易跨越边界

注:正文中的引用是直接引用作者作者的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。


在一个完整的系统开发过程中,我们一般不会所有的代码和细节实现都自己去完成,那么不可避免地要用到第三方类库、开源实现或者公司内部其他团队的子系统的实现。在这种时候,我们就要给自己负责的这部分定义「清晰的边界」,来让我们的软件更加健壮。本章将讨论一些对边界问题的处理的几个实践和技巧。

KK笔记:kknotes.com
本文链接地址: 代码中的边界问题(clean code阅读笔记之七)

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

如何优雅地进行错误处理(clean code阅读笔记之六)

程序出了问题怎么办

注:正文中的引用是直接引用作者Bob大叔的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。


错误处理是十分必要的,但是如果对错误处理使用不当则会让代码变得十分臃肿,让阅读者看不清代码的逻辑,更严重的是,这也会让程序变得十分脆弱。本文中将列出一些使用错误处理的技巧,帮助你写出既简洁又健壮的代码。

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

并不是一切皆对象(clean code阅读笔记之五)

Star Trek中的机器人Data

注:正文中的引用是直接引用作者Bob大叔的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。

本文中的函数方法是一个概念

本文读起来可能比较晦涩,其实通篇只讲了一件事情:在面向对象的环境里有两种方法去定义一个类,面向对象(本文中一直谈到的对象)和面向过程(本文中谈到的数据结构),它们各有优劣,在开发的时候要合适地做出选择。

由于「Clean Code」整本书都有很浓厚的Java的色彩,所以大部分代码和概念都是Java中比较常见的,不过在面向对象的语言中大致能找到相应的东西


KK笔记:kknotes.com
本文链接地址: 并不是一切皆对象(clean code阅读笔记之五)

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

代码的颜值—格式化(clean code阅读笔记之四)

代码的颜值很重要

注:正文中的引用是直接引用作者Bob大叔的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。 


从这一章的第一段就能看出来,Bob大叔对格式化是非常看重的,他连着使用了几个排比句来说明代码的格式化对于一个工程作为一个整体的重要性。所有的代码—不论是一个人不同时期写的代码,还是一个团队不同的成员写的代码—都应该是一致的、优雅的。

KK笔记:kknotes.com
本文链接地址: 代码的颜值—格式化(clean code阅读笔记之四)

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading

SSL related knowledge

第一篇尝试使用英文写作的文章,之前写好了,然后被自己脑残的一条update全没了,又重新写吧。

Several months ago, I wrote a project, the main purpose of which is to manage certificates, establish secure connection over HTTPS, and do a list of verifications regarding certificates downloaded from backend server, to achive the goal, I reviewed a lot of source code of OpenSSL, BTW, I, recently, realize that greate product might consist of a bunch of messy source code, which, however, doesn’t undermine the greatness of itself,also read a lot of wiki pages, stackoverflow pages, finally got the job done. Summerizing the knowledge acquired during the process would make it easier for future use I suppose, in case I will forgot, which I definetely will, in the future.

KK笔记:kknotes.com
本文链接地址: SSL related knowledge

转载须以超链接形式标明文章原始出处和作者信息及版权声明

Continue Reading