N年前开始就断断续续的有IPv4即将耗尽、要尽早多占点IPv6地址之类的新闻。这些新闻每次在CB发出,无不是被冷嘲热讽、群起而攻。
在“狼来了”喊了多年之后,IPv4终于在年初分配完毕,IPv6也将在之后接过IPv4的担子,支撑互联网的运转。IPv6号称可以给地球上每一粒沙子分配地址,这已经是很大的一个数字,但是只有这样而已吗?
维基百科上的地球质量是5.9742e+27(科学记数法,表示5.9742乘10的27次方)克,IPv6使用128位二进制码来表示每一个地址,最多可以有2的128次方个地址,约等于3.402823669209385e+38(windows计算器计算结果)。
通过简单计算可以知道,在地球上如果要将IPv6地址分配完,那么每一个地址只能标识1.755659587670627e-11克的物质,约等于一个细胞的质量。也就是说,如果不发展外太空,那么在将设备做到细胞大小之前IPv6都是够用的。
最后,虽然IPv4地址已经分配完,但并不是所有的地址都在使用中,而且还有192的局域网地址可以用。SO,IPv6还需要等待。。。
重新写了后台处理模块,目录页的模板。下面是新旧目录页的截图,左边是重写的,右边是以前写的。

- 兼容IE9/IE6/Opera/Firefox3/Firefox4/Chromium13(只列出了实际测试过的浏览器)。
- 整体的结构还是分成左右两部分,不同的是原来的目录宽度占窗口的20%,现在则改成固定的像素。
- 在目录和内容中间拖动鼠标可以改变目录的宽度,点击上面的三角形则可以隐藏/显示目录。
- 目录高度适应浏览器高度,当目录的内容大于所占空间时在目录上显示滚动条。
- 连续点击“搜索目录”按钮可以依次定位搜索到的目录项。
- 内容页面载入时定位目录到相应的位置,需要时自动展开目录。
点击访问手册站
使用 Google 搜索时总是很容易碰触到 GFW 脆弱的神经,解决这个问题的办法是使用代理服务器。对于 Chrome 和 Firefox 来说,有大把的扩展来设置代理服务器,其它浏览器呢?
其实主流的浏览器都支持一种智能的代理设置方式:Proxy Auto Config。pac 是一个 JavaScript 脚本文件,它提供了一个函数FindProxyForUrl,根据浏览器访问的 url 返回不同的代理地址。FindProxyForUrl 可以返回下面三种形式的代理:
- DIRECT // 不使用代理,直接访问
- PROXY HOST:PORT // 使用代理,HOST为服务器地址,PORT为代理端口
- SOCKS HOST:PORT // 使用SOCKS代理,同上
在网上找个代理服务器是简单的,也是很麻烦的。你总能找到大把大把的代理服务器列表,但是并不是全部都是有效的,实际上只有极少部分短期有效。于是有了各种 VPN 实现方案,比如 TOR。TOR 也不是很稳定,总要在使用和不使用代理间切换。
这时就可以让 FindProxyForUrl 返回代理列表,每个代理使用分号隔开。浏览器将依次使用代理服务器尝试访问每个链接,直到成功访问或者代理列表结束。比如 “PROXY 127.0.0.1:8118;DIRECT” 先尝试使用 TOR 访问目标,失败的话再尝试直接访问。
代理列表虽然可以解决服务器失效/不稳定的问题,但每一次尝试都要花费一些时间。为了减少花费的时间,你可以在 PAC 里对 URL 进行分析,对不同的域名、IP、内容返回不同的代理服务器。在 PAC 里除了正常的 JavaScript 函数外,还可以使用 PAC 特有的函数:
- isPlainHostName(host); // host 为不包含域名的主机名时返回真(没有点号)
- dnsDomainIs(host,domain); // host 为 domain 子域时返回真
- localHostOrDomainIs(host,hostdom); // host 和 hostdom 相同或 host 为 hostdom 的主机名时返回真
- isResolvable(host); // 尝试通过 DNS 解析 host,成功返回真
- isInNet(host,pattern,mask); // host 的 IP 在指定范围内时返回真(先解析 host 的 IP 地址,再与 mask 做按位与计算,结果与 pattern 比较)
- dnsResolve(host); // 解析 host,返回 IP 地址
- myIpAddress(); // 返回本机 IP 地址
- dnsDomainLevels(host); // 根据 host 包含点号数量返回域名层级
- shExpMatch(str,shext); // 使用 shell 表达式对 str 和 shext 进行匹配
- weekdayRange(); // 检查时间是否在指定范围(一周的第几天)
- dataRange(); // 检查时间是否在指定范围(月、日)
- timeRange(); // 检查时间是否在指定范围(时间)
除了常规的使用外,FindProxyForUrl 还可以返回一个无效的代理服务器来过滤广告、不安全网址等内容。
今天收到个不错的优惠码,拿出来共享下。优惠 31%,可用于空间购买、续费、升级(只测试了这三样),有效期到3月31日。
SAVE 31% on your order!
Godaddy 的30%空间优惠码还是比较难找的。不像域名,30%只是个起点。
Godaddy 优惠码每日更新
光在均匀介质中以直线传播,遇到不同介质的时候则被吸收或反射或折射或直接穿过。不同波长的光在同一介质上的变化是不一样的,人的眼睛把接收到的不同波长的光识别为不同颜色,于是有了五光十色的世界。
同样的,机器人也可以通过接收识别光线来识别周围的环境。通常情况下,周围反射回来的光线受环境影响比较大。机器人一般自己发射光波,根据光波的反射的情况来识别。
RPR220是一种一体化反射型光电探测器。其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。
塑料透镜以提高灵敏度;
内置的可见光过滤器以减小离散光的影响;
体积小结构紧凑。
它采用DIP4封装。发射器和接收器都有两根引出脚,其中长脚为正极,短脚为负极 。

如果不清楚引脚,可以使用万用表来检测。单向导通的是发光二极管,导通时红表笔接的是正极。接收的光电三极管则会随着环境而改变阻值,红表笔接集电极,黑表笔为发射极。

测试用的电路图。在实际连接的时候,R1我用600欧的电阻接到了VCC,R2用60k电阻,没有用R3。直接接到 Arduino 的模拟输入。VCC为+5v,流过二极管的电流约为8~10ma。

曾经提到过的五路光电探测板。其实就是五个上面电路图的并联,然后每个光电对管引出一条信号输出接到 Arduino 的模拟输入。

背面,非法拉了很多高架桥,一不小心就可能短路了(目前为止还没)。

圆孔座,用来接线。
照例有个测试程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| void setup()
{
pinMode(13,OUTPUT);
// 模拟输入不用设置模式
// Serial.begin(9600); // 初始化串口通信,没有数码管的时候可以把结果输出到电脑上
}
void loop()
{
digitalWrite(ledPin,!digitalRead(ledPin));
display2(analogRead(0)); // 读取模拟信号,并在数码管上显示
// Serial.println(analogRead(0)); // 没有数码管的话可以在电脑上显示
delay(100);
}
void display2(int i)
{
// ...
} |
最后看下运行的结果,接的是靠边悬空的光电对管。6mm是最佳测量距离,另外也可以接电压比较电路输出开关量。
