Django ORM 里面一个容易被忽略的幂等性

不考虑并发写的情况, Django ORM 的 save 方法也不是幂等的, 而且比较容易被忽略, 比如

def f1(a):
    a.balance = F('balance') + 1
    a.save()

def f2(a):
    a.status = 1
    a.save()

a = Account.objects.create(balance=0, status=0)
with transaction.atomic():
    f1(a)
    ...
    f2(a)

最终数据库里 balance 的值是 2

因为执行 f2 的时候, a.balance 不是一个数值, 依然是一个表达式, f2 中执行 save 会再次对 balance 加 1

避免此类隐藏 bug 的方案是
1). 使用 F 函数更新 Django Model 时, save 以后强制执行一次数据库读取, 即 a.refresh_from_db(), 让 a.balance 变成一个数值
2). save 方法永远都带上 update_fields, 避免更新当前上下文以外的字段, 让 f2 方法提交的 SQL 只更新 status 的值

方案 1 是最保险的, 但个人建议是在大多数情况下, 还是采用方案 2 的编码规范

无中生友,一个感人的瞬间

一个朋友的故事:

疫情期间难免有些人心惶惶,今天是过年以后第一次坐公交车。

踏上公交车那瞬间,身旁挤上来一个耳机青年,看起来有些心急,我没留心,低头看手机时也往前走了一步,和他稍稍碰撞了下。青年有些不客气,“兄弟,当心啊!”,轻蔑的看了我一眼。

我自感不好意思,侧身让了让。谁想一不小心左脚没站稳,捏在手里的手机落在公交车的踏脚上。青年下意识也扫了一眼地上的手机屏幕,“哦?即刻?” 我正弯腰捡手机,没来得及抬头回答,“嗯,我是即刻的开发。”

青年瞬间停下了脚步,等我直起身来,青年已经在身旁用带着暖意的眼神看着我,让我有些诧异,“兄弟,那有个位置,你去坐吧,我一站就下了。”

我心想这位先前的坏脾气青年怎么突然这么客气。“过去一年你们这么辛苦的撑着,太牛逼了”,然后站在那儿等我先往里走。

转身进车厢,惊讶的发现座位上一些乘客不寻常的目光,那些眼神似乎要把我拉向后排那个中间的座位,显得有些隆重。

我怪不好意思的,迎着这么多人的注目,腼腆笑了笑,挺起胸,往后排走去。

车启动了,真是一种奇妙的高级感觉。

裸心,裸心!—— 第一回,意外的造访

我还清晰得记得,曾几何时,有一群君子圣人们多么风光,最后都一败涂地。为什么要当天下第一,陋室的凄凉尚在人间,天下英雄却又开始勾心斗角,这不该只是一场梦

不过这确实只是一场梦,我写的东西纯属虚构,而且越到后面越虚构,少量雷同也都是我刻意而为之。

放假散去后一日,我正在写 API 文档,银子突然和我说要斗文,由微妙的家族冲突引出工作生活中的心魔鬼怪,她开始了一部新的长篇,希望通过和我的竞争得以持续地写下去。我心想,我一个程序员,斗什么文,继续干自己的事情。

晚上静下心来回想 2016 年,自己写了一整年的程序,每天都在盲目的跑,也没有怎么去留意生活。偶尔会写一下日记也不过都是看图说话,比如一起在乌镇看戏,比如租个人才公寓,或者和同事吃了顿桥底辣蟹之类的。而且细细想来,好多屎一样的人,尿一样的事,都被落在角落,需要一些方式来凝结它们,像鼻屎一般飞出去,砸向看热闹的路人们

都说故事来自生活,但如果没有人去提炼,这本百科全书也会变的乏味。过去两年遇到不少奇闻逸事,生活和工作中来来往往好多人物;有些人遇到了觉得相见恨晚,有些人分开了就不想再遇到,有些人值得一天比一天珍惜,有些人需要时时刻刻去唾弃。

我就想 2017 年要有所改变,改变就要从自身做起,做一个生活的记录者。

第一回,意外的造访

2015年12月,刚过中午有些困意,杨浦大桥上车水马龙,这个红色的擎天柱比金门大桥还要多一个车道。桥底下百联滨江 14 楼 40 平米的办公室里,银子,肉门李,我(XD),三人正要出门去,今天的目的地是泰兴路张园的裸心社。

突然银子转身:“等等,我去拿下电脑。”

我站在门口,打开手机看自己写的博客。肉门李顺便去办公室的卫生间里对着镜子捋了捋头发,抿一下嘴唇,随后再靠近些镜子,用嘴唇和鼻子拉一下人中,吸两口气,最后拍拍自己的右脸,开心的出来。“银子,快!”

这个卫生间陪伴我们好多个月了,这是个商住两用的楼,办公室里五脏俱全,因为洗手间和座位实在是太近,平时里面声响和气味的轻重大小所有人都清楚,只是也没人说,肉门李默默的放过一个宜家买来的蜡烛,后来银子也放了个不知哪里弄来的香盒。

如今办公室只剩三个人,团队经历了一次这几年来八零九零一代生活中十分正常的暴风雨,产品「八音盒」做完上线,迭代了三版,开始收费,将要转型做更能赚钱的企业服务;但这时天使干爹给的钱用完了,人自然也走光了,不知道怎么继续下去。

更甚的是,前天房东突然带来噩耗,办公室没法再借给我们,免费午餐的日子总算有了终点,想想也不觉得怨恨,这天终归会来的!

我们这一代人把开一个公司当成一份工作,融资就像认有钱有势的财团和富人当爹,然后诞生无数个创业项目。年轻人有了新的衣食父母,还大大降低了失业率,怪不得总理都支持。但如今我们想明白件事儿,开个成功的公司,愿景固然是不可少,但钱也要趁早赚,工作就得拿钱。

