One day in Bangkok

第一次到泰国,也是第一次到国外,但是这个地方给我的感觉并不太遥远。来之前了解到的泰国仅限于听闻的人妖、看的几部电影《暹罗之恋》、《拳霸》三步曲,还有听过的后摇乐队Inspirative。对这里并无太多的想法。在曼谷呆了一天后,给了我一个很深刻的印象:这是一个真实的城市。它可以有东南亚最大的购物中心之一,国际名牌比我在广州见到的还多,但是也有摆满central world和siam商圈等繁荣的购物中心门口和街道的小摊贩。他们很多小摊贩,但是他们并没有城管。他们街上垃圾桶很难找,路也很陈旧,但是地上几乎不见垃圾。它堵车全球闻名,它也是全球最大的旅游城市之一,但是依然可以看到满街的摩托和凸凸车。在这里看到的这一切都是那么的真实,并不会因为某些外面的因素而去刻意的改造。即使我刚到这里,我也能体会到至少是可以看到当地人的生活。无论是谁来,他们给你的都是真实的一面,这个很难得。

我不敢断言信仰到底对人、对社会影响有多大,但是我觉得这确实是一股神奇的力量,可以让这里的人如此的善良。他们坐地铁坐公交似乎不会抢着挤进去抢位坐,他们可以直接用Google,他们不会赶小贩,他们不会禁摩,就连他们说话的语气都令人感到舒服。不由得让我对我所在的“某无神论社会主义国家”感到失望。社会的风气人的价值观居然要领导来指示,感觉就像由醉酒机长执飞的偏航飞机。

Untitle

想把音乐的声音开尽,然后这个世界就只有音乐了。

Untitle

很久没写文章了,觉得自己的词穷已经由言语表达发展到书面上了。不仅面对人不知道说什么,对着屏幕也很难用文字把自己的想法表达完。懒惰已经从肉体入侵到精神了。

23号恰好入职一周年,最近看到一篇文章,说“深度思考比勤奋工作更重要”,虽然也是一篇被转得到处都是的鸡汤文,但是现在想想自己过去一年里的工作,用这句话去总结再合适不过。入职时的期望是了解下母婴行业的情况,了解下技术团队的组建和管理。目前情况每天都在赶进度和为各种业务上的事情忙得不可开交。一年过去,虽说初衷未改,但似乎有止步不前之感。这里面很大的一个问题就是缺少了尝试和总结。这里尝试不是改if/else,总结不是周报,而是没有去接触到新的技术/领域,没有转化成自己的技能,也没有任何形式的记录。所以后面字多字少不重要,重要的是要写下来。

过去一年自己多了一个身份,期间经历了重重的考验,虽无考量标准和要求,但是慢慢的自己的心态发生了微妙的变化,慢慢的变得现实起来,慢慢的学会做主–意味着要承担责任,慢慢的接受人情世故的同化。理想和自由似乎越来越模糊,又好像越来越接近,只不过理想已不是那个理想:曾经是让自己活得像自己,现在是让自己活得像别人。曾经和好友探讨过:假如我们死去了却没留下任何东西,会不会很遗憾。现在依然对这话题心有余悸。莫说留给后人,自己回头看看过去的人生也是一张黑白照。难道这就是“终其一生也只不过完成普通人的生活”?

迟来的幸福

此时此刻,我脑子里空空如也。这么多天过去了,我只知道那是一种感觉,一种前所未有的喜悦。暂且叫它幸福吧。

算起来恋爱也有三年多了,但我从未去想象过领证那一刻的心情,也没认真想过怎样去扮演一个叫“丈夫”的角色。拿到结婚证的那一刻,脑海里除了喜悦根本装不下任何东西,我迫不及待的告诉我的好友们并接受他们的祝福。我一刻不停的喜悦,以至于我都不知道怎么样把这份感觉告诉我的妻子,以至于我都不知道为什么而笑。

