呼吸de艺术

Live in your world, get owned in mine

迁移至 Octopress - Dreamhost版

| Comments

小学还是初中那会,我躲在楼上用 FrontPage 做网页。折腾了一晚上照着书本的教程建了个表格,插入了些文字和图片还能跳转到另一个页面。非常有充实感的夜晚。

然后就是各种动态语言的世界了,从一行行手写web应用开始到web框架盛行,然后突然的,各个公司开始去Rails化,回归到选择更轻量级的框架。博客界也开始返璞归真起来,静态内容+社交化交流插件(Disqus)反而更能专注内容,这点微信公众平台倒有些相似的地方。

之前用 Jekyll (中文翻译: 变身怪医 ) 搭建了个糗事百科的 Blog (我们在招人哦~) ,这几天又看到几个用 OctoPress 搭建的博客,默认主题真是舒服简约大气,还能直接内嵌高亮代码。当然最重要的字体足够大,这才能沉浸阅读嘛。

尝试找了下类似的wordpress主题无果后,决定放手试试传说中的 OctoPress ,毕竟能用 markdown 写作也是期待许久。

从此,这个博客不再有数据库。 哈哈哈。

迁移和配置

尝试了好几个工具,Exitwp 效果是最满意的,唯一的缺点操作和依赖稍微麻烦点。但和几年博客数据顺利迁移比起来都是小问题了。

注意,wordpress导出的xml文件肯定有些不正常的字符内容,用 xmllint 检查并手动修正即可。

然后是配置全新的 octopress 站点。将 url 格式还原到和老博客一致能少不少麻烦,毕竟我的空间提供商不提供自己修改http转发配置的。评论系统之前使用的就是Disqus,所以迁移起来完全无压力。话说什么时候Disqus 能支持国内的微博平台呢。

坑和问题

你还未掉到坑里,只是你还不够胖而已。摘自xhan语录第一集

  • github.com默认的 Jekyll 依赖的 maruku gem 对中文markdown支持很差,不支持中文list issue
  • markdown 里url里带有中文字符也会直接报错,手动转码后解决(没来得及看哪里的问题)
  • post 和 page 生成的 page.url 结果不一致,导致 Disqus 在Page 里没法正常工作(暂时手动通过修改Disqus映射解决了) 刚提交的 issue
  • 由于是纯静态页面,所以也就没有了404页面。我的空间是apache,所以可以用 .htaccess 创建个 ErrorDocument 404 /404.html 来重定向
  • Case-sensitive! 这个问题迁移前没考虑到!也是折腾最长的问题了。若直接访问 /LessDJ是会报404的,因为默认文件都是小写的。而且我的空间商不提供hcaccess的重定向功能!临时解决方法在下面。
  • 默认博客的/feed/不见了,将 atom 改个名字换过来即可
  • 原始博客的图片附件等内容:通过 ln -s 做个乱链接即可

简单的忽略大小写的方法

如果你的服务商直接支持请求转发,那网上就有太多解决方案了。否则可以试试这个 就是在404页面中加一段js :

如果请求地址存在大写字母则跳到全小写的地址
1
2
3
  <script> var myRoute = document.location + "";
     if (myRoute!=myRoute.toLowerCase())   document.location=myRoute.toLowerCase();
  </script>

你可以修改模板自动将代码插入404.html的头部 通过 404.md 里添加一个定义 header_top: blabla,然后模板里调用 “ 就可以插入自定义内容了。

但是对搜索引擎就不是那么友好了,所以只是个简单的解决方案。

Octopress 初体验

  1. 其实就是在 Jekll 上增加了主题和一些常用插件
  2. 模板的设计过于碎片,个人不喜欢将页面拆解的如此零碎。特别对于设计师来说就是折磨。
  3. 坑还是蛮多的,目前也是临时补上。不少问题流程以后可以合并进rake tasks
  4. 纯静态文件,版本管理起来也同样方便了很多
  5. 发图或添加附件的流程不够轻便,全手动操作的还是比较麻烦

这篇文章由 Mou (国产Markdown IDE) 编写

OSX10.8下WIFI问题(网络共享)解决

| Comments

