Looking forward to change

Daniel Lv's weblog

RubyConfChina 筹款页面

缘起

我是第四次筹办RubyConfChina,借着 RubyChina 的人气,大会的筹办一开始蛮顺利的,年初就定了Matz先生的行程,6月份定了会场,9月份定了所有的讲师和赞助。这次大会的沟通协调工作量大概是往年四倍多,因为大会的规模增加了四倍呀。事情往往一开始非常顺利的话,到了后来就会生出许多曲折,本次大会也不例外。

从写稿的时刻算起,距离本年度的Ruby大会倒计时24天。筹备工作进入了冲刺阶段。刚刚过去的一周,充满了各种纠结,各种无奈,真的是好漫长,好漫长的一周。到底发生了什么事? 具体的情况,在下面这个链接中有详细的说明:

RubyConfChina 筹款页

这是一个众筹页面,用来募集办会的资金,当这个页面已经完成到准备发布的时候,我决定放弃这次众筹页面,不采用这个方式来筹集资金了。为什么放弃?下面我会用问答的方式,把我对众筹页的考虑,以及未尽的话都写出来吧。

Q: 为什么要发起一次众筹?

10月18日那天下午,我去一位好友的工作室拜访,在回来的路上收到通知,大会会场不再免费,要我们自筹5万元场地费。当时我就暴走了,抓起电话联系我所有可以联系的相关的人,其实最终结果一直是协商到了第三天才有了定论。在没有主意的时候,两个人我非常感谢,一个是VMware的Frank,他其实给了我一个Backup的方案,而这个方案是我万不得已的时候就会需要。另外一个人是盛大创新院的老庄,老庄帮我冷静分析了一下情况,给了我一个可供操作的对策,发起一个众筹网站,为了吸纳热心的Ruby爱好者的帮助,也为了完成一次危机营销,说不定能解决问题,还能借这个方式达到宣传推广Ruby大会的目的。

Q: “页面中提到组织者之间分歧很大,其实并未完全达成一致”怎么说?

过去三年,我们努力为大家办了三次免费的大会,那么今年突然要收费了?其实一开始我们计划免费的,要办最好办一场免费的大会。有一个核心因素决定了是收费还是免费,考虑到创智天地中饭难解决的问题,我们决定给大家定饭,中午时间不让大家离开会场太远。注意,购票定饭不是强制的,如果你不需要组织方提供中饭,那么你完全可以不必买票,你依然可以不受限制的参会。当出现场地费问题后,要不要众筹,大家还是觉得,如果你已经找了赞助,还卖票,还直接从大家哪里筹钱,为什么我们处处跟别人要钱?其他人会怎么看?这是几个与会者最大的担心,这个担心是不无道理的。

Q: 如果这个众筹页面发布出去,会有什么样的影响?

说实话我不知道,页面做好了以后,我先发给了几个熟人朋友,华顺,老庄,几个大会志愿者,好友玎玎,Terry等等。我收到了非常多的带有强大正能量的反馈,包括长篇的全文订正,包括各种支持,鼓励的话语。在征求他们意见的时候,我就要求大家只关注内容,不要捐款,但是还有几个朋友表示要立即捐款,还有几个朋友行动起来,开始帮我寻找身边,圈子里面的潜在的赞助商,帮我宣传,推广,争取赞助。今天上午,我接到了来自棒棒糖的电话,一番沟通我又落实了2千元赞助,感谢棒棒糖成为我们的铜牌赞助商之一。Dingding跟我说,他被我的晓之以情,动之以理的页面感染了,真心想要帮助。

Q: 既然小范围内效果这么好,那么为什么不发布出去?

其实是明眼人仅仅从我披露出的信息中找到了症结,帮我找到了解决问题的另外一个途径。这次问题其实就是2万元钱,而我自己已经解决掉了大部分了,而小部分却采用这种可能备受争议的方式,其实有些冒险,如果带来太多负面评价,对大会的品牌和推广都不利。其实还有其他途径的,朋友问我为什么一定要给大家定30元的中饭?因为我想给大家定必胜客披萨,根据我参会的经验,招待大家吃一顿披萨大家普遍会比较满意。当遇到了资金问题,就不能给大家吃披萨了,可以稍微便宜一点,比如每人20元,也可以安排大家吃好。这样可以节约出来了8千元,问题不就解决了嘛?虽然整体的伙食水准下降了,但是相比说服大家去众筹来说,到底哪个更容易让大家接受?既然问题能够从内部解决,那么是不是可以不必走外部途径?这些问题让我一下子茅塞顿开,决定放弃众筹这个方案,尽管努力做了这么一个页面,没有用上有点不甘心,呵呵。

Q: 既然不用众筹,怎么说服大家接受伙食标准下降这个问题?

我会通过其他方式的弥补的,绝对不会亏待大家。大会最重要的就是会议质量。拿最近的PyCon2012大会举例,我作为见证者(其实我是上海会场的现场主持人),大会给参会者留下了糟糕的体验,Ruby大会的几个负责人,大家立即开始讨我们怎么能够保证质量,让大家满意,尽量不重蹈PyCon的覆辙。我已经要求OpenShift,盛大云,以及其他来自厂商的主题分享人这周内提交PPT给我,我们通过PPT审核主题内容(主要是是否夹带广告)。如果内容方面跟大会主旨不符,我们先撤下,然后要求对方证明自己的主题值得上我们的大会。如果水太大,我们哪怕全部换上开放式讨论话题,也要严防死守很水的主题,确保大会干货质量。OpenShift跟盛大云已经立即响应,从他们的调整内容看,比较令人满意。我希能经过这么一轮敲打后,厂商们的主题会缩水不少,这样演讲的内容也会有较多干货。现在已经到了会议筹备的冲刺阶段,我们都在努力尽量办好这次大会,需要大家的支持与理解。

Q: 为什么页面上不公布明细财务报表?