不过还好苦尽甘来,产品收费一段时间下来,一个月的收入基本可以支撑三个人的温饱,有新的干爹看中我们团队还在谈判中,能给新的资助,只是不知要等到何时。我们也很务实,不能等钱完全到位了再开始,接着需要做的就是再找一个便宜的办公室,然后找到志同道合的人,一起把眼前这个更容易赚钱的项目冷启动起来。

废弃的旧式旅店

我们三人一行开着那辆白色的高尔夫就去张园了,车子有些发灰少了半身漆,和目的地的氛围倒是很契合,这儿原是个废弃了一大半的旧式旅店,南非人把它回收了弄成办公室,在沪上独有一番特色。南非人在湖州莫干山有个自己的裸心谷,在上海做的这一切都是对自己内心追求的延续。

电梯直接到 5 楼,墙和门全是刨花木的,稀疏贴了一些壁纸,时不时可以看到曼德拉的头像,房顶穿梭着复杂的水管和电线,用一些简易的白色涂料刷成同一种颜色;公共区域的休闲沙发和懒人座椅错落有致,试营业期间已经入住的几个小团队散布在公共区域里,千姿百态,时常销魂,粗一看有点像大雷音寺里的菩萨使者们,大有倡导快活生活的意思

我们三个喜闻乐见,从没考虑过可以把公司放到这样原生态的地方,心想如果用来工作估计会天天跟放假似的。环顾四周分不出谁是接待访客的负责人,倒是低头一看,过来一条大摇大摆的老泰迪,扑到我的小腿上。我蹲下拿出手机对着它,准备发个朋友圈,银子在一旁拍这边的沙发和墙面。

正好一个同龄的小哥过来了,一口福建话,肉门李习惯性的抿一下嘴,拉拉人中,拍拍右脸,“你好我是肉门李”。我抬头笑了笑,没介绍自己。

小哥带我们一边参观一边介绍,随后就讲到了试运营期间希望招募团队。肉门李在旁边附和着,我边走边看手机,顺手拍几张照片,银子在一旁用阿里巴巴搜寻着那些沙发和墙面的批发商。

小哥说目前裸心社还在预热,最初入驻的十个团队可以获得三个月免费试用,提交申请审核过后即可开始。只要项目好,团队看起来靠谱,就没有什么问题。但是团队需要有一定的规模,要求至少是 6 个人。

“对了你们团队多少人?”小哥问道。

“7 个人。”

肉门李不假思索的回答他,接着语气变的严肃,皱了皱眉头,面带思索,

“我们目前在杨浦,那边办公室有些坐不下,最近刚刚看到裸心社,大家都蛮喜欢,所以我们三个人就过来看看。”

我和银子抬起头相互瞪了下,然后我继续编辑发朋友圈的文字,不经意间凑过去看看,银子已经找到了个刨花木墙面的商家在敲打店小二。

后来这件事情就这么定下来,一周后我们将有 7 个人搬进来。临走前我终于把朋友圈的文字编辑完成功发布。银子则似乎成交了一个订单,心情很愉悦,对着小哥暖暖的笑了一脸。

肉门李握着小哥的手,“希望我们能够长期的合作下去!将来我们团队一定可以为裸心社带来价值。”

随后抿抿嘴,用嘴唇和鼻子用力拉了下人中,顺手拍拍右脸,转过身子对刚好走到小哥旁边的运营老大打了个和气的招呼,结下一个善缘。

重新启程

结局很圆满,但是情况似乎有些糟糕,不过反正我们本来也没打算按套路来。我们还只有 3 个人,不到 7 人就得花钱买工位,想要免费试用还得这周再招 4 人。

如今说出去的话就如泼出去的水,毕竟三个月的免费试用着实是比较吸引人,一是可以无成本的体验一番,顺便再看看其他办公室的机会;二是,原来的办公室一周内得搬出,如今有个免费入驻的空间,当然就可以毫不犹豫的确定下来,完全不需要心疼钱。

三个人走下楼去……

“看来今天回去就得开始招人啦。”

“嗯是啊,反正人总归需要,我们比两个月前也好了些,这会儿还有点钱。”

“你是说公司这点屁钱?!!这些也只够两三个人的工资呢。”

“那我们不如自个儿三人吃下苦,平时再拉紧裤带透支一些?”

“那行吧,实在还不够,再告诉新来的人忍一个月,下个月再想法子?”

“酷!”三人异口同声。我们经历过曲终人散的秋天,眼前这一切真是算不了大事。

回来的路途有些不同,天气依然凉,但挡风玻璃的霜已经化光了。不知道路边发生过什么,右后的车窗有些关不上,车子刚刚启动,一阵风进来,就听到罗文和甄妮的声音,银子手机里的歌曲正好循环到「铁血丹心」,十几年前的黄浦江上空是可以看到鹰的,如今却只有霾。不过这些都不影响银子是个自带背景音乐的人,漠不经意的外表下,内心的铁骨侠情应该会吸引不少襄阳人,我心里默默的想着。

肉门李在副座上哼着这曲子,“冷风吹天苍苍……猛风沙野茫茫”。银子在闭目养神。我大脑里一边回荡着帮我们在迈入社会之前彼此间奠定了基情的「陋室履历」和新泽西牛奶的故事,一边迷糊的开着车。眼神越来越迷离,白色高尔夫径直驶向远方,我的思绪回到2014年那个下了场小雪的冬天……

 

次回预告

第二回,银子
银子是一个侠客,2014年底从墨尔本回来,提着行李箱进入我们办公室时,脸上的睥睨还未全部消去,她来上海找一份工作想避避那阵子生活中短暂的暴风雨……

以及次次回们的展望

第三回,襄阳城的然书
第四回,五湖四海的英雄们
第五回,嘿店,我们叫嘿店 ……

 

请继续关注 @鬼骨孖
?花重锦官城

一个神秘的熟人,回忆2009年冬天伦敦大雪