无力吐槽苹果的系统,越做问题越多。今天尝试了下苹果的电话客服,结果打了10分钟得不到任何有建设性的解决方案后,客服建议稍等会儿,让我别挂机。继续等了10分钟后,对方没任何提示就挂了电话。回头想投诉发现苹果没有客服ID什么的,唉算了大苹果也是惹不起的。

最近碰到了WIFI图标上有个惊叹号,但是不影响使用可以正常上网!(坑爹的bug)

解决方法:网络设置/地点location/添加个新地点,并应用。 然后就正常了,估计哪个配置文件突然坑爹了。 出处:WiFi Bug Fixes (Mac OS X 10.8 Mountain Lion)

10.8网络共享无法分配ip地址(dhcp)问题:
自从没有以太网线口后已经好久没用过网络共享这个功能(估计苹果开发和qa也是),公司购置了台mini准备做网络共享发现死活也没法提供正确的ip地址。一开始以为机器配置问题(安装了server软件),后用自己的rMBP测试同样dhcp服务根本不起作用,客户端分配到的ip地址都是 169.254 开头的(传说中的fakeip)。 各种方案折腾了2个小时(包括打什么也不懂的客服电话)后,终于解决:

删除以下文件,然后重启

/Library/Preferences/SystemConfiguration/com.apple.nat.plist   
/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist   
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist  

参考链接:
Internet Sharing and Self-Assigned IP
Lion won’t give out DHCP addresses with Internet Sharing

Startssl + Nginx 搭建https服务

| Comments

配置个nginx下的https服务比想想中的容易,startssl支持免费提供一个二级域名(仅,需要多个二级域名请花钱)一年的授权,当然过期后再续就可以了。

教程:申请startssl证书
http://www.chinaz.com/free/2010/1111/142581.shtml

教程:如何配置nginx https server
http://nginx.org/en/docs/http/configuring_https_servers.html

解决startssl申请的https证书在firefox下不可信任 原因是缺少根证书的问题,去官网下载两个文件合并即可

1
2
3
wget http://www.startssl.com/certs/ca.pem
wget http://www.startssl.com/certs/sub.class1.server.ca.pem
cat ssl.crt.bak ca.pem sub.class1.server.ca.pem > ssl.crt

注意备份原证书,cat后可能会丢失换行,可以自行编辑下。
当然这个方案也是网上找的,出处页面不小心被关了,就不发地址了

RIP 2012

| Comments

The way we went, the way we were.

元旦就是元旦,日子也就是工作日和假日的区别。生活也就那样日复一日,惊喜越来越少,期待越来越少。直到认识到元旦的背后是2012年即将过去,才隐隐有些感触。

很小的一个时刻我有本硬皮绘图本,常在上面模绘些喜欢的卡通人物。画完让爸妈打分,然后签个日期。有一天签的日期变成了元月X日,月份居然从数字变成了中文,当时我就震惊了。

12年我和杰杰一起走过,快乐感动难受一路相伴。感情这事是个大坑,外表华丽憧憬内部当然鲜美!不过得到了许多,但是也失去了许多。就是这么纠结,但再无机会跳出来了。一路且行,一路且享,谢谢有你:D

12年公司运营数据持续攀高,一路磕碰我们也渐渐摸清了目标和愿景。我们需要不同的声音,但也不能过分培养一种声音的影响。经过几次事故团队也从乱无章法变得更有序。明年的挑战更大,但我们也更坦然,比如不再像开始那样,被山寨被抄袭就开始担心竞争分享。同时预告下,我们的“秘密”正在单独拆分成新公司单独运营,13年我们会带给用户更多的满足感。

12年我个人继续浆糊着。莫非乔布斯逝世对我打击这么巨大。搜索了下记录,只在微博上找到这么一段话: 总结下2010年 ,混混悠悠一年就过去了,留下不少遗憾. 2011年目标 1.学出驾照 2.找到她 3.坚持做些小而长期的事 4.找到事业的方向@5JAN2011 。这尼玛还是11年的计划!两年后我有了可爱的女友,创业公司也开始步入轨道,自己业余的作品也有了些用户群。但是驾照!尼玛还是没去学啊,不过赶在13年前杰杰已经成功变成了准司机,这也算完成一半了吧。