其实是应该公布的,但是希望稍微能晚一点公布出来,因为有些具体条目我只有估算,还要去落实,而有的条目,要到大会开始之前才能落实最终的数字,所以现在有部分条目,只有一个大差不差的约数。收到的赞助费,所有演讲嘉宾的差旅费,食宿都已经确定了。大会的中饭,茶歇要看会议最终的售票情况,实到人数,所以现在我只按照400人来估算。真心希望更多的人来参会,但是人多压力就更大了,呵呵。还有个支出的大头是开发票要缴纳的税款,以及帮助走账的公司的人情往来费用。这次办会是社区办会,背后没有实体公司,要找朋友公司帮助解决财务走账问题,每家赞助公司,我都会问小额赞助是否能用收据充抵?如果要发票的话,餐饮,住宿发票能不能用?目的都是为了能节约一点算一点,想要节约开支也不容易,拜托朋友公司帮助开票,欠下的人情债是不能列入大会预算中的,这些其实都是我自己去埋单了。待稍微晚些时候,很多条目落实了,我会把财务报表完整公布出来,这样能最大限度的减少眼下的争议,质疑,也节约一些时间用于解释。我希望能多花点时间精力到筹备会务本身,还要大家的支持与理解。

Q: 那么你们这么辛苦办会,为了什么?

真的辛苦,过去每次办会我都会产生一个念头:真心不容易,明年我真不愿意再办了。但是另外一个念头会同时产生:真心觉得自己的付出都是有意义的,都是值得的。为了今年办会,我耗费在各种事务上的时间,保守估计,至少再200小时以上,这意味着一个人月的工作量。但是回过头来,通过努力能被大多数人肯定,被大多数人认可,我觉得值了。如果没有这些人的认可和支持,大会早就办不下去了。过去三年的积累,让今年的计划两天,两个会场,24个主题成为了可能。如果在两年前,哪怕是一年前,真的不敢想。时间的损失,金钱的损失,工作上的耽搁,我就不会计较这么多了,因为我很满足。

Q: 还需要帮助么?

要的,现在还有5千元的资金缺口,虽然我关闭了个人捐助的路径,但是以公司方式的捐助渠道依然开放,希望使用Ruby的公司能关注我们,支持我们,不需要太多,小额赞助就好,500,1000,最多不超过2000。这几天来自周围朋友以及社区的热心会员然我感动,我现在更有信心了,办会剩下的这些钱一定会筹集到的。这里我还想跟和所有相关公司保证,在会议期间,我们能给满足公司的尽量满足,能做到的一定做到,让RubyChina社区和公司建立长期合作关系,已经跟我们建立良好关系的公司,比如VMware,CloudFoundry,盛大云,Upyun,这些公司都可以作为例子,我们社区和公司良好合作互动,一起去兑现建立社区之初的承诺:

We push the China Ruby & Rails community forward!!

Update:


我们通过调整伙食费的预算,已经从内部解决5千元的资金问题。感谢大家的关注和支持! 在RubyChina论坛上,我发起了一个主题贴,详细说明此事:http://ruby-china.org/topics/6278 公司赞助通道还会继续开放,虽然已经临近大会开幕,如果能在筹集一两笔小额赞助的话,我们就可以改善大家的伙食,提升大家的参会体验,同时我们能够远道而来的演讲嘉宾们照顾的更好。

用OptionParser构建Command Line工具

Ruby除了rails还能做什么?

这两天Ruby-China上有个一个讨论,关于Ruby除了rails还能做什么,其实除了Rails之外,Ruby能做的太多太多了,不过就我来说,除了用于Rails开发之外,Ruby我用的最多的就是写各种Command Line工具来解决各种小问题,Command Line工具又称为命令行工具。

提到用Ruby写命令行工具,就绕不过一个问题,如何解析命令行参数?

Unix下的命令行工具

先啰嗦一下Unix下的命令行工具,Unix的命令行工具历史悠久,这里面故事非常非常多(以后再讲,或者参见Unix编程艺术)。随着时间的推移,对于如何正确构建优良的命令行工具,Unix社区慢慢形成了一整套完整的Convertion以及惯用法,如果你的命令行工具遵从这些Convertion,那么用户将会非常容易的去使用你的命令行工具,甚至通过简洁的方式,将你的命令行工具和各种其他工具组合起来,用来完成各种复杂的操作。

正确的处理命令行参数对于写出高质量的命令行工具非常重要,那么如何正确的处理命令行参数呢?如果有C语言编程经验,或者用C语言写过命令行工具的人可能很熟悉getopt(GNU getopt_long()),getopt是C Library中一个专门用于解析命令行参数的工具,通常用C去写命令行工具的时候,getop是一个很自然选择。

用Ruby写命令行工具

当使用Ruby写命令行工具的时候,我们在不借助任何内置/外置的命令行参数解析工具的情况下,可以直接从ARGV取到传入命令行的参数,然后手工判断,验证并执行后续操作。不过从遵循Unix的命令行工具的Convertion角度来讲,我不建议你直接从ARGV取数值,而是利用现有的库来作这件事情。Ruby的标准库内置提供了一个getopt的Ruby实现GetoptLongGetoptLong基本上模拟了C语言版本的全部借口/功能,不过Ruby开发社区不推荐你使用GetoptLong,而是建议使用另外一个也是内置的且更加强大的解析库:OptionParser

这个世界上总是有人不断的重新发明轮子,除了Ruby已经内置的OptionParser,还有下面这些第三方实现的轮子:

Thor是Rails 3以后内建的命令行工具,严格意义上说,Thor不仅仅用于解析命令行参数,而是用于替代rake作为新的task标准工具,Thor的命令行参数的Parser是自己实现的,我个人建议在写Rails的task的时候,把Thor作为首选,但是作一般用途的命令行工具,Thor有点overkill了。

Gli是一个用于建立“Git-Like Interface Command Line Parser”的工具,这里我简单给出一个什么是“Git-Like”的解释。通常Unix下的命令行工具都符合一个哲学,即“作一件事并且把它做好”,但是有些功能强大复杂的工具,如git,可以通过指定不同的Action执行不同的操作,比如gitpushpull操作:

1
$ git push
1
$ git pull

就是两个完全不同的操作,但是他们的command部分都是git,只是action部分不同。我们也可以把这样的通过不同的action来实现不同的操作的命令行工具叫做Command-Suit工具,即从功能上看,它不是一个命令,而是一个命令的suit集合。Gli就是帮助你快速实现这种Command-Suit的框架,如果你需要编写复杂的命令行工具,Gli是一个不错的选择。