2015年要从已婚的老徐,回国的门飞,生娃的马原说起。这三件不算什么大事,只是在2014年初写第一篇博文的时候,这三件事情在我看来是不可能发生的。尤其是在旧金山叱咤风云的门飞居然选择精忠报国。然而好多时候都是这样。

如果说2014是变化中的一年,那2015年就是人来人往的一年。看看人家八音盒,年初时候才华横溢的银子、骁勇善战的秀佳和的钢筋铁骨的张扬,三人的加盟无疑是贵司的第一场胜仗。

上周和门飞第三次一起见到娜塔莎,话题一如既往的无聊,但也好歹说到好多往事。六年过去,数不清的喜怒哀乐。当晚我没回家,在门飞家过夜,一起怀念大学里的游戏,大学里的程序,还有大学里的MM们。他说我明明可以靠脸吃饭却要拼实力,我笑着推开他,说他还不是一样,三番霸主选择回到故乡曲线救国。

于是睡了过去。

梦里回到六年前冬天的伦敦大雪,纪念毕业后失而复得的基友情

一、雪中送炭

晚上9点,我和OO在GTalk上研究一个新的卷发棒,那时候我长发。突然我合上15寸的ThinkPad,门飞从芝加哥到伦敦的飞机已经降落在希思黎机场很久,两个小时后他要转飞到巴黎。坐着小火车 RER B 驶向戴高乐机场的路上,我有些按耐不住心中喜悦,四个月前来到巴黎以后我还是第一次回去机场,车上来要钱的乞丐我都是丢一把硬币给他,当然是小额的。

只是人算不如天算,那夜欧洲的雪真大,到了机场发现伦敦到巴黎的航班“意外”延误,起飞时间只有上帝知道。我盯着 Arrivé 巨屏,一列红色的标记,也联系不到漫游中的门飞,只好悲愤的一个人回家。坐着 RER B 离开机场,意外遇见那个乞丐,他见我这神情也丢给了我一把硬币,自然也是小额的。

晚上11点到家后打开15寸的ThinkPad才看到门飞在GTalk上的消息,他终于坐上了飞机,在跑道上排队起飞。维珍的空姐说他们是第一架,这意味着除非当晚航班全部取消,不然我得赶紧再去戴高乐。我想了几秒,合上15寸的ThinkPad,第三次坐上 RER B,又遇见那个乞丐,只是打了个招呼。

到戴高乐机场已是次日,我沮丧的盯着 Arrivé 巨屏上的 Annulé (Cancel)。我有点想咆哮,看来门飞铁定要在英国过夜了,那晚在跑道上排队的第一架飞机也没有起飞。希思黎在山上,不,希思黎现在是在雪山上,上面的人们担心无法离开那里。英国人很懒,下雪连地铁都要停。

我第二次坐着 RER B 回家,没见着那个乞丐。估摸着他也是要去见一个重要的人。

那次OO和门飞就这样戏剧性的见面了。听说只是聊天小憩,时间过的很快,没发生什么事情。OO说过,分手就要有个分手的样子。

二、弃暗投明

事情是这样的。

大学毕业以后陋室的一群人以及各种“陋室履历”中提到过的人们都各奔东西,还没有从毕业季中回过神来,就开始去迎接新的生活,适应新的环境,认识新的人了。有很长一段时间,我们这群大学里平日朝夕相处的差生们几乎没有联系,就偶尔分享一些“大事”,也都是两三句话掠过。

那段时间,除了各种君子圣人的离去我们毫不在乎外,我还很不情愿的看着那些一起学过法语,一起踢过足球,一起玩过游戏的人们渐渐远去,第一次觉得淡如水的君子之交如此脆弱。包括门飞与我,突然话就变少了。

这还是多亏了OO,她要离开门飞,门飞和我才找到新的话题。他要弃暗投明,不再用以前的方式对待自己喜欢的人,虽然我说的方式最终还是不管用,但彼此的关系似乎变的微妙。

门飞其实本是用圣诞假期去英国找OO挽回这段十年断断续续的感情。09年春天是门飞最得意的日子,远在英国的OO又回到他身边,在上海一起度过的四十天里夜夜笙箫载歌载舞。可是过了毕业季,#告别纯真的年代#,一切都随风飘散。我们无法评头论足,无论是谁任性,总之OO宅在家里不见他,无奈之下无依无靠的门飞只好选择在巴黎过圣诞。

但伦敦的机票已经买了,于是问飞自作聪明地决定,先到伦敦,再转机到巴黎。然后“意外”的被困在希思黎雪山上。

三、漫漫朝圣路

万万没想到我和门飞最终还是在巴黎相遇了。

他战战兢兢的从机场出来,一副和我很熟的样子,用熟悉的新疆口音叫了我一声XD(chă dí),我一脸笑容,内心其实平平淡淡,见面了以后反而一点也不激动。我其实都没怎么睡,而且还是翘课去接他的。那时候的学校可严格,翘课次数多了,会被大胡子和笑面虎轮番指责罚站,还会被威胁下学期学校不给房子住,总之让你生不如死,就差没有拿着枪顶住脑袋。

回到市里,带他去学校食堂讨了一个火鸡吃。狼吞虎咽的吃完,决定改天自己做饭。

圣诞节我们选择在诺曼底的米歇尔山度过,天主教的圣地,聚集着大量信徒和日本人,雨季会被大海包围,不愧为欧洲第二古堡。到达当晚两人就要了一斤牛肉和一碗红酒,泡着一起吃。

次日听说弥撒结束可以吃饼干,得很虔诚才能吃到,我们自然是很虔诚,在复旦养成了有便宜就占的习惯。那次是耶稣诞生礼,门飞低着头,我跟着他,主教往那个白发的法国老奶奶嘴里放了块饼干,为她祈福,接着是英国的一位大伯,日本的一个阿姨,随后是门飞。在主教面前,他很谦恭,低下头,表示礼貌或者想表达尊重,顺便双手合十,显得很Zen,主教注意到了。