前几天我安慰个朋友说,最缺钱的年龄就是我们这时候了,再过几年金钱对大部分人来说并不是最大的压力了。所以现在享受生活才是要紧事。说完我自己也被感动了哈。当然自己12年也没贯彻好,两次国内外旅游都没把握好,甚至都没让杰杰吃海鲜吃到爽。

最近在试图把自己捞出来重新整理。高雅点就是境界上了新台阶,不以物喜不以己悲这完全是佛祖心怀了。低俗点就是越来越麻木,比如iPhone5,MBP15 Retina这些设备已经不能让我再激动半分。耐心也越少,长文章选择省略性跳过,或读着读着就出神了。

也许是城市的关系,在北京后生活就单调了很多生活圈也局限在小区方圆1k米。而这糟糕的交通和天气让我也几乎未曾出去好好挖掘城市的味道。对生活的热情在这里似乎被压抑了太多。何去何从呢。

最后留个13年的计划。将目标分解和慢慢实现事实证明能提升幸福感的!

  1. 驾照(拖了2年了!交规都变了!)
  2. 买车(哈哈,终于要到这一步了)
  3. 专注和坚持 3.1 维护好Less系列的产品 3.2 锻炼身体,腹肌!把健身卡赚回来
  4. 学会蛙泳
  5. 学会自由泳
  6. 上街头现场作画卖画 6.1 更好的结构理解 6.2 更好的色彩理解和运用 6.3 观察力和绘画娴熟度
  7. 熟练掌握css
  8. 给她唱喜欢的歌

RIP 2012 既然没挂,那我们会更好。

Rails3读写分离实现

| Comments

8月份尝试过将系统的管理后台读写分离开,但ruby社区常常发生这样的情况,一个挺好的项目突然就没人维护了(比如rails2时代读写分离利器data_fabric)。或是一个项目基本没文档(这不举例了,直接机器生成的文档根本没法看啊)。所以当时搜寻后并最后选择了 octopus 这个gem,但简单尝试后发现配置未成功。也就放弃了。

这次迫于读写压力必须将读写分离实现,求教了闪总最后的选择还是 octopus !一段摸索后终于成功!居然是官方教程的配置文件根本不对啊!!!简要操作步骤如下:

Gemfile 添加 gem

1
'ar-octopus', :git => "git://github.com/tchandy/octopus.git", :require => "octopus"

不选择master分支会和最新的Rails3.2冲突

然后是关键的slave服务器配置(默认的数据库配置就是master)

1
2
3
4
5
6
7
8
9
10
11
octopus:
  replicated: true
  octopus_enviroments:
    - development
    - production
  development:
    shards:
      slave1:
        adapter: mysql
        host: localhost
        database: octopus_replication_2

官方教程中少了 shards: 这个标签,所以导致配置没法正常使用。

官网地址 Octopus

通过SSH穿梭内网

| Comments

买了个小道盒子却怎么也没法正常使用。

和客服联系后需要对方ssh到路由上检查,但对方又以安全理由要求必须本人操作。我们小区是个大型局域网根本没有外网IP,怎么解决呢?

网上搜索了下,原来SSH本身就提供了类似功能:

首先你需要有一台有外网地址的机器。我们叫做BRIDGE吧。内网机器叫做LOCAL

LOCAL->BRIDGE  从本地连接到跳板机器上 ssh -R 22222:localhost:22 BRIDGE (也就是将所有发往BRIDGE端口2222的数据都转发到LOCAL的22端口上)

TARGET->BRIDGE 常规ssh连接

BRIDGE->LOCAL  ssh name@localhost -p 22222

这样就成功能从任何一台机器穿梭到内网上。当然,也成功搞定了小道盒子的问题。希望接下来能稳定工作,别逼我贡出退货大招了。:D

— updated at 22APR2013 —
如果还对小道盒子有点兴趣的同学,奉劝不如自己动手折腾。盒子在正常使用2周后然后又瘫痪了。
客服再三也联系不上(QQ,邮箱,电话),所以彻底死了这条心就当花了500快钱认清了这个小破机构。
在这盒子上浪费的时间足够自己搭建个自己的翻墙wifi了。(当然我们后来的选择是pac+ssh全局代理)

LessAD 也开源了!

| Comments

由于种种原因比如没有能越狱的手机,没错这个是重点。所以就先放在Github上看看有没热心同学帮忙参与咯。

