作者归档:vicalloy

为博客增加Markdown支持

前些天给ipad买了个蓝牙键盘。想日后短途旅行可以直接带上ipad,配合蓝牙键盘,整理照片发博客啥的无压力。遗憾的是ipad上并未找到什么好用的wordpress客户端软件。
wordpress的官方ipad客户端只支持原始的html,使用原始html写博客完全没有书写的乐趣。
Markdown 是一种「标记语言」,通常为程序员群体所用。Markdown的语法比html要简单很多,相应的写起来也要舒服很多。
我通过插件Markdown on Save Improved,实现Markdown的支持。Markdown的语法参考:php Markdown Extra
这篇文章就是用Markdown所写的。
调整博客的字体以及字体大小

body{font:75% "Palatino","Georgia","Hiragino Mincho ProN","Microsoft YaHei","WenQuanYi Micro Hei",serif;...

读《优势谈判》

期望简单的生活,付出总能得到相应的回报。只是世界本是复杂的,如果单纯的将事情简单化,事后多半要为此付出不小的代价。为了让付出能获取应有的回报,谈判是其中的手段之一。

或许很多人认为日常生活中接触谈判的机会很少,事实上你每天都在面对着各类的谈判,只是你并未察觉而已。公司间的讨价还价是谈判,找公司谈加薪是谈判,买东西的砍价也是谈判,和孩子协商零花钱的多少是谈判,甚至在你尝试说服他人的时候都是谈判。

在以往的生活中有着实在太多失败的“谈判”经历,于是找了本关于谈判的书来瞧瞧。

《优势谈判》,书名就已经透露这强烈的成功学味道,书中无处不在的自夸与“优势谈判”更是将成功学的味道发挥到了极致。抛开对成功学的偏见不谈,这书还是有部分可取之处。

在书本最开始几章中谈到基本的谈判策略。这些基本的谈判策略让我有些大跌眼镜,有些“武功再高,也怕板砖”的感觉。其中大多都是大妈们砍价的常用招数,大妈们在砍价时已经将这些招数发挥的淋漓尽致了。

  • 开出高出预期的条件 地摊小贩们的开价总是高的离谱,大妈们的还价则是当仁不让的低。
  • 黑脸白脸 如果是两人砍价,常有一个一直在“劝”对方别买。
  • 走开 对方不肯降价时,假装走开,等下接着再战。
  • ……

书中有几点还不错的地方:

  • 应对困境 真正的死胡同是很少的,大多看似死胡同的问题都只是困境而已。在面对困境时可以先避开矛盾,从一些更容易达成共识的问题入手,努力寻求问题的解决方法。如果太过着眼于问题,而无法取得任何进展的话,困境就真的很可能变成死胡同了。
  • 别贪小便宜 在对方犯错的时候别以为自己有便宜可以赚,应当尽量提醒对方。不然事后对方“假装”发现了自己的错误要求纠正,那你就有麻烦了。

和非美国人谈判的技巧,这章有些意思,里面提到很多国家的特点。里面谈到“语境”一词,及同样的话放在不同环境中意思的差别。”低语境”标示同一句话在不同环境中表达的意思差别不大,“高语境”则相反。美国是“低语境”国家,中国是“高语境”。在美国文化主导世界文化的今天,中国很多所谓的“西化”其实更多指的是美国文化。

谈判类型:

  • 一锤子买卖 地摊上的砍价很多时候就是一锤子买卖。这时候只要能获得最有利自己的结果就可以了。
  • 双赢谈判 如果这次交易后还有后续,那最好能获得一个让双方都满意的结果。我们在日常生活中遇到的大多谈判都属于该类型。比如公司和员工谈薪资。公司当然希望用最少的钱招到最好的人。但如果开出的价钱真的太低,就很难保证员工安心工作不跳槽了。不幸的是很多公司似乎并没有意识到这点,等到员工已经铁了心要开溜时才发现问题,这时已经为时已晚了。

我的博客史

前些天看了下自己的博客,本博客第一篇博客的发布日期是2005-08-05。

一不小心已经近7年了。

这个博客最早托管在微软的msn space。msn space使用体验非常糟糕,而且访问速度也不怎么样。终于有天不堪受虐,买了个虚拟主机自己托管,博客程序也切换到wordpress。有朋友说我在博客中流露了太多心情,所以在迁移的过程中删除了不少生活相关的博客。

在这个博客前,还曾在天涯写过博客。博客的更新日期为2005-1-5~2007-11-8。这是一个介于微博和博客之间的博客,一个纯粹关于心情的博客。里面写有我的困惑与纠结,写满了我关于青春的记忆了,写着类似“人生如戏,戏如人生”的词句。博客的创建日期是2005-1-5,不过里面的不少文字写在2004。当时在天涯的一个分版中开了一篇帖子用来写心情。后来在开头天涯博客后将其中的内容转到博客。帖子的发表日期在2004-8-1

再往前追溯就是我的个人主页了。在学校时有写一些小软件,为自己的软件做了个网站。在每次软件发布的时候都要写个简单的发布日志。从现在的角度看,那些所谓的发布日志倒更接近微博或博客。在2002年左右网上有着非常多的免费个人主页空间,我的个人主页用的就是免费资源。随着互联网泡沫的破灭,互联网上的免费资源也都消失殆尽。花了¥100买了个静态主页空间,将个人主页迁了过去。此后因为没有续费,空间关了,再加上后来的硬盘灾难,数据应当是彻底的找不回了。

使用反向代理为SAE“绑定”顶级域名

朋友的VPS服务器近期经常出现内存超标的问题。想我的SAE免费资源闲着也是闲着,于是将上面的博客迁移到SAE平台。
SAE商店中的wordpress可以免费安装使用。受SAE平台的限制,SAE版的wordpress有部分功能限制,比如可用的主题也就那么2~3款。另外一个比较大的问题是无法绑定域名。解决该问题的方法之一即是使用反向代理。
我的虚拟主机上用的是apache,下面是相关设置。
httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://domain.sinaapp.com/$1 [P]

SAE部署Django1.3应用问题总汇

花了些工夫将碎片网部署到了SAE,中途遇到各类问题。感觉SAE看上去很美,实际上却并不是太成熟(至少python版如此)。
下面记录下我遇到的一些主要问题以及解决方法。

django版本问题

Django1.4都即将发布了,SAE平台自带的SAE版本依旧为1.2x。为使用django1.3版本,你需上传自己的django。具体做法可参考SAE手册中的runtime.html#virtualenv

日志模块出错

最先遇到的是日至模块的问题。错误显示AdminEmailHandler中构造某个类时带了is_mail这个参数,但目标类的构造函数根本就不支持。好在日至模块不是必须。将日至处理模块换成django.utils.log.NullHandler解决问题。

'null’: { 'level’:'DEBUG’, 'class’:'django.utils.log.NullHandler’, },

local_thread问题

在index.wsgi中加入

import threading
from django.utils import _threading_local
threading.local = _threading_local.local

settings文件

SAE默认安装了不少python包,其中包括django-userena。糟糕的是SAE将django-userena的demo项目也加到了python路径,而且加载的优先级比项目代码还高。直接导致os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘settings’找到的是userena的settings文件。最终将settings文件改名为qnotes_settings.py解决该问题。

其他问题

  • 昨天部署上线后经常出现数据库错误,错误提示为Caught OperationalError while rendering: (1045, ‘access deny’)  。SAE数据库不支持长连接,30s后主动超时。但django本就会在每次请求后自动关闭数据库连接,理论上不应当出现类似问题。该问题今天莫名其妙的自己好了。
  • 服务器非常不稳定,经常长时间的无法访问,不定期的可以正常访问。
  • SAE可能hack了python的包加载机制的原因,SAE的python包的加载行为有些奇怪。本应当最先加载当前目录下的包,实际上却不一定。

又挖了一个新坑-_-,文本分享网站

网站 http://qnotes.sinaapp.com
代码 https://github.com/vicalloy/jstnote
类似 http://dpaste.com/ 的文本分享工具。
dpaste.com 用来贴代码,这个用来分享一般文档。
支持TXT, Html, Markdown, Textile, reStructuredText格式。
匿名使用,在保存文本的时候设置编辑密码,凭编辑密码对文本进行编辑删除(密码暂时还不可修改-_-)。
罪魁祸首是我想随便写个小东西放到SAE上,把SAE的免费配额用掉点。
最开始只是想做个最简单的在线标记语言标记分享工具,预计花1~2天时间做到 http://dpaste.com/ 的程度。
接着…
考虑到使用的方便性,取消了注册功能。
因为是文档写作工具,所以编辑功能是需要的。
后来想评论功能得加上。
然后想加上评论功能后就是一个类似百度贴吧的匿名社区了,那不如把tag也加上。
最终就成了现在的样子。
因为功能一直加,时间也远超预期(好在没拖到下周)。
UI用的twitter-bootstrap。
使用的django框架加若干第三方APP
代码放在
https://github.com/vicalloy/jstnote
写代码的时候只考虑到工作量,有现成的组件尽量用现成的,性能应当会非常的差。
吐槽:
– django自带的评论app非常的不人性化。为了防止进入评论的错误提示页面,花了不少时间用JS写表单的错误检验。
– SAE不是太好用。默认带的django太老。使用自己的django,一直出错。尝试解决了几个问题后最终放弃。(注:已经成功部署上去,感觉问题不少,还有待验证)

天使湾第二季见闻

昨天参加完天使湾最后一轮面试,今天下午公布结果。和预期的一样顺利落选。以我们当前的互联网经验与觉悟都还不足以立马全职创业。

天使湾的这次活动对我而言更多的是一种体验,一种有趣的体验。这是一个交流的平台,在这里可以遇到许多创业者,和他们分享各自的想法。

作为创业者,他们常常会有很多有趣的观点,并能从各自独特的角度看问题。

天使湾给人的感觉还不错。天使湾的CEO庞小伟,给人的感觉很低调务实。如果你确实需要天使基金,可以考虑找他们聊聊。

最后祝大家都能坚持并实现自己的梦想。

黄山.纪念

我喜欢爬山,喜欢一个人爬山的感觉,在爬山的过程中试探着自己身体的极限。
山是神秘的,你不知道密林的背后有什么,想象着山的背后是什么。我总相信在下一个路口能看到别样的风景。在山顶远眺,犹如局外人一样俯瞰这平日生活的俗世。
自从到了杭州后,每年都有去一次黄山,今年已经是第五次了。也不是对黄山有什么特别的感情,只是一路看过来,杭州周边实在没有什么比黄山更值得去的地方了。
和相爱的人一起旅行本是一件幸福的事,却因为一些工作上的事搞的有些心不在焉,黄山的奇秀开始变的普通。忽然间对黄山已经有些厌倦了,除特别的原因外,至少在最近几年我是不会再去黄山了。
下次可能会去泰山。虽然对泰山无感,虽然泰山有些远,虽然泰山有些矮(黄山海拔18xx,泰山海拔15xx)。
DSC_0119
在狮子峰北一座平顶的山峰上,有一巧石,如猴蹲坐,静观云海起伏,人称“猴子观海”。有诗曰: 猴子观海“灵猴观海不知年,万顷红云镶碧天。坐看人间兴废事,几经沧海变桑田。”(感觉这诗烂了点)当云雾消散后,石猴又如在远眺太平县境(即今黄山市所属黄山区)的绿野平畴,故亦名“猴子望太平”。



mapHS

使用nginx做pypi的反向代理,搭建pypi官方镜像

受国内的网络环境限制,直接使用python官方的pypi源速度不稳定还经常抽风。对公司来说,搭建一个自己的pypi镜像非常有必要。

搭建pypi镜像的目的以及相关方案

方案优点缺点
PyPiImplementations功能强大,提供用户注册、包管理等各项功能。配置复杂,需对pypi源进行全量同步。全量同步速度慢,且经常失败。
PyPiImplementations
Simple repository with fallback using Apache
配置相对简单。可通过ftp等方式实现私有包的管理。增加反向代理缓存后可实现官方pypi源的加速。部分python包只是在pypi上放了一个链接,真正的包放在自己的服务器上(极少数包),对这类包无法通过反向代理进行加速。
权限管理功能稍弱。
私有包需要通过ftp等方式进行管理。
注:私有包管理的问题可通过安装web版的文件管理工具来规避。

考虑到部门内部pypi镜像的需求简单,不需涉及太多权限功能方面的工作,建议使用“Simple repository with fallback using Apache”方案。

反向代理方案

“Simple repository with fallback using Apache”中只是将本地无法处理的pypi请求直接转发到官方pypi源。在对官方源进行同步时无法实现对官方pypi源进行加速。为解决该问题,需要对官网的请求进行反向代理并缓存。
关于反向代理的支持请参考:代理、反向代理知识普及squid apache-mod_proxy lighttpd nginx
squid是老牌的反向代理服务器,但在实际使用过程中发现squid太过强大的功能导致配置复杂,不推荐使用。
nginx发展迅速的新兴服务器,对反向代理提供良好的支持,并被多家大型网站使用。最重要的是nginx的配置比squid要容易太多。

nginx配置要点

  • 参考:
  • 安装
    • 官方安装文档 ubuntu官方源版本比较老,建议添加ppa源再安装。
    • 按照说明添加ppa源不可用时,可查看 /etc/apt/sources.list.d 中的nginx ppa源配置并修正
  • nginx配置
    • nginx默认启用了gzip支持。pip无法识别gzip后的网页,需要关闭gzip支持。
proxy_cache_path  /var/lib/nginx/cache/ levels=1:1:2 inactive=24000h keys_zone=cache:100m;
server {
        listen   8000 default;
        server_name  localhost;
        access_log  /var/log/nginx/localhost.access.log;
        #中间省略部分默认配置
        location /pypi {
                proxy_pass http://pypi.python.org/simple;
        proxy_cache cache;
        proxy_cache_valid  any 2400h;
        }
        location /packages {
                proxy_pass http://pypi.python.org/packages;
        proxy_cache cache;
        proxy_cache_valid  any 24000h;
        }
}

相关链接

关于google的20%可自由支配时间

广大程序员在谈及google时往往会很羡慕google那20%的自由支配时间。google的员工可以利用20%的工作时间研究自己喜欢的技术,做自己喜欢的项目。
以我看来这20%的时间与其说是福利,倒不如说是公司策略。

  • 让员工做自己想做的事,更能激发创造力。
  • 员工可以对自己的项目进行运作推广,拉人一同干活。可提高用户的成就感与归属感。
  • 20%,提醒员工这个之是副业,日常工作还不能丢。
  • 项目可以长大成正式项目,让员工感觉有奔头。
  • 再怎么整,项目还是公司的。不管项目成功与否,都可作为公司的投资。
  • 如果没有这20%的时间,员工还是会偷偷做自己喜欢的事,或者做一些无意义的事来打发时间。倒不如将用户“偷懒”的这部分时间规范化。

最后我的意见是:
google 20%业余时间这个想法非常的棒,很有借鉴意义。如果条件允许,公司都应当有些试探性的“非正式项目”。项目来自民间,项目的发起人可利用自己的影响力、 人脉来吸引团队成员(注:团队成员主要出于兴趣,而非领导的强权)。作为“非正式项目”,以不影响正式项目为前提,不过分强调项目产出。项目“万一”成 功,需要有相关的奖励。