最后我们什么都没吃到,主教大人只是给我俩祈了个福。走出教堂,遇见那位英国大伯,他指着台阶尽头的圣经,两眼深邃,告诉我们,这是一条很长的路。我和门飞互相看了下对方,又看了看那台阶,大概100来步,有些疑惑,又不敢走上去,毕竟这是一条很长的路。

在天主教徒们深情的毫无想念的目光中我们离开,去寻找更开心的事情。下一站圣马洛,一个不列塔尼和诺曼底边境的海上卫城,门飞都对大海充满敬畏,他喜欢一个古代的水手,叫路飞;我不大了解大海,尽管我是海洋生物进化来的,在两年后到南法工作之前都没见过大海,我喜欢一个过气的剑客,叫银时。银时和路飞将在圣马洛遇到一个心仪的人,一家生蚝店的北方姑娘,我不知怎么开头,老蔡忘了教我如何搭讪餐厅女服务生。用老蔡教我的那招,不管听不听得懂,把你会说的全部说出来。

我指着隔壁桌的大盘子里的一层生蚝,一层牡蛎和蛤蜊,一层不知什么虾,问姑娘要了份一样的,还加了两杯阿尔萨斯和苏玳的白葡萄酒,可是考虑到手头拮据,我们实在也没法在点菜这事上和姑娘消磨时间,只好拿出电脑问她Wi-Fi密码,顺便借了个电源(其实没法用)。最后看姑娘大概要招待别人去,我追问了下,“我需要帮助的时候应该叫您服务员还是小姐或者直接召唤您?”,姑娘不太冷,又陪我们扯了好一会儿。

两天后我们回巴黎,中途偷懒不想转车,好好的旅程瞬间成了逃票,情急之下,在挂着铃铛的查票员走进车厢的那一刻,门飞与我箭步钻进距离最近的两个洗手间,他还不忘带个电脑,半小时才出来。免去了一人两百欧元的罚款,这笔钱,都可以给生蚝店的姑娘买个首饰了。呵呵呵呵。

四、香槟酒的味道

2009年接近尾声,相比两年后的芝加哥,巴黎这次不是我和门飞最水的跨年,却是最香槟的一次。我们说过要自己做饭吃,据说是为了纪念我们第一次单独度过的圣诞和新年。超市里买了瓶最便宜的香槟,一篮最便宜的食材,偶遇了一个巴黎姑娘,直接把生蚝店的服务生忘在脑后。

下厨前在楼下先开酒,整理好厨房,准备好刀具油盐荤蔬,擦干净桌子,门飞开始卖弄。这大概是第一次亲自体验他的厨艺,曾经我们陋室一群去他家都是母亲下厨,门飞的手艺自然是和母亲学的,是母亲教授郝爽姑娘的时候他偷偷记在了心里。母亲很心疼门飞,不让儿子下厨,帮他在美国订了学校最好的 meal plan 让他每天都觉得不吃撑就很亏的样子。

饭后我怀揣着半瓶酒跑上楼去,大概是摇晃的太剧烈,盖子有些按耐不住,我竟没注意,直接塞进冰箱。一会儿还要去跨年。

吃完饭不久门飞就饿了,还好他卖弄了半天的饭菜还剩很多。上楼的时候觉得有些不对,脑海中浮现出一个不太清晰的想法,又回忆起几十分钟前楼上的一声巨响,我越来越心急,那个念头也越来越清晰,脚步越来越快,两步变一步,窜到楼上,跑进厨房,伸出手够到冰箱门把手的一刻我感觉自己已经看到了。

香槟不会喷了吧。

对,它喷了。而且它和整个冰箱里的奶酪们,水果蔬菜们,啤酒面包们,还有没吃完的饭菜们,一起开了个派对。它们开心了,这可是个公共冰箱,我第一次见到各国食物如此酒池肉林,冰箱门上的瑞士奶酪还滴着水,番茄被洗的很干净,没有用保鲜膜盖上的米饭有点酸,牛奶盒的开口也涨开了,真似博物馆奇妙夜。

我让门飞上来,然后大笑,最后咆哮,这酒花了我们一张南下火车票的钱,如今被挥霍了。我们各自用手抹了抹冰箱的隔层,塞进嘴里,好酒!又抹了抹,门飞貌似想把头伸进冰箱去,我一把拉住。好久才抹干,两个人是真的感觉有点醉了,红着脸,拿着一些香槟味的食物离开。

五、没有颜色的铁塔

饭后要去跨年,门飞和我带着一身酒气来到战神广场,再走两百步就是铁塔,我们显然还没有完全从一小时前冰箱的狂欢派对中醒过来,接下来迎接我们的将是另一场香槟的盛宴。

几天前我们来过这里,想上去埃菲尔看看,只可惜人山人海,我们到的时候,铁塔底部已经是呼一口气都会让旁边人的眼镜蒙上水雾。每个电梯下足足有大概50人在排队,我们略郁闷的随便挑了一个队伍跟在最后,准备思考如何消磨接下来这段时间。静下心来还不到10秒,后方就传来焦躁的指责声,犀利的骂声,有一些话完全听不懂,却也能够理解。抬头一看才发现我们其实插入了一个有秩序的四折长队的前头。事实上,每个电梯下至少有200个人在排队。最终我们选择走远一点拍个照片留念。

今天铁塔不开,不给上去,因为是跨年,据说会有烟火,还会有灯光秀。每一年元旦CCTV都会用两分钟时间循环播出世界各地迎接新年的镜头,一直以来都很华丽的大本钟和伦敦眼令人印象深刻,而埃菲尔铁塔似乎每年也会露个脸,我们迫不及待地早早就占领了战神广场的制高点,后面是7个美国人,带了一瓶香槟。