这是我第一个使用了StoryBoard技术以及THEOS技术的项目,请大侠们别带着太审视的目光查看细节内容。

代码地址http://github.com/xhan/lessad

What You Can’t Say

| Comments

http://www.paulgraham.com/say.html

(翻译来自 PingWest , 和原文有些不一致)

隐秘思考

当你发现那些“不可言说”的事,接下来要怎么做?我的建议是别说,至少是,打那些必须要打的仗。

假设未来有一天,一场禁止黄颜色的运动席卷开来,任何被涂成黄色的东西都被禁止,违者将以“黄色主义者”罪论处。橙色或许是勉强可以被容忍的,但也都被划入可疑者的名单。当你在这时意识到黄颜色其实本身没有任何过错,然后你将这个观点大声地说了出来,那么你将同地被扣上“黄色主义者”的罪名,并陷入一大群“反黄色主义者”的口诛笔伐。如果你坚信为黄颜色正名是你人生的使命,那你可能在做你必须做的事。但如果你的人生还有更重要的事要做,那么被打成“黄色主义者”就会是一个麻烦。与蠢货干仗,结果就是你自己变成蠢货。

所以重要的是自由思考,而不是畅所欲言。如果你坚持认为要把你所想的一五一十地说出来,那结果可能是你会被妄念所束缚。我认为不妨去遵从那些与你意志相违拗的政策。让你的思考与言论之间泾渭分明。在你的大脑里面,没有任何不能想的事,在我的大脑里就经常进行那种最惊世骇俗的思考运动。那是一个隐秘的世界,你没必要把这里发生的一切讲给外人听。加入“格斗俱乐部”最重要的天条就是:永远不要提“格斗俱乐部”这回事。

而问题在于,当你让自己的思考处于隐秘状态时,你可能无法享受畅所欲言带来的好处了。谈论一个想法会激发出很多想法。所以在你能够掌控的情况下,不妨有几个知己好友,可以让你自由地与他们畅所欲言。这不仅仅是为了激发想法和灵感,也是一个选择朋友最绝妙的办法,因为那些能够在一起交流最离经畔道的事而不会跳起来走开的家伙们才是最值得结交的。

平静以对

我想,最靠谱的做法应该是对那些歇斯底里的现象平静地表示不同意,但又不明确地指出你到底不同意它们的哪个方面。那些歇斯底里的强权者也许会试图套你的话,但你不必理会他们。如果他们试图强迫你回答“是跟我们走还是跟我们对着干”这样的问题的时候,你可以回答:我不知道。

更好的答案,是“我还没决定该怎么做”。这就是哈佛大学前校长Larry Summers当初在被逼表态时的态度。在表达完这个立场后,他说:“别想拿我做实验”。本来,人们热衷于讨论的问题通常背后都很复杂,轻易地说出你的想法不值当。

当那些“反黄色主义者”到处肆虐破坏别人的安静,而你想给他们找点茬的话,有一些做法可以让你避免被扣上“黄色主义者”的标签。就像古代军队里的散兵游勇那样,你完全可以避免任何正面战场与敌人的作战,而是在远处向敌人射出箭矢。

比如说将辩论提升到抽象的维度上进行。比如你想反对言论审查制度,你完全可以避免提及他们想审查的任何一本书籍或电影的名字,你可以通过对“元标签”的质疑,来实现你实际想质疑某一具体标签或现象的目的。“元标签”指的是对具体某一标签的抽象总结,而这么做会很好地保护你自己。举例来说,“政治正确”就是个元标签,当人人都在谈论“政治正确”的时候,“政治正确”本身就走向了它的重点。但你完全可以针对“政治正确”进行言论质疑,从而避免将矛头指向任何一件涉嫌“政治不正确”的具体事件。

另一个反击的方式是隐喻。Arthur Miller曾写过一部剧《萨勒姆的女巫》反击当时“非美委员会”的麦卡锡主义政策。他整部剧没提到一句“反美委员会”,但几乎人人都看得出这部剧是在把“非美委员会”对人们进行的政治迫害比喻成“抓女巫”。

当然,最棒的一种方式是使用幽默。那些极权主义者无论如何也无法做到的一点,就是幽默。他们永远无法直面幽默的力量,就像身着盔甲的骑士走进了溜冰场。维多利亚时代迂腐的宫廷礼仪被当作是一种笑话,然后它果然就被这种笑话瓦解了。而当代的“政治正确”也将遭遇同样的结局。

