Shell's Home

riot.im简介

Jul 24, 2017 - 1 minute read - Comments

riot是一个开源的去中心化聊天工具,提供了一个聊天的底线解决方案。 分布式 和大部分IM工具不同,riot的用户,是属于某个特定的服务器的。我们可以对比一下Email和QQ。Email里,你可以选用不同邮箱,不同邮箱之间是可以互相发送消息的。而QQ里,你的帐号必然只能在腾讯的体系里。前者,我们认为是一个分布的系统。用户分布在多个组织里,依靠协议互相通讯。后者,我们认为是集中的,供应商掌控一切。也许你会反驳说,QQ也分布在全国多个节点。这是对的,但是这是腾讯自己的分布,而不是用户的分布。用户对这事是没有感知的,也无权选择。 riot是一个用户分布式的IM系统。你需要找一个服务商,然后向他注册。就像你找一个邮箱供应商并注册一样。随后你会获得一个用户名和密码。配置用户名和密码,你就可以在各种地方登录。Windows,Mac,Linux,Android,iOS,web,我至少知道这几种客户端。登录之后,你可以找任何人聊天,哪怕他和你不在一个服务器。服务商会连接对方的服务器,并完成通话准备。如果你懒得找,riot.im官方也提供注册。你可以把他视为最大的供应商。 和印象相反,用户分布式的系统,听上去很高大上,其实是比集中式难用的。因为分布式系统依靠的是协议,而协议是很难更新的。只有大多数人跟进,一个特性才有用。就像反垃圾邮件,已经好几年了,推进仍然有限。而集中式体系则不然。只要供应商想,他们就可以不停升级协议。你现在还能用12年版的QQ协议么?不行了对吧。这样就使得一个新特性可以在很短时间内铺开。 那么分布式的好处在哪里? 分布式的用户体系,提供了一种可能性。即使在一个供应商出现种种问题的情况下,整个通讯系统依然不崩溃。你甚至可以换一家供应商,然后重新联系你原来的好友——只要你有好友的通讯录备份。这使得保持协议的同时更换供应商成为了可能——一种永远不可能在腾讯体系内实现的可能。 也许你会觉得,供应商会出什么问题?嘛,我们依然以腾讯为例。在中国,腾讯占有了很大的IM和游戏市场份额。作为腾讯的对手,你要警惕的不仅是企鹅帝国的挤压,还有,你要用什么IM作为办公工具。如果您依然认为QQ是个好选择,我只能祝愿您好运。当然,也许您会觉得,我们可以用钉钉。嘛,我也祝愿您好运。这是一个信仰问题,您开心就好。 riot的特性在此时就非常有用。你可以搭建一个自己的聊天服务器,自行维护。自然,此时就没有坑爹的国际线路问题,也没有企鹅运营问题。甚至,如果上下游的公司也选用了支持riot协议的体系,你们还能直接互相聊天。当然,在中国微信和QQ包打天下的格局下,这种情况基本是不大可能了。 类似的场景还有,如果你觉得企鹅家会在聊天记录里搞事。担心聊天记录泄密。严重洁癖甚至都不相信telegram。那么riot的纯开源自维护体系应该能让你感到满意。但是一切的一切,最关键的一点在于。只有你对聊天的供应商有选择权,供应商才会真正“听”你的话。在一个无法离开的体系里,只会变成:用户你好,我是你爸爸。 当然,使用riot要注意他的几个缺点。首先,riot的各个客户端维护的比较差。难看,功能有限,而且不稳定,修复时间长。其次,riot和现有的主流用户完全隔离,这对销售来说非常致命。 安全特性 riot的聊天是非加密的,对此你不应该感到意外。riot的安全是额外提供的,你必须手动打开。riot的加密系统非常有趣,不是基于用户的,而是基于设备。这种加密被称为E2E加密,意思是端到端。 手机在选项里拉到底,可以看到把对话转换为加密对话的选项。需要注意的是,打开E2E加密后,这个对话是不能转回去的。你可以开个新对话,把所有人都加进去。但是这个已经存在的对话本身是不能转换回去的。另外就是,由于E2E加密需要端点支持,所有web原则上是很难做出E2E的。因此web版本上这个功能基本是废的。 当你用一个新的终端登录,例如一台新手机连入的时候。所有人会看到你这个新终端,并选择是否信任你。如果他们信任你,那么你可以看到他们说的话,这个都能理解。如果他们不认可你呢?默认情况下也能看到。这是因为系统里有个选项,默认发消息给所有未信任终端。关闭之后,那些你不认可的人就看不到你讲的话了。当然,在进去的同时,你也会看到里面所有的端,并选择是否信任。 当你更换了一个客户端,例如换了一台手机。默认情况下,视同一个新手机登录,所有人都要重新信任,而且所有之前讲的话都会无法浏览。注意,哪怕在同一个手机上,当登出再登录时,也视同一个新客户端。所有人都要重新信任,之前所有会话无法浏览。如果要避免这个问题,你需要在登出前先导出自己的E2E密钥,登录后导入。 这里就要说一下用法问题了。首先,请关闭“发送消息给所有未信任终端”的选项。新用户无法查看之前的消息,但是能查看新的?这个简直了。其次,一开启E2E,就要导出密钥并妥善备份。否则每次都要重新认证终端,对其他人很不友好,而且不安全。第三,不要随便认证终端,一定要确保对方是本人。你可以问一些只有你们知道的问题,或者干脆看着他互相认证也行。 E2E加密的基本原理是,每个端携带一个密钥,进入聊天时把自己公钥发送出去。如果说话的人信任你这个终端,那么他就会认可你的公钥。客户端就会使用你的公钥加密发出去的信息,你在接受到之后就可以用自己的私钥解密。如果他不用你的公钥加密发出去的消息,那么你就看不到,或者说看不懂。 透过这个机制,我们可以理解上面如此设定的机理。当初次进入聊天时,虽然你可以从服务器端同步所有历史消息。然而由于这些消息都没有用你的key加密过,所以你看不懂。当对方开始用你的key加密消息了,你就可以看懂消息了。当登出时,未保存的E2E key会被丢弃。 E2E对抗的风险,就是服务器不可靠,例如被攻陷。或者用户不可靠,例如密码泄露。即便在服务器被攻陷,或者某个用户密码的情况下。E2E机制依然能让攻击者无法看到加密的消息(注意,这里前提就是你关闭了“发送消息给所有未信任终端”)。因为加解密都在客户端做,所有服务器端看到的消息本身就是一团乱码。攻击者拿到密码后,伪装客户终端进来。然而这个终端由于没有信任,因此既看不到历史记录,也看不到新消息。能够对付E2E机制的,只有导出的密钥备份丢失而且被破解,或者直接拿到终端。或者更干脆,聊天中某个人变节,把记录全部发了出去。