TrollopChoiceOptiflag都是命令行参数的Ruby Parser,他们的目的一致,而且他们解析过程都遵循Unix的约定,只是实现各有不同,用法也不同,不过对我来说,他们都是一回事。就Unix命令行来说,参数只有Options,Arguments,以及Actions而已,所以具体用哪个,看你的个人喜好,简单对比下来我认为Choice的DSL语法最易读,简洁,优雅,如果你需要这些第三方Command Line parser的时候,不妨考虑一下Choice。不过我奉行另外一个原则,如果系统内置了的,我就不考虑第三方gem,而且Ruby内置的OptionParser足够强大,能满足我对解析Unix的命令行参数的一切需求,所以我优选使用OptionParser。这里我简单猜测一下为什么还有这么多第三方的轮子,第一是不知道Ruby已经内置了这个,第二个可能就是不爽Ruby内置的这个parser的文档或用法,虽然OptionParser足够强大灵活,但是不代表它好用,容易上手,相反,它的文档就相当坑爹!

用OptionParser创建命令行工具

下面这张图就是Ruby给出的OptionParser的文档,除了这张图片之外就是一个官方范例,然后就没了… 说实话我第一眼看了这张图和官方范例后感觉看不懂,需要反复通过Google各种文章和范例,才了解到了OptionParser的基本用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+--------------+
| OptionParser |<>-----+
+--------------+       |                      +--------+
                       |                    ,-| Switch |
     on_head -------->+---------------+    /  +--------+
     accept/reject -->| List          |<|>-
                      |               |<|>-  +----------+
     on ------------->+---------------+    `-| argument |
                        :           :        |  class   |
                      +---------------+      |==========|
     on_tail -------->|               |      |pattern   |
                      +---------------+      |----------|
OptionParser.accept ->| DefaultList   |      |converter |
             reject   |(shared between|      +----------+
                      | all instances)|
                      +---------------+

通常的Unix命令行参数包含下面这些形式:

  • Option - Option主要功能是用于调整命令行工具的行为,Option的表现通常有两种形式,short option或者long option。Option的类型有两种,switchflagswitch不带argument,而flag带有argument。
  • Argument - Argument通常表示命令行工具要操作的对象,通常是路径,URL或者名称等等。
  • Action - 表示命令行工具的行为,比如git命令的push或者pull等等。

举个例子git log --max-count=10git是command。log是action,表示查看git的提交历史。--max-count就是option,表示最多显示N条commit记录。而最后的=10就是argument,表示option的数值,即查看最后10条历史提交记录。所有的Unix命令行工具都遵循这样的一个约定,这里需要主意一下,Argument前面的=在很多命令行工具中是可以省略的。

OptionParser创建一个简单的命令行工具,通常我们只需要创建一个OptionParser的实例instance,然后给这个instance传入一个block,在这个block内部我们就可以使用OptionParser提供的方法来解析命令行参数,特别是用on方法来根据定义捕捉各种参数,并将参数解析成可被使用的Ruby数据,如String,Boolean,Array以及Hash等。而on方法最让人困惑的地方就是它异常灵活参数处理,比如on方法的第一个参数,如果是一个-加一个非空格字符,则把这个参数当作switch来处理,例如on('-n'),如果是一个-开头的字符,后面跟着一个空格外加另外一个字符,那么就把这个参数当作flag处理,例如on('-n NAME')。如果on方法的参数超过两个,并且两个都是String,那么则视这两个参数表示一个意思,例如on('-n NAME', '--name NAME')。如此这般的例子还有很多,如果有更高需求的朋友,我建议你还是直接去啃源代码吧。

下面我创建一个名为my_awesome_command.rb的命令行工具,这个工具直接输出我的命令行参数解析的结果,我用中文注释来说明OptionParser视怎么用的:

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
#!/usr/bin/env ruby

require 'optparse'

options = {}
option_parser = OptionParser.new do |opts|
  # 这里是这个命令行工具的帮助信息
  opts.banner = 'here is help messages of the command line tool.'

  # Option 作为switch,不带argument,用于将switch设置成true或false
  options[:switch] = false
  opts.on('-s', '--switch', 'Set options as switch') do
    options[:switch] = true
  end

  # Option 作为flag,带argument,用于将argument作为数值解析,比如"name"信息
  opts.on('-n NAME', '--name Name', 'Pass-in single name') do |value|
    options[:name] = value
  end

  # Option 作为flag,带一组用逗号分割的arguments,用于将arguments作为数组解析
  opts.on('-a A,B', '--array A,B', Array, 'List of arguments') do |value|
    options[:array] = value
  end
end.parse!

puts options.inspect

执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ruby my_awesome_command.rb -h
here is help messages of the command line tool.
    -s, --switch                     Set options as switch
    -n, --name Name                  Pass-in single name
    -a, --array A,B                  List of arguments

$ ruby my_awesome_command.rb -s
{:switch=>true}

$ ruby my_awesome_command.rb -n Daniel
{:switch=>false, :name=>"Daniel"}

$ ruby my_awesome_command.rb -a Foo,Bar
{:switch=>false, :array=>["Foo", "Bar"]}

希望以上内容能够帮助你掌握写出能解析符合Unix标准的命令行参数的工具,如果要写出易用,对用户友好,跟其他命令行工具互动良好,可测试,可维护,可格式化输出内容的真正awesome的命令行工具,您仍然需要继续努力,加油吧!

ActionMail中的enable_starttls_auto

某个手上的项目是一路从Rails 2.x.x升级到了Rails 3.1.1。在老版本的Rails中,如果需要通过Gmail的SMTP来发送邮件,需要给Ruby的Net::SMTP打个smtp-tls的补丁,或者通过类似的插件如smtp-tls来解决问题。

通过bundle升级过程中发现gem无法找到smtp-tls插件,因为这个插件并没有host在 http://rubygems.org上,而是host在 http://gems.github.com。在这个插件的homepage上说如果Rails >= 2.2 并且Ruby的版本在v1.8.7以上,只需要在你的ActionMailer的config中配置enable_starttls_auto即可。

1
2
3
4
5
6
7
8
9
ActionMailer::Base.smtp_settings = {
  :enable_starttls_auto => true,
  :address => 'smtp.gmail.com',
  :port => 587,
  :domain => 'example.com',
  :authentication => :plain,
  :user_name => 'user',
  :password => 'secret'
}

但是读ActionMailer源码发现,Rails的默认已经打开了enable_starttls_auto这里有一些相关的讨论。所以如果你用上了Rails 3.1.1或者以上版本,你无需作任何特别的设置即可工作。

1
2
3
4
5
6
7
8
$ rails c
Loading development environment (Rails 3.1.1)
>> include ActionMailer::DeliveryMethods
=> Object
>> smtp_settings
=> {:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true}
>> smtp_settings[:enable_starttls_auto]
=> true

如何在Mac下快速部署 Nginx + Passenger + Rails

针对于新入门的开发者,如何在 Mac 下用 Nginx + Passenger 部署 Rails 的运行环境。

系统需求

  • Mac OSX Lion
  • 梯子

步骤0 安装环境依赖

安装Xcode 4.1,Xcode4.2以及更高的版本在 Lion 仍然存在一些兼容性问题,强烈建议使用XCode 4.1,下载地址:

https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.1_for_lion/xcode_4.1_for_lion.dmg

安装RVM

$ bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

配置RVM自动加载,将下面这一行代码添加到~/.bash_profile中,然后退出iTerm并重新启动

[[ -s "/Users/Daniel/.rvm/scripts/rvm" ]] && source "/Users/Daniel/.rvm/scripts/rvm"

安装 ruby-1.9.2-p290

$ rvm install 1.9.2

设置系统默认使用 ruby-1.9.2

$ rvm use 1.9.2 --default

步骤1 安装 Rails

安装Rails

$ gem install rails

Rails安装完成后,创建一个rails项目,假定你的项目叫做:awesome project

$ rails new awesome_project

启动Rails,并访问 http://localhost:3000

$ cd awesome_project
$ rails server

步骤2 安装 Passenger 和 Nginx

首先通过gem安装passenger

$ gem install passenger

因为Nginx不支持动态module载入,所以需要通过Passenger来自动下载,编译,安装由Passenger修改版的Nginx:

安装Passenger + Nginx

$ passenger-install-nginx-module
  1. Yes: download, compile and install Nginx for me. (recommended) The easiest way to get started. A stock Nginx 1.0.10 with Passenger support, but with no other additional third party modules, will be installed for you to a directory of your choice.

  2. No: I want to customize my Nginx installation. (for advanced users) Choose this if you want to compile Nginx with more third party modules besides Passenger, or if you need to pass additional options to Nginx’s ‘configure’ script. This installer will 1) ask you for the location of the Nginx source code, 2) run the ‘configure’ script according to your instructions, and 3) run ‘make install’.

Whichever you choose, if you already have an existing Nginx configuration file, then it will be preserved.

Enter your choice (1 or 2) or press Ctrl-C to abort: 这里建议选择1

Please specify a prefix directory [/opt/nginx]: /usr/local/nginx
当询问nginx的安装路径的时候,个人建议安装到/usr/local/nginx

当安装完成后,会在console中提示如何配置Nginx
Passenger会自动帮你将下面两行添加到Nginx的配置文件中/usr/local/nginx/conf/nginx.conf(很人性化)

http {
  ...
  passenger_root /Users/Daniel/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.10;
  passenger_ruby /Users/Daniel/.rvm/wrappers/ruby-1.9.2-p290/ruby;
  ...
}

server {
  listen 80;
  server_name www.yourhost.com;
  root /somewhere/public;   # <--- be sure to point to 'public'!
  passenger_enabled on;
}

请不要忘记将nginx命令行程序连接到/usr/local/sbin

$ sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

步骤3 配置Nginx + Passenger + Rails

关于Nginx的配置,请参考Nginx的官方网站以及Passenger的官方网站

修改hosts文件,给你的项目一个本地域名, 比如awesome_project.local

$ sudo vim /etc/hosts
127.0.0.1 awesome_project.local

测试hosts

$ ping awesome_project.local
PING awesome_project.local (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.054 ms

继续配置Nginx, 这里我给出一个最小可运行的Nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

nginx.conf

worker_processes  1;

events {
  worker_connections  1024;
}

http {
  passenger_root /Users/Daniel/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.10;
  passenger_ruby /Users/Daniel/.rvm/wrappers/ruby-1.9.2-p290/ruby;

  include       mime.types;
  default_type  application/octet-stream;
  sendfile      on;
  keepalive_timeout  65;

  server {
    listen 80;
    server_name awesome_project.local;
    root /Users/Daniel/awesome_project/public;
    passenger_enabled on;
    rails_env development;
  }
}

测试Nginx的配置文件语法是否正确

$ sudo nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动Nginx

$ sudo nginx

如何在修改Nginx的配置文件后,让Nginx载入新配置

$ sudo nginx -s reload

如何停止Nginx

$ sudo nginx -s stop

如何在不停Nginx的情况下,重新启动Passenger

$ cd path/to/your/awesome/project
$ touch tmp/restart.txt

好了,这个时候你可以打开浏览器,访问你的awesome_project网站了

http://awesome_project.local

最后,希望你能够在Rails的开发中找到快乐!

WordPress to Octopress Migration

差不多有有一年多没有写Blog了,最近又动了心思想要继续写下去,为什么就不解释了。

原来的Blog用WordPress搭建,曾经数次打算想要好好认真研究一下WordPress本身,最终都无疾而终,对WordPress始终爱不起来。看了台湾的xdite的两篇关于Octopress的介绍,就忍不住动手试了下。

alt Octopress

迁移过程出奇的顺利,现在这个Blog直接使用GithubPages,免费,原来WordPress里面的文章全部都迁移过来了,评论部分我按照Xdite的说法试着通过DISQUS迁移,不过没有成功,不过问题不大,原来的评论就算了不要了。

作为程序员,对Markdown格式都比较有爱,Octspress不使用数据库,两条命令直接deploy到Github上,非常流畅。其他关于Octopress的好处和如何迁移等内容,xdite已经写的非常详细了,我这就在一一叙述了。

Shanghaionrails 第八次线下活动

Shanghaionrails 线下活动每个季度举办一次,今年3月份第七次线下活动成功举办后,我们和JavaEye合作成功筹办了第二届RubyConfChina活动,10月31的活动是shanghaionrails第八次线下活动,同时shanghaionrails也迎来了自己的三岁生日!我们就是这样的组织,我们定期聚会碰头,我们喜欢交流心得… 各位铁杆Rubyist们,我们不见不散!

[时间] 2010年10月31日下午 1:00 PM

[地点] 上海市 徐汇区 宜山路889号齐来工业城1号楼5楼(篱笆网) 本次活动由篱笆网赞助,感谢篱笆网提供场地支持。

[交通] 交通很方便,9号线地铁到漕河泾站1号口出站公交205,120,252,809,131,804,152。自驾车可以停在下图的免费停车区域,齐来工业城也有停车场,地面5元/小时。

[报名方式] 在线报名地址 http://shanghaionrails.51qiangzuo.com

[活动安排] 我们安排了四个主题演讲,以及一个头脑风暴环节,现在每个演讲嘉宾已经确定,各项组织筹备,推广活动已经开始,请大家奔走相告,请告诉身边用Rails得人,对Rails有兴趣得人。主题演讲环节如下:

《你不需要知道的 Ruby》

莫枢,吕戈 嘉宾介绍:Haskell 爱好者和 Sinatra 爱好者,目前在淘宝写点 Java 的 Annotation Processor 和页面。什么都懂 …… 一点儿。 主题介绍:主题为 Ruby 1.9.2 的新特性和渊源,还有未来的 Ruby VM 展望之类的 …… 会稍微牵涉一点实现但不会深。

《如何从小树成长为大树 – 薄荷网基于Ruby on Rails网站开发运营实践》 谢文威 Vincent 薄荷网 架构师 嘉宾介绍:Vincent是中国最大的减肥网站薄荷网(boohee.com)的主要创始人之一,在薄荷网负责产品技术架构工作。他在2007初开始接触Ruby on Rails,深为ROR的高效和优雅所震撼,毅然把整个网站系统迁移到ROR上,成为中国最早一批尝试ROR螃蟹的人之一。除了ROR,Vincent在SEO,数据挖掘和人工智能也有丰富经验和浓厚的兴趣。 主题介绍:薄荷网是国内基于ROR开发运营的规模较大的几个网站之一, 网站由小到大的过程,就好比一棵小树成长为一棵大树,中间需要付出辛勤的劳动,Vincent将与大家分享他们的酸甜苦辣, 将涉及到部署方式选择,异步处理,性能优化,系统扩展和应用划分等等经验和挑战。

《RailsRumble 2010》 叶玎玎 嘉宾介绍:就职于Intridea.com,Ruby/Rails程序员。 主题介绍:在刚刚结束得RailsRumble2010上,叶玎玎带领着IntrideaPresently Team成功的在48小时内完成并release了ImGateway。本次RailsRumble上,Intridea的工程师们自发组织了四个团队参加比赛,而Presently Team的叶玎玎,吕国宁,太檑均是第一次参加。玎玎讲在本次活动上给大家介绍RailsRumble,参赛的经验心得,以及ImGateway,ImGateway背后的故事等。

《Understanding Mongoid》 黄志敏 嘉宾介绍:就职于Ekohe,Ruby/Rails程序员,开源社区的参与者,rails-bestpractices.com的创建者。 主题介绍:Mongoid是Ruby/Mongodb的ORM,这次演讲我会简要地介绍Mongoid的使用,主要介绍Mongoid的实现,希望大家能够对ORM的实现有所了解。

《头脑风暴 - Rails程序员的职业发展规划》 介绍:这次活动中,我们安排了一个特别的头脑风暴环节,邀请了几位资深的程序员,行业专家,跟大家一起来一次程序员的职业发展规划的头脑风暴,我们已经邀请了有dlee,Sting,Shuanghai Linux user group的Thomas,篱笆网的CTO吴立峰,还有Primes Plus的Mick Cai等人,相信活动一定会精彩,我们不见不散。

——Shanghaionrails活动组委会

[转] 我的丈夫是个程序员

缘起:Renae和她得老公都是我得同事,Renae负责Intridea的PR工作,她的老公Adam是公司的Director of Development。前几天Renae在自己的Blog写了一篇文章,叫《My husband is a programmer; I have no idea what that means.》,被国内一个IT评论网站全文翻译,译名叫做《我的丈夫是个程序员》。其实我一开始并不知道这篇文章,是热心网友在Twitter上推荐,又被图灵的刘老师人肉搜索发现这篇文章作者跟我在一家公司,RT给我后才得知的。将全文转载于此 :)

========== 转载分割线 ==========

我的丈夫是个程序员

我在11年前认识了的我丈夫。当时是南缅因州大学新生入校的日子,我带着吉他去宿舍。他饶有兴趣的盯着我的吉他。之后他敲响了我的房门,自我介绍道:“嗨,我叫Adam,我就住在走廊的对面。我是个计算机程序员!”

他做了一很勇敢的决定。 10年前当程序员并不像今天这么“火”,这个行业并不被社会重视,他似乎也根本不在意这些。不管怎样,我们相爱了。我当时并不懂编程,但却被他那义无反顾的精神和毫不在意被人当作怪人的态度打动。是发现了他也弹吉他使我们走到了一起。如果仅是他住在走廊我的对面,命运也不会做出这样的安排。

在随后的一周周,一月月,一年年,他慢慢的吸引了我的注意力,他会对着他的游戏机的硬件清单大发雷霆,他能在虚拟世界里的游戏竞赛中为我独尊,他在ColdFusion平台上制作了他的毕业论文项目,他会用长篇大论来解释他的编程理论。我会安静的坐着,惊奇的看他把一台PC机拆成零碎。我听他讲编程上的问题,看他开发网站。与此同时,我还只是朦胧的感觉到我未来的职业应该是跟科技和英语有关,但我着实对Adam的生活发生了兴趣。

几年以后,我很自然的就知道了,“Ruby”并不是指的七月的生日石,而“Ruby on Rails”也不是邻区的新潮人在火车轨道上举行的敬拜珍贵宝石的奇怪活动。几年时间里,我事实上也培养出了他的同样的兴趣。2005年末他深深的喜欢上了Ruby,我全力支持他,而且也知道Ruby的不可思议之处。几年后,当我决定了开始学习Ruby,我在博客上写了一篇关于Ruby社区的文章。很多人都很奇怪为什么一个像我这样的Ruby新手会对Ruby社区有如此的了解。答案是,我在决定学习Ruby编程之前已经关注这个社区很久了。在我曾经打开TextMate编辑器、保存第一个.rb文件之前,我就知道了这个社区里有那些大人物,Ruby的发展趋势,和历史事件。

当你的伴侣开始跟你讲编程的问题时,或讲最新的测试框架时,你的眼神里是否显露出一种呆滞和恍惚?事情并不是你想象的单调乏味。问他问题,尝试着去理解!如今当我遇到女人们时,我并不回避给她们谈我的工作,谈我喜欢的电脑游戏,谈我着迷于 D&D 游戏以及其它这样的荒诞事情。通常我得到的回复是这样的几句:“编程?我想我丈夫做的好像也是这方面的。”对于此,我总是问道:“哦,真的吗?他用的是什么编程语言?”她们的回答每次都一样:“语言?哼,我可不知道。不止一种吗?我并不真正知道他在干什么。我对这些东西没兴趣。”

这每次都让我感慨万分。你嫁给了一个人,可是你对这个人花去将近40-50%的时间去做的事情一无所知——除了工作名称。我们是否可以把今天的高离婚率和他们对配偶的生活缺乏兴趣之间画一条危险的关联线呢?当两个人第一次相遇时,一个人很容易根据自己的”看法“而坠入爱河。但我认为如果配偶不能够对对方的爱好和生活工作有真正的了解,那么这两个人将很难经受的住生命的各种起起伏伏,艰难和考验,要知道,生活中每天都有挑战。如果你对配偶的每周40小时的工作内容没有一个基本的理解,你们就不能成为一体。

我并不是在建议当你遇到钟情的对象时要放弃自己个性和个人兴趣。而是要你睁大眼睛,用你的伴侣的视野去体验这个世界。我承认,有时Adam会在某天晚上对元数据编程谩骂个没完没了,此时我也就跟他的思想走不到一起了。但通常情况下我会投入到他的兴趣当中。而且为什么不呢?我爱他,这就要求我去了解他。而了解一个人就是要你们去相互讨论和理解对方的兴趣。 Adam会花数百小时艰难的听Ani Difranco, Dar Williams, 和 Iron & Wine 唱片,我会在一旁神经质的给他解释所有的歌词。在我的鼓励下他学会了打网球,尽管现在不得不忍受每次被他打败的结果。在大学里他看过我的芭蕾舞表演,他甚至都知道了不少其中的姿势的叫法了。下面的照片是我和Adam在徒步翻越缅因州Tumbledown山时拍的。它见证了Adam自愿从计算机旁走开,参加到我喜欢的户外运动中的事情。他很顽强。

hiking up Tumbledown Mountain in Maine 徒步旅行 hiking up Tumbledown Mountain in Maine

参与到你的伴侣的兴趣中并不是一件难事。如果你觉得很难,那你也许要思考一下自己是不是太自我了。即使朋友之间,我也努力的聆听和理解他们的兴趣和爱好。我经常会听到一些新奇的东西,经常我会为自己找到了一些新爱好。

就我来说,如果当Adam在奇怪的跟计算机大喊大叫时,我只是发呆,那我就不会有今天的生活。那是无数的小时的一起玩视频游戏,一起深夜编写手册,一起为新应用做头脑风暴式的讨论,一起野营旅行,一起听乡村音乐才铸就了我们之间的关系。即使你跟你的伴侣在事业上并不是相似的道路,通过对他工作和喜好的了解,你也可以使他为你打开他的心扉。这能扩大你的视野,帮助你减少生活中的不愉快。你们应成为一起工作的一体。我并不是像Adam那样做职业编程的;我也没有向那方面发展。我懂编程,但不幸的是,自小就没人给我积木做训练,在学校和家里也从来没人鼓励我学数学。工程学和解决问题的才能从来就没有培养出来。所以,当我想对编程感兴趣时,这对我的难度看起来比其他人大。但我的强项是写作,编程方面和技术方面的题材对我是个巨大的兴趣 – 所以,能得到Intridea社区管理员的工作让我的世界真正的兴奋起来。我关注着我喜爱的世界,我能感受到它的脉搏,我所做的一直给我带来回报,给我快乐。

所以,如果你和新朋友们在一起,想办法培养自己对他们爱说的事情的兴趣。如果你和老朋友在一起,通过询问他们的工作、倾听他们的回复来再次发掘你的生活爱好。不要假装爱好。不要做那种连她丈夫使用什么编程语言都不知的女孩子。你要做那种让你的丈夫的朋友吃惊于你还知道Java时什么的酷妻子,不做那种在讨论Ruby社区里的自由派时说出“亲爱的,我不知道你原来还是个珠宝商哪!”的妻子。

[英文出处]:My husband is a programmer; I have no idea what that means.

[补] 桃花岛杀人事件及后续

缘起:一篇补遗的游记,再不写出来就全部忘干净了。今年的端午节,参加了人民广场Toastmasters俱乐部(PS俱乐部)组织了一个OUTING活动:PS TMC 2010夏季风行 —— 2天1夜桃花岛浪漫之旅

桃花岛:桃花岛风景名胜区位于我国最大的群岛——舟山群岛东南部,是金庸笔下东邪黄药师的居住地。桃花岛地处东海环抱之中,气候宜人,峰峦起伏,山海云雾,风景独特,是理想的度假、休闲胜地。

这次桃花岛之旅太有趣了,令人难忘。印象最深刻的并不是桃花岛优美的风景,而是跟一群特别有趣的人在一起的这一段有趣得时光,以及在这段时光中生的那些有趣得事情。

  • PS得Jessica好强大,她特别擅长资源组合,联系景点,包车,安排行程,还特别便宜,鞍前马后一般把这么多人照顾得好好的,吃的好,住的好,玩的也好。太佩服她了!
  • 一大早乘地铁赶到人民广场,上地铁得时候,看到了一群威武得世博会保安哥哥。
  • 这次活动虽然是 PS俱乐部组织得,但是参加得人其实来自很多不同得俱乐部,比如IDEAL,NO.1,徐家汇俱乐部等等
  • 通知说6点半在人民广场博物馆正门前集合,去了才发现集合点就是个杯具,people mountain people sea…
  • 桃花岛怎么去?坐大巴走杭州湾大桥,过舟山连岛大桥,经沈家门坐船过海才能到达。
  • 坐大巴要四个小时,会不会很无聊?要知道全车人都是演讲俱乐部得搞怪精英,大巴上得时光绝对是亮点!
  • 此行认识了很多新得朋友,从上车开始时还有个自我介绍环节,到下车时大家就彼此玩熟了。
  • 天公不作美,自打踏上桃花岛,就开始阴天,下雨,一直岛我们离开桃花岛得哪个时刻,天空开始放晴。
  • 其实,美的东西是自发的,美的东西恒为美。就如同夜晚美丽的繁星,白天哪些星星也在哪里,只是你不懂得怎么去看而已。
  • 雨后的桃花岛,给人的感觉更加清新,秀丽,让人感觉很宁静,很放松。
  • 因为下雨的关系,没有拍很多风景照片,大家一起玩,一起闹的照片拍到了不少。
  • 海水很干净,沙滩上人也少,把双脚埋进沙子,感觉真好。
  • 酒店门口有好多水箱,里面养着各种海鲜,我发现了一种很诡异的生物,造型让我想到了电影《异性2》。
  • TMC俱乐部人才济济,大家都很会搞活动,晚上搞了一个现场版的非诚勿扰,真让我心惊胆战了一会~~~现场搜集到6个未婚无女友的男生(包括我),大家把我们狠狠涮了一回!男生旁边小黑屋排队,现场没有结婚的女生集体起立,等男生出来一个折腾一个……
  • 其中有两个男生,看到第一个男生出去后要面对的那个阵势,着实被吓坏了,然后跳窗逃出去了…BS他们,名字我就不提了。
  • 桃花岛上的饭,海鲜特别多~
  • 忘记提到一个人,孙小小,来的路上就坐她的边上一起玩三国杀时认识的, 关于孙小小的故事在TMC圈子可是一段传奇呢。

很多细节不需要我写,因为小小已经写了三篇非常棒的游记:

只有一件事情必须得提,就是杀人游戏。要说杀人游戏哪一点吸引人,可能不同人会有不同的答案,不过最基本的应该是做杀手隐蔽藏匿表演时候的刺激和做好人方成员时找出杀手时候的成就感了。因为是Toastmasters,大家的语言能力,逻辑思维能力,表达能力,公众演讲能力,心理素质,表演能力等都锻炼得很好了,所以当一群TMC高手坐在一起玩游戏的时候,没有什么比杀人更适合的了。

从到达桃花岛得下午开始,就没停杀过,吃饭得时候也在杀,甚至回去得路上,汽车转轮船得间隙也在杀,回去得大巴上继续杀,最后都回到上海了,车已经到了人民广场了,人没有杀完大家不下车……我们玩杀人得一群人中,女孩子比男孩子多,于是杀人现场经常就是两三个男生跟8~9个女生一起玩杀人,呵呵。

杀手游戏讲究技巧,特别是逻辑分析和心里分析,不过因为女孩子多得原因,我挖掘出另外一个技巧,就是眼神交流(我承认我从lie to me上学到几招)。女孩子不象男孩子,通常她们嘴上说自己不是杀手,可是她们得眼神会说话,而且说得都是真话,当说得和自己心里想得不一致得时候,她得眼神会闪烁,会飘忽,会避开你不敢跟你直视。但是当她们是平民或者警察得时候,眼神中又会自然流露出一种搜寻和质疑,特别是其中一个女孩子,她得眼神清澈见底,当我带着疑问得眼神看她时,她得眼神回应从未说过假话,正确率100%,呵呵,这种能力是一种感觉,是必须通过锻炼才能把握得哦,呵呵。

因为来桃花岛的头天我工作到深夜,几乎没有睡觉,晚上饭后大家集结在房间里继续杀得时候,我有一阵子特别困,几乎坚持不住快睡着了,结果给出了一些不符合逻辑得分析和线索,把整个状况给搅浑了,案情扑朔迷离,直到最后弄明白真相之际大家才恍然大悟,原来是被我错误的引导……后来第二天回去得路上有一局,我分析出Emily是杀手,以及她在保护另外一个杀手时,Emily惊讶于逻辑清晰严密,完全没有辩白得机会,当时Emily问我,你得逻辑思维能力怎么一下子突然这么厉害了?跟昨天晚上完全两个人,我回答说,因为我昨天晚上睡得很好呀,呵呵。

最杯具得人物是宏志,整个杀人游戏过程中,无论什么时候听宏志说话或者问宏志问题,大家都觉得不管宏志怎么说,都不是真话,于是集体把宏志票投死再说。其实宏志很冤得,因为大多数时候,他就是一个平民。所以教训就是——说话得时候该严肃时必须严肃,说话要厚道,不能让人感觉你不老实,呵呵。跳警最成功得是Divid,他很能别出心裁,作杀手得时候还玩过一次自裁,有且仅有得唯一一次成功的假跳警就是他,我承认,当时他骗过了所有人,结局就是,之后每次他说“其实我是个警察”得时候,再也没有人相信他了。

杀人游戏得整个进展貌似是一个不断高潮,而且越来越高得过程,游戏场面越来越精彩,争论越来越多,情绪也越来越高,后来大家意识到杀人这个游戏太有潜力了,必须在以后把杀人游戏继续下去,而且要搞成长期活动,于是所有参与杀人游戏得人都给我留下了联系方式,于是就有了桃花岛杀人游戏后续活动。从桃花岛回来后,我们已经搞了三次后续杀人活动,我参加了第一次,组织了第三次,据说第二次也相当成功,在一个酒店总统套房里面,20多人看球杀人high到极点,不过哪个时候我人在桂林,错过了 :(


----------第一次杀手活动总结----------

杀手们:

在Lorriaine和Mira两位同学在上周末成功组织了杀人俱乐部线下第一次聚会,取得了圆满得成功。再此对两位同学表示感谢。

遗憾

  • 著名演技派高手Luna同学居然周六不查邮件,不看手机,错过了这次杀人活动得时间。当天下午当我们接通Luna同学得电话后,Luna同学表现得相当得不淡定,深感内疚于自己居然错过了这次活动。
  • 另外一位演技派大师兼首席大法官Emily同学,居然自己得email地址不在杀手群邮件列表当中,导致她对此次活动毫不之情,在这个冷酷得事实面前,Emily同学哭爹喊娘般得立志要立即赶来加入组织,所幸及时被我方劝止。
  • Maggie同学因为外出无法参加这次活动,表现出了极大得遗憾
  • Emma同学和她得杀手老公均因为工作原因不能到场,他们二人衷心祝愿我们得杀人活动取得成功。

疑惑

  • 在现场两位美女相继电话邀请John同学来参与组织活动,均被John冷面拒绝,我很纳闷,遂问之,末了John同学短消息回复到:“下次一定来,让你见见什么叫演技派”,对此我只好笑而不语。
  • 此次到场共7人,其中不乏演技派高手Mira,David,Lv以及Jack (不过Jack得演技… 我个人觉得他是个偶像派),整场杀人游戏仍然展现出了应有得风采,各大高手巅峰对决,可能是因为大家实力都太强大,我们发现不管怎么调整规则,两轮之后,警察杀手身份立现,杀手始终陷入困境难以突围,甚至不准跳警,死人不能留遗言,也无法扭转杀手悲哀得命运,大惑不解…

收获

  • 在这次得杀人游戏中,大家彼此畅谈人生感悟,好不快活
  • 除了杀人游戏,Jack教会大家玩一种叫做“德克萨斯扑克”得游戏,非常过瘾,如果有人看过周润发演得赌神,那么就请回忆一下赌神中他们在赌桌上玩得游戏
  • 德克萨斯扑克是一种集勇气,智慧,谋略,胆识,运气于一身得游戏,对参与得玩家要求比之杀人游戏更有挑战,Jack在游戏中展现了超强得实力,用他强大得风险控制,危机管理,以及适时止损和关键时刻装腔作势得能力取得了很大得优势,但仍然被我采用逐步蚕食得策略将其赌资悉数归入囊中…
  • 在桌游吧玩到尽兴后,我们转战酒吧,欣赏了半场精彩得世界杯 德国大战英格兰

展望

  • 毫无疑问,杀人游戏这一极具潜力得活动必须继续组织,而且要周期性得组织下去
  • 各位实力派,演技派,偶像派杀手们,请继续展现你们得风采,魅力。务必请保持杀人得热情!

---------- 第三次杀手活动总结 ----------

第三次活动赶上了TMC得官员培训,一些人必须要参加培训,而另外一些则必须要去负责培训他们,所以都不能及时赶来,这个世界上得事情有的时候就是这么拧巴……不过铁杆杀手们不辞辛劳,培训结束7点后都要赶过来杀个几盘,这种精神真令人感动,这就是杀手精神,呵呵。而且因为大家水平都太高,甚至在第一个回合就直接把全部杀手给投票出来了,巅峰对决往往是一瞬间。

其他精彩得部分无法用文字表达,精华得部分不能用文字表达,所以没有来参加活动得人请自行YY,参加活动得人大家意会一下就好啦 ;-)

晚上几个朋友去Windows泡吧,后来又去MUSE看黑眼豆豆的表演,好开心!不过去得有点晚,只听到几首歌,但是现场气氛也是最high的时候,赞~

无题

了却了一桩心事,去作了一件带有仪式性的事情,这事搁在心里有半年,
各种思想准备,被理解,被谅解,亦或者被误解,带着坚定决心,
过程看似云淡风轻,蛮拧得内心还是需要点时间来抚平,
去跑个15公里,精疲力竭之后会应该很容易进入梦乡吧?

对待自己要忠实,犹如先有白昼,才有黑夜
要这样,才能对人也忠实

-哈姆雷特

———- 语无伦次得分割线 ———-

曾经是一个超级大胖子,从五月份开始天天跑步锻炼,明显又瘦了一点
有张照片是在最胖得时候拍得, 存照留念于此……

DSCN0073

ThinkInLamp活动归来

最后还是选择了去参加ThinkInLamp的活动,平稳顺利的完成了Sam交待给我的任务,主持了整场会议,没有出现什么大得纰漏,过关,呵呵 :D

今天得收获,以及会议中引发得思考很多,感悟也不少,首先是安居客的公司好强大,会议室也很强大,不愧是沪上最大最牛的房地产行业网站。而且今天的听众,有三分之一都是安居客的软件工程师。另外就是原来锅巴哥哥是我的老乡啊,他是阿克苏长大的,也是知青的下一代。其他相关内容,列个表在这里:

  • 麦包包的RongRong友情赞助了很多小礼品,还有现场宣传小册子,发现它们的包包很不错,价格还不贵,只不过我好像不是他们得目标消费人群。
  • 这次活动得所有主题是之前在网上6选4票选出来得,结果很洗具,2个技术话题被淘汰,4个非技术话题入选,这也反应了IT技术人员得普遍诉求,每天都在玩技术得人,其实对非技术领域得一些东西,往往更加有兴趣,呵呵。
  • 第一个分享嘉宾Sting是一个非常睿智得人,很善于独立思考,而且总结能力很强。我在不同得场合听过他讲过不同得东西,有web2.0创新,创业公司发展,技术人员自我提升,以及产品研发,项目管理等等。我理解Sting得核心思想始终围绕以人为本,这次讲技术团队得发展路径和陷阱也是如此。一个团队从组建到成熟到成功,是一个漫长得过程,会经过几个典型得阶段,不过在QA环节,大家最感兴趣得,仍然是第一个环节,如何招聘以及面试,呵呵。
  • 第二个分享嘉宾板子,25岁,工作三年,给大家讲得主要是职场感悟。我发现板子同学非常有潜力,PPT做的可圈可点,内容丰富,而且风格诙谐幽默,演讲过程中得发挥也很出彩,属于那种非常有潜力得类型,如果板子也加入我所在得TMC组织的话,只需很短得时日,他得演讲水平,功力一定会在我之上。
  • 锅巴哥哥太神了,这位哥哥在Oracle/MySQL两种数据库领域颇有建树,他走得是底层路线,拨开数据库引擎盖,直接解剖底层实现,研究数据库内核得结构和算法,并以此为基础进行针对性得调优,强啊。另外锅巴哥哥准备在ThinkInLamp得活动基础上开辟一个MySQL分支,专场讲解MySQL方面得内容,预计会在9月底10月得时候举办,我打算在自己得shanghaionrails社区推广下,因为这个太靠谱了。
  • 演讲嘉宾张博超和腾振宇两人来自同一家公司,而且讲得内容都跟敏捷开发有关,一个是理论,一个是实战,于是他们两个人合计了一下,就把两个演讲二合一了。于是乎这场演讲就变成了大家群体玩一个叫做《Innovation Game》得游戏,而且这个集体游戏让大家玩得很high,之后大家一起进行分析,总结。我很欣赏这种演讲教学方式,获益匪浅。
  • 腾振宇不愧是国内第一个注册敏捷教练,站在讲台上很有范,语言抑扬顿挫,停顿,肢体语言等演讲技巧运用得炉火纯青,牢牢抓住了大家得注意力。敏捷开发相关得理论以及方法学,涉及范围很广,而且偏理论,偏抽象。腾振宇非常善于利用生活中一些实例来隐喻敏捷理论,浅显易懂,赞!
  • 最大得收获是通过游戏,深刻理解了Queue理论,特别是在团队中,如何切分/拆分任务到一个合理得粒度,才能得到最优工作效率,如何优化才能帮助客户创造最大价值等等,敏捷是一门讲究实惠得艺术啊~
  • 当然了,会后得饭醉活动是另外一个亮点 ;-)
  • Sam一直跟我讨论创业话题,看来他是义无反顾要走上这条路了,身边得朋友一个一个都去创业,或者正在准备去创业了…