临近12点的时候,这7个人有些兴奋,开始祈祷狂欢,把一个哥们推向中间。他举起香槟,穿过我和门飞中间的空隙对着孤零零的铁塔,大叫一声新年快乐。瓶塞很卖力的飞向人群,随后的香槟就像吐唾液一样喷出一点,没有弄湿任何人,就是地上有一片,扫兴了大伙儿。这哥们儿忘记开启之前摇一摇,老天保佑,他们只有一瓶香槟,可以同我和门飞一起郁闷的等待烟火和灯光秀了。

六、Au Revoir

新年就这么结束了,没有惊喜,没有留念,除了这篇文字和香槟的味道。

铁塔在零点的时候开始闪烁了,不过和日常的整点闪烁没什么区别。铁塔周围根本就没有烟火,几万人聚集在这里大概多数人心里也没数,在巴黎,大家每天都在期望惊喜出现,也偶尔会盼到一些,但今天没有。有好些人不甘心,拿出自带的烟火在空旷处点燃,算是给这个平凡的跨年夜带来一些惊喜。

数万人久久不愿离去,哪怕只是这么点零星的烟火和毫无诚意的灯光秀。大概回家了也没事干。

第二天我打开CCTV,看到“全世界人民喜迎新年”,看到熟悉的镜头,有闪烁的埃菲尔铁塔和零星的烟火,拍得特别好,场面看起来还挺壮观的。大概每年都是这样子的,生活在城市里需要怀着一颗感激的心,哪怕铁塔下没有大本钟上空那样绚丽的烟火,各种肤色的人们带着各种口音聚集在一起平安的跨年,这个城市也是尽力了。

新年门飞要回去伦敦和OO看皇家芭蕾舞团的演出,他这身装束能不能进去还不一定,我们回头再聊。

#后记#
刚写完此文不久,被告知爷爷辞世了。香格里拉的藏人说,人离开为了活着的人更加安定,而活着能让逝去的人更加安详。最近没事就不要来关注鬼骨孖的博客了。

©鬼骨孖 http://blog.ukisama.com

六年以后,让我们再来谈一谈陋室

再过两天就是结婚纪念日,一年前的今天,我拿着马姑娘的卡去理发,出门遇上春风,便在隔壁讨了一杯美式喝,透过玻璃门看到半透明的自己,依然很年轻。结束蒋董事长的电话,咽下最后一口咖啡,踏上回家的路,准备两天后的婚礼。

这一刻好熟悉。

事实上九天前,我写了个网页,未婚妻(我戒指已经买了)设计的,我编码的,叫做“QiQi & XD‘s Wedding Ceremony”,几个月后这个网页被估了个值,还挺高的,然后有了个公司,随后有了第一个办公室,来了第一个实习生,走了第一个男员工,来了第一个女员工,直到今天。 

我希望,待会儿一早起来,拉开窗帘,阳光不冷。这是我印象中2015年第一次连续的温暖日。我已经好多天没有在凌晨三点前睡觉,嘴角溃疡,三个月不见好的左脚还抽筋了一会,即便如此也没有做噩梦,倒是前些日子一篇文中的“睥睨”两字让我丢尽颜面。银子,公司里年纪最大的设计师,她眼中关于我“学富好几车才高好几斗”的美好印象再也没有了,我失落的回家,在萧索的长阳路上,迷迷糊糊的撞飞了路边一个疑似阿根廷球迷的姑娘,心里爽快了些。

打开 Day One (这是我第二次在博客中植入它,也是仁至义尽了吧),重新打开 Day One (第三次),写不出字,这么丢人的一天,我不想写进日记。我想写博客。

那么,时隔六年,让我们再来谈一谈陋室。

从去年九月至今短短半年,办公室里人来人往,但六年下来陋室的人数并没有变化,没有孩子生出来,也没有人去世,顶多就是平时的合照里总是缺几个人,有些让人伤感,尤其是内心细腻如姑娘般的范老版。

来细数一下这些人吧。

问飞,对美国绿卡不屑一顾的他,三个月前成功得从硅谷一家跨国创业公司退出并套现,回国继续自己的梦想。正式成为互联网时代的个体壕户。他一如既往地当我是最好的朋友,只是我从来没有把他当朋友。 

范老版,家境本来就不错,目前在新加坡,叱诧于金融圈,手握多项来自澳洲和加州的核心技术。他是个念旧的人,他把我们当朋友,我们倒是宠辱不惊。 

徐云峰,也就是老徐,百度资深科学家,有个聪明漂亮高学历的老婆,在上海有两套房。一年前趁他还没结婚的时候很幸运的请到他当我伴郎。他倒是没变,一直是我最好的朋友,只是他从来没有把我当朋友。 

小猴,他的家境比范老版还要好,目前是海外名校MBA,在全美最有前途的MBA院校中排名第二,一向低调的猴子对于这样的成长环境已经非常满足,他是老徐的挚友,但是并没有出席老徐的婚礼。

鬼骨孖,也就是我,以前叫XD(chā dì),如今和一个来自西北的民族企业家在上海滩厮混,是陋室群体中收入最低的一个。

王东,他在老徐婚礼当天中了个大奖。

以及一些君子,看客,匆匆路人,日后再提。 

感觉大家混得都不错呢,一个楼里出来的,朝夕相处,一样的老师,一样的专业,一样的文凭,一样的女人,一样的梦想,但是毕业以后就分道扬镳,QiQi早说过我们这群人是酒肉朋友。即便如此,我们也不希望自己如同君子正人般脸上一套心里一套,我们恨透了四大皆空的毕业季,酒肉就酒肉罢,至少都是成功人。表面上看起来成功,内心一样很成功;上文中描写的很浮夸,现实生活中还要浮夸。

大概40个月前,我合上电脑,用一句“献给下一次重逢”结束了《陋室履历》,时间定格在2009年6月最后一天。但是好像事情就这么结束了似的,我一直不甘心。

所以我想写一个《陋室履历》的续,把过去五六年的故事用通俗的简体中文表达出来。 

既然前日在西子湖畔问飞把一段一万五千字的自白给了我,那不如就从2009年12月,他在伦敦遇到的那场大雪说起吧……