Puerro Galera游记

Jun 7, 2017 - 2 minute read - Comments

基本情况介绍 菲律宾通行货币是peso,缩写PHP(最好的语言,哈?)。去之前别忘了换一点PHP,带一些USD。PG那里我没找到ATM,上去都是换钱的。带着PHP回来只能再去菲律宾,带USD哪都能去。如果怕不安全的话,提前联系好中文潜店,商量好微信或者支付宝转账,再让他们帮你把房一起订了。这样你去的时候只用带上不多的钱就好。安全是一方面,同时也很方便。 交通 PG在马尼拉南边,从manila机场出来,不用过市区,直接往Batangas码头走,过海就到。坐大巴换公船的话,大概5个小时多点。 我这次来去都是找人拼的车船。去的时候16个人左右,100元包车船。回的时候5个人,价钱就到了200。但是反正我不觉得这是重点。毕竟你花了大几千的机票钱,飞到菲律宾,就想省个50,100的交通费?自己拼车船几个好处。一个是不用和人挤,车也好一点。另一个是车船中间的空档,如果是公船就必须留足时间以防没赶上。自己包的话到了就跑,省事的多了。 包车船的时候记得一点,先和老大讲好包不包高速费用,还有高架(sky way)。有的时候司机会问你要不要走高速,走的话费用自己掏。这样车船价格就贵了。你先讲明白了就OK了。 另外就是机场的住宿。T3有一个胶囊酒店,1000P一晚7个小时,就在麦当劳往里走一点的位置。如果你需要过夜,提前订好,带上自己的耳塞,住一晚,非常方便。这里推荐一个网站,http://www.sleepinginairports.net/,上面有非常多的机场住宿攻略。 方位 下船的地方叫Sabang。PG,即Puerro Galera,还在20分钟车程山路之外。我去PG看过,没Sabang繁华。所以你可以忘掉PG,只要考虑Sabang就好。如果有人给你推荐一个住宿在PG,不要犹豫,扇他就好。 Sabang坐南朝北,和Batangas的大灯塔隔海相望。西边是Big Lalaguna。去那鬼地方有三个方法: 码头上坐小船,200P就肯走了。有的时候会和你讲价,250P也死活磨半天什么的。一船能坐3-4个,我们这次坐了6个,还有我。感觉像个沙丁鱼罐头。 坐摩托车过去,50P。你给个100P能把你连人带行李搬过去。我就是这么搞的搬房间。注意,摩托不停沙滩,停在镇子的门口。你得穿过镇子里迷宫一样的道路才能到沙滩。反正经过几次之后,我觉得自己像一只白老鼠。 用脚。开始来的时候不知道,硬从沙滩上走过去的,15-20分钟,看脚程。 Sabang镇有个好处,吃的东西多,娱乐多。如果你打算天天往水里扎,起来就在房间里窝着,那就当我没说。不过如果你晚上还是想找个地方happy一下的,最好不要住Big Lalaguna。来去都有费用是一方面,另一方面是真心麻烦。 餐饮娱乐 说Sabang娱乐多,其实还是挺乏善可陈的。餐饮我点名这几家: 海明威,码头沿着沙滩往西去,过了Angelyn’s。建议别去。虽然并不难吃,但是性价比太低了。看攻略说还不错,去了发现有变化。 Tarmarine,就在Angelyn’s旁边。烧烤真心好吃,但是上菜一小时。而且服务员上来就告诉你,一小时。 TEQ’s,码头往山里方向(古堡那边)走,路左手有个牌子的。东西味道很不错,也不贵。但是第一次去,上菜一小时,还不提前说。第二次去,牛骨汤就给了一半。后面就再也不去了。 Sabang Fastfood。码头往山里方向(古堡那边)走,路右手。他们家的mongo shake真心顺滑,铁板亲子没有dong也不错(什么鬼?就是铁板鸡肉加鸡蛋啦)。 Capt’n Greggs。码头沿着沙滩,马上就能看到。他家牛排量超大,770P厚厚一大块。我们四个人吃两块吃的超级饱。Gin调的鸡尾酒也不错,超级大一壶,四个人根本喝不完(好吧,我不能喝)。 按摩。你随便找一家就得,400-500P。手法各自不同,略有差别。这个不贵,你开心就好。但是特别注意,深潜后原则上禁止按摩,容易诱发DCS。自己决定,别说我没提醒过。 更多介绍可以看这篇,上面的地图也不错。不过注意,我去的时候是17年5月,以我的经验来看,一两年后情况就完全不是一回事了。 潜店 好了,前面说了那么一堆,现在说最关键的问题,潜店。我所知道的有这么几家: scandi,在Big Lalaguna。我开始就潜的这家。看攻略以为是一家很严谨的潜店,结果依然八个粽子放风筝,还有AOW应届生一起。这样根本对不起我27刀的FD费用啊,于是果断转店。15支批发价,25刀。装备一天14刀。 divingpark。就在scandi隔壁,看公开报价是28刀,也不便宜。这家中国人比较多,大概是中文教练多。scandi的中文教练好像就一个北京的姐们。 asiadivers。貌似是岛上最高大上的潜店。我没找到他的具体报价,但是印象基本就一个字,贵。 蓝鳍,在热浪的后面,美杜莎隔壁。我最后是在他们家潜的。价格还行,10支批量1000P一次,包装备。140多点,这个价格基本和停泊岛的差不多。老板是个上海人,做事精明不小气。我不知道10支的事,下了9支。他直接给了折扣价。 大家特别注意,潜店好不好,主要看装备是不是够新够好,还有潜导是几个对几个。不要特意省钱去8v1,这样很不安全,而且体验很差。如果有条件,尽量在4v1以内。如果你需要一定2v1或者4v1,最好先沟通,约定好(有可能还要加钱)。这次指望scandi能良心点给个4v1,结果。。。 8v1的最大问题是,buddy大多都是刚拼凑的,很少有默契和能力保持整齐的队形。结果就是潜导叮叮一指,一群人端着相机就围了上去,像是在开秘密会议。然后所有人就撞成一堆。潜导一游动,队形完全走样,路上就不停的撞车,被踢。你有事,潜导一回头,根本看不到你。如果你有熟悉的buddy,最好固定组队。照相的话,和大部队保持一点距离。你上去照相的时候,buddy帮你看着点潜导。这样大家都会玩的很开心。 住宿 说到最后,说说住宿。如果你住高大上的度假村,他们自己就有住宿。如果没有,也可以自己订。我这次住了两家,scandi和古堡。先说scandi。 scandi是一个典型的resort,他们的住宿和潜店是前后的,所以可以潜水完了回房间休息一下。但是等你洗洗弄弄结束,休息不了半小时,又得出去了。而且你中午吃饭也必须在scandi,没法跑去别处。娱乐选择相对就少一点。古堡呢,到哪都很方便,但是回来的时候衣服都是湿的。好坏就自己选择吧。 古堡特别说一点,不要住他们Deluxe的房,住Suite的。大小翻倍,而且Deluxe里面蚊子超级多,似乎还有跳蚤。费用嘛,也就是40刀变50刀而已。 大概来说,你可以参考这篇 潜点 PG附近的潜点,我完全没记住。反正名字都写在dive log里了,然而谁是谁还是分不清。我都是回来才查的潜点。水温一般都在29-30左右,可以水母衣直接下水。但是很多地方有盐温交错面。Verde Island下去的时候,一过交错面我直接就冻毙了,怀疑水温低到27度左右。在底下甚至能肉眼看到强烈的交错面乱流。 Ernie’s Point 13° 31.398’ N, 120° 58.982’ E Max: 25, Avg: 15, Vis: Good, Current: Low Sabang码头的东边,本岛潜点。本岛的点大多数都是从山上延伸向海里的一个斜坡,就是平缓各有区别。这支是大深度,潜导直接带去了30米的位置,我还没刹住。这个数据远远超过潜点记录上的最大深度。能见度很好,流很平缓。 M-V Alma Jane Wreck 13°