质疑精神

要想摆脱对自己所属的时代的庸众的附和,需要自省意识。在时间还没有拉开距离之前,你自己需要有这种疏离感。远离人群和众声喧哗,观察那些正在发生的事,尤其是那些被压制和迫害的观点。比如有些人在过滤网站上的内容,以防止孩子和雇员们看到网络上的色情、暴力与仇恨的内容。但请问怎么才能精确地定义“色情”、“暴力”与“仇恨”?这听上去很1984吧?

像上面这样的标签都是最典型的“欲加之罪”。如果一件事真的是错的,你可以不留任何余地地批判它。但如果一件事不能精确地定义它是错的,那么它就不该被压制。所以当你看到一件事被打上“××主义”或“××分子”的标签被大张挞伐的时候,这就是一个明确的信号——这么做是不应该的。无论是1630年还是2030年,当你看到有人在用这种方式给一些人或事打标签的时候,就要心声警惕,问问这是为什么。

搭建自己的Cydia源(OSX版)

| Comments

用了半年多 myrepospace.com 来托管自己的越狱软件,最近发现网络实在糟糕,逼不得已自己搭建了一个,下面是教程。

教程

http://www.saurik.com/id/7 http://www.graci.org/?p=11

写的非常仔细,不翻译了。但是通过上面的教程不一定能成功搭建,下面写的是注意事项:

Dpkg 依赖

上文提到如何安装dpkg,也就是通过macport来安装dpkg。(这也是为嘛我之前软件要托管的原因,折腾很久没用brew安装成功dpkg和perl依赖)

修改 dpkg-scanpackages 脚本

vim /opt/local/bin/dpkg-scanpackages (macport安装的dpkg应该是这个目录)

  1. 添加 @fieldpri 里最后的 Name 字段
  2. 替换md5sum 为 md5

发布

把生成好的文件丢到服务器即可,Cydia 添加 http://apt.ixhan.com 试试?

iPhone越狱软件开发小计1

| Comments

马上睡觉了,简单记录下研究结果。

现在有两个不错的开发框架支持加速iPhone越狱软件的开发(这里说的越狱开发值得是开发一款 1.输入法 2.内测修改 3.短信监控 等需要内核特殊权限的app),分别是 theos 和 iosOpenDev

theos 是一堆makefile 和perl 写的脚本,支持多平台开发。 iosOpenDev 是在 theos的基础上,增加了对xcode IDE的支持,并提供了多套模板,使得用户通过xcode就能编写和编译 越狱项目。

但由于 iosOpenDev 封装程度比较高,所以本人没有仔细研究。个人项目中均使用 theos 来帮助开发。

让 THEOS 支持 modern objective-c syntax 

由于跨平台性质 theos 默认编译器是 gcc/g++ ,自然不支持objc的新语法了。修改 /targets/darwin/iphone.mk 的 gcc/g++  为苹果的 clang/clang++ 即可

让 THEOS 不因为 warning 报错

虽然我的完美风格也让我没法面对项目中任何warning,但有是简单测试项目卡在warning as errors过不去就尴尬了。 在makefile 头部添加  GO_EASY_ON_ME = 1 即可pass。 如果觉得编译结果的提示还是看的难受,可以再添加个 flag : INTERNAL_CFLAGS += -Wunused-variable 就可以很清静了

程序报错 sign error 9 (无法运行)

我的情况是签名工具坏了(iphone上直接通过bigboss recommand tools 安装的 ldid),后来改用网上下载的另一个ldid就正常了。(之所以说这个是我也是在网络上找到解决方法的,居然这么坑爹的事情也有!)

换更好的THEOS

原作者howett的版本比较简约,没提供private header,以及没法忍受的在文件夹根部生成大量临时文件。最近刚刚切换成rpetrich的分支版本感觉非常好用。(如果想检查下生成的deb包内容 可以到 .theos/_ 里查看)

dpkg on mac

最早是用brew 安装的dpkg,但由于缺少perl的依赖导致不少功能没法使用。 最后使用macport 重新安装了dpkg 后才解脱了(虽然brew不建议和macport一起使用,目前未发现问题)