Lennakim

I am lennakim

0%

10月9号, 我从北京到了南昌, 离第一次去南昌, 有两年之隔.

Read more »

有时候我回到北京, 无论我失意彷徨孤独高兴, 这座城市用一种无言的方式包容了我.

Read more »

屈原庙赋 – 宋 • 苏轼

浮扁舟以适楚兮,过屈原之遗宫。
览江上之重山兮,曰惟子之故乡。
伊昔放逐兮,渡江涛而南迁。
去家千里兮,生无所归而死无以为坟。
悲夫!人固有一死兮,处死之为难。
徘徊江上欲去而未决兮,俯千仞之惊湍。
赋《怀沙》以自伤兮,嗟子独何以为心。
忽终章之惨烈兮,逝将去此而沈吟。
吾岂不能高举而远游兮,又岂不能退默而深居?独嗷嗷其怨慕兮,恐君臣之愈疏。
生既不能力争而强谏兮,死犹冀其感发而改行。
茍宗国之颠覆兮,吾亦独何爱于久生。
托江神以告冤兮,冯夷教之以上诉。
历九关而见帝兮,帝悲伤而不能救。
怀瑾佩兰而无所归兮,独茕茕乎中浦。
峡山高兮崔嵬,故居废兮行人哀。
子孙散兮安在,况复见兮高台。
自子之逝今千载兮,世愈狭而难存。
贤者畏讥而改度兮,随俗变化斫方以为圆。
黾勉于乱世而不能去兮,又或为之臣佐。
变丹青于玉莹兮,彼乃谓子为非智。
惟高节之不可以企及兮,宜夫人之不吾与。
违国去俗死而不顾兮,岂不足以免于后世。
呜呼!君子之道,岂必全兮。
全身远害,亦或然兮。
嗟子区区,独为其难兮。
虽不适中,要以为贤兮。
夫我何悲,子所安兮。


我最有感触的是这句话, 去家千里兮,生无所归而死无以为坟。离开家乡非常遥远了,没有安身立命之处, 死后也没有人修建坟墓.

今天是来到北京的第七个年头, 整整第七个, 这里已然成了我的第二故乡, 老家相距不远, 却总也不想回去.
在这里上学, 工作, 恋爱还是异地, 从一个青春逼人的愣头青变成了一个油滑世故的老油条.
还在去年养了一只猫咪, 最后取名– 撸串, 想以后开个烧烤档, 挂付对子 「码农大排档, 撸串到天亮」, 我家猫就负责收钱.

时间你好, 多么希望你慢点走啊.

介绍vagrant

Vagrant is a tool for building complete development environments. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases development/production parity, and makes the “works on my machine” excuse a relic of the past.

vagrant 其实是封装了一些命令, 通过命令行的方式管理virtual box镜像,
通过vagrant你可以下载/安装镜像, 修改镜像的配置, 比如说设置ip地址, 指定内存大小等.

视频

本人录制了一个视频, 可以先睹为快, vagrant video, 149MB, 8分10秒.

No.1

根据自己的系统安装 VirtualBox
vagrant

No.2

测试下 vagrant 是否安装成功 vagrant -v

安装过程中, 确保VirtualBox一直在运行

No.3

1
2
3
4
5
6
7
8
9
# 新建一个目录
mkdir -p work/vagrant
cd work/vagrant

# 执行 vagrant init
vagrant init ubuntu/trusty64 #生成一个 Vagrantfile文件

# 安装box文件
vagrant up

No.4

vagrant up 从远程下载box, 可能需要很长的时间, 可以先把box文件下载下来.

这里能找到官网所提供的box,点击进入相应的box中,
里面会显示版本号和支持的虚拟机(virtualBox或者vmware_desktop),确认自己想要的版本号和虚拟机后,
点击右上角的版本号进入新页面, 在当前地址后添加 /providers/virtualbox.box 可获得virtualbox版本
的box下载地址, vmware_desktop版同理.

然后使用 vagrant box add 命令添加镜像

1
vagrant box add <trusty-server-cloudimg-amd64-vagrant-disk.box> --name ubuntu/trusty64

No.5

再执行下 vagrant up

执行 vagrant ssh 进入虚拟机, ssh在windowns系统下 不生效

No.6

如果想删除 vagrant box, 执行 vagrant destroy

No.7

命令 作用
vagrant up 启动本地环境
vagrant halt 关闭本地环境
vagrant suspend 暂停本地环境
vagrant resume 恢复本地环境
vagrant reload 修改Vagrantfile后, 使之生效(相当于先halt, 再up)
vagrant ssh 通过 ssh 登录本地环境所在虚拟机(只在linux unix下起作用)
vagrant destroy 彻底移除本地环境