/proc/net/dev中bonding网卡的流量计算

May 16, 2017 - 1 minute read - Comments

最近有需要,看了一下。我觉得还是讲一下,但是不讲太细了。以下代码是以4.4为基准的,不是的会特别指出。 /proc/net/dev的读取问题 procfs的代码在fs/proc/proc_net.c,但是基本没干点啥事。真正的核心代码在net/core/net-procfs.c:dev_seq_show,我这里是105行。这个函数会打印个头,然后调用上面的dev_seq_printf_stats。dev_seq_printf_stats则是取设备最新信息,并打印。 这里要注意的一点是,整个过程并没有锁,只是在fs/seq_file.c:seq_read上面上了一把锁。这把锁的目地更像是排斥两个进程同时读取同一个文件,而不是保证计数器正确。因此,实际上每个设备的性能计数都是单独读取的,而且读取时计数器还在持续递增。 结论是什么?对于/proc/net/dev里的多个设备,做bonding加和是不可靠的。你不能假定设备1和2做了bonding,那么设备1的计数加上2的计数精确等于bonding的计数——虽然实际上就是这么算的。 bonding的数据获取 我们再看dev_get_stats,这个函数里面实际上是用了ops->ndo_get_stats来获得设备的数据。对于bonding来说,这个文件在drivers/net/bonding/bond_main.c:bond_get_stats。从下面的实现中,你能看到,实际上bonding网卡的计数就是用各个设备的加和。然而计算没有那么直接,用的是每个设备的当前值减去原来保存值,差值加到bonding的保存值上。换个说法就是,bonding的margin等于各个设备的margin。 这个特性是由这个补丁引入的:make global bonding stats more reliable,时间是2014年9月29日,版本是3.17.0-rc6。主要是解决bonding中去掉一块网卡的时候,计数器会掉下来的问题。在这个之前,还有两个补丁。 Enable 64-bit net device statistics on 32-bit architectures的引入时间是2010年6月8日,版本是2.6.35-rc1。这个版本首次引入了64位计数器(因此,RH6里面默认配置的2.6.32内核应当是32位计数器),但是写出了bug。 fix 64 bit counters on 32 bit arches的引入时间是2010年7月8日,版本同样是2.6.35-rc1。主要是解决补丁1在32位系统上非锁定读写64位计数器造成数据跨越总线宽度,导致多个CPU竞争读写时高低位被分别写入产生不一致的问题。 由这两个补丁,我们可以简单总结出bonding的问题历史。 在2010年,2.6.35之前,内核计数器只有32位,分分钟会出问题。实话说我完全不敢相信,有当时用过/proc/net/dev的朋友来讲讲么? 2010年的时候,有短暂的bug,只影响2.6.35。这是一个开发内核,我们可以忽略。 2014年,3.17.0之前。去掉一块网卡的时候,bonding计数器会掉下来。 然而,其实问题并没有结束。如果你仔细看代码的话,会发现,bond_get_stats根本没加锁。如果两个context同时调用,有可能发生这么一个过程。 context1读取数据并计算,计算完成后,写入bond->bond_stats数据前被switch out。 context2开始运算,完成计算并写入bond->bond_stats。很明显,由于context2的启动时间比1晚,context2的数据结果比1大。 context1被switch in,写入bond->bond_stats。 在随后的时间里,计数器的增长比context2和context1的差值大。 满足上述条件的话,bonding计数器就有可能倒涨。当然,里面还有其他竟态情况,可能导致各种问题。由于这是3.17.0内核引入的,因此只会发生在这个版本之后。 当然,有朋友可能会说,/proc/net/dev里有锁啊。问题是,dev_get_stats可不是只有/proc/net/dev会用,rtnetlink也有可能哦。 这个问题是这个补丁修复的:fix bond_get_stats,时间是2016年3月18日,版本是4.5.0-rc7。在补丁的说明里,说到了这个问题。 因此,我们延伸一下故障列表: 在2010年,2.6.35之前,内核计数器只有32位,分分钟会出问题。实话说我完全不敢相信,有当时用过/proc/net/dev的朋友来讲讲么? 2010年的时候,有短暂的bug,只影响2.6.35。这是一个开发内核,我们可以忽略。 2014年,3.17.0之前。去掉一块网卡的时候,bonding计数器会掉下来。 2014-2016年,3.17.0到4.5.0之间。多个CPU同时读写时,会发生竞争出错。 2016年,4.5.0版本以上。未知。 另外注意。并不是说3.17.0之前没有竞争问题,而是由于没有写回状态,所以竞争问题并不产生明显影响。

