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

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

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

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

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

网络上的数据传输 文件流 - > 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得到镜像


关于建立社交社区的思考

其实所有社交性的网站,其中最核心的是分享,思想的互换,可以带来飞速的提升。这就是社区的价值。最初的形式是论坛,形式是文本贴子的形式展现,现在经过各种各样的发展,己经有各种各样的形式了。 例如创建单品,通过标签的形式分享,例如豆瓣的豆列,网易云音乐的歌单,现在分享的方式不再仅仅是文本内容,还更是一件商品,一个事物。总之所有个人经历的有价值的事物都是可以分享的。在最初的论坛年代,一切都是通过贴子的形式来表达分享的。但有更具体的方式来表达事物,可以查看具体的东西,比文本,内容可以更具体,具体到可以引起质变。那些无法通过论坛分享的东西也可以分享。例如行程路线,如果没有地图,这些根本就展示不出来。 至于发现, 通过自己的类别标签,可以把自己的经验集合在里面,别人可以通过个人的标签来发现好东西。从论坛进化来的产品,形式是完全变了。 但核心的一点是不会变的,那就是分享的价值。这其实,我很早就有的观点,但是现在才想到用来解释论坛与互联网产品的价值。

用开放/封闭的原则理解面向对象

一般地说,高度依赖性不好。从本质上讲,软件是个复杂的东西,为了控制复杂性,有效的方法是将整体分割成几个相互独立的部分进行开发。但是,有了高度依赖性,就不能将组成程序的“零件”(类以及子程序)进行分解,一个一个的“零件”会很大,结果复杂性就很难控制。

很久以前,技术人员将计算机的机械部分称为硬件,这是计算机所有实体部件和设备的统称。与此相对应,没有实体的程序被称为软件。如今硬件和软件作为计算机关联用语已经固定下来了,但当初却是技术人员之间的俗语。

说起软件,会让人想起“柔软灵活”,但事实上,缺乏灵活性的东西有很多。程序规模小的时候,还能够简单地更改,让人觉得有灵活性。但对于那些大规模商用软件,各部分依存关系很紧密,改动一个地方就会对别的地方有影响,总是不能随心所欲地更改。

在软件开发过程中,会遇到各种各样的问题,原因归结起来主要有两个方面,一个是复杂性,一个是变化性。

软件的规模越大,各个部分之间的牵连越复杂,更改也就越难。如果软件单纯而且规模小,更改还相对容易。随着计算功能的提高,交给计算机的任务规模也越来越大。几乎所有的软件,都随着用户需求的提高而得以扩展,变得越来越复杂。

对模块扩展必须开放(Open),对修改必须封闭(Closed)。

页面