身份的变化似乎并没有带来深刻的影响,我还是我,生活还是那样继续着。但是压力却自己在悄悄地疯狂生长。在家境并不好,自己毫无积蓄的情况下,廿万的首期很多时候都让我感到无所适从,如果单凭自己力量,恐怕我真的无能为力了。幸好,最终还是靠父母解决了。想想,年近三十,不仅未给过父母什么,反而依然依靠他们过生活,实在内疚不已。买房一事,除了经历了一些不愉快的插曲,也让我体会到了社会的现实。首先要感谢我的舅舅们,在自己条件并不宽裕、也是刚刚好可以改善自己生活的时候,却把这个机会给了我,我心里真的说不出的感动,也许是我话拙,我真的不知道怎么向他们表达这种感谢。而现实生活中,除了这种不求回报的无私付出,更多的是多多少少都会参杂着利益关系的打交道。似乎这也无可厚非,每个人都是生活中的一颗棋子,别人不可能为你而改变自己的目的。这里我说的是售楼小姐,我很是不明白为什么她们会这么着急,去到售楼部,从简单的介绍到看样板房,到做置业计划,到下定金,居然想一下子搞定(最后确实是一次搞定了),我以为起码要看几次才会决定的。我说我们回去思考下可以吗,她说现在贷款利率低十月份可能会上升,但她却没有告诉我十月份首期可能会降到25%。而让我很不解的是我当时的女朋友,居然好像也在帮售楼小姐叫我下定金,要知道我父母才第一次来看房的,至今,我扔不知道她当时真正的心态是什么,为此,我们还争吵过。而我那可怜的爸爸妈妈,一个说四点多了走了吧,一个不耐烦的回应自己有车怕什么要走自己先走,一个没有把想回去考虑下的想法表达出来,一个没有领会到。而我,把一切都看在眼里,痛在心里。

还好,挣扎得最痛苦的时候最终还是过去了。生活将会以另一种姿态继续。无论过程如何,我想,是候开始我和家人的幸福了。

摄影入门

一、相机拍出照片的要素

不管是卡片机还是单反机子,要拍出照片,都是这样的过程:被拍摄的对象所反射的光线通过相当于凸透镜的镜头聚焦到镜头后面 的感光元件(CCD或CMOS)上,感光元件接收、记录这些光线信号,通过相机内的处理软件,变成了数码影像。所以,镜头、感光元件和处理器也就成为相机 拍出照片的最重要的元素了。这个跟人眼睛看东西的原理是一样的——被眼镜所看到的东西反射的光线进入眼睛(镜头)后,视网膜(感光元件)接收光线信息,传 输到大脑(处理器),形成了看到的东西的形象。

6be50e3d269759ee9caf9abeb0fb43166c22dfec
所以镜头、感光元件、处理器的质量就从根本上决定了产生的相片的质量(这个质量不是从照片的艺术价值来说的,是从单纯的成像的质感来说的)。
镜头和处理器咱们先不要讨论,先讨论最常碰到的有疑问的感光元件。感光元件现在基本上是CCD和CMOS两种,CCD开发的比较早,CMOS出现的比较晚。关于它们的优缺点,有资料做过比较:
CCD CMOS
设计: 单一感光器 感光器连接放大器
灵敏度: 同样面积下高 感光开口小 灵敏度低
成本: 线路品质影响程度高,成本高 CMOS整合集成,成本低
解析度: 连接复杂度低,解析度高 解析度低,新技术高
噪点比: 单一放大,噪点低 百万放大,噪点高
功耗比: 需外加电压,功耗高 直接放大,功耗低

二、光圈大小、快门速度、感光度

1、光圈。
光圈用来控制透过镜头进入机身内感光元件的光量,是镜头的一个极其重要的指标参数,通常在镜头内。它的大小决定着通过镜头进入感光元件 的光线的多少。光圈大小我们是用F值来表示,其中,F=镜头的焦距/镜头的有效口径的直径。这个数值一般有 F1.0,F1.4,F2.0,F2.8,F4.0,F5.6,F8.0,F11,F16,F22,F32,再上面还有F44、F64。如果你对这个公式 懒得理解,你需要简单一点,那你就这么记:普通相机镜头的光圈大小有2.8一直到32,特别要记住的是,因为光圈数字是个比值,所以这个数字越小,光圈就 越大,进光量也就越大;反之,数字越大,光圈就越小,进光量也就越小。比如2.8的光圈比8要大,进来的光线要多,更容易曝光。
光圈就像人眼睛的瞳孔,在暗光处,瞳孔放大,看东西就清楚了;在亮光处,瞳孔缩小,看东西就不刺眼。同样道理,光线暗的时候拍照,光圈大一点才能让光线多进来一点;光线亮的时候,光圈小一点,能控制光线不过量进来。

a0e2a3039245d688e8f348d1a6c27d1ed31b24f5