SI的七个基础单位

Apr 23, 2017 - 1 minute read - Comments

大家上学的时候,也许听老师说过这么一句话。物理学里有七个基础单位,其他单位都是这七个基础单位推导的。我以前也没怀疑过,后来在看长度定义的时候看到这么一句话——一米等于光在多少多少秒里在真空中走过的距离。我突然想到,这其实是以秒来定义米啊。 后来我仔细想了一下,觉得七个基本物理单位这事有点不靠谱。我们先看一下七个基本物理单位和定义: 米:光在真空中于1/299792458秒内行进的距离定义为1米。 千克:存放于法国巴黎国际计量局的“国际千克原器”的质量定义为1千克。 秒:铯133原子基态的两个超精细能阶间跃迁对应辐射的9,192,631,770个周期的持续时间定义为1秒。 安培:在真空中相距为1米的两根无限长平行直导线,通以相等的恒定电流,当每米导线上所受作用力为2×10−7N时,各导线上的电流为1安培。 开尔文:水的三相点与绝对零度相差的1/273.16定义为1开尔文。 摩尔:所含基本微粒个数与0.012千克碳-12中所含原子个数相等的一系统物质的量定义为1摩尔。 坎德拉:给定一个频率为 540.0154×1012 Hz 的单色辐射光源(黄绿色可见光)与一个方向,且该辐射源在该方向的辐射强度为 1⁄683 W/sr,则该辐射源在该方向的发光强度为1坎德拉。 先特别注明一下,上述定义来自wiki国际单位制。下文就有一副图,把我下面要说的东西讲的非常清楚了。如果大家懒得看文字,可以去看图。但是个人觉得,那个图有点问题。 这七个基本物理量有什么问题呢?我们依次来看。 导出量 例如刚刚的米,本质上是用光速和秒来定义的。实际上米就是秒的导出量。 同样的还有安培。如果你仔细分析的话,1N = 1 kg.m/s2。所以定义本质上是用kg,m,s来导出A(更精确的说,这里也没有米什么事)。因此安培实际上是导出单位,而不是基本单位。 还有坎德拉。仔细分析一下定义,Hz实际上是1/s,W是m2.kg.s-3。sr是数学常数,一个全球面等于4π个球面度。 原器 千克的定义是,存放于法国巴黎国际计量局的“国际千克原器”的质量定义为1千克。 这个定义明显的过时了,人类在米上早就摆脱了原器制。随着测量能力的飞速上涨,千克居然还使用原器定义,这不能不说是和时代不符。更糟糕的是,如上面所说,安培和坎德拉也是千克的导出量,他们又构成了SI的整个世界。所以如果千克原器略略波动,全世界的仪器都要重新校正,不限于测重仪器。而且两个大学,校正时间不一样,对同一个实验的结果可能相差很远。这又干扰到了进一步的研究。 新国际单位制 由于上面的种种限制,因此新国际单位制被提出来。单位不再使用某人的手脚这种不靠谱的方法来定义,而是更多的采用自然现象(而且是无条件的自然现象,例如原子跃迁周期)和人为定义的常数来确定。使用这种方法来定义的单位,不需要原器,不随着时间和环境变化,能够多次产生,可以更好的反映事物的本质。 例如电流。国际计量委员会的新定义,使用电量来定义安培。因为一安培的电流,一秒流过的电量是一库仑。而一库仑的电荷数是确定的,即6.2415093×10^18个。因此,新的定义采用基本电荷和秒来定义电流,这就将安培和标准电荷这种根本性的东西挂钩起来。 新国际单位制下的基础单位 原本的七个单位里,刚刚已经说明了三个实际上是导出单位。因此我们还剩下四个单位:秒,千克,摩尔,开尔文。我们先说摩尔和千克。 摩尔实际上是阿伏伽德罗常数的倒数。对于给定的原子,阿伏伽德罗常数越大,摩尔数越小。如果改变摩尔的定义,一摩尔为一个原子,那么Na就会变成1。当然,由于未来的定义要同今日的定义相协调,因此新的定义可能会将Na定义为常数,从而固定mol为一个特定量。 而千克和摩尔的关系非常紧密。摩尔今日的定义实际上是从千克和C-12原子质量来推导Na(所以现在也是导出量,而且阿伏伽德罗常数目前会受到国际千克原器质量变动的影响)。将来mol被定义为基本量之后,kg看起来是从mol反推,即1mol的C-12重量为0.012kg(标准定义应该是XX mol的重量为1 kg,这里为了让大家看清,特意没调整)。当然,实践中采用的是硅原子球。 千克的另一个定义是从普朗克常数h推导。原谅我无法解说原理,因为我看了半天没看懂。基本理念是通过天平精密平衡质量受到的引力和电磁力,从而测量普朗克常数。电磁力的基本量纲中,米和秒都有定义。在千克固定在特定值的时候,测量得到的普朗克常数值和预订相符。此时质量即为1kg。 我之所以不理解是因为,从kg计算引力需要用到万有引力常数,这个常数是几大重要常数里最不精确的一个。拿这么不精确的常数来测量kg真的不要紧么? 然后我们再说开尔文。开尔文目前的定义是依据自然现象来确定的,新版想要修改为更加反应热能本质。具体来说,就是固定波尔兹曼常数成为定值(1.38064852×10^-23 JK-1)。由于波尔兹曼常数实际上联系着能量和温度,当波尔兹曼常数为定值后,给定能量即可给出温度。而能量J是SI的导出单位,等于m2.kg.s-2。因此K就成为了m.kg.s的导出单位。这一修改使得K和其他物理量之间的紧密联系更加清楚的暴露。 和其他单位相比,秒比较特殊。其他单位,要么是人为确定的值,和物理现象没有任何联系,例如mol。要么是通过固定的自然量从其他值中推导。例如m依据光速从s推导,kg依据原子质量从mol推导,A依据基本电荷从s推导。秒是依据特定的物理现象来测量,既不是人为定义,也不从其他物理量推导。 基础物理量和由其导出的整个世界 综合上面的信息,在我看来,基础的物理量有以下两个: 秒:基本物理量,由原子跃迁时间确定。 摩尔:人为认定数值,阿伏伽德罗常数个原子即一摩尔。 基本的导出物理量有这么三个: 米:基本物理量,通过光速,由秒导出。 公斤:基本物理量,通过由原子重量,由摩尔导出。 安培:基本物理量,通过基本电荷,由秒导出。 再导出的单位有这么两个: 开尔文:人为认定数值,通过波尔兹曼常数,由m.kg.s导出。 坎德拉:人为认定数值,由m.kg.s导出。(这里似乎缺一个常数) 总结以上数据,又能得到以下关键物理学常数: 原子跃迁时间。 阿伏伽德罗常数。 光速。 原子重量。 基本电荷。 波尔兹曼常数。