参考资料

http://haoduoshipin.com/v/105

https://imququ.com/post/vagrantup.html

http://urouge.github.io/how-to-download-vagrant-boxes/

今天,我收到了 2013 年的一个快递,确实是我的,也确实是我在 13 年就该收到的。

快递单上清清楚楚写着我的名字,当初公司的地址,一直没变得手机号,还有 ta 的信息。
娟秀的字体,更明显的是,我的名字是繁体的,也只有 ta 才会这么写。

我在此刻拿到了 ta 在 13 年送我的生日礼物,我拆开那个包裹,像触碰了一个人的心。
当我对一个人只剩下回忆,回忆也已经变淡的时候,我看到 ta 写的话。
我突然明白了「英国病人」 中主人公抱着心爱的女人的尸体走出山洞,无声哽咽的场景。

记忆都浮现在了我的眼前,原来我一直没忘,只是不愿想起来,

我如一个时差症患者,在回忆里搁浅,看着 ta 笑着,向我跑来,我会笑着跟 ta 打着招呼,
说:”好久不见”,然后擦肩而过。我回到了时间的岔路口,这次我会默默的看着。

谢谢你给我的快乐,这两年来,我一直在平息着伤口,感觉已经好了。
今天我知道,伤口愈合了,只不过会隐隐作痛。

今天英国退欧公投。自从上学时就有这印象,英国是欧盟不可分割的一部分。

投票结果就是老子不跟你们欧盟玩了。

朋友圈有人说:

1
2
3
4
5
6
前几天兰蔻事件的时候我说,法国不坚持戴高乐主义就成了二流国家。
今天有必要重温这段历史,戴高乐促进法德和解,从而让欧盟有了存在的基础,最终成立欧盟。
他坚持欧洲,尤其是法国不能成为美国的附庸。
他认为英国和美国关系过近,是美国安排在欧洲的间谍,并两次拒绝英国加入欧盟。
萨科齐时代的法国放弃了戴高乐主义,跟着美国在中东打仗,最终祸水流向欧洲。
而今天,欧盟崩溃的口子从英国打开,真的应验了戴高乐的预言。

好吧,这些话跟退欧没有什么必然联系,算是另一种角度对大英帝国的解读。

卡梅伦举行了公投,本想倒逼欧盟,多给英国好处,结果玩砸了。然后宣布辞职,意思就是这个锅我不背,爱谁背谁背。

从知乎看到,51% 多的人投票退欧,48% 多的人投票留欧,退欧大部分在郊区,留欧大部分都是富人区。
从事贸易的,大学教师,留学生选择留欧,因为开放能提供更多的空间,更多的想象力。

而一些渔民,农场主则是坚定的退欧者,他们认为,英国为了欧盟付出的很多,而他们没有得到什么好处,
而且欧盟的法律处处限制了他们的发展。

从这场公投,看出英国巨大的割裂感,就好像中国大陆的农村与城市间的种种差异,有一种魔幻现实主义的味儿。

该何去何从,不是我们该操心的。英镑严重贬值,我倒觉的是抄底的好机会。

今天 饥荒 这款游戏冰点价,只需一元,果断入手。

我在去年 (2015 年) 去杭州的时候,玩过饥荒,游戏讲述的是关于一名科学家被恶魔传送到了一个神秘的世界,玩家将在这个异世界生存的故事。

正好杭州的朋友 H 也玩过,好好切磋了番。这款游戏让我有种找回机械迷城的感觉。散发的一种独特的气质让我欲罢不能。

饥荒 有着宏大的世界观:地图非常大,里面包括森林,草原,河流;
逼真的环境:有白天黑夜,有春夏秋冬,在雨季还要预防雷击,有各种动物,你还可以饲养;
造物功能强大:你可以在岛上采集鲜花,木材,果实,用常见的东西制造各种必要的工具,
用工具可以采矿,可以生火,烹饪食物,而且食物还可以搭配。

感觉自己就是鲁滨逊,无所不能,无所不会,一个人战天斗地般的建设社会主义新世界。
如果你死了,不管你活了多少天,都要从第一天开始,你积累的所有资源都没有了。
这种感觉好奇妙,夹杂着好奇,时不时的小惊喜,给人一种探索的欲望。

有兴趣看下视频

我修改过游戏的 lua 源码,主要是提高攻击力,提高奔跑速度,希望大陆也能开发出不错的游戏。