2、快门
快门是阻挡光线进来的装置。当需要曝光的时候,就开启一下快门让光线进来。所以要获得合适的曝光,就要把快门开启的时间控制得合适。于是制造相机的时候就要设置很多个快门的开启时间,常用的快门速度有:1
1/2 1/4 1/8 1/15 1/30 1/60 1/125 1/250 1/500 1/1000
1/2000 等(单位是秒),当然还有再快的和再慢的。比如1/60,就是让光线进来1/60秒,1/2000就是让光线进来1/2000秒。在相机上我们看到的往往 就是60、2000这些数字,而不是1/60、1/2000,所以,光线暗的时候,采用的快门速度的数字就要小一点,让光线多进来一会;光线强的时候,采 用的快门速度的数字要大一点,让光线少进来一会免得过度曝光了。相邻两级的快门速度的曝光量相差一倍,我们常说相差一级。如1/60秒比1/125秒的曝 光量多一倍,即1/60秒比1/125秒速度慢一级或称低一级。1/60秒的曝光量是1/125秒曝光量的2倍。

3、感光度
感光度在相机 上标示为ISO。形象地说,感光度就是相机里感光元件对光线的敏感度。感光度的数值一般有100、200、400、800一直到几万,数值越大,对光线的 敏感度就越强。比如,在同样的光线强度和同样的快门速度、光圈大小的时候,感光度设置到800,比设置到100得到的照片亮度要高几倍。所以,在暗光的时 候,如果光圈已经到最大,快门已经很慢(再慢的话手会抖动)的时候,就把感光度设高一点来弥补进光的不足。但是,数码相机提升ISO是通过两种方式实现 的:

(1)强行提高每个象素点的亮度和对比度;
(2)使用多个象素点共同完成原来只要一个象素点来完成的任务。由此可见,数码相机提升ISO以 后对画质的损失是很大的,尤其是感光元件面积较小的卡片机和入门的单反,提升ISO简直就是要命,会产生大量的噪点,所以,在光线充足、光圈足够、快门速 度不会引起抖动的条件下,尽量使用低感光度来拍照。
综上所述,拍到亮度合适的照片要注意光圈、快门、感光度的配合,而感光度尽量设置在低位。在感 光度固定的情况下,就是光圈和快门的配合了。如果要获得同样的曝光量,缩小光圈就要放慢快门,开大光圈就要加快快门。如果发现试拍的照片太暗了,你可以开 大光圈,也可以放慢快门;太亮了,你就缩小光圈或者提高快门。至于是要变光圈还是要变快门,就要看具体情况了,这个问题下面再说。

三、怎样配合光圈和快门

上面已经说了,或者正确的曝光需要光圈、快门、感光度的配合。感光度在光线充裕的情况下设在最低就好了,接下去就讲光圈和快门的配合。

要获得同样的曝光度,采用较大的光圈较快的快门还是采用较小的光圈较慢的快门呢?这个并不是只要两者组合获得正确曝光就了事,还要看所拍照片具体的表达需要了。为什么这么说呢,因为光圈的大小对成像还有一个作用,就是大光圈所得的景深小,小光圈所得的景深大。

先 解释一下“景深”这个名词。当相机的镜头对着某一物体对焦的时候,在对得最准的那个点的前后会有一定的距离范围在我们看起来都比较清晰,这个范围我们就称 它为“景深”。在这个景深前后的东西我们看起来比较模糊。如图所示,开大光圈的时候景深比较浅,只有一小段的距离是清晰的,而用小光圈的时候,景深要长得 多,有好长一段的距离都是清晰的。景深前后不清晰的部分,就是模糊的被“虚化”了,这里我们就引入了“虚化”这个概念。

所以,如果你想拍出虚化程度大的照片,就要用大光圈,此时相应的快门就要提快了;如果你要拍得前后都比较清楚,那就要用小光圈,相应的快门就要降低。什么 时候要用小景深什么时候要用大景深呢?一般来说,拍特写的时候用大光圈,把前后虚化了以突出主体;拍风景的时候用小光圈,使得画面前后通透。其他一般的情 况下,用5.6左右的光圈比较合适,因为同一个镜头,开的光圈大小不一样它成像的锐度也不一样,大部分在5.6-8的时候能发挥比较好的成像质量

bedb0eda81cb39dbfe219d23d2160924aa183085

小内存环境下使用PHP Composer