模拟网络丢包延迟和TC的使用

Mar 2, 2017 - 4 minute read - Comments

iptables方案 这个方案纯基于iptables,不需要内核模块,对容器更加友好一些。 iptables -A OUTPUT -d xx.xx.xx.xx -m statistic --mode random --probability 0.1 -j DROP 但是这个方案有个副作用。ping的时候,能看到错误“不允许的操作”。 tc方案 tc方案相对比较复杂。我们先不说这些复杂的事情,先说结果。 tc qd add dev wlan0 root netem delay 100ms tc qd change dev wlan0 root netem loss 50% 一个是延迟一个是丢包,一个是设定一个是修改。netem还允许你做乱序和重复。方法就不细写了。删除是这么干。 tc qd del dev wlan0 root netem 你再用tc qd show看看是不是规则已经没了? tc简述 tc是linux下面用来控制网络发包(注意是发包)的一套系统。基本的设计目标是确定优先级,限流,也有测试性的丢包之类的策略。可以配合iptables和route协同工作。 基本原理 包从进入tc开始,分为多个qd(qdisc)。每个qd可以包含多个子qd,qd彼此连接形成一颗树。每个qd上可以附加filter,选择进入哪个child。如果都没命中,那就看本身规则。 我们先从最简单的例子开始。将root qd改为prio。 sudo tc qdisc add dev eth0 root handle 1: prio 使用tc qd show查看变化。完成后使用sudo tc qdisc del dev

两台机器上TCP状态不一致的排查

Feb 24, 2017 - 1 minute read - Comments

