想和做

一年前,我在草稿箱里面写了这篇文章的开头,那时的我正在为工作而烦闷,却一筹莫展。 最近在读《人人都是产品设计师》,其中提到了「产品经理」和「项目经理」的区别, 又引发了我一些思考,我决定把这篇文章重新写完。


这篇文章准备讨论普通程序员在工作中容易滋生的错误,以及解决的方法。

传统意义上,大家会提倡「不能光想,还要去做」,即强调行动力的重要性。 而在实际工作中,大部分人都不缺乏这个行动力,反而缺少对自己工作的思考。 比如我为什么要这么做?有没有更优美的办法?能不能通过自动化减少工作强度? 流程是否可以改善?

我和产品

在聊上面几个问题之前,我先确定一个既有现实:「每个程序员都曾经是产品经理」。 诸位是否还记得当年在学校里面学习时候,应该都做过 XX 管理系统吧, 那时候我们也许单枪匹马,也许结对组团去完成「项目」:获取需求,设计系统和 撰写代码,在这些工作中,我们首先担任的就是产品经理一职。

more ...

Vundle 和 Submodule

问题背景

Vundle 是个好东西,可以用来管理 vim 配置和 vim 插件。Vundle 会将所有插件管理在 .vim/bundle/ 中,详情可看 使用 Vundle 管理 Vim 插件

官方安装 Vundle 方法如下:

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

我的 Vundle 的版本是 59bff0c457f68c3d52bcebbf6068ea01ac8f5dac, git 版本是 git version 1.7.10.2 。 使用 BundleInstall 可以安装 .vimrc 中配置的插件,

我使用 git 控制 .vim.vimrc 版本。在 BundleInstall 之后会导致 vundle 目录项目状态混乱,要么形成一个无法追踪的 submodule 比如 .vim/bundle/The-NERD-Commenter (untracked content) ,要么变成一个普通的文件夹 .vim/bundle/vim-markdown

more ...

服务器 Push 技术

服务器 Push 技术表示服务器可以主动推送消息给客户端浏览器。

实现方式

  • Comet
  • Ajax 轮询
  • iframe / htmlfile
  • script tag (不中断的连续请求)
  • Flash 通讯
  • WebSocket

Comet 本意是彗星,彗星尾巴痕迹很像长连接工作方式,所以 Comet 指代长连接。 在 Ajax 轮询的分类上,存在一些分歧,这里我把轮询认为一种 Comet 方式。

ps:「长连接」在一些场景下,是另外一种意义「HTTP: Keep alive」。不在本文讨论的范围中。

参考链接:

more ...

《开源和自由》幻灯片

周末回学校一趟,和几个老同学、老师聚会,然后给学弟学妹们做了一个分享。

我的主题是《开源与自由》。 为了让同学们不瞌睡,几乎是当一个故事讲的,没太多技术内容。

more ...

让 Octopress 支持 RSS2.0

土鳖人人网的 日志导入 功能仅支持 RSS2.0,而 Octopress 输出的订阅格式是 Atom1.0。 于是为了让人人网的同学能看见我那些技术宅,又或非技术宅的文章, 我只能昧着良心,给 Octopress 加上过时的 RSS2.0 输出。

source/ 下创建新文件 rss.xml ,内容如下:

---
layout: nil
---
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
    <channel>
        <description><![CDATA[{{ site ...
more ...

给 Octopress 加上标签功能

上周,我将 Log4D 由 Wordpress 转换为 Octopress,略加打理,颇为顺手。 自动分类 / 评论转移 / 代码高亮 / 图床 的问题一一解决之后, 就只剩下 tag 的问题没有搞定了。

我当时使用了YORKXIN的修改版本来处理 Wordpress 的数据迁移,这个脚本很好用,数据没有遗失,甚至是让我担心的 category / tag 都给予了保留。具体使用方法可以参见从Wordpress迁移到Octopress

只是虽然 tag 的数据保留了,但是 Octopress 仅支持 category 的分类,而完全忽略 tag。这是我不能容忍的:category 和 tag 分别代表 有序 / 无序 的知识点归纳方法。 一篇文章只能属于一个 category,但可以同时属于多个 tag。 Octopress 的设计方法显然和我长期养成的知识归纳体系冲突,我开始吭次吭次寻找插件。

more ...

《写给大家看的设计书》读后感

我读过两本关于视觉设计的书,一本是《写给程序员的Web设计书》, 这是第二本《写给大家看的设计书》

写给大家看的设计书

我对前者的评价是「作者花了大约25%的篇幅来讲述设计理念和方法,这也是我真正想看的部分。 本来想从书中获取更多布局、色彩、字体的内容,发现还是太少了。图灵系的书翻译不错。」

相对应的,《写给大家看的设计书》是我真心想看的设计入门书。作者的文字功底好,经验丰富, 范例适合,取材广泛,总之,是不可多得的一本好书。

more ...

关于 NetworkManager / PolicyKit / ConsoleKit 的那些屌事

在使用 Awesome 的过程中,我又遇到了一个老问题「NetworkManager 在非 Gnome 环境启动后,会无法 添加 / 删除 / 编辑 无线连接」。明眼人一看就知道, 这是权限的问题。

问题描述

我的环境是 ArchLinux / xmonad 0.10 / awesome v3.4.11 / GDM 3.4.1 / NetworkManager 0.9.4.0, 下面我用 awesome 做示例,其他非 Gnome WM 也应该是类似配置。

我的 WM 启动流程是: 通过 GDM 启动 xmonad / awesome,启动 xsession 是 /usr/share/xsessions/awesome.desktop, 内容如下

more ...

使用独立图床子域名

最近在将 Wordpres 切换到 OctoPress,顺便将图片统一放到Upload4D管理。

我挑选图床管理程序有下面几个需求,需求由强到弱排列:

  • 开源
  • 简单
  • 不需数据库支持
  • 支持分目录
  • 允许上传图片
  • 支持后台直接操作文件
  • 支持用户管理,不允许其他人上传
  • 页面美观
  • 不要生成缩略图等文件
  • 软件持续更新

于是我踏上了「考古之旅」,先后试用了 MiniGal Nano / MG2 / CF Image Host Script / minishowcase 等等图床软件,评测记录如下。

more ...