介绍一本书 「最好的告别」,
作者是 阿图•葛文德(Atul Gawande),
他是麻省总医院外科医生, 哈佛医学院教授, 白宫健康政策顾问.

这是一套系列丛书, 包括:

「医生的修炼: 在不完美中探索行医的真相」

「温暖消逝: 关于临终、死亡与丧亲关怀」

「医生的精进: 从仁心仁术到追求卓越」

「最好的告别: 关于衰老与死亡,你必须知道的常识」


为啥谈这个问题呢, 缘于一些曾经经历的以及正在经历的一些事情, 想谈谈这个话题.

孔子曰: 「未知生, 焉知死」, 不道是不是孔老夫子的谦辞.
以前觉得这个事情离我很远, 而且自己也没资格谈这些东西.
等我经历了作为癌症家属的无助, 亲人的离世, 老年人的衰老/赡养问题, 早已不知不觉的卷入其中.

人都是害怕死亡的, 谁都不能代替谁, 不管是多么的豁达通透之人.
尤其死亡之前的衰老, 慢慢消耗人的意志,你不在能掌控自己的生活, 不能上街买菜, 不能开车,
为了生活, 你要一点儿一点儿的放弃隐私, 你的自尊, 你的要强却告诉你不要这么做.

貌似医学一直是进步的,

  • 你可以方便的检查自己的基因序列,
  • 有了比较完善的公共医疗体系,
  • 美国很多大学成立伊始, 就设立了医学院,校之根本.
  • 有顶级的期刊杂志 如柳叶刀,
    大陆有丁香园

医学已经深入人心了, 还有这么一款游戏瘟疫公司.

但是很简单的感冒并不是靠药物治愈的, 药物只是缓解症状, 还是靠自身的免疫力扛过去.

不知为什么, 大陆对医疗不重视, 对医生也很轻视, 医患问题也相当严重, 一言不合就动枪动炮,
还有最近的 ‘莆度众生’ 事件.

在台湾, 日本, 美国, 医生绝对要算精英阶层了, 当然收入也是精英了阶层.

很多人推荐去印度医疗旅游, 就是边旅游边治疗, 印度有相当不错医疗水平, 合理的价格, 大量仿制药(仿制药跟假冒药是两码事).

当医学已经不能拯救你或亲人的时候, 你要怎们做, 告诉自己或亲人接受现实, 安然离去抑或央求医生再试试?

我没有答案, 亦也没提出什么问题, 希望我今后可以平静的面对这个终极问题.


最好的告别, 写给最想念的人.

今天是父亲节,做地铁的时候,有人唱了 beyond 的「真的爱你」。

额,是不是唱「报答一生」更应景呢?

2011 年的父亲节也是 6 月 19 号,是 5 年一轮回么?

父亲如山,感情羞于表达,写在这里,祝老爸身体健康。

今天周末,一直没想写,忙完事回到家,突然想写下去。
估计就像赵忠祥老师说的:”春天来了,又到了碰碰的季节。” 这都是惯性,都是套路啊。

下午跑了趟社保中心,无奈公务员不上班。时间还早,看了场电影:「X 战警:天启」.

特效打满分,音乐一响,全程高能 buff. 终于知道教授是怎们秃的了。
万磁王真的去大炼钢铁了,琴的扮演者是三傻
一看到大婊姐扮演的魔形女,只要她一开始滔滔不绝的说话,我就感觉回到了「饥饿游戏」.
金刚狼从秘密基地苏醒,就泄愤怒杀人太刺激啊。

天启大大 — 第一代变种人,各种的换身体,而且特喜欢搞杀马特组合。
最后天启大大说:’你们是我带过最差的一届四骑士’.

明天又是高考了,09 年高考的我,一晃 7 年了。

祝大家节日快乐,祝一些人在 69 的年龄享受 61 的待遇。既然过节就唠唠家常吧,说说最近的生活。

进入 6 月份,2016 年过了一半了,你当初订的计划,进行的怎么样了。

入职新的公司 6 个月了,总体还是比较习惯的。


上周 btc 行情大涨,囤货半年,终于可以出货了,抛完有种庆幸的感觉,终于找到接盘侠了,为踩到高点暗自高兴。
不曾想边抛边涨,一波更比一波高,庆幸不是,难受也不是,人性的贪欲啊。
然后几次行情后,自己估摸了个支撑点,做空,连续爆涨,必有调整。

晚上呼呼大睡过去,不曾想,这波浪过去后,有一波浪,直接把我拍死在了沙滩上,在支撑点上暴涨 5%.