简介 TCP状态不一致是一种常见故障。双方的机器上列出连接,其中一方连接存在,另一方则没有任何连接。如果连接存在的一方有数据正在发送,则存在两种可能性。一种是对方收到数据报文后发现这个报文没有socket对应,于是返回一个RST,导致连接存在的一方连接直接消失。这种情况下问题很难察觉。另一种是对方(或者中间方)收到报文后直接丢弃。发送方经过一定次数(tcp_retries2,一般来说就是15分钟左右)的重试后,认为连接已死,连接会自动消失。如果tcp连接打开了keep-alive,经过7200s(具体值看socket设定),即等于有数据发送。后同。 一般来说,有三种常见理由: RST报文丢失。在RST报文丢失时,发送方连接直接消失,接收方由于没有任何消息,因此连接始终存在。 FIN报文丢失。FIN报文丢失和RST报文丢失情况类似,但是发送方会进入FIN_1状态,经过一定次数重发(tcp_orphan_retries)无回应后连接消失。 内核错误。 排障时,应当首先考虑RST报文和FIN报文丢失的情况。 排障 首先应排除三种常见场景: 场景一:接收缓冲区满。 当接收缓冲区满时,FIN报文会直接丢失。这常见于接收方处理上下文堵死导致不再处理新数据的情况。特征是发送方可以观察到一定量的FIN_1状态链接(常见于接收方不处理fin报文的情形下),接收方缓冲区满,可作为特异性标识。 确证方法:在接受方使用ss观察接收缓冲区。如果接收缓冲区极大而且基本不下降,配合发送方可见FIN_1状态,可以断定此场景。 场景二:RST报文丢失。 当中间有IDS之类(F5/SDN/firewall)的网络设备时,RST报文可能丢失。特征是发送方socket直接消失,接收方socket无任何异常。检查可见netstat -s中reset的发出和接收状况不一致,但是无法作为确证标准。 确证方法:双方抓RST包,无法对齐。 场景三:FIN报文丢失。 情况和场景二类似,网络中有IDS类设备。但是丢失的报文是FIN。这导致发送方可见FIN_1状态,接收方缓冲区没有异常。 确证方法:双方抓FIN包,无法对齐。 内核错误导致的TCP状态不一致很少见,建议升级到最新内核后重测。如无法复现可以合理推测这种可能性,但是无法确证。确证需要systemtap。 PS:FIN_1状态同时也受到tcp_max_orphans的限制。如果tcp_max_orphans被设定为0以清理TIME_WAIT状态的情况下,可能导致FIN_1状态很难察觉。可考虑恢复tcp_max_orphans或者干脆直接抓包诊断。

Disney Shanghai信息

Feb 20, 2017 - 1 minute read - Comments

这篇都不是攻略了,因为实在太“略”了。简单来说,就是我和老婆去了一趟Disney。 很近,从16号线换11号,大概半小时就能到。路上有一堆人卖雨衣什么的。别管他们,园区里雨衣10元一件。而且以我的惨痛经历来说,雨衣并没有什么卵用。雨衣只能防住上半身,我当天穿了一件冲锋衣,也能防住。可TM当天一个浪过来,直接打湿了大半裤子。这就尼马尴尬了。于是我就去他们的厕所里,弄了一堆擦手的纸巾擦了一下——半干。另外还有两个小伙子也是类似情况,纸巾居然瞬间就见底了。可见这种现象应该是相当频繁的。然后我就带着半湿的裤子在冬天的乐园里继续玩。。。 我的建议是。穿防水裤,并且尽量避开上去的那两个位置(就是开口最大的两个)。东西放在身上的时候,最好用塑料袋包一下。毕竟凡事都有万一。。。 乐园里的简餐没有传说中那么贵。当时一个牛肉卷(就是和老北京鸡肉卷很像的那种卷饼,里面是五方嫩牛的内容物),大约是55元。我没记错的话,五方嫩牛也要20多,而且这还是号称全中国最良心餐饮企业之一。在正餐餐厅里随便吃一点大约是50-70。我们点了个烤猪肋排。份量很大的三根肋排骨,酱汁非常入味,也只要98。我觉得在上海随便一家中档餐厅里吃饭大概也就是这个水准了。但是有一点很奇怪的是。我们中饭和晚饭在两家餐厅吃,两家餐厅类似价钱的食物量和味道可差了好多。中午在海盗湾吃的,味道和量都不错。晚上在Peter Pan旁边的餐厅,猪肉拉面能淡出鸟,量也明显小一截。。。 另外就是关于排队问题。我们去的几个地方都是一小时一小时的排队,玩其实也就几分钟。从性价比来说非常不值得。最好能搞到快速通道券。另外就是在晚上的时候,很多项目排队时间会突然缩短。我本来以为随着有些项目关门,时间应该变长的。老婆说这是因为熊孩子们被爸妈抓走了的缘故。反正晚上6点多的时候,急速光轮排队时间已经从巅峰的两小时降到15分钟了——基本就是走通道的时间。我们只在通道尽头等了两三分钟就被弹上了轨道。。。 晚上和朋友聊这事。我表示我头次知道tron原来是Disney的IP。他说他更无法接受星战被米老鼠收购的事。确实,一只米老鼠说,I’m your father,然后掏出光剑来开打。想想也诡异了点。。。 最后就是关于季度卡。我们很晚才知道季度卡的事,其实早知道的话会直接买季度卡。以季度周日卡为例。820左右,能去12次。就算各种因素不能每个周日都去,跑个六次不算多吧。合每次150不到。相当于花半小时跑一趟游乐园,150一次在里面玩到爽。而且如果玩这么多次的话,其实甚至可以等下午三点多出门,吃个晚饭去排15分钟一次的急速光轮,两个小时刷个6轮。。。 当然,我们得知的最新消息是,最近的季度卡到3.31日截止了,下面的活动没有消息。无论如何,对于住的近的人来说,这种折扣值得关注。 最后是一个个人问题,有人知道哪里有卖Disney的花栗鼠纪念品么?我们转了一圈只找到松鼠的。