有事没事请关注 @鬼骨孖 的博客。鬼骨孖有个习惯,不喜欢用“地”,从来不用“得”,只用“的”,自恋并持久腹黑。

通过眼前的浏览器,我们看到全世界 —— 谈谈网页开发

本文献给正在寻找工程师的伙伴们,和即将开始工程师生涯的少年们

好久没有在ukisama上面写自己擅长的内容了,截止到今天凌晨,互联网上已经有大概6亿8千万张网页,而且依然在迅速增加。今天就来严肃地展开一下网页工程师的话题吧,关于他们的工作,关于他们的职业;关于HTML,关于Python;关于浏览器,关于这个世界。

周围有一些朋友的孩子也快要诞生了,将来可以考虑做个网页工程师呢~

每天的我们,在(还算)安静的办公室里,面对着电脑屏幕,忍受着窗外的喧嚣,随手点开浏览器,输入一段URL,敲下回车键。有没有这样的体验,网站瞬间被打开了,高质量的内容,干净的布局和优秀的设计让你过目难忘。感到吃惊是吧?这一切都归功于一类人,网页工程师,所谓的 Web Developers 们,他们不仅负责网站的搭建和网页的编码,还负责各种测试分析,以及一切和网站相关的维护。

如今网页的重要性毋庸置疑,在商业上,好的网站已经是企业保持竞争力的重要环节。伴随着网页开发技术的日新月异,优秀的网站层出不穷,网页工程师对于自己的工作已经不能有半点马虎,成为一个好的网页工程师也没有任何的捷径。

但问题就来了,正在频繁迭代产品的苦逼创业者们,应该寻找怎样的网页工程师呢?想成为网页工程师却只是刚刚试水HTML和JavaScript或者刚刚开始了解Python和Ruby的童鞋,又应该如何规划自己的技术之路呢?

登录过智联前程大街猎聘周伯通拉勾等等网站,浏览过各类工程师在线课程,接触过网页工程师相关的招聘和应聘的,应该不难发现一个趋势,就是这群人被集中分成了三大类:

前端工程师,后端工程师,全栈工程师

一个一个来说吧

 

1. 前端工程师 Front-End Developer

 

和用户发生交互的那一部分叫做网页的前端,说白了它就是你在浏览网页时可以看到的所有东西,字体、颜色、导航栏、下拉菜单、滚动的图片,等等等等,这一切都是由 HTML + CSS + JavaScript 拼装而成,在浏览器的渲染下变得井井有条,很神奇的!

 

相关技能和工具

 

前端工程师主要负责网站面向用户部分的代码,以及用户体验相关的架构。一个前端工程师必须熟练地掌握三门基本的语言:HTML,CSS和JavaScript。除此之外,前端工程师还应该熟悉一些样式框架比如Bootstrap和Foundation,和逻辑框架比如Backbone,AngularJS和EmberJS,这些框架确保了网页在不同平台上的质量和稳定性。最后还应该能够熟练的使用一些基本的工具库比如jQuery和SASS/LESS,这些能让开发更加高效,代码更加优质。

另外,很多招聘文案中都会要求求职者有Ajax的开发经验。Ajax技术使用JavaScript默默地和服务器通信来动态加载网页内容,以实现无缝的浏览体验。虽然这不是所有网站都必须的,但这也可以算是前端工程师的基本功之一,毕竟Ajax技术如今也越来越多地被应用到了网页中。

有了前面说的这些技能,前端工程师就可以很好的和设计师合作,和用户体验分析师合作,把草图和原型开发成成品。牛逼的前端工程师还能精确的发现用户体验相关的问题,给出建议和解决方案,用代码来增强设计。一个好的前端工程师还应该能够和业务人员流利的沟通,明白他们的目的,理解他们的需求,了解市场上的机会,并且顺利地执行。

总之在后端工程师造好屋子以后,前端工程师主要负责房屋的内饰。至于房屋的类型和品位,这就取决于房屋的主人了。相比于后端,前端工程师一般来说更加满足于自己的成果,毕竟这是一份技术和创意相结合的工作。经验丰富的前端工程师不仅是一个技术人员,不仅是一个Geek,因为他不仅实现了用户可以看到一切和可以交互的一切,还致力于给用户留下过目不忘的印象,所以他也是一个视觉达人。

 

那我们看到的网页是怎么来的呢?

 

再补充一下这个很多人都关心的话题吧,在网页开发过程中,设计师绘制Logo和图像,摄影师拍摄照片,文案编写文字,最后由前端工程师把它们组装在一起,用网页向我们阐释所有内容,用网页向我们提供独一无二的体验,把我们在网站上看到的所有内容变成可能。

体验一下? 点击打开 http://wedfairy.com 向下滑动页面的过程中上面的 八音盒 导航栏慢慢出现,把鼠标移动到“八音盒故事”的某个案例上面或者用手指按住一个案例,标题就会出现,这些都是前端工程师的功劳。

 

2. 后端工程师 Back-End Developer

 

新的问题来了,网页上的数据存在哪里?API又是什么?

就像一间没有造好的屋子,光有室内装饰还是远远不够的。于是我们还需要后端工程师。网页的后端包括服务器,应用程序,以及数据库。这些组件相互作用,使用API和前端通信,确保了网页前端的存在。后端工程师的主要工作就是搭建和维护这些组件。

 

相关技能和工具

 

相比于前端开发,后端开发的技术和工具比较多元。为了实现服务器、应用程序和数据库三者之间的通信,后端工程师通常使用Python,Ruby,PHP,Java,.Net等语言来编写应用程序,用MySQL,Oracle,MongoDB来查找、存储和修改数据,然后把它们部署到服务器上来为前端代码提供支持。在实际工作中,后端工程师至少需要掌握一个开发框架,比如PHP的Zend和Symfony,或者Python的Django;还需要能够熟练使用版本控制工具,比如Git和SVN;以及了解Linux开发环境。这些看起来比前端开发枯燥多了!