最近Composer爆出了PHP资源回收机制的一个梗(https://github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799), 也由此才知道原来Composer在安装和更新包的时候会这么耗资源的。

最近刚好在DigitalOcean有台512M RAM的VPS要用到Composer, 执行composer install的时候才发现内存不够,把其他服务(nginx, mysql, memcached)停掉后问题依旧。在快认为小内存环境不能用composer的时候,在DO的社区找到了个帖子(https://www.digitalocean.com/community/questions/composer-install-not-enough-memory),试了下,居然可以了。解决办法居然是给VPS加上swap分区。一直以为Linux的swap分区是必须的,不知道DO的VPS默认是没有swap分区的。

最近看到陈皓在一篇关于C语言的文章里提到的几个理论(http://coolshell.cn/articles/5761.html),觉得印象很深刻,记录下。

1)相信程序员,不阻止程序员做他们想做的事。

2)保持语言的简洁,以及概念上的简单。

3)保证性能,就算牺牲移植性。

我不知道为什么这么悲伤

我不知道为什么这么悲伤
或许我失眠了
双眼支撑着沉重的黑夜
耳鸣在破坏透明的宁静
大脑以高速运转来御寒
心脏伴随时间脚步抽泣
全身上下的每一个细胞
似乎都在向我示威
警告我,休想扔下悲伤!

我不知道为什么这么悲伤
或许我长大了
无虑的天真在故乡的山谷消失
美好的梦想在城市的街道彷徨
孤零零的我,就像下山的猴子
不断地走
不断地扔
不断地捡
不断地,走近悲伤

我不知道为什么这么悲伤
我去过别人的豪宅
我坐过别人的豪车
我喝过别人的喜酒
原来,这一切都是别人的

我不知道为什么这么悲伤
我错过观看红日初升的感动
但还有欣赏夕阳西下的温暖,
我无法体验腾云驾雾的快活
但可以享受脚踏实地的真实,
我失去了无法弥补的时间
但换来了弥足珍贵的人生,
我没有无人能及的绝技
但有独一无二的灵魂

我不知道为什么这么悲伤

2014年12月12日凌晨

一个人

8bc72ed7

我是漆黑夜空中
闪烁凄凄的一颗星
遥隔千里的双眸一遇
看到了,你那藏在泪光里的话
你一个人,
把泪擦干
把话捏在手心
陪着我,承受着黑夜的孤独

Cover from: https://unsplash.com/

根据经纬度实现附近查找

网上找到的几种办法:

  1. 范围查找: blog.charlee.li/location-search/
  2. geohash算法: www.cnblogs.com/dengxinglin/archive/2012/12/14/2817761.html
  3. Mongodb的Geospatial indexes: docs.mongodb.org/manual/applications/geospatial-indexes/
  4. mysql扩展: github.com/lucasepe/lib_mysqludf_haversine

mongodb的Geospatial indexes应该是最强大的,提供了丰富的查询方法。缺点是增加了运维成本,对于不是专门做LBS的应用来说,也是一个问题。

第1,4种方法原理是一样的, 用到了haversine 公式:

  • 第1种算出来的是经纬度范围,然后再以该范围为条件查询数据库,把公式计算放在了应用层。
  • 第4种得出的两点的距离计算结果,可以用该结果来作为返回字段、过滤条件和排序, 但是数据量大的时候无法使用索引也是一个问题。
  • 这里还有haversine 公式各种语言的实现: www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

私信系统的设计

需求:

  • 最基本的写、看、删
  • 删除效果只限于操作者本人,即本人删除私信对方仍可以看到私信记录
  • 会话合并显示,将与同一个人的私信记录合并成一条记录显示

 

数据结构:

mail-db图1.私信数据结构

三个表分别是: 会话表(mail_session)、私信-会话关系表(mail_map)、私信表(mail)

 

 说明:

mail-session图2.效果图

  1. 会话: 用户与用户的关系。
  • 当A发送一条私信给B时会产生两条会话记录:

A=>B (from_uid=A, to_uid=B)

B=>A (from_uid=B, to_uid=A)

  • 用户查看自己的私信列表时,只需查询 会话表mail_session(from_uid=:uid)即可
  • 用户删除自己的会话时,不会影响到对方
  • 删除会话时应该把 会话-私信表 mail_map 的关系也删除,避免冗余数据
  1. 信息:用户产生的文字
  • 当A发送一条私信给B时会产生两条会话-私信关系记录,分别与用户A、B自己的会话关联
  • 用户查看某个会话时,查询 mail_map LEFT JOIN mail (sess_id=:sess_id)
  • 用户删除某条私信时,在会话-私信表 mail_map 上删除相应记录 (map_id=:map_id) 或者(sess_id=:sess_id AND mail_id=:mail_id)即可
  • 发送私信时将最新私信内容更新到会话表的 last_message 字段中,适当的数据冗余简化私信会话列表的查询,可利用程序或触发器实现