Shell's Home

贝加尔湖旅游指南

Oct 11, 2016 - 1 minute read - Comments

首先说明,这是一篇旅游指南,里面都是旅行相关信息。想看游记的可以退散了。废话不多说,上干货吧。 贝加尔湖(Baikal Lake,俄文:Озеро Байкал)位于俄罗斯的Irkutsk州(俄文:Иркутск)。一般来说,会直飞Irkutsk机场,然后再过去。Irkutsk在东八区,和北京没有时差。整个地区的通行货币是卢布(RUB,有时能看到py6一样的文字,руб,那个是俄语的卢布),兑人民币(CNY)汇率大约是1:10(1CNY = 10RUB)。整个地区通行语言是俄语。以我的体验来说,英语使用率比中国还低。这一路也算是商业旅游线路了,除了导游外,能流畅使用英语的人只有两个。大部分人只能勉强使用几个英语单词,好的可以说一下短语。所以在这个地区旅游,需要做好语言不通的准备。 这里我推荐google翻译。google翻译除了能够打字翻译以外,还能将图片上的文字实时的翻译出来(不过似乎只限于打印体)。这在买东西/看招牌的时候非常管用。不过就我测试,这个好像只能在俄文和英文间互相翻译。幸好以我和喵的英语来说,没什么大区别。当然,除了google翻译以外,最好还准备一些简单的俄语单词和沟通方法(比手画脚),以备不时之需(例如没有网络情况下无法翻译)。 我们已经提前买好了tele2的电话卡,在整个俄罗斯期间都可以顺利的上网和打电话,因此并不特别担心通讯问题。不过在前往Olkhon Island(俄语:Ольхон)的途中没有信号(是的,途中无信号,岛上反而有信号),有些偏远地方和地下室也是没有信号的。俄罗斯的手机很奇怪。区号是007,我们都是俄罗斯手机号,互相拨打是不加区号的。但是我们拨打别人电话的时候要加8,别人拨打我们电话的时候不要加8。非常复杂,容易搞错。我至今不理解为什么。 去往俄罗斯之前,最好准备好电话卡或者其他上网设备。这样可以查询在线翻译,避免一些尴尬问题。同时,俄罗斯有时比较冷(但是最热的时候居然有30多度),所以一定要注意保暖。衣服最好是大衣+室内穿着的组合。因为很多地方有暖气,所以进入室内后需要脱下大衣。不少景点有专门的衣帽间,可以帮你把衣服挂起来。挂的时候注意提前把值钱物品和证件从衣服里拿出来。 我们是报的跟团游,所以无需办理签证。后来我查了一下,中国公民团体游可以15日内免签。自由行乘客还是必须照旧出签。Irkutsk机场的出入境机构动作不是很快,普通游客可能要在移民大厅里面等很久。 Baikal以自然风光而闻名,最好的季节在冬季和夏季(是的,我们去的时候反而是淡季)。Irkutsk旁边有个小镇,叫做Listvyanka(俄语:Листвянка),大约有一个多小时车程。这个小镇在Baikal Lake和Angara River(俄语:Река Ангара)的分界口附近,是Baikal Lake的重要码头,以鱼市,潜水和观光闻名。我本来在Listvyanka报了潜水(干衣)。结果下雪,潜导在船上,没回来,就没潜成。同行的一些人报了小火车的线路,从Irkutsk坐车,换小火车沿着Baikal Lake转半圈。中间会停靠几站,让你下去拍拍照。然后再上车继续。火车最后会停靠在Baikal Bay(俄文:Байкал),换渡轮游览Baikal。最后也是从Listvyanka下的船,坐车回酒店。据去过的人说挺有趣,有兴趣的可以试试。 我们住在Irkutsk和Listvyanka之间的一个叫Elochka(俄语:Елочка)的松林别墅里面(说白了就是郊外,便宜)。出门100米就是Angara River的支流,窗外就是松树。路上能看到松鼠,麻雀和啄木鸟。一点都不怕人,赶都赶不走。有的时候松鼠还会跳到你身上来。但是基础设施超级差。没有饭店,只能定时去吃食堂。没有车来返市区,只能打出租。出租还算便宜,丰田的小皮卡,开到市中心半小时,也只有500RUB而已。 Irkutsk基本没有出租扬招,都是打电话预订出租,而且都是俄语。但是你可以在酒店或者游客中心找到会英语的前台帮你预订。室内交通主要都是Bus。同时,室内还有几条有轨电车在运行,有兴趣的可以试试,单次乘坐15RUB左右。 第三天开始,我们就从Irkutsk出发,上Olkhon Island。从Irkutsk到Olkhon Island大约是4-5小时车程,路上很多地方没有信号。窗外是大片的寒带草原,有的地方是草原和西伯利亚针阔混交林过渡区。地势连绵起伏。有的地方一马平川一望无垠,有的地方则高耸陡峭。但是战斗民族的修路很有特色。我们正常修路都是盘山,路不会是直的,以免刹车出问题。他们的路是笔直从高处冲下,又长又直,像是水上公园的滑梯。 去Olkhon岛的路上,就到了Buryat人(俄文:Буряад,蒙古文:ᠪᠣᠷᠢᠶᠠᠳ)的地盘。其实Baikal Lake应该是在Irkutsk和Buryatiya的中间。Buryat是蒙古的分支,原来称呼为林中百姓,或不里牙惕。当地特色食物是什么?包子!猪肉和牛肉混合馅,加上洋葱。吃的时候要加酱油,然后吸出汤汁,再吃包子。大致吃法和小笼包非常类似。 上Olkhon岛之前要坐渡轮,渡轮是人车混载渡轮。下船之后要坐当地特有的一种老式车“土坦克”(УАЗ)。岛上的路说是烂,不如说根本没有路。前面的车一压,就成了路。不过即使如此,这路况评价起来也好过去珠峰大本营的时候。 岛上地势东高西低,南缓北陡。北边地势高耸,都是高高的悬崖直冲入海。西边是个平缓的坡,Khuzhir村(俄语:Поселок Хужир)和Shaman Rocks(俄语:Шаман Скалы)就在这个地方。Shaman Rocks是萨满教的圣地,也是Olkhon Island的地标。岛上的基站架设在Khuzhir村,所以远离村子的地方是没有信号的。村子里面有一个小教堂,一个学校,一个博物馆,一个邮局。 他们的主路叫做ul Baykalskaya(俄语:Байкальская ул),东西走向,意思是贝加尔大街。实际上是一条尘土飞扬的烂路,而且没有铺设任何路面。西边直冲码头,铁栅栏上有个红色的五角星。导游说是因为原来这里是个捕鱼和加工厂,村子是围绕着鱼场建的。后来捕捞过量产量减少,加上自然生态保护。鱼场就被废弃了。 主路的中心是学校和邮局,博物馆在学校的里面(是的,里面)。我们去的时候翻译了一下告示,似乎是周末不开,于是就没进去。邮局就在学校南边一点。你可以在村子里买到各种明信片,然后在邮局购买邮票邮回来。到中国的邮费是35RUB。 博物馆西边一点,有个挺大的商店,店主是个亚洲人长相的女的,我怀疑是蒙古族(Buryat)。如果你到这家店的话,可以买一点鸡翅膀吃。我不会说俄语,所以不知道是什么的肉。不过我怀疑是火鸡肉。很好吃。同一家店里面还有格瓦斯(俄文:KBAC)。你可以稍微买一点尝尝。我家猫说和中国的版本差异很大,她喝不惯。 村子里有各种奇葩项目。例如坐船出海,或者坐飞机(是的,飞机)。还有更常见的骑马和租自行车环村。不过现在是淡季,很多项目终止了。我们打听到有船,但是看湖面上波涛汹涌,回忆了一下Koh Tao上坐大船还被摇到吐了的恐怖,再看看他们的船的大小。我们明智的放弃了这个活动。 常规旅游线路是南线和北线。北线包含在行程里面了,南线自费。我们跟着团去了北线。印象比较深刻的就是合波角(Cape Choboi,俄文:Мыс Хобой),整个岛的最北边。风大的能把人吹跑。我这么重的体重,居然有的时候控制不住会被吹的斜迈一步。另外就是午餐野炊的时候司机烧的鱼汤,非常鲜美。 这里特别说一点,Olkhon Island旅游始终是有比较大的生态争议的。主要是垃圾处理和当地居民违法使用木材。具体可以看这里。如果你对生态方面有特别的顾虑,请考虑这些问题。 我们在Olkhon Island呆了两天就又回到Irkutsk游览,下面就是一些Irkutsk的游览建议。Irkutsk比较市中心的地方在Spasskaya Tserkov(俄文:Спасская Церковь)附近。另外就是马克思大街(Karla Marksa St,俄文:ул Карла Маркса)和列宁大街(Lenina St,俄文:ул Ленина)。我们在两者交界的Figaro吃过一次午餐,两个人吃了3000RUB多,还是挺贵的(对当地物价来说)。沙拉量极大,两个人吃一份就够了。浓汤香气扑鼻,加上蒜香面包让人胃口大开。煎鱼和羊排都很上品。比起上海来说,到确实不算贵。毕竟上海要认真吃一顿,也差不多要这个价钱。 不过Irkutsk的中国菜就糟糕很多了。我们在ul Litvinova(俄文:ул Литвинова)吃的一家China Town Cafe(什么鬼),感觉上就是用马列主义指导的中国特色社会主义实践。在ul. Gorkogo(俄文:ул. Gorkogo)吃的Золотой гусь感觉上也差不多。搞笑的是他们的标语上还写,10月1,2,3,国庆大酬宾,全场八折。反倒是在Sovetskaya St(俄文:ул.Советская)附近(我没仔细记,不确定是不是这里了)的一家非常小的餐厅,中国菜做的非常地道。我们进去的时候好像看到有几个留学生在那里吃饭。 Irkutsk的博物馆和教堂都很多,很多值得一看。在列宁像(Monument to Lenin,俄文:Памятник Ленин)附近就有三个博物馆。地方志博物馆(Irkutskiy Oblastnoy Kraevedcheskiy Muzey Biblioteka),美术博物馆(Irkutskiy Oblastnoy Khudozhestvennyy Muzey im.

生活中总有一些小精灵会来敲你的门

Sep 25, 2016 - 1 minute read - Comments

今天家里来了个不速之客。 当时我和老婆吃过饭,正在无聊,不知道去哪里玩,结果听到细微的敲门声。老婆开门出去看看,结果发现是一只灰色的短毛猫。老婆当时就觉得很惊奇,拿出家里放着的猫粮来喂猫。(我们偶尔会下楼喂流浪猫,所以家里留着一点猫粮)可是这只猫根本不吃,反而大摇大摆的走进来巡视了一圈。然后捡了个避光的地方一趴。。。 。。。这霸气,您还真不认生啊。 这是一只灰色的短毛猫,全身的毛蓬松水滑。到底是英短还是美短,很多朋友有分歧。我老婆说是英短。鉴于我的猫咪知识比她差的太远,所以我们就当是英短吧。下腹有一丛白毛,颜色还是雪白的。肚子鼓鼓的,像是怀了孕。见到猫粮根本不馋,可见平时吃的都是高档猫粮,而且才吃饱。进人家家一点都不认生,转了一圈,却不会去床上或者垫子上。 这是一只有主的猫,而且从家里跑出来的时间不会超过半天。 基于这点,老婆很快下楼问了一下物业保安。保安说刚刚一个女的抱了这只猫过来,说是楼里走失的。放在物业就走了。保安也没办法,就锁在厕所。谁知道厕所窗户有条缝,它又顺着窗户跑了。 这身手,一定是从家里偷溜出来的。 那问题就比较麻烦了。如果再抱给物业,想必溜掉的可能性是百分百。要找主人,也不是今天能解决的事情。所以老婆让我先问问附近的朋友,我们附近小区有没有什么地区性网站。自己则是骑车去了超市,买个小盆和猫沙给它先用着。我趁着老婆出门的功夫,发了一条推和一条朋友圈。然后才有功夫仔细观察这只猫。 而这只猫趁我们刚刚在那里忙的功夫,在房间里乱转,到处乱翻,还翻倒了老婆养的花。我赶忙拿扫帚扫掉泥土,以免踩的乱七八糟的。然后唠叨了它两句,结果它坐下来,扒着我的裤子喵了一句。 不知为何,我瞬间明白了它想干什么,跟着汗就下来了。 女王大人您行行好,我老婆给您买猫沙去了,买来之前可千万忍住了啊。。。 然后它继续。。。在家里翻箱倒柜,还差点碰倒了老婆养的插花(底下盛水的那种)。我没办法,只能一路跟着女王大人跑。然后不知为何,想起了英国内阁首席捕鼠官Larry The Cat和它的跟班们。可是这回我可没办法唠叨了,长的好看就是有优势。何况人有三急,猫想必也有。 正尴尬中,老婆回来了。于是我们赶紧放好小盆,铺猫沙。女王大人一点不客气的坐了上去,然后开始刨。。。 没有刨猫沙了。它不小心弄翻了猫沙盆,看来这个厕所对它来说实在是太小了。 等三急落定,它又在屋子里转了一圈。看它这次的行动,像是找地方休息,而且特别偏爱有顶棚的阴暗空间。我猜它原来一定有自己的猫房子,只是我们这里没有,只能委屈它了。等它拣了个好地方趴下,我们稍微合计了一下下面怎么办。从朋友圈上面的反馈来看,很多朋友都很喜欢这只猫,甚至有朋友看到找主人三个字就直接来和我们说要养。我们倒是不担心它的去处,可是从他的种种细节来看,原主一定很宠它,现在应该很着急。可是大晚上的,就算要找也无从入手,所以先让它住着明天再说吧。 结果这只猫居然主动跑过来和我买萌了。我摸了摸它的背,然后摸了摸它的肚子。这个,好像。。。老婆你来摸摸看?老婆也摸了一圈。用一种不可置信的语气说。好像,难道。。。是太肥了? 卖过一圈萌,这只猫突然抬起头来四处张望。老婆没反应,我却觉得不对。细听外面,有喊人名字的声音。我赶快让老婆出去问是不是在找猫。 是。 什么颜色的? 灰色的。 好好,有平时的生活照么?进来给我们看看。 有。 老婆一看,就是这只。 主人进门,大喊一声阿呆(还真是呆,2333),眼圈整个红了。然后猫就蹭了上去。 看来是正主。 主人说,他们家在我们楼上两层,这只猫是扒开窗户缝自己跑出来的(果然是惯犯)。他回家发现猫不见了,就赶快出门找,一直找到现在。结合我们知道的消息。这只猫不知如何的,到了一楼。刚跑出楼去,就被一个女的抱了回来,交给了保安。随后它就从保安的厕所逃了出来。又不知怎么的,到了我家这层。在我家门口探头探脑的敲门,给我们瞧了个正着。 主人说,它运气真好。中间只要差一点点,它就很可能回不来了。我说这得说我们运气好。 恩? 不是每天,都有一个小精灵,带着一个完美的故事来敲门的。

最近的阿里月饼事件

Sep 15, 2016 - 1 minute read - Comments

相信大家都听说过了,原帖在这里。阿里的声明在这里。我简单说一些吧。 拿js秒杀抢一堆月饼是不好的,当事人也承认这点。不过哪里不好大家观点不一。当事人强调“代码错误”和“好奇测试”。从安全部的职位来说,不是说不过去。不过很明显公司不这么认为。这事扯不上价值观,也不能扯上价值观。如果要扯价值观的话,你就得想想。让一群做渗透出身,见墙上有个圈都要不信邪钻一下的人,去一个对内需要严格管理和反腐的公司。这本身三观里合了哪一观?至于提UC的同学,更是完全没提在点子上。秒杀好不好主要看杀的是谁,也就是所谓的立场决定态度。这才是核心价值观。其他价值观与此冲突者无效。 这件事本身是公司内务处置,事情还得回归到公司规章制度,岗位职责和合同上去。 先说最后一个被开掉的人。我不知道阿里的安全岗位有没有对内安全职责,但是一般来说,安全岗位是可以进行内部渗透的(而且这是岗位职责)。你雇了一个警卫过来让他负责安全,就不能因为人家试着从墙角的洞里面钻进来就把人家给开除——那是人家的工作。只是安全渗透通常需要协调很多事情,例如是否对线上造成影响,是否需要通知当事部门。最后那个哥们显然是没有经过协调。不过从事后并没有付钱来说,还是可以认定不是冲着月饼去的。因此事后有没有付钱这点非常重要。当事人讲法是没付,阿里的声明中未提到。 如果确实没付钱,看到内部秒杀系统似乎没做反刷,写个脚本测试一下。我不知道你们管这叫什么,反正我管这个叫内部测试。这最多只能叫做工作协调有问题,既扯不上价值观,也不违反大部分正常公司的规章。当然,阿里也有可能在安全组规范里面写明了——未经备报批准不得私自进行内部渗透。那这就叫活该了。只是如果安全组有这条规范,我很怀疑内测到底能测出些什么玩意来。你看,按照规范要求,你需要一个个产品线的和对方的老大去谈,获得许可后测试。可是基本最新的,出漏洞可能性最大的系统,全都是要求赶紧上线,没时间全面考量安全性的。可黑客不归阿里的安全组规范管啊。 前面一个哥们的行为则更不好说一点——他确实是冲着月饼去的——一盒。只不过由于程序故障,所以造成刷了一堆月饼出来。所以这里是两件罪——用脚本刷月饼,刷多了。 脚本刷月饼是不是道德,最近有一堆朋友反复论述过了,我这里就不赘述了。在我眼里看来,用脚本去刷一盒月饼不能叫不道德。如果自动化脚本代替人操作就能叫不道德的话,你把密码存在浏览器里面,不亲自填写登录信息是不是应该叫欺诈?你看,银行让你设定密码,是希望你(这个人)去输入密码来验证自己身份的。结果你到好,用一个自动化工具帮你输入密码,欺骗银行,让他以为是你输入的。这是不是欺诈? 对于程序员来说,写个脚本帮自己刷点什么太正常了。有些程序员写脚本,看到自己晚上9点后还登录在服务器上的话,就给老婆发封邮件说要加班今天回不去了。有的程序员写个程序,定期给老婆的朋友圈全部点赞。我有很多邮件甚至不是亲自读的——直接写个脚本爬下来,然后分析一下内容。有关键词才看,没有的话存档然后定期看一眼标题就行。程序员学得一身通天彻地的屠龙术,其实搞到头只有这点羊毛可以薅,你们还在那里大叫不公平。那我们每天晚上自己加码学这些技术的时候,怎么没听有人说,“这个得算加班”啊? 至于刷多了的问题,这叫程序有bug——可是程序有bug不能叫程序员道德败坏吧,否则阿里的反腐难道是在HR的主持下集体抓bug的工作? 当然,另一种可能就是,当事人确实是想多买几盒月饼。只不过后面事情闹大了,又不能推在临时工头上,所以只能说脚本有bug。不过据当事人声称,事后打过电话想退回多余月饼。如果这点属实,也可以排除想多刷月饼的可能。因此事后是否曾打电话要求退回月饼非常重要。同样,当事人讲法是打了,阿里的声明中未提到。 所以,此人可以以技术不过关的名义辞退,但是却不应以试图刷月饼的名义辞退。因为他确实在写程序时考虑不周,对线上业务造成了影响。这在安全组工作中属于过失。没错。 内务处理,很多时候只能看出发点和动机,甚至有时没什么可以参考的。要参考的话,内部多出来的月饼用秒杀,这又是合了哪条规了?要是软件公司每件事物都要参考规章来办事的话,索性还是关关门大家去应聘公务员来的快一点。很多时候本来就是没什么规章的情况下大家估摸着办,办好了就成了规章。办砸了,如果本人不是蓄意做砸的话,都属于还可以抢救一下的范畴。最多是技术不够/工作不够热情/协调能力不足/运气不好反正你办砸了怎么也得来个差评。惩治一下就行了,否则还有哪个愿意当这个出头鸟来办事? 整件事情上,个人观点,觉得惩罚出手太重了。一般来说,这种事情退回月饼,通报批评,扣除当年奖金已是重罚。开除已经是在严打了。开除加上对外点名。。。要知道所谓杀人不过头点地,今天你打倒在地还要踏上一只脚,叫他永世不得翻身。。。 总体结论,阿里系的安全恐怕要打个问号。即使现在没问题,将来也不排除这种可能。做内部涉安全测试的同学,就根本不能想测哪里测哪里。如果测砸了。OK,价值观不符,开除。测过了,没有线上影响,确实有bug,需要赶快修复。OK,等着你的不是嘉奖,而是仍旧价值观不符,开除。那什么最安全?当然是领导说要哪里安全就哪里安全,说要多安全就有多安全。多余的事情不要多问,不要多听,不要多想。这也确实是合了阿里的价值观,一个对内严格管理,加大力度反腐的公司,是不应当有一群看什么都不爽要亲自拆一下看看的猴子的。只是这样的安全组能起多大作用,自己想吧。 最后补一下合法问题。合法性上,不好说。毕竟阿里给出的台面理由是“价值观不合”。阿里有没有把“价值观”定义为劳动雇佣合同中的一部分,我没看过合同,所以不知道。这和fb的case有差别。因为fb是把企鹅定义成了竞争对手,所以带着竞争对手的人来公司参观是明显违反保密原则的。白纸黑字毋庸置疑。更不提这也违反了H1b签证要求。而如果阿里并没有将“价值观”定义为员工要件之一,这种情况就和以“八字血型和公司名字不合”解除合同一样,属于甲方无正常理由解除合同。理应给予补偿。

使用Jupyter制作slides

Sep 8, 2016 - 1 minute read - Comments

Jupyter是ipython notebook的新名字。可能很少有人知道,这个玩意居然还能制作slide。 可能有人有印象,我做过一个markdown to slides生成器,底下用的是reveal.js。今天才发现,jupyter也有类似的功能,底层也是reveal.js。不过用起来比我自己写的东西方便多了。 用法很简单。首先在View菜单里,使用Toggle Toolbar功能打开toolbar(如果已经打开就不用管)。在toolbar里能看到一项叫做Cell Toolvar的,后面一般是None。请转换为Slideshow。此时你能看到每个Cell都会多出一条来,上面有Slide Type。 Slide Type有六个选项,默认是啥都没有。后面依次是Slide,Sub-Slide,Fragment,Skip,Notes。Slide和Sub-Slide是主要的选项。在reveal.js里,Slide是指左右切换的那些页,而Sub-Slide则是你切到一个Slide后,按向下逐渐出现的一些页。这类似于章和节的关系。章和章之间左右切换,节和节之间上下切换。而如果选择为默认,那么就不开新页,跟在前面的页面里。 Skip的话,这个Cell会在Slide里跳过看不见。有很多时候,我们需要在Slide里嵌入Python代码。但是代码又有的时候需要做一些额外事情,我们不希望出现在Slide里面。如果将这些额外代码运行后删除,又恐怕下一次跑这个notebook跑不动。这时候就可以设定为Skip。 Notes原则来说是给slide里面加注释用的。照理说在页面上按s就可以跳出提示,但是我测试下来跳出来却是空的。看了一下页面源码,确实是有东西的。可能是因为我使用的是静态的文件,而没有开启服务的关系。 Fragment我也不知道干什么用的。看名字好像是代码碎片一类的,如果有知道的可以告诉我一下。 最后,用nbconvert就可以把结果转换为html来用。方法是: ipython nbconvert --to slides --reveal-prefix "http://cdn.jsdelivr.net/reveal.js/2.6.2" ... 之所以要加reveal-prefix,是因为最新的reveal和jupyter生成的html不兼容。 生成过程需要使用nodejs,记得安装。 生成出来的Html就是个彻头彻尾的slide了。原则上,同一个ipynb也可以生成html或者pdf(借助reveal.js自身的pdf打印功能)。这样的话slide也有分发能力。 玩的愉快。

CentOS 6下安装Python2.7

Aug 24, 2016 - 1 minute read - Comments

我以为只有我不知道,不过看来大家都不知道。 很多时候,我们还得维护CentOS 6的设备。这件事很大程度上不是我们能决定的。但是CentOS 6的默认Python是2.6,很多最新的代码无法执行。例如Django,必须使用Python2.7⁄3.4⁄3.5。ansible好像也要求新版本Python。 作为CentOS管理员,第一个想法当然是编译。但是在CentOS 6下,不应该自行编译Python。因为Python的编译有很多坑,例如默认没有内置readline,没有内置sqlite。你不信编译了试试看?我直接从源码编译是不行的。 有的同学提出想法说,可以下在srpm包然后和Python2.7的source code做compatible。但是我要说一个比这个简单的多的官方方法——RHSCL。 RHSCL的全称是Red Hat Software Collections。旨在于在长期支持版本中提供最新版本的动态语言和数据库支持。这里是RHSCL支持的基础工具和版本。这里是说明性文档。具体方法如下: # 1. Install a package with repository for your system: # On CentOS, install package centos-release-scl available in CentOS repository: $ sudo yum install centos-release-scl # On RHEL, enable RHSCL repository for you system: $ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms # 2. Install the collection: $ sudo yum install python27 # 3. Start using software collections: $ scl enable

gpg pubkey ID碰撞

Jul 20, 2016 - 1 minute read - Comments

昨天和朋友碰了个头,然后做了交叉签署。 朋友签署完了,还没上传签署的时候。我手贱(幸好手贱)去server上update了一下我的key。结果发现多出一支key回来。 纳尼? 上pgp.mit.edu去搜我的邮箱,一堆key。我废弃过不少key,这就算了。有一支2014年签署的key引起了我的注意,因为ID和我的KeyID完全一致,UserID也一样。显然这是撞出来的,不过我不记得自己有做过这样的事情。 下面是我的真实key的fp: 2276 57F3 6E16 9B90 4186 2EBF 29A9 7386 0914 A01A 这是有问题的那支key的fp: 875D 447A E720 9037 84A0 7888 909F 2614 0914 A01A 可以看到,两者最后部分完全一致,这导致两者有同样的KeyID。 我点进去看了一下,后面一支key完全不是我的,签的情况也乱七八糟。但是UserID显然一致。然后汗毛一竖赶紧通知朋友。朋友看了一眼,果然签错成那支假的了。 我擦,我给你写我的fp是签名留念用的吗? 一般来说,签名很难吊销。他要是签错了,那就麻烦大了。幸好他没上传。整个删除后重新签署,这个问题总算是顺利解决。 我继续追踪,发现有趣的事来了。 这个key被很多人签署,其中有个人和我的签署人KeyID和UserID又和我互相签署的某人一致。这相当于攻击者不但碰撞伪造了我和他的外观一样的Key,而且连我们的互相签署关系都伪造出来了。。。 我OO了个XX的,这是想干嘛? 然后,某位朋友给了我这个站点:Stop it with those short PGP key IDs! 里面提到了这种伪造碰撞的现象。 同时,里面也提到了解决方法。 首先,向你的gpg.conf里面加入keyid-format 0xlong,这样可以使你的ID变为64位的长ID。碰撞难度更高,当然,也更难一眼看明白谁是谁。 其次,在写程序的时候,不要使用ShortID来指明身份了,因为这种方法显然受到了攻击。继续使用ShortID可能为你程序未来的安全性埋下隐患。 最后,验证fp的时候一定要用纸质传递,签署的时候一定要验证完整fp。 验证fp的时候一定要用纸质传递,签署的时候一定要验证完整fp。 验证fp的时候一定要用纸质传递,签署的时候一定要验证完整fp。 因为很重要所以说三遍。

更换blog声明

Jun 22, 2016 - 1 minute read - Comments

在看blog的同学们应该发现了,Shell’s home整个变了个样子。 这个主要是因为,我的wordpress被黑了。 我的wordpress本来是托管在香港的一台主机上面,加上cdn之后,对国内外的访问效果都不错。我也一直挺满意的。在周一,我本来想把周末写好的关于潜水的blog贴出来。结果无法登录。所以我登录了cPanel去数据库里面修改密码,结果发现。。。 我的数据库,整。个。都。不。见。了。 WTF,这是三小? 首先可以肯定,这里出了什么问题。经过对options表的检查后,我基本确定,这个blog已经不是我原来那个了。但是在数天内我没有发现这件事,而且事发时浏览一切正常。我猜测是因为我加了cache插件,而新的blog没有这个插件。所以一直没有刷cache,导致入口始终是缓存。因此只看首页一点现象都没有,在点击登录按钮后才出现问题。作为验证,我点了一下三年前的记录,结果404了。另一个朋友也验证了这个现象。所以估计推论是对的。 然后是why。 首先可以排除弱密码。我在wordpress上启用了24位大小写数字符号混合密码(反正是自动填写),再加上了yubikey的U2F功能,实话说我真不觉得有什么攻击者能找到我的密码进去。 因此,我从cPanel里面搞到了原始浏览日志。日志显示六月八号早上8点的时候,访问帖子还是200。在某个时间点后就302了。而302是wordpress尚未安装时的标准做法,会转跳到install.php去引导你完成设定流程。也就是说,在8点多的时候,整个wordpress被突然重置。然后对照新的wordpress的初始记录,大约在9点多的时候,有人来完成了install流程。这两者之间可能有关联,也可能是重置者什么都没管就走了。我的某个读者跑过来发现这个wordpress居然没有初始化!就手欠来初始化一把。完了发现首页为什么啥反应都没有,以为自己进了蜜罐然后跑了。 所以先不用参考后面wordpress的初始化信息(我也不觉得里面能找到什么有效信息,哪怕是攻击者初始化的),先查看出问题的时间点的操作。 结果是一条install.php的访问,回应是200。 也就是说,貌似有人绕过了install.php的锁定,重新“安装”了整个系统。 当然,其中还有一点需要排除的,就是我的webhosting供应商没被黑。但是我觉得如果供应商被黑了,攻击者应该已经拿到了我的DNS管理权限,从而在乱搞我的域名了。从这点来说,wordpress有问题的概率更高。 问题是,wordpress也很不应该啊。入口已经加了最严格限制,每次有更新都及时升级。而且最关键是,install.php这个文件在完成安装后就被我删除了。后面怎么又出来了? 有朋友提醒,可能是我使用的某个plugin有漏洞。我想想确实是,plugin这个事情我很难去控制,有漏洞也没什么好奇怪的。 然而这个安全性让我很不放心。 其实前面已经在搞blog迁移到github的事了。但是因为github在中国访问很不方便,而且jekyll搞起来有点麻烦,所以一直没太大动力搞。结果被搞了这么一出,那就顺手迁了吧。反正现在还在中国的,应该已经很少用blog,更多用微信了。 这里感谢adieu推荐的hugo,这个系统是golang写的,所以编译安装我很熟悉。非常容易就搞了起来。下面就是适配问题了。 首先是评论。我已经把评论迁移到了disqus上面,所以不需要考虑评论问题。只要新的blog的url和老的差不多就行。同时,这样也会对前面索引了我的blog的搜索引擎比较友好。 然后是原始数据。我有一份去年2月时的备份,但是没有wordpress去运行它。(试过安装,非常麻烦)很幸运的,我在网上找到了某篇如何将备份数据转换为hugo数据的文章。脚本是python的,就是非常简单的xml解析转换到文件写出。所以用他的脚本做了一下简单的修改,基本就做到了保持url一致。在hugo转换后,基本就像原来的blog一样了。 只有一个小问题。我的文档转换出来后是/结尾的,而原来的url最后没有/。这对搜索引擎不是什么大事——反正会自动跳过去。但是disqus就不认了。所以我做了另一个小脚本,对disqus的url做了一次mapping。 最后就是把整个内容部署到github上了。这里基本没什么技巧,除了我需要用CNAME文件来让github接受我的域名。 好了,现在blog就先这么放着吧。

Pulau Perhentian

Jun 21, 2016 - 1 minute read - Comments

废话不多说,上干货。 这次有朋友在Kuala Terengganu,所以所有过程都是他帮忙安排的。先特别谢谢ching jun。 Pulau Perhentian(停泊岛)在Kuala Terengganu旁边。我们为了省钱,是从PVG(浦东)在HKG(香港)转机去的KUL(Kuala Lumpur,吉隆坡),来返大约2000RMB出头。前程航班是港龙,后程是亚航。在PVG居然给我们直接把票全办好了,到香港直接Transfer就行,不需出入境。印象里这都是同家公司的联程业务。无论如何,这大大方便了我们,所以香港基本就是买买买。 Kuala Lumpur有两个机场(其实是一个机场,两个航站楼),两者之间有Express连通。我们去的时候Express没开,所以坐的teksi(习惯一下,taxi的大马拼法),非常贵。建议可以试试Uber。 我们在Kuala Lumpur过境一个晚上,所以没有找酒店,直接在KLIA2下面找了他们的胶囊酒店。单人间6小时80RM,12小时110RM。价格便宜,但是环境也没多好。没有空调,风都靠排风扇。所以开了就吵,关了就闷。鉴于外面持续有人进出,建议直接上耳塞,开着排风扇睡觉。厕所和洗漱都还不错。住起来肯定是不舒服的,但是确实非常方便。我们6小时的停留时间,还包括了出境,走路,找地方。真找酒店就别睡了。 第二天从KUL起飞去KBR(Kota Bharu),KLIA2是廉航航厦,所以里面人头攒动是必然的。我们提前冲过去,居然进了急客。而且急客居然还排队。我们后面的当地人说他着急能不能。。。我们说我们都很急。。。KBR是一个超级小的机场。没啥好说的,出门,叫一辆teksi,开到Kuala Besut。开了将近一个小时,正好我们睡了一下。凑合吃了个早餐,我们就从码头坐船去Pulau Perhentian。 初来乍到,我居然不知死活的坐了船头。你妹,整个船晃的像人民公园的海盗船,而且我TM的还没有保险带可系。船稍微一加速,我就坐成了海豹队员抢滩登录的冲锋姿势。周围所有能抓的杆子全抓上,整个人还一次次的往船舱上砸。等下船,手麻了,而且还蛋疼。 反正不多说了,有空去的人自然能体验到这种感受。良心建议,坐船要靠后。 我们到达的是Pulau Perhentian Kecil(小停泊岛)的最西侧的海滩,当地一家叫做Shari-la Island Resort的酒店。连栋别墅,AC房,住宿环境还行。就是离潜店比较远。潜店是一家叫做Quiver Dive Team的店,就在Shari-la Island Resort的下面。我们有四个OWT,一个AWOT,就我一个做FD。他们一天出三次船,8点半,12点半和3点半。 附近我比较有印象的潜点有这些(注意,以下都是以我去的6月初为基准,能见度和温度会随着时间发生变化。普遍温度都在30左右,下的时候连湿衣都没穿): Sugar Wreck 5° 53.504’ N, 102° 41.996’ E Max: 18, Avg: 13, Vis: 10-20 离岛大约20分钟的位置,10年左右的一艘沉船,已经坍塌了。下过两支气瓶,一瓶能见度一般,10米左右。一支能见度很好,20左右。洋流不大,毕竟下面是好大一条船,可以挡住海流。海洋生物很丰富。有一次还看到了一条鱼正在。。。poop。。。 D Lagoon 5° 55.972’ N, 102° 43.407’ E Max: 14, Avg: 10, Vis: 15-20 能见度比较高,在一个海湾沙滩的外面。内侧是珊瑚礁,外侧是广阔的沙地。鱼类活动一般。 Temple 5° 57.571’ N, 102° 39.658’ E Max: 18, Avg: 11, Vis:

唐僧被吃了

May 3, 2016 - 1 minute read - Comments

唐僧被吃了。 本来不应该发生这样的事的。 正常来说,悟空会随时在师傅身边保护。要逃过悟空的眼睛,几无可能。因此唐僧的安全可以说是固若金汤。但是事有凑巧,今天是悟空回天庭报道的日子。由于悟空当年大闹天宫,被压在五行山下。今日戴罪立功,属于假释。所以按照天庭假释管理办法,需要每个月向天庭报道一次。当然,正常来说这种事情也就是走个过场。天上一日地上一年,每月报道一次是按地上时间计算的,所以在天上就是每个时辰出现一次,日夜不休。天庭监狱管理委员会的工作人员也受不了这个繁琐,所以文书手续,验明正身一概抽查。正常而言只要猴头出现,就算过关。 但是今日,玉帝闲来无事,要去隔壁礼部视察。礼部主事和刑部尚书关系交好,于是偷偷通知了刑部尚书。万一玉帝没事干,出了礼部进刑部,那就是天大的麻烦。所以各种见不得光的事情都要收起来。因此悟空这几个月的报道格外麻烦。 为此,悟空特意驾筋斗云前后看了一圈。附近地界太平,没有什么妖孽。又召出土地来问过,再三确认安全。于是向二师兄三师兄好好叮嘱了一番,这才上天庭报道去的。 然后唐僧就死了。 如来很生气,后果很严重。悟空队还没排到,就被监狱管理委员会的人扣下。西天联合天庭,成立天庭取经事故联合调查委员会,由迦叶尊者任首席调查官,主持调查工作。太白金星出任首席行政官,代表天庭协调双方工作。 委员会成立后,首先对事情的经过进行了初步的调查,基本排除了悟空伙同外人作案的可能性。于是委托太白金星对悟空进行谈话,说服其配合委员会的工作。在这次谈话中,悟空才初次知道师父去世的细节。 据天庭取经事故联合调查委员会的初步查证,事故是这样发生的。唐僧师徒行路到一半,看到个牌子,上面写着,大雷音寺,左转向前,还有28公里。于是唐僧师徒毫不怀疑的左转。结果前方并不是大雷音寺,而是小雷音寺。唐僧师徒住下后,唐僧在沐浴时不慎撞到头,昏倒在池内。童子问水是否够热无人回应,误以为客人喜欢热水。于是添足柴火,三个时辰过去,唐僧师父被煮成一锅老汤。。。 太白金星话还没说完,就被悟空飞起一脚踢倒。还没站起身,就被悟空楸住领子:老官,你扯的什么鬼话。哪里有人会呆呆被烧一点动静都没有的,我师父又不是木头。这种鬼话就是骗童子都不够,你真当俺老孙呆子不成! 太白金星连忙求饶:大圣,大圣,听我一言。当初调查委员会的人也是不信,可是小雷音寺的人说,西方有科卡罗斯煮死米诺陶斯,那米诺陶斯又不是呆子。为什么唐师傅的事就不可能是意外呢? 悟空冷笑一声:就算是意外好了。他们装成大雷音寺,骗我师父入住,这才能不动声色煮死我师父。这冒充大雷音寺的罪过,总不是意外了吧。 太白金星又说:这个我们也调查过了。对方拿出一份西天颁发的“关于鼓励信众自行传教的规定”,其中第一百七十三条第五款规定,为了传播西天教义,允许采取各种形式。因此小雷音寺的信众们就采用模仿大雷音寺的方式,向民众宣传大雷音寺的尊严。 大圣顿时哑口:这种事难道教务办不管么? 太白金星道:教务办哪里有空一个个检查信众自行传教的细节,最多也就是出了岔子找出首恶而已。实在乱子搞大了,了不起再出一个“关于禁止信众自行传教的规定”也就是了。 悟空咬咬牙,再道:就算小雷音寺无事,那乱插路标,诱我师父前去之人呢? 太白金星拨开悟空手指:大圣,小雷音寺的人对我们都拿的出“关于鼓励信众自行传教的规定”,对着人家自然也是拿出规定,说为了弘法,故此需要改标线路就是了。 悟空双手抱胸坐下,翘起二郎腿冷笑:天下哪里有为了弘法,把正法指向邪路的道理。必是此人见钱眼开,没细细核对文件之故。 太白金星道:悟空,你又何必固执。他又不是吃你师父的首恶,你何必和他过不去。要说细细核对文件,你前几次的假释报道,似乎也是核对不全吧。 悟空轻叹口气:师父也许呆,俺老孙却不傻。小雷音寺敢仿大雷音寺而无事,显然是背后有人不希望我师徒前去西天。因此调查报告里鬼话连篇,就是不敢指摘背后之人的不是。我待罪之身,哪里能左右这些。俺老孙唯一能左右的,便是此为虎作伥之人。若不是他从中作梗,哪里来这许多事。周围乡邻,难免也为其所骗,拜错菩萨。难道你认为他无罪? 太白金星微微一笑:非也非也,大圣你这么想是再好不过。 悟空微微一愣:怎讲? 太白金星道:既然小雷音寺众人无罪,这桩事总也需要个了结。你是观音菩萨保举,若说是你玩忽职守,大家面上不好看。西天的意思是,此人擅做主张,引诱唐僧师父到小雷音寺,以至招待不周,发生意外。此人负有不可推卸的责任。大圣你再做污点证人,说他当初也为你指路,并无什么不妥。以至于未曾察觉。 悟空怒道:合着你们就是找我坑替罪羊来了? 太白金星道:大圣,大圣。你不刚刚还主张要严惩此人?如今随了你心意,你又要怎样? 悟空呆若木鸡,不知如何自处。 PS:其实昨天就写完了,拿给霍叔叔看。霍叔叔说,你这类比太绕了。我说好,我想办法改改。结果还没等我改,取经事故联合调查委员会已经宣布了调查结果。再等下去怕是连西游记都要被查禁。所以赶紧出一版,大家凑合看看吧。

三亚潜水体验

Apr 11, 2016 - 1 minute read - Comments

最近去三亚玩了,我就说潜水吧。 水况 潜水地点是在分界州,水不算太好。水下景点一般在深度5-15米范围内,有两艘沉船,一个飞机残骸。小沉船离岸比较近比较浅,水深不超过10米。大沉船需要再游一刻钟,深度15-18米左右。飞机残骸也差不多深度,不过只看到一点。水下危险生物包括狮子鱼 ,石头鱼 ,棘冠海星(魔鬼海星),水母。这次潜导在水下就被水母蜇了,被蛰的还很神奇。他下水就戴了面镜,升上水面就开始痛了,还被蛰在眼皮上。到底水母是怎么进去的就鬼知道了。不过问题也不严重,痛了一会就没事了。 能见度分别比较大。在10米左右有一个明显的分界面。在分界面上,能见度大约是10米左右,下面只有3-5米。从上面明显能看到下面像一潭池塘一样。水底温度21-22度。我去的时候是四月上旬,所以只能代表这个时间点的情况。据说6月前后的时候能见度会好很多,水温也会比较高。亚龙湾和蜈支州的情况据说要好点,不过从我看到的水色来说,估计好不了太多。 洋流情况还好,0.5m/s以下,一般都不构成问题。那天浪在0.5m左右,水面上有点晕。周围潜水环境还行,只是偶尔有人炸鱼,可能有巨响。另外水面上有摩托艇在开,和潜导分开的话,没有SMB上浮会比较危险。 潜店 这次潜水是走的 中仁潜水 的持证fun dive,价格是880两支气瓶。价格包括接送,上岛费用,一顿午饭。还包括了海豚表演门票。但是fun dive来说,根本没时间去看。 BCD,fin,regulator是潜店提供的,他们问了我的身高体重来配fin和防寒衣。不过防寒衣是岛上提供的。我的体型比较大,所以穿了他们最大的防寒服。5mm的,比较适合水况,也很新,估计是穿的人不多的缘故。本来还问了我是否有度数,不过我的面镜和呼吸管是自带的,所以用不到。我还自带了3mm的手套,考虑到这里的水下危险生物,这个举措其实非常明智。 岛上有免费的更衣和冲凉,但是寄包要20元。气瓶是中潜自己打的,一般都超过200bar。但是配重是公用的,比较烂。 我们潜FD是岸潜,水面游动100-200米。DSD有一个平台,跳下去就行。平台那里比较浅,据说在5米左右。 三亚潜水 除了分界州外,我还去了一趟亚龙湾。在那里,我碰上了三亚名产——体验潜水。 下车之后我就看到有人在做潜水培训。仔细看了一下,是一个潜水体验旅游的报名点。名义价格是400左右。我仔细观察了一下,整个点没有任何标志。没有PADI或者CMAS的标。 在我吃饭的时候有人过来拉生意,鼓动我们潜水。我直接说我是PADI的持证潜水员,然后他就消失了。 不做任何评论,大家自己分析。 注意,在三亚海滩上是有打着PADI标志的潜店的,在PADI上也可以查到这家。不要以为我说的是他们。我其实在他们店里休息过一会,听了他们和客户的一些对话,觉得他们做生意还基本不过分吧。