Be a real hacker, 真正的软件设计

明白这一点对软件设计有重大影响。它意味着,编程语言首要的特性应该是允许动态扩展(malleable)。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。

我们需要的是一种可以随意涂抹、擦擦改改的语言.

一般情况下,只有动态语言有这个特点, 所谓的动静态, 有一个最本质的特点,是不是允许修改后,可以马上起作用。这才是真正的关键,而不是所谓有强类型, 真正的区别是不是需要长时间编译出来,运行才可以看到效果。 运态语言,是可以马上看到效果的。 也有些语言即使编译出来也可以很快看到效果,go是也。 加上调试器的应用,写代码完全是没有压力, 语法层面再也不是问题,可以一股脑地把程序写出来, 依据调试反溃再一步一步地修正。 调试器的使用, 让这一切成为了可能。非函数式的编程语言,是通过内存数据的不断变换来实现计算和罗辑的, 所以可以看到程序的运行状态,是很重要的。

计算机世界的字节流的思维

在计算机的世界里, 是由数据流组成的 文件在文件系统存储的格式是字节流 网络传输的也是字节流 ...

然而,现实世界里面, 对信息的组织应该是结构化的。

这就需要对信息流进行解析,以得到结构化的数据

这就需要对结构化的信息进行编码。

网络上的数据传输 文件流 - > tcp包 / udp包 - > ip包 -> 传输帧 对数据进行一层层的拆分, 每一层由相应的机制保证数据按正确的拆分与重组。 上一层负责折分,排序, 下一层的数据包保证数据包的完整性, 就是说下一层虽然可以对数据再拆分,但到另一边时,必须重新好,形成一个完整的包, 那边另一边的上一层可以按拆分的顺序重成组成一个完整的数据文件。

一些规则:

1. 同一层里面上层拆分出来的包,有一个相同的ID. 因为同一层里面可能会有其它的不同上一层拆分的数据包。 
2. 同一层里面上层拆分出来的包, 有记录顺序的符号,以便全部数据包收到后进行重组。 
3. 数据包里面应该有完整性较验符, 上一层的数据包头部。 

通过这样的一个机制,大文件数据包打散成小文件后, 形成适合网络传输的小数据包,到达目的端后,再组装,达到数据传输的目的。

TCP的可靠性保证

批量监控网站的脚本

A script to check list of live sites to teach if they are health. if only site is not, then make an email notification.

Rename http_check.yaml.example to http_check.yaml

make below config according to your own email, now it only surpport 163.mail.com

    sender: "18217401108@163.com"
    pass: "xxxxx"
    # Recipients of the error report - in any valid format
    recipients: "sxie@altima-agency.cn"
    # The subject of the error report
    subject: "HTTP check error report"

Config monitoring files, like below.

运用通道进行枢图的步骤及原理

图层 + 蒙版 是ps里面的精髓。 
1.  从红绿蓝通道中的任意一个复制出一个通道来
2. 选中复制出来的通道, 通过调整色阶来加大对比度, 运用工具把选区与非选分开
3. 为需要抠的图层加蒙版, 这时可以在通道里面看到这个蒙版
4. 对复制出来的通道进行反相, 其中白色是没有被蒙住的,黑色就是有被蒙住的。 
5. 把复制出来的通道进行复制,贴粘到蒙版。 
6. 这时,对象的其它地方就被蒙住了,可以对对象进行各种操作(枢出来,加背景,调色)


drupal微信模块的基本使用

前言: 
模块是在 https://www.drupal.org/project/wechat 这个模块的基础上进行的修改。 
桌面扫码登陆的功能我加上去了,不过, 因为改动太大,没法自动升级。所以,要用的话,得是全新的安装。 

原来的wechat_user的主键是openid, 因为微信开放平台那又有appid 和appsecret, 他们openid是不同,所以只能用unionid作为唯一主键 , entity 里面的属性需要改。 就因为这个,我没法写自动升级。


基本使用: 
1. 申请公众号以取得公众号的appid / appsecret key / token, 及绑定回调的安全域名(在权限列表那里设置)
2. 注册开放平台, 申请网站登陆,绑定公从号(这样才会有unionid) 

3. 把这样配置信息放到drupal的后台,就可以使用了。 


基本功能:
1. 使用微信进行注册登陆, 绑定己有的网站用户, 绑定后可直接使用微信登陆(同时支持微信内置的浏览器和电脑端的浏览器)
2. 在网站的后台扫描二维码绑定微信号
3. 接收并存储用户发过来的消息, 回复用户的消息。 
4. 更新菜单 


动手制作docker镜像

制作镜像有两种方式:


1. 通过dockerfile 来制作

这种方式, 需要把自己的软件做成操作系统的包,如deb, rpm. 好处是只需要维护一个文本文件, 系统升级也很方式,可以自动升级镜像系统软件, 而且镜像的体积也很小。 难点是要把写的应用做成包,增加难度。 


2. 通过把配置好的container,commit成镜像
启动一个交互的shell, 可以在里面做软件的配置
docker run -it --name google ubuntu /bin/bash 

如果,下次要再做修改,就要把它先启动,得到shell,再修改后commit得到镜像


页面