广东游记

Feb 5, 2017 - 1 minute read - Comments

广东其实没啥游记可写。论大小,这是个大城市,去过的人成千上万。论各种景点和攻略,在地的人足足可以写出一本书来(我倒是一直很想写一本上海攻略)。论美食,那更是高明到不知道哪里去了。我一个外地人,才去玩几天,有什么可写的呢? 所以这次就简单记录一下广东的一些吃喝和见闻。也许不是顶好,您也就别挑剔了。这也就是一只懒猫春节没处去,随便跑了有美食的地方。如果您有什么好的馆子可以推荐在下面,一是方便读者,二是我们也许下次还有机会去。 第一天下飞机,先去的西朗。飞机是晚班的,到了睡一晚,第二天坐广佛线去的祖庙。 话说广佛线真是个好东西。要是有地铁能把上海苏州直接打通的话,那就方便的很了(据说规划中)。如果能再打通杭州的话,就更不得了了。高铁也很方便,但是一来票价很贵,二来要提前买票准点候车。哪像城铁这样说走就走,而且运力极大。这也亏得城市之间距离比较近,中国基建能力又足。 祖庙那里没什么好说的,吃了一点双皮奶,鱼角,糯米鸡什么的。看了一场醒狮,又去岭南天地吃了一碗毋米粥。本来想吃水蛇粥,结果水蛇没有,换了牛展粥。味道也相当不错。 下午去了一趟梁园,一趟南风古灶,乏善可陈。 晚上我们去的另一家“行运楼”,价格略贵,菜量比较大。更适合多人去吃。我们都不够点他最著名的脆皮烧鸡,只能点了半只葱油鸡。味道比喵烧出来的好。 晚上出去吃了个甜品,一杯冻鲜奶,一碗猪脚姜。冻鲜奶就是冻鲜奶,就是冰的牛奶,只是说广东这里都是用的水牛奶。我吃不出有什么区别。猪脚姜就是猪脚姜,就是猪脚烧姜。我不是很吃得惯。 第二天直接去的西樵山。我本来以为爬个山而已,没想到人越来越多。后来上去一看,山顶有个宝峰寺,还有个南海观音。这就对了。才过年,拜佛的地方能不人山人海才奇怪了。我们对拜佛没兴趣,对修建时间小于500年的佛教景观更没什么兴趣。所以直接从旁边岔出去,去桃花林看桃花,茶花了。 在路上的村子里有农家乐。我们看时间差不多了,素斋那里都被游客堆的人山人海的。索性在农家乐这里吃点算了。没想到这里的豉油鸡是我这几天吃的最对胃口的一顿。无他,肥鸡重油,豉油入味,对上北方人胃口,自然吃的很香。我几乎一个人吃掉了一整只鸡,猫在旁边撩了一些。 晚上回来,我们去的天海酒店。这家据说是佛山本地人吃的,价格便宜上一大截。其中一道烧钳鱼(又是重油重口味),还有一道煎青椒,味道不错。青椒不辣,去子,内部塞上鱼滑,再煎过。这个做法很特殊,别处不是很常见。 第三天早起去了顺德。顺德对吃很讲究,果然不假。我们去的时候不知就里,先看了清辉园再去吃饭。大家居然都收市了。好歹找了一家酒店,在西餐部吃了一点茶点,都不是顺德本地菜,十分可惜。其中一道沙姜蒸凤爪,和普通广式的凤爪味道不同,反倒有点像肉骨茶的味道。我们就在推测,肉骨茶料中就有山萘。另外就是去民信仁信转了转。两家双皮奶老店果然不同凡响,整个下午店里都是人头满满,根本没地方坐。最后好歹在美食街仁信的一个小店面里吃了一碟萝卜糕,一碗双皮奶。实话说我对双皮奶这种东西一直很腹诽,总感觉像是奶膏一样,不是很好吃。 第三天晚上直接回了广州,顺德到广州的高速很快,一个小时不到就下了车(订正一下网上的资料,有说两个多小时的)。晚上就在沙面的陶然轩里面随便吃了一点。他们的菜不是很有特色,碟子和茶具倒是这两天里看到最好的一套。旁边的柜子里还摆放着老的外销瓷。 第四天就在广州随便逛了一圈,石室圣心大教堂,南越王墓,北京路,还有陈家祠。这几个自己去就行,没有什么好讲。晚上我家喵念念不忘顺德美食,结果果然有了回响。在沙面有一家“有腥气”,算是顺德菜。我们在里面吃到了拆鱼粥,还有煎鱼嘴。鱼嘴更像是鱼头,也不知道正宗的顺德菜是不是这个样子。据喵说应该是小鱼。拆鱼粥很鲜。 好了,这几天吃的美食大概就这些。如果你有什么推荐,请在下面留言。注意请不要推荐一些特别知名特别贵的酒店,我知道他们好吃,但是我不去是有原因的。一个是口味可能和普通市民口味有所区别,另一个就是穷。我真心的建议大家只要记住前一个原因就好,推荐我一些符合当地人口味的餐厅——同时也会便宜一些。

phuket旅游和潜水指南

Jan 1, 2017 - 1 minute read - Comments