后端工程师需要使用这些框架和工具来为网站编写优质的代码,有可读性,可移植性,有完备的文档。然而和前端工程师一样,在开始埋头编码以前,后端工程师需要和业务人员充分沟通来理解他们的感性目标,将其转换为技术需求,提出具有可行性的有效方案,来搭建技术架构。

优秀的后端工程师同样热爱自己的工作,沉浸在后端的他们从来不觉得无聊,反而乐在其中。他们喜欢玩弄数据,编写出有用的API,按照不同的权限分配给网页前端、移动应用和其他系统,让前端工程师可以安心的沉浸在交互和布局中。通俗易懂的高质量的API受人尊敬,这就是后端工程师的价值所在。

 

我们怎样才能感受到后台的存在?

 

点击 http://qidlove.com 打开婚礼邀请函。此时 八音盒 的服务器会把信息发送到你的手机或电脑中,然后变成你所看到的内容。这就是后台工程师所做的事情。如果你向下滚动屏幕到最后,留下自己的姓名和祝福,点击发送,别人就可以看到你的留言,下一次你再打开这个网页,留言也不会消失,这些都多亏了后端工程师啊!

 

3. 全栈工程师 Full-Stack Developer

 

说到这里,首先要明确一点,前端开发和后端开发并不是黑与白的区别,前端工程师和后端工程师之间也没有恐怖分子和反恐精英这样子的暧昧关系。在目前的经济形势下,在这个资源紧缺的市场环境中,前端工程师往往需要学习(至少了解)一些后端开发的技能,反之亦然。产品开发有很多通用的规则,跨越了前后端的界限,于是我们开始寻找一种通才。

它的由来?

全栈工程师自然很早就存在,但是“全栈工程师”的叫法诞生于Facebook的开发部门。四年前,有一类特别的人群被挖掘出来,他们的工作内容涉及到了技术架构(技术栈)中的每一个环节,包括前端和后端,他们可以和后端工程师一样在服务器端玩弄应用程序和数据,也可以使用前端语言控制页面内容和调节用户体验,他们能够提供一套完整的系统。

总之,全栈工程师是网页开发的全能战士。

感觉很酷是吧?成为一个全栈工程师,同时精通前端和后端开发,无形之中给自己的职业生涯创造了很多机会。不过也别高兴得太早,就和烹饪一样,有人更擅长热菜,有人更擅长甜点,精通两者需要时间和经验。妈妈的手艺可不是一日炼成的,更不是简简单单的按照食谱来做就行(事实上很多工程师依然在这样错误的做着)。一个好的全栈工程师和一个好的大厨一样,需要有自己的内涵,需要有所有的烹饪原料,需要掌握所有的方法,才能奉献上一顿完美的晚餐。

 

相关技能和工具

 

全栈工程师需要掌握的技能相对复杂,甚至有些主观,因为这不仅仅只是技能相关的需求,而且随着时间的推移,人们对于他们的要求也在一点点变化。除了要根据不同项目掌握前端和后端开发的相应技能外,全栈工程师还需要充分理解网页正常运行的每一个环节,不仅包括合理的服务器配置,规范的API结构,还要通晓JavaScript的哲学,以及CSS背后的设计情怀。

举个栗子,现阶段一个典型全栈工程师的装备,HTML5/CSS3 + Scala + MongoDB + 云服务 + JavaScript

有了知识和技术,就还差经验了,这也是最后一道门槛,全栈工程师尤其需要能够在一个项目面前,快速地定义前端开发和后端开发的职责,分析各种解决方案的优势和劣势,最终选择最合理的执行方式。

 

老问题,作为用户如何感知网站背后的全栈工程师?

 

这个我真的说不出来了,自己去感受吧,页面加载需要多久,内容布局是否专业,交互体验是否自然,等等等等。

最后说一句

不要迷恋全栈工程师,任何时间,任何场合,都有一个“大而全”和“小而精”的选择,好的网站从来都不是一个人的功劳,不要忽略了设计师、摄影师、文案、产品经理、客户经理、销售、客服、用户、以及其他所有直接参与和间接参与到网页制作中的人们。识别优秀的工程师也并不一定只是技术层面的事情,无论是前端、后端还是全栈,工程师的自我修养还需要包括对细节的关注,自主学习的速度,解决问题的效率以及良好的沟通能力。

 

又该说再见了

 

如果你是个网页工程师,那么恭喜你,你现在最不需要担心的就是找到一份称心的工作,因为至少你可以来我这里,把简历扔过来吧 jobs@wedfairy.com 哈哈。事实上接下来五到十年是网页工程师最好混的时期了,HTML5终于定稿,五花八门的屏幕的出现,跨平台应用的需求越来越高,微信至少还火热着,加油啊!!!

有事没事,请关注这里 @鬼骨孖 的博客 http://blog.ukisama.com

为每一天都打上标签 — 鬼骨孖谈八音盒

肉们李在六月中的时候就提醒我要写一篇软文来介绍一下手头的Wedfairy,但其实我从来没写过那种文章,然后没多久以后“@美位网 目前为止虽然已经离职但是依然是至今做的最久的全职的商户拓展”提醒我要发一篇blog来表现的高调一点,后来我的日记应用DayOne开始每天提醒我要充实自己的生活一定要和以前一样每天记录一点文字。

 

就这样子三个月过去了……9月份发了一条朋友圈消息询问婚礼着装,居然获得了“自从开通朋友圈以来最多的留言数量”,来自世界各地有些熟悉有些不熟悉有些差点忘了名字有些一辈子也忘不了名字的人都来为我“出谋划策”,我意识到这真是一个好兆头啊。

 

9月底Wedfairy产品上线,刚刚登上CEO宝座的西北人肉们李回天水。第二天,另一个创始人西北人小钊来办公室,主要是来和我说左姑娘和默姑娘的故事,随后我发现自己从零时区到西八区的各个朋友圈终于被打通了。接下来我要为五湖四海的你们讲一下我自己的故事。

 

