Shell's Home

相册

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

贝加尔湖旅游指南

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 Max: 18, Avg: 13, Vis: 10-20 离岛大约20分钟的位置,10年左右的一艘沉船,已经坍塌了。下过两支气瓶,一瓶能见度一般,10米左右。一支能见度很好,20左右。洋流不大,毕竟下面是好大一条船,可以挡住海流。海洋生物很丰富。有一次还看到了一条鱼正在。。。poop。。。 D Lagoon Max: 14, Avg: 10, Vis: 15-20 能见度比较高,在一个海湾沙滩的外面。内侧是珊瑚礁,外侧是广阔的沙地。鱼类活动一般。 Temple Max: 18, Avg: 11, Vis: 15-20 在离岛的礁石那里,大约也是开船20多分钟。能见度还行。下了两支,其中一支碰到两节左右的大流。生物比较复杂,有一次看到了桌子大的魔鬼鱼。 Outer Reef Max: 15, Avg: 10, Vis: 15-20 本岛的最北,在几块礁石的东侧。下面全是珊瑚礁,能见度还不错。生物活动还行吧。。。可能在这里看到过一条没有尾巴的魔鬼鱼,记得不是特别清楚是不是在这里了。 Romantic Max: 10, Avg: 7, Vis: 10

唐僧被吃了

May 3, 2016 - 1 minute read - Comments

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