读书笔记:《程序员的思维修炼》

这是我第二次拿起《程序员的思维修炼》,在Kindle里躺了好几个月,上次阅读是开学的火车上,看了30%就放一边了。五一又有机会在火车上拾起这本书,有必要重头再来,正好这段时间时间还比较充裕,可以做做笔记停下来思考。

序&绪论

这是一本教你如何对大脑如何重新“编程”的书!

双CPU大脑模型

我非常支持一个白话版的素质的定义:除了书本知识硬性记忆以外的东西,扪心自问,包括我自己在内的大多数程序员除了固化的编程知识以外,又有多少“素质”拿得出手呢?IT领域知识更新换代之快需要我们不停地往前奔跑,当我们痛苦地追逐时尚新鲜玩意时,更需要放慢脚步,冷静地修炼自己的“内功”,以不变应万变,才能立于不败之地。

我个人是讨厌死记硬背的,甚至感觉自己有轻微的诵读困难症,从小对背诵有莫名的恐惧,看《Google 工作整理术》时,作者提到小时候背乘法口诀表要比同龄人慢,其实我小学时候也是这样子,但一直不承认自己这方面有缺陷。从小学初中到现在大学,英语短文很难背下来,初中背诵语文课文和古文时老师是会排先后的,我的背诵速度一直处于“末等生”水平。到大学知道大家考试竟然有“背题”这种“灵丹妙药”,但我根本办不到——不光是意识上的抗拒。

从新手到专家的历程

制造问题的思维方式无法用来解决问题。 ——爱因斯坦

德雷福斯模型: 德雷福斯模型是一种构建理论,是一种抽象。

Read More »

NetKeeper完全解决方案

学校联通去年更改了联网验证方式,设备联网必须经过Netkeeper(闪讯)客户端,不再使用单纯的PPP拨号,有效(无耻)地实现了一人一号,手机号码捆绑强制入网。

虽然我是联通用户,但NetKeeper只提供Windows/Android/iOS客户端:黑苹果、Linux、Windows Phone、Kindle均无法使用联通网络。出于个人需求顺便打破联通垄断毒瘤,我需要“把NetKeeper装入路由器”。

如果仅仅使用Windows PC进行无线共享,官方的Netkeeper对免费WiFi软件有干扰,可以使用如Simple Keeper第三方客户端,算法都是一样的。

硬件

Netgear R6300v2 洋垃圾一台,刷梅林固件最新版;
两根网线,一根接校园网端口,一根接联通端口,接至路由器WAN和LAN1。

施工

miao007大神已经写好了OpenWRT平台的NetKeeper插件,原理是在Linux 的pppd拨号时加载NetKeeper插件算出真实的账号,具体算法在他的Github有说明。

R6300v2使用了ARM处理器,此前并没有编译好的插件。

编译中的细节和问题可以参考这个教程,关键步骤为:

  1. 在Ubuntu环境下,下载梅林固件提供的交叉编译器,按照编译固件的方法配置环境,梅林官方教程缺少这一步:export LD_LIBRARY_

Read More »

Python模拟登录校园网

本人所在的学校提供了免费的校园网,联通电信移动教育网多线。不爽的是需要手动在Web登录。不过感谢学校没有使用乱七八糟的客户端。计费系统是Dr.COM,也有人称城市热点。

为了优雅的使用校园网,让电脑/路由器开机自动连接,顺便还能跑代码搞些有剩余流量的账号。正好在学Python,Google看了些别人的实现方法,模仿着自己写了个。为路由器交叉编译了个Python 2.7,放路由器上跑了一个月左右,没有发现什么问题。

主要实现了登录以及账号有效性检测,包括剩余流量检测,随机选取账号进行登录。

以下是代码,由于原理太过简单,自以为自己的代码可读性还可以,就不做注释了。

其中URL是校园网Web登录页的地址,“account.csv”是逗号分隔符文件,格式为“12位学号,六位密码”,一行一个。

import urllib  
import urllib2  
import random

URL = "http://Login URL/"  
FILE = "account.csv"


def post(url, data=None):  
    if data:
        data = urllib.urlencode(data)
Read More »

6.00.1x 课程小结

6.00.1x是MIT在EdX开设的一门计算机科学入门课,全称Introduction to Computer Science and Programming Using Python。作为转到计算机专业的“新手”,这样的课程还是很值得上的。之前看过一些MIT的OCW课程,但并没有认真地跟一门MOOC。MOOC最大的好处是有截止日期,对于拖延症患者来说“Deadline就是第一生产力”;同时习题能够在线检测正确性,得到实时反馈。

至于6.00.1x这门课,视频讲授部分中规中矩,没有特别出彩的地方,MIT的课堂录像要比这有趣的多。内容上还是很丰富的,简单介绍Python的句法后,Binary Search,Recursion等内容就开始出现了,之后还涉及到调试、面向对象等内容,还有Binary Tree等数据结构的内容,生成器和Lambda也有涉及。课间习题有大量的阅读内容和扩展,Problem Set的题目难度刚好,将问题分成了若干小问题来解决,也有效降低了难度。Final Exam的难度就显得过于简单了,可能是为了更多人能通过(拿到付费证书)吧。

晒个学习进度先:

下面是对一些细节的总结: 出于保密原则,不涉及具体章节和题目。

  • Python中的大小比较,需要注意的是字符串永远比数字大,List、Tuple也能进行大小比较,至于其他不同类型的对象,虽然能比较但几乎没有意义(与内存地址有关)
Read More »

农夫过河问题

农夫过河问题是上学期数据结构作业之一。我的C语言还处于业余水平,算法和数据结构更是马马虎虎,转专业之前也没做过类似的项目,网上有各种算法和分析,知乎“郑启威”的回答比较清晰,代码写起来也干净利落,花了一晚上消化了基本思路,又自己写了一遍完整的实现。全部使用C语言写的,C++什么的还待学习。

关键点有两个:

不满意的方面:

在编写过程中尽量避免全局变量,函数之间实现松耦合,然而在结果的输出上并不优雅,将路径保存在了临时数组中,在findPath递归调用过程中就输出了结果,而不是将所有路径转存储然后统一输出。还请看官不吝赐教。

以下是完整代码:

Read More »