10月份去三番原本是为了接一个基友回来一起在上海把Wedfairy做好。我原以为自己说教的功力还没有减弱,基友笑了,他说他要十一月自己一个人回来,连自己的妈妈也不告诉。我觉得在硅谷待久了真的会变的莫名其妙,还是加入我们好。

 

到目前为止,已经打了三个广告(具体是哪三个可以在八音盒婚礼邀请函公众号里留言,答对没有任何形式的奖励)。

 

Wedfairy有一个老派又时髦的中文名字,八音盒,他还有一个修饰语,“会讲故事的婚礼邀请函”。这是继大麦盒(还记得华盛顿的那盒牛奶吗?)以后又一个出现在本博客中的产品,于是“盒子计划”已经完成了三分之二。八音盒倡导婚礼邀请函中的主角都是新郎和新娘最真实的自己,每一场婚礼背后都有数不清埋在主角心中很久的故事,所有故事汇集在一起就组成了这张独一无二的婚礼邀请函。所有使用八音盒制作婚礼邀请函的人们都在向全世界宣告一条充满正能量的信息,它看似短暂,却是永恒。它影响到的范围远远超过了新人的想象,它让人们越来越热衷于去发现生活中的美好,乐于去表达自己的快乐,与全世界每一个角落的小伙伴们一起创造一张最有创意的地图。

 

事实上现在Wedfairy的人就是这么工作的。

 

1. 离开自己的公司

Wedfairy现在的总人数是个质数,除了两个85后,其他都是兼职,他们来自上海,北京,深圳,旧金山,巴黎,新加坡,但是他们一个一个接着一个一个的离开了或者准备离开自己原来的公司。

但这不代表我们已经满员了,如果你想加入我们,请猛击这里 http://wedfairy.com (或者点击下方”查看原文“) 讲一个自己的故事,然后告诉我们。如果你在上海,很幸运你可以直接过来,沿着黄浦江游到北面,我们在杨浦大桥脚下,看着红色的桥身会有种在旧金山的错觉。如果你不在,你最好选择环保的交通工具过来,我们报销路费和住宿,以及其他服务的费用(哇哈哈~)

 

2. 每天做一件可以写进日记的事情

古人鬼骨孖有一句名言,翻译过来大概是说,人写日记,不是为了把本子填的满满的,而是为了督促自己把生活填的满满的。我觉得很有道理,于是我们大家都这么做。KickStarter上有不少项目,它们设计和产品做的很不好,但着实可以打动人,其中一个叫做 One Second Every Day,这些作者们被放大的理想就是我们拿来约束自己的底线。

无论是郁金香血洗斗牛士,还是陪着人家的女朋友吹海风,或是发现办公室突然多出来一百箱水,这些都是值得被记录的事情。

 

3. 为每一天都打上标签

我们在为别人谱写故事,就要先让自己的生活充满故事。除了每天喝水走路呼吸空气,还有什么可以督促自己把生活填充的满满的呢?

创始人用自己的故事感动了身边的人以后,又开始倒弄了。他(其实就是我啦)正在和自己的妻子执行一个神秘的计划,Count The Day

他们的一周是这样子的:

周一是 Free Day 随便做什么
周二是 Cooking Day 必须回家做饭吃
周三是 Walking Day 要出去散步
周四是 Reading Day 晚上要看书
周五是 Low Carbon Day 要坐地铁上下班
周六是 Running Day 要去跑步
周日是 Explore Day 要去任何一个以前从没去过的地方

事实上,天变冷了,他们最近并没有好好的执行。

 

4. 自己的事情自己做

Wedfairy的每一个人每天都在创造着故事。自己的事情自己做,不光是工作上的,还有生活上的。大家把责任看作是保证整个团队充满能量的必要条件,我们因此感到自己无比幸运。尤其是在我们这样扁平化管理的团队中,生活琐事的主动分担让每一个人都能真正感觉到自己工作在一个轻松快乐的环境中。

我们每天早上轮流去楼下的全家便利店带最便宜的咖啡,每天下午轮流下楼穿过庞大的广场舞团体去体验最本地化的生活。我们喜欢分享同一个批萨,也明白在绿茵场上各司其职。

事实上,一段时间以后,等到团队越来越完整了,CEO的首要职责就是每天打扫卫生了,这可以让我们的生活成本大大降低。至于拿着最低工资的CTO?他负责做每天一百万次手动点击的“猴子测试”,以及在这里发博客。

 

5. 消除一切干扰

我们一直在寻找一种方式,让自己消除干扰,提高整体的效率。回忆起曾经一边看美剧一边写程序,或者一边玩游戏一边画流程图的年代,简直是颓废到了极点。如今变专业了,我们时常展开连续的头脑风暴安排高质量的咖啡时间,这让我们快速的建立起强大的社交和学习节奏,但我们依然想方设法的让自己专注于产品制作。作为初创企业,在我们这个阶段,给自己多一些时间研究产品,给自己多一点机会和用户沟通,对我们来说弥足珍贵,当然也是最好不过的事情啦。

 

6. 保持身体健康

尽管这只是一个生活方式的话题,但保持身体健康不仅仅是工作效率的保证,也是一种对团队负责的态度。尽管有时候我们会从太阳下山奋战到太阳升起,我们也不会一直坐在椅子上盯着50cm外的屏幕,我们杜绝一切背部酸痛,颈椎麻木,眼睛疲劳,体重增加,等等等等让自己的自拍照越来越难看的隐患。

每晚的充足睡眠,每天的步行时间,每周的运动时间,做不到的,不是因为太努力,而是跟不上我们的节奏。

 

7. 别丢了自己的创作情怀

最后的最后,想了解八音盒的诞生,请关注我们上一篇微信公众号文章 >>> 寻找那遗失的创作情怀

 

有事没事,请关注这里 @鬼骨孖 的博客 http://blog.ukisama.com