终端下使用socks5代理

  1. 首先安装「proxychains」:
brew search proxychains
brew install proxychains-ng
  1. 然后配置proxychains,请参考「在终端下间接使用Socks5代理的几种方法(privoxy,tsocks,proxychains)」,本人的配置内容如下:
cat /usr/local/etc/proxychains.conf | grep -v "#" | sed /^$/d
strict_chain
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 10000
[ProxyList]
socks5  127.0.0.1 1080
  1. 最后通过执行「proxychains4+命令」的方式来通过代理下载文件,如:
proxychains4 brew install tesseract # 通过代理下载安装软件包
proxychains4 svn checkout http://captchacker.googlecode.com/svn/trunk/ captchacker-read-only # 通过代理下载googlecode中的代码

注:
2014-11-23:最近用go get安装package时不能正常下载googlecode中代码(hg代码管理),有能够解决此问题的朋友望指教。

如何制定通信协议?

格式:

起始位 +地址位+功能位+数据位 + 检验 + 结束位

说明:

  1. 起始位和结束位是用来控制同步的,读的时候先判断起始位和结束位是否正常,再对中间的进行校验;
  2. 由于一些设备某个端口下挂载的不止一个设备,故需要使用地址位来区别多个设备;
  3. 功能位针对不同的操作(如查询,操作等);
  4. 保证数据的正确性用得多的是CRC校验;
  5. 在判断数据全部符合要求的时候要先发应答帧,然后再去处理数据,这样实时性会高一点,同时也有时间去做buffer的管理。

协议的使用:
发送端发送数据加上源地址和目标地址,接收端接收数据,先读数据类型,数据帧?
判断目标地址,不是自己的地址,丢弃,继续监听接收数据;是自己的地址,则判断数据长度,不正确,发送应答帧,要求对方重发;数据长度正确,计算CRC,与帧尾的CRC不相同,发送应答帧,要求对方重发;相同,呵呵,去处理数据吧!别忘了全部判断正确后发送一个应答帧个发送方,告送它接收正确。应答标志你可以自己规定,如0x01是接收应答成功、0x02是数据接收CRC错误等等,如要求可靠性、还有必要的速度,你还可以使用应答标志来开设多几个缓存区,用来做流的管理。CRC可以查表,MCU算CRC太浪费时间了。

摘自:http://www.yourdelphi.com/topic_181888_c605.htm

使用masm编译汇编语言

最近又折腾起了汇编语言,看的教材是王爽的《汇编语言(第二版)》,感觉很不错,看到了第4章,遇到了一点问题,不知道如何使用masm编译汇编语言程序,网上查了下,找到了如下方法,摘录于此,方便今后查阅。

  1. 选用Windows XP或Win7操作系统;
  2. 下载「MASM32」开发包;
  3. 双击开发包文件名,按照提示安装开发包,假设安装目录为:“C:masm32”;
  4. 在D盘(其他盘也行)建立一个存放你写的源代码的目录,假设目录的路径为“D:”;
  5. 在D目录下用写字本新建一个文件,取名为:s.bat,文件用来设置环境变量,内容如下:
SET PATH=C:masm32in
SET INCLUDE=C:masm32include
SET LIB=C:masm32lib
  1. 打开控制台窗口,将当前目录切换到你的源文件所在目录“D:”;
  2. 在控制台窗口输入“s.bat”,然后敲回车键执行,这一步用来配置你的编译环境变量;
  3. 在控制台窗口输入ml,然后敲回车键执行,看看窗口是不是有了执行ml的信息,如果有,说明配置对了,如果说文件没找到,那就是环境变量配置的不对;
  4. 将你在一楼提供的源文件复制到“D:”目录下,假设名称为1.asm,示例如下:
assume cs:codesg

codesg segment

start: mov ax,0123H
       mov bx,0456H
       add ax,bx
       add ax,ax

       mov ax,4c00H
       int 21H

codesg ends

end
  1. 在控制台输入ml /Bllink16 /c 1.asm进行编译(无链接),该命令执行完成后会在当前目录下生成1.obj目标文件;
    输入ml /Bllink16 1.obj命令进行链接,也可一步执行:
ml /Bllink16 1.asm

然后敲回车键执行,如果源代码没有错误,会在“D:”目录下生成1.exe文件

  1. 在命令行窗口输入:1,然后敲回车键执行,查看你编制的程序运行情况。

(可惜你的1.asm程序没有输出信息,所以你什么也看不到)

摘自:http://bbs.csdn.net/topics/380194442

开源代码集合

收集一些个人感觉比较好用的开源项目。

dlib

项目地址http://dlib.net/
简要介绍:dlib是一个使用现代C++技术编写的跨平台的通用库
主要特点

  1. 完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加;
  2. 可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统;
  3. 线程支持:提供简单的可移植的线程API;
  4. 网络支持:提供简单的可移植的Socket API和一个简单的Http服务器;
  5. 图形用户界面:提供线程安全的GUI API;
  6. 数值算法:矩阵、大整数、随机数运算等;
  7. 机器学习算法;
  8. 图形模型算法;
  9. 图像处理:支持读写Windows BMP文件,不同类型色彩转换;
  10. 数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法;
  11. 测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持;
  12. 一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类。

VLFeat

项目地址http://www.vlfeat.org/
简要介绍:一个开源的计算机视觉库,实现了SIFT、MSER、k-means、hierarchical k-means、agglomerative information bottleneck、quick shift等算法。由C语言编写,提供MATLAB接口,文档详细,支持跨平台

关于利用WaitForMultipleObjects实现Reactor模型中各事件的触发条件

0x00
最近研究ACE中Reactor模型在windows平台中的实现,在ACE的源码中,使用了WaitForMultipleObjects()来实现同步事件分离程序,该模型中主要涉及的事件有:
FD_CONNECT
FD_ACCEPT
FD_WRITE
FD_READ
FD_CLOSE
当然还有其他一些事件,这里主要讨论这五类事件的触发条件。

0x01
FD_CONNECT

  1. 调用了connect(ConnectEx, WSAConnect, WSAConnectByList, or WSAConnectByName),并且连接建立后。

FD_ACCPET

  1. 初始阶段,当有请求建立连接时。[初始阶段:之前没有任何一次连接请求]
  2. 有连接请求,并且前一个连接请求已经调用accept()之后。

FD_WRITE

  1. 客户端socket首次调用connect(其他类connect API)连接服务器。
  2. 服务器阻塞在accept(其他类accept API)中socket成功返回。
  3. 调用send返回WSAEWOULDBLOCK,并且直到发送缓冲区准备好(为空)后。

注:3的含义其实就是当发送缓冲区满了之后,调用send会返回一个WSAEWOULDBLOCK错误,接着当发送缓冲区将数据全部发送之后,会触发FD_WRITE消息,告知上层可以继续调用send了。

- 阅读剩余部分 -