大致行程 简单来说,就是带着我家猫去普吉岛玩玩。一天潜水(diving),一天浮潜(snorkeling),一天jungle fly,剩下的时间就是吃吃吃买买买。 当然,执行下来完全不是这么回事。基本上每天都是满的,都是各种行程搭配。虽然就住在Jungceylon隔壁,却基本没有买买买的机会。吃吃吃倒是问题不大,各处都有不错的食物。不说精致,便宜好吃是起码的。更何况Jungceylon后门还有Banzaan Fresh Market,门口一到晚上就大开夜市。 哦,还有说到Jungceylon,这次来了才发现,这不就是上次逛的那个大市场么?连我拍某个卖玩具妹子的哈根达斯前面的四面神像都没变化。然后顺便回翻了一下游记,发现上次住的那个Blue Marine,就在我们住的地方到FantaSea的中间,能路过。 好么,净是熟人。 潜水行程 按照我的计划,第二天的行程是一整天的潜水,我家猫就去玩冲浪。 这次由于是圣诞-元旦行程,因此我比较担心人多,所以提前在网上订了行程。潜店选择是这家,原因是比较近。其实还有更近的All4Diving,在步行街上还能看到他们。但是事先咨询的结果,他们的船都是固定的,那天只有Phi Phi岛的行程。而我对Phi Phi岛的潜水又不是很感兴趣,所以还是选择了thailand divers。 他们家别的还不错,有在线的客服帮你讲解和指导,能通过paypal来支付费用,基本上是挺方便的。只有一个不大不小的问题——他们没告诉我,不能在游艇上付费。所以我付了一个定金后,本来打算在游艇上支付剩余费用。结果他们前一天下午写信过来告诉我现在就必须付钱。我说我人TM在FantaSea Show现场,手机都马上要寄存了,付个毛啊。他们说那没办法。然后就在FantaSea Show手机寄存排队的时候,赶紧输入各种信息来付账。一堆信息,还全是信用卡相关的,一个不留神就容易出现盗刷,手机上又很难查证。所以搞的非常紧张。这点让我感觉很不爽,其他的还算满意啦。 潜水船没什么好介绍的,双层普通潜水船,上层观光,下层内舱,后舱是四排气瓶,最后从尾部的平台上下。尾部有一个清水桶,供清洗相机什么的。两个淋浴头两个花洒,可以简单清洗或者下水前做个防雾什么的。比较有意思的倒是当天的同船。小一半是欧美人,我也分不大清楚都是哪里的。潜伴的小哥是东欧的,怀疑是俄罗斯人。因为潜导是个波兰妹子,和他用俄语聊了两句。好歹也去过一圈俄罗斯,虽然听不懂,但是大概也能分的出。船长是个泰国人,长的像是神盾里面那个独眼局长。戴一只耳环,说话泰国腔,但是很风趣。另一半则是东南亚人,以日本居多。一个很瘦的日本姐姐,拿一个超级巨大的水摄装备。三个很卡哇伊的日本妹子,清一色的涂着指甲,戴着tusa家的潜水表,估计是几个认识的朋友一起出来玩。一个日本超级帅哥,和一个没那么超级的帅哥,英语很流利。还有一对日本夫妻。中国人也不少,一对香港人,看样子是情侣或者夫妻,但是我不确定。说来好笑,日本帅哥以为船上就他们几个日本人,所以一群人在那里用日语聊天。偏偏我不会日语但是能听个大概,所以坐在旁边听他们聊斯米兰船宿。但是香港夫妇聊什么,虽然是中文,我可就完全听不懂了。另外还有三个,两女一男,看来是出来玩的朋友。男的自我介绍是教练,福建人,从新加坡过来的。 潜水基本情况简介 本次潜水主要在Andaman Sea水域,Chalong到Koh Phi Phi之间。环境洋流South to North,估计速度在2-4knots之间,部分区域可见极端高速洋流。天气晴朗(回程有雨),海面浪高0.5米左右。海水基本清澈,能见度10-20之间。 Koh Dok Mai 7° 47.786’ N, 98° 31.85’ E Max: 20.4, Avg: 13.4, Vis: 15, Current: about 1 knot 离码头大约20km的Andaman Sea洋面上,一个小的突出海礁。下面有垂直的海底岩壁。我们从南面下海,向东逆时针顺流绕行。原本计划是放流到北角升水,但是船长担心要在大流里升水比较麻烦,就改为顶流绕回南角升水。水下洋流还算平缓,水面流比较大。下水后可以见到成群的褐色鱼群形成瀑布,由于鱼群遮蔽岩石,无法估计规模。可见海兔(nudibranch),海鳗(moray eel)。本次潜水因在未知海域首次潜水,配重6kg,RMV在15.7左右。 King Cruiser Wreck 7° 48.148’ N, 98° 38.599’ E Max: 25.6, Avg: 16.5, Vis: 10, Current: 3-4 knots 在Koh Dok Mai向东约15km的洋面上,一艘1997年沉默的双体渡轮。船体南北走向,潜水计划是从北面的浮标下水,抓绳上下,在船体中部游览,运气好的话可以到达舰桥。由于大深度潜水,需要严格安全停留。高速洋流环境下要稳定停留,最后必须回到北面浮标处升水。因此SPG+Computer双计数,NoDec<10mins ||

相册

Oct 30, 2016 - 1 minute read - Comments

2016俄罗斯 2016新加坡 2016大马 2016三亚 2016泰国 2016世纪公园 2016云南 2016黄山 2015印度 2015山西 2015山东 2014北海道 2014新疆 2014潮汕 2014良渚张家港 2014世纪公园 2014长白山 2013甘肃 2013西藏 2013台湾 2012四川 2012西安 2012maldive 2012puhket 婚纱照 2010厦门 2009 2008 2007南京 2007 2006香港 2006牛栏山 2006 2005无锡 2005