对于你需要天使投资么?的补充:
在杭州和北京的民工们可以在以下时间地点来参加:
- 3月3日 晚6:00-9:00 浙江大学紫金港校区国际会议中心139
- 3月4日 晚6:30-9:00 清华大学西阶报告厅(清华大学二校门北200米左右,清华大学大礼堂西侧。可乘校内公交到二校门,步行至西阶)
对于你需要天使投资么?的补充:
在杭州和北京的民工们可以在以下时间地点来参加:
广告一则:
Trilogy Ventures 创业沙龙(互联网 手机应用方向)

时间:3月2日18:00-21:00
地点:上海交通大学闵行校区光彪楼
欢迎去玩。
Update:补充一下,Trilogy去年和前年各投了一家,今年估计机会会多一些,因为专门成立了Trilogy Ventures China专门投早期,此外,当天Speech胜者貌似有3000块奖金。
其实开发过程中重要的不是采用了什么样的工具,流程甚至理念,重要的是作为开发人员开发团队应该把精力花在是你的开发变得更好上。无论是你喜欢XP这样的理念,还是因为喜欢Joel而简单地使自己的流程符合Joel Test上,这些问题出现的本质是让你把精力放在把事情变好而不是只是在做做事情。每日构建、单步构建和自动测试是把你从每天“做做构建”、“做做测试”这样的事务中解脱出来;使用源代码管理是让你避免浪费时间去反反复复做做过的事情;不要加班是让你意识到你要做得是效率上得改进而不是重复劳动来做体力活。无论是不是已经有了这些流程,开发人员始终可以做的是每天把精力花在使今天比昨天好上面。只要你有意识去花时间进行改建,那么你之前没有用源代码管理你自然会发现花了很多时间做出来得东西被猫吃了;你没有为每个bug添加test case自然会发现同一个bug会反复出现;你没有用单步构建和每日构建自然会发现每次要发布得时候都会手忙脚乱要通宵加班。而有了这样的意识,即使你已经符合了Joel Test的12条你仍然可以发现你可以使用自动发布来让客户看到每天的开发结果;你可以使用创建VM Image来解决不同开发人员开发环境不同,可能有遗漏的依赖没有放入源代码管理中;你会发现Git比SVN更好地解决了开branch的开销和常常需要它记录一部分不完整代码的问题。
所以,重要的是始终在开发过程中保持持续改进的意识,工具和方法论反而是第二位的。
比如始终保持一颗初心,比如走自己的路,让别人打车去吧,比如但行好事末问前程,比如不要后悔始终向前看,比如follow your heart。但是修炼自己的心性实在不是一件简单的事情,很痛苦很压抑。可是很多事情不能不做,不能不压抑。很多时候鱼和熊掌不能兼得,但是真不知道该取何者舍何者。
越来越发现,这个时代实在是工具太多了,多到有点让人讨厌了。随便干点什么,都要会一堆东西;学点新东西,发现要能用要再学一堆新东西。最近用ROR做点东西,发现真要做点Production Quality的东西,至少要用一堆工具,比如New Relic,比如Capistrano,然后如果想要用得爽还有一堆RSpec等等的东西可以用,更不用说HTML/CSS/Javascript/MySQL/Git这些基本的工具。如果在Java世界的话,用的东西更是多到让人厌恶。比起要用的工具,人生时间实在是短到让人绝望,不过没办法,只能慢慢玩了……
科技越来越发达,工具越来越多,每天的生活都要和你的电脑、软件还有互联网服务打交道。这篇,就来说说我现在常用的软硬件工具和服务:
笔记本一之N610c:毕业没几个月买了台二手的N610c,然后抛弃了原来的拼装台式机。可惜我买二手的东西寿命都不长,现在这台机器通常作为我的第二显示器在写东西需要参考的时候开着,干活是已然不行了,因为南桥主板芯片出了问题,USB口不工作了,电池也充不进电了。
这台机器系统是XP,基本只装了Firefox和Adobe Reader,因为主要用来看看东西啦。
笔记本二之Macbook 466:去年底离职之后把工作电脑上交了,然后立马去买了台新的铝壳麦书,很好用啊很好用,虽然从价格上来说不便宜,摄像头蓝牙都有,多点触控很方便,用惯了改用windows有时候还真有点不习惯……
这台现在是日常工作机了,每天开机自启动的是Skype和Adium,Adium的好处是可以整合多个IM,不用再MSN+ICQ+QQ+Gtalk开四个IM浪费内存了,而且Adium可以让你整合多个IM的分组,同时将不同IM上的同一人的多个帐号合并在一起,非常方便,不用再一个个IM看某人是否在线了。然后浏览器日常用的是Firefox,当然也装了Safari和Opera测试的时候用用,Firefox里的插件装得不多,发现其实天天要用的也就那么一点,目前只有Adblock Plus,Firebug,Google Gears,Google Toolbar,GreaseMonkey,Remember the Milk for Gmail,Web Developer,wmlbrowser和Zotero。写代码目前主要在玩Ruby和Rails,所以找了个Textmate用用,一直在考虑要不要花钱买下license,当然Eclipse和Netbeans也都装了,自带的Xcode也在,不过Netbeans和Xcode基本没用过;装了Subversion和Git作为SCM的客户端,当然,慢慢习惯用Git之后我觉得SVN可以抛弃了。日常的照片音乐都交给了自带的iLife,看PDF也是用的Preview,反正对我来说已经足够好了。看片用Mplayer 1.0,下载各大盗版则是Amule+Transmission。常常会用到自带的Stickies来记录点东西,自带的Dictionary也很好用,虽然装了QuickSilver,但是我还是更习惯Spotlight,不过貌似这玩意儿有越用越慢的趋势。当然,为了上网上银行,还是搞了个VMWare的Windows虚拟机的。
手机一之Nokia 6630:也是毕业没多久买的,到现在还正常工作。手机有强烈的诺基亚风格,就是难看,但是皮实经摔好用,电话短信不会有问题,也不会死机重启之类,电池也能撑三四天。买的时候也算是当时的牛机了,现在看上去则是连山寨也不如了。刚买那会儿装了不少软件折腾,还拿这个看电影听MP3啥的,现在上面只有三个非自带的软件,分别是A4输入法,MSN和UCWeb。意欲装Frings在手机上控制所有IM可惜它不卖面子始终没法用,而UCWeb则是战胜了Opera Mini占据了手机上的位置,常常用它在老婆逛街的时候看看Google Readers里订阅的内容。还值得一提的是,这台机器通过Google Sync可以把Gmail里的Contacts和手机上的双向同步,方便了备份和转移电话本了。
手机二之Blackberry 8310:去年买的号称全新机,看到号称这两个字你就知道是翻新机了,在不长的时间里已经出了两次问题,这不前两天又拿到JS那里去修了,每次买二手的东西,我的RP都很差,所以下定决心以后不碰二手的东西了。虽然常常不能好好用,但是不可否认Blackberry是设计优良的机器,虽然用不上push mail费了一半,但是这台机器通过Google Sync可以同步联系人之外,还能同步Calendar,然后买了Remember the Milk的Pro服务还能同步Todo list,就可以完全把PIM的功能随身携带。另外,上面的Gmail的客户端也很不错,因为是全键盘,通过快捷键操作还是非常方便的。还有个好处是开软件不像其他机器那么费电,机器的按键和滚轮手感也不错,现在我就希望这台机器这回修好别再出问题了。
MP3之iPod shuffle 2:一台银色的夹子shuffle,不该买的,话说这其实也是台二手的,新蛋上买的,不过用的实在不多,浪费了,话说二手真是我的诅咒啊。
互联网服务:Mail自然毫无疑问是Gmail。然后是一系列的Google服务,因为Google Reader的分享功能用它替代了Bloglines;用Google Docs做读书笔记或者整理各种零散的笔记;用Google Calendar做日程表,虽然最近没什么计划性。然后Todo list因为Google自带的实在是不太好用,所以用的是Remember the Milk,装了Firefox的插件所以可以和Gmail很好地整合。Blog是host在Dreamhost上的,然后代码则是用Github取代了不稳定的Google Code。
看了看,发现自己用的东西还是很简单的,同学们也来分享一下自己用的软硬件和服务吧。
译者注:本文原文来自Rails Guides,版本为January 3, 2009: First reasonably complete draft by Mike Gunderloy。本文根据原文,按照Creative Commons Attribution-Share Alike 3.0授权。
本指南涵盖了可用于Rails应用中的配置和初始化特性。通过本指南,你可以
1.调整Rails应用的行为
2.添加在应用启动阶段运行的代码
本指南的第一版是基于Rails 2.3的源代码撰写的。虽然不保证向前兼容,但是本指南涵盖的信息可广泛地用于Rails 2.2。
Rails(至少)提供了五个好位置来放置初始化代码:
Rails允许你使用一个预初始化器,在框架自身被装载前来运行代码。如果你把代码存放在RAILS_ROOT/config/preinitializer.rb中,这些代码会在任何框架组件(Active Record, Action Pack, and so on)之前第一个被装载。如果你想要改变任何初始化过程中某些类的行为,你可以在这里(preinitializers文件)做。
基本上来说,配置Rails所做的工作就是配置Rails自身以及配置Rails的各个组件。environments.rb文件以及针对特定环境的配置文件(比如config/environments/production.rb)允许你设定各个组件的设置。例如,默认的Rails2.3中的environment.rb文件中包含这样一条配置:
config.time_zone='UTC'
这是一条Rails自身的设置。如果你想要设定Rails的各个组件的设置,你也可以通过同样的这个config对象来做:
config.active_record.colorize_logging = false
Rails会使用这条设置来配置Active Record
ActiveRecord::Base包含许多种配置选项:
logger接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger,该logger会传递给所有的新创建的数据库连接。你可以在ActiveRecord的model类或者其实例上调用logger来获取该logger。把该值设为nil会经用日志功能。primary_key_prefix_type用于设置主键列的命名。Rails默认主键列的名字是id(该配置无需设定),但是你可以有两个别的选择:
:table_name会另Customer类的主键为customerid:table_name_with_underscore会另Customer类的主键为customer_idtable_name_prefix使你可以在表名的前面设置添加一个全局的字符串。如果你将该值设为northwest_,那么Customer类会映射到northwest_customers表。默认该值为一个空字符串table_name_prefix使你可以在表明的后面设置添加一个全局的字符串。如果你将该值设为_northwest,那么Customer类会映射到customers_northwest表。默认该值为一个空字符串。pluralize_table_names规定了Rails使用单词的单数还是复数来命名数据库中的表名。如果该值被设置为true(默认值),那么Customer类会使用customers表,如果该值被设置为false,那么Customer类会使用customer表colorize_logging(默认为true)规定了在ActiveRecord的日志信息中是否使用彩色的ANSI代码。default_timezone决定了在从数据库中读取日期和时间时,是使用Time.local(如果设置为:local)还是Time.utc(如果设置为:utc)。默认值为:localschema_format控制了从数据库中导出数据库模式到文件中所用的格式。选项:ruby(默认值)会使用一个数据库无关的migrations,选项:sql会使用(可能依赖于特定数据库的)SQL指令。timestamped_migrations控制了migrations的数字是使用连续的整数还是时间戳。默认值为true,代表使用时间戳,这在优多人共同开发同一个应用的时候是一个更好的选择。 lock_optimistically控制了ActiveRecord是否使用乐观锁。默认该值为trueMySQL适配器增加了一个额外的配置选项:
ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans控制了ActiveRecord是否认为MySQL数据库中所有的tinyint(1)列为布尔值。默认该值为true数据库模式的导出器(schema dumper)增加了一个额外的配置选项:
ActiveRecord::SchemaDumper.ignore_table接受一个表名的数组,该数组中的表不应包含在任何生成的数据库模式文件中。该设置在ActiveRecord::Base.schema_format == :ruby时才会起作用。ActionController::Base包含了一些配置设定:
asset_host在所有AssetHelper中的辅助方法所生成URL的前面添加一个字符串。这是设计用来将所有的javascript,CSS以及图片文件转移到一个不同的主机(asset host)上。consider_all_requests_local通常在开发环境中被设为true而在生产环境中被设为false;如果它被设为true,则任何错误都会导致详细的调试信息会被导出到HTTP response中。如果你想做更细致的控制,将其设为false然后实现local_request?方法来决定哪些requests会在出错的情况下提供调试信息。allow_concurrency为了允许同步(线程安全的)的action处理,该值应当被设为true。默认情况下该值为false。你通常不应当直接修改这个配置,因为你需要一系列的其他调整使得线程安全模式可以正确地工作做。你可以在production.rb文件中简单地调用config.threadsafe!,它会为你做所有需要的调整。param_parsers让你可以设置一个handlers的数组,用于提取HTTP requests中的信息并将它放到params哈希中。默认情况下,multipart forms,URL-encoded forms,XML以及JSON的parsers是被激活的。default_charset设定了所有render默认使用的字符集。默认值为"utf-8"logger接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger,可以被用来在Action Controller中记录日志信息。把该值设为nil会禁用日志功能。resource_action_separator用来设置RESTful url中resource和action之间的分隔符。默认为"/"。resource_path_names用来设置一个RESTful action默认的名字的哈希。默认情况下,new action被命名为new而edit action被命名为edit。request_forgery_protection_token用来设置RequestForgery的参数名。调用protect_from_forgery会将它设为:authenticity_tokenoptimise_named_routes打开了一些生成路径表(routes table)的优化。它默认被设为trueuse_accept_header用于设置确定response格式的规则。如果该值设为true(默认值),则respond_to方法和Request#format方法会根据Accept Header返回相应格式的response。弱该值设为false则request格式会单独由params[:format]来决定。如果没有format参数,则response的格式会根据request是否是一个Ajax request来决定返回HTML还是Javascript。allow_forgery_protection用于设置启用还是禁用CSRF保护。默认在测试模式下该值为false而在其他模式下为true。relative_url_root可以被用来告诉Rails你将会将应用部署到一个子目录。默认值为ENV['RAILS_RELATIVE_URL_ROOT']缓存功能代码将会增加两个额外的设置:
ActionController::Caching::Pages.page_cache_directory用于设置Rails为你的Web服务器创建缓存页面的位置。默认值为Rails.public_path(通常该值被设为RAILS_ROOT"/public"+)。ActionController::Caching::Pages.page_cache_extension用于设置生成的缓存页面文件的扩展名(如果进来的requests已经带了扩展名则这里的扩展名会被忽略)。默认值为.html。分发器(dispatcher)包含了这样一条配置
ActionController::Dispatcher.error_file_path给定了Rails用来寻找出错文件如404.html的路径。默认值为Rails.public_path。使用Active Record的session存储可以这样来配置
CGI::Session::ActiveRecordStore::Session.data_column_name用于设置用来存储session数据的列名。默认值为'data'。Action View上只有不多的几个配置选项,从ActionView:Base的四个开始:
debug_rjs决定RJS response是否会被包装在try/catch块中,并alert()被捕捉的异常(并重新将其抛出)(译者注:即是否对rjs使用debug模式,使得rjs的异常在开发工程中会被alert显示出来)。默认值为false。warn_cache_misses是否在一个action的结果遇到view路径中缓存未命中时Rails会显示一个警告。默认值为false。field_error_proc提供了一个HTML生成器来显示来自于Active Record的错误。默认值为Proc.new {|html_tag, instance| "#{html_tag}"}default_form_builder告诉Rails默认实用的表单构建器(form builder)。默认值为ActionView::Helpers::FormBuilder。ERB Template handler提供了一个额外的选项
ActionView::TemplateHandlers::ERB.erb_trim_mode提供了ERB使用的修剪模式(trim mode)。默认为'-'。查看ERB文档获得更多信息ActionMailer::Base上由一系列可用的配置:
template_root提供了Action Mailer模版的根目录logger接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger,用来记录来自Action Mailer的日志信息。设为nil则禁用日志记录功能。smtp_settings用来为smtp邮件发送方式提供详细的配置信息。它接受一个哈希组成的选项,包括如下任意的选项:
:address允许你使用一个远端的邮件服务器。请将它从默认的"localhost"改为你所用的邮件服务器。:port如果你使用的邮件服务器不在25端口上运行,请修改这个配置。:domain如果你需要指定一个HELO域名,请在这里指定。:user_name如果你的邮件服务器需要认证,请在这里设置用户名:password如果你的邮件服务器需要认证,请在这里设置密码:authentication如果你的邮件服务器需要人证,你需要在此指定认证的类型。它应该是:plain,:login,和:cram_md3三个符号其中之一。sendmail_settings允许你对sendmail邮件发送方式进行详细的配置。它接受一个哈希组成的选项,包括如下任意的选项:
:location—sendmail可执行文件的位置。默认为/usr/sbin/sendmail。:arguments—命令行参数。默认值为-i -traise_delivery_errors设置如果邮件发送没能完成是否需要抛出一个错误。默认值为true。delivery_method设置邮件发送方式。可以使用的值有:smtp(默认值),:sendmail以及:testperform_deliveries指定邮件是否要真得发送出去。默认值为:true,测试时可以方便地设为false。default_charset设定Action Mailer用于编码邮件主题和内容的字符集。默认为utf-8default_content_type设置消息的主体所使用的默认的content type。默认值为text/plain。default_mime_version设置消息实用的默认的MIME版本。默认值为1.0。default_implicit_parts_order—当一个消息被隐式地构建(例如,邮件的多部分通过模版组装,而模版通过文件名设定了content type),这个变量控制多个部分的顺序。默认为["text/html", "text/enriched", "text/plain"]。数组中先出现的项在邮件客户端中有较高的优先级,并在mime编码消息的最后出现。
ActiveResource::Base中有一个配置可以设置:
logger接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger,用来从Active Resource中记录日志信息。设为nil时禁用日志功能。
Active Support中有一些配置选项:
ActiveSupport::BufferedLogger.silencer设为false则禁用了对代码块的缄默日志(silence logging)功能(译者注:可以参看http://api.rubyonrails.com/classes/ActiveSupport/BufferedLogger.html#M001499,缄默日志使得silence方法可以对指定的代码块屏蔽日志功能或者改变日志的level)。默认值为true。ActiveSupport::Cache::Store.logger设定了缓存存储操作所使用的logger。ActiveSupport::Logger.silencer设为false则禁用了对代码块的缄默日志(silence logging)功能。默认值为true。Active Model目前有一个单独的配置设置:
ActiveModel::Errors.default_error_messages是一个包含所有验证错误消息的数组。在装载了框架以及任何gems和插件之后,Rails会开始装载初始化器(initializers)。一个初始化器是在你的应用中任何存储在/config/initializers中的ruby代码。你可以使用初始化器来存放哪些应该整个框架和插件装载后进行的配置设置。
后初始化器(如同你所猜想的)会在所有的初始化器装载之后运行。你可以通过在任何Rails配置文件中设立config.after_intialize来支持一个after_initialize代码块(或者一个这种代码块的数组)。
config.after_initialize do
SomeClass.init
end
Rails的一部分配置可以通过外部环境变量来配置。以下的环境变量会被Rails的不同部分识别出来。
ENV['RAILS_ENV']定义了Rails所运行在的环境(production,development,test等等)ENV['RAILS_RELATIVE_URL_ROOT']被路径代码用来在你部署你的应用到一个子目录时识别出URL。ENV['RAILS_ASSET_ID']会覆写默认的Rails生成的用户可下载资产的缓存失效的时间戳。ENV['RAILS_CACHE_ID']和ENV['RAILS_APP_VERSION']用来生成Rails缓存代码中的扩展的缓存键。这可以允许你对同一个应用有多个分开的缓存。ENV['RAILS_GEM_VERSION]在RAILS_GEM_VERSION没有在environment.rb文件中定义时,定义了使用的Rails gems的版本。又是一个前一阵遇到的很tricky的问题。
Rails2.0中加入了form_authenticity_token来防止部分的cross-site的攻击,ActionView中默认的form_for标签会自动加入类似于
的代码,如果你自己使用form_tag来创建form的话,可以用类似于
<input type="hidden" name="authenticity_token" value="<%= "#{form_authenticity_token}" %>" />
的代码来加入这个隐藏的form中的authenticity_token。
但是手工加入这个token在functional tests中会带来问题,因为functional tests中是把allow_forgery_protection关掉的
可以在environments/test.rb中看到这样的配置
config.action_controller.allow_forgery_protection = false
但是authenticity现在是hardcode在代码中,所以跑functional tests通常会遇到这样的错误
ActionView::TemplateError: No :secret given to the #protect_from_forgery call. Set that or use a session store capable of generating its own keys (Cookie Session Store).
一种解决办法是在view中加入当前all_forgery_protection状态的判断代码,比如
<% if protect_against_forgery? %>
<input type="hidden" name="authenticity_token" value="<%= "#{form_authenticity_token}" %>" />
<% end %>
但是有位同学用了个更巧妙的hook的办法,在test_helper.rb中hook掉form_authenticity_token,如下
module ActionController
module RequestForgeryProtection
def form_authenticity_token
return "form_authenticity_token OVERRIDE!"
end
end
end
我比较喜欢后一种啦。
嗯,嗯,嗯,这个问题前一阵来来回回折腾过不少时间,主要的问题在于
MySQL安装的注意事项
$ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf $ sudo vim /etc/my.cnf # 在对应的节点添加如下信息 [client] default-character-set = utf8 [mysqld] character-set-server = utf8 default-table-type = innodb
记得数据库创建要在改完配置重启mysqld之后,不然创建的数据库默认还是latin1的
然后就是gem安装mysql的驱动了,抛弃掉Rails自带的过时的ruby版本的驱动了
sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
如果您装的是64位的Ruby和MySQL那么改一个参数吧
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
神奇地发现,我之前的qq号居然还能用,虽然最早最早申请的那个早已经连号也不记得了,但是之后常用的那个居然在我N年没有登陆之后还能用,实在太神奇了,只是在Mac下用Adium貌似不太顺畅,常常不显示在线的联系人,只好下了个QQ for Mac备用。另外,发现上海电信最近很有问题,MSN在Mac下始终登陆不上去,但是换个地方的网络就没有问题,这是为什么呢?