午夜 4 点行情启动,风险率最高的时候 80%, 还好我在睡觉,一上午忐忑不安,价格一直在调整,风险率在 45%
左右晃荡。下午去参加了活动,去分散注意力了。

遇到老朋友,也在跟我做一样的投机 (就是一种投机行为了)。幸的指点,于昨晚出套,虽然割了些肉。


这周参加活动,coder 借Passenger的作者 Hongli Lai 在北京休假,期间特地邀请他做一次技术分享。

我拿了 ipad 帮忙录像去了,用的小米直播,现场比较黑,质量一般般吧。好在 ppt 声音都比较清楚。

我用 ffmpeg 把 m3u8 合并为一个视频,活动详情 Passenger 作者 Hongli Lai 的分享

rails blank

看到 rails 的 blank 源码:

1
2
3
4
5
6
7
8
class String
BLANK_RE = /\A[[:space:]]*\z/

def blank?
empty? || BLANK_RE === self
end

end

[[:space]] 是个什么东西,查了查资料,叫
POSIX Bracket Expressions,
可以当做 正则的简略写法吧。

POSIX_Basic_Regular_Expressions.png

Git

你通过 git pull 更新内容的时候,是不是要经常的输入密码,你厌倦了么?

试试 git config credential.helper store

然后在输入密码,下次输入就不需要密码了,这是咋做到的?

打开 vim ~/.git-credentials, git 已 明文记录了你的用户/密码 , 所以你要注意安全了。

Telegram 是俄罗斯人开发的一款即时聊天工具, 详细的介绍请看 Rei 的 介绍Telegram.

Cloud9 是什么呢?
Cloud9 provides a development environment in the cloud that allows developers to get started with coding immediately and collaborate with their peers.

申请 Telegram Bot

添加 机器老爹-BotFather
输入指令 /newbot, 选好 nameusername 之后, 老爹会返回一串 Token:

1
2
3
4
Use this token to access the HTTP API:
161xxxx:xxxx_xxxx-xxxxxx

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Flask 运行 server

1 安装 Flask, pip install Flask, pip 类似于 gem

2 来个 hello world

1
2
3
4
5
6
7
8
9
10

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()

运行 python hello.py, 访问 http://localhost:5000/, 修改端口 app.run(port='xxxx')

使用 telegram python sdk

python-telegram-bot 简化开发.

代码如下, 适用于py 2.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

#coding=utf-8

import os
import logging
import telegram
import urlparse
from flask import Flask, render_template, request

HOST = "<Host>"
app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

global bot
bot = telegram.Bot(token = "<Token>")

botName = "@MustangBot"

@app.route("/", methods=["POST", "GET"])
def setWebhook():
if request.method == "GET":
logging.info("Hello, Telegram!")
return "OK, Telegram Bot!"

@app.route("/set_webhook", methods=['GET'])
def setWebHook():
result = bot.setWebhook("{}/bot_talk".format(HOST))
if result:
return "{} WebHook Setup OK!".format(botName)
else:
return "{} WebHook Setup Failed!".format(botName)

@app.route("/bot_talk", methods=["POST"])
def bot_talk():
if request.method == "POST":
update = telegram.Update.de_json(request.get_json(force=True))

if update is None:
return "Show me your TOKEN please!"
logging.info("Calling {}".format(update.message))
handdle_message(update.message)
return "ok"

def handdle_message(msg):
text = msg.text
if "/echo" in text:
bot.sendMessage(chat_id=msg.chat.id, text="Hello, I am a nerd")
if "/photo" in text:
bot.sendPhoto(chat_id=msg.chat.id, photo="<photo-url>")
elif "/help" in text:
helpInfo(msg)
else:
helpInfo(msg)

def helpInfo(msg):
text ="""
/echo - echo
/photo - photo
/help - Help Info

--------------------------
在cloud9上跑了个telegram_bot
"""
sendTxtMsg(msg, text)

########

def sendTxtMsg(msg, text):
bot.sendMessage(chat_id=msg.chat.id, text=text)

if __name__ == "__main__":
app.run(host=os.getenv('IP'),port=int(os.getenv('PORT')))

NOTICE

必须把应用设为 public, 获取cloud9的 IP 和 Port

1
2
3
4
5
os.getenv('IP')
os.getenv('PORT')

# 修改Flask
app.run(host=os.getenv('IP'), port=int(os.getenv('PORT')))

享用 Robot

访问 <cloud9-url>/set_webhook, 初始化bot, 添加机器人为好友, 发送 /echo /help /photo 试试哦.