iPhone上跑Ruby

May 5, 2008 Tags: , , ,

Ruby可以在iPhone上跑吗?答案当然是肯定的。最多只要五分钟,就可以搞定(其实对于大部分破解的iPhone来说前三步应该已经操作过):

  • 安装Installer.app
  • 添加Community Sources
  • 安装BSD Subsystem (System 分类下)
  • 安装Term-vt100 (System 分类下)
  • 安装Ruby (Development 分类下)

安装完Ruby,接到提示:

Please add /opt/iphone/bin to your $PATH

那就乖乖听话,把它加进去吧。运行Terminal(即上面安装的Term-vt100),敲入:

cd ~
echo "PATH=$PATH:/opt/iphone/bin" >> .profile

为了使它生效,需要重启一下Ternimal:

killall Terminal

再运行Terminal,显示$PATH看加入了没有。如果有了,运行一个简单的命令测试一下:

echo $PATH
ruby -e "puts 'hello iphone'"

结果如下:

Ruby on Iphone

BTW,执行ruby -v看了一下,结果为:

ruby 1.8.6 (2007-03-13 patchlevel 0) [arm-darwin]

而我的Leopard 10.5.2下为:

ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]

好玩!

Leopard上试玩mod_rails

April 26, 2008 Tags: , , , ,

Setup mod_rails Passenger Mac OS X Leopardmod_rails官方网站上的Passenger users guide中推荐的在OS X上安装mod_rails的教程文章。文章描述的很详细,安装过程主要花在编译安装apache上(Leopard自带的apache支持passenger-install-apache2-module有问题)。我照着步骤操作后,以development模式放了一个测试站点,运行后站点跑了起来,但样式和图片无法显示。显然是权限有问题。

解决方法:在站点的配置中加入对所在目录的访问权限。比方说虚拟站点的apache设置为:

<VirtualHost *>
  ServerName test.ashchan.com
  DocumentRoot /Users/james/codex/ashchan.com/public
  RailsEnv development
</VirtualHost>

则加入以下配置即可:

<Directory "/Users/james/codex/ashchan.com/public">
   Options FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

站点起来时(第一次访问)感觉速度比较慢,不知道production模式下会快多少。相比mongrel cluster等每次需要重启的麻烦,mod_rails直接上传部署并自动扩展的方式非常吸引人,相信不用多久便会非常流行。

ubuntu 8.04 on parallels

April 25, 2008 Tags: , , ,

这两天Linux界的大事莫过于Ubuntu 8.04的发布。

一大早起来抓了个desktop的ISO下来,开始在Parallels Desktop下捣腾。简单的几步选择后,开始安装。下楼吃了点早饭,吃完上来已经安装妥。

Ubuntu 8.04上的Firefox 3 beta 5貌似比Mac下的要跑的流暢些,可能是什么插件都没装的缘故吧(要知道我Mac下的Firefox使用了几个不兼容的插件)。

Ubuntu 804

不过有个小小遗憾,那就是Parallels Tools无法安装.

小用一下,相当满意。Ubuntu一如既往,更快,更高,更强。

Rails中使用Stone

April 21, 2008 Tags: , , ,

Stone是一个数据持久化Ruby库。它把数据保持至文件中(ymal格式),特点是快速易用,因而特别适用于小规模的应用。

要在Rails中使用Stone是非常简单的。我们来创建一个简单的Todo应用:

首先安装Stone:

sudo gem install stone

创建Rails应用:

rails todo

在 config/initializers 中新建一个文件,命名为 stone.rb,文件内容如下:

require 'stone'
Stone.start(Dir.pwd, Dir.glob(File.join(Dir.pwd,"app/models/*")), :rails)

接下去,去掉 ActiveRecord 的使用。在 config/environment.rb 中加入:

config.frameworks -= [ :active_record ]

准备工作完成了。现在使用Stone的stone-gen命令来生成一个model:

stone-gen model Todo title:string

生成后,可以发现 app/models 目录下自动创建了一个 todo.rb 文件,其内容如下:

class Todo
    include Stone::Resource

    field :title, String
end

好了,model有了,我们偷偷懒,用scaffold来创建一个controller(因为我们已经有了model,所以加上–skip-migration参数):

script/generate scaffold Todo --skip-migration

自动生成的controller和view还跑不起来,因为Stone的model方法跟ActiveRecord有所区别,需要调整一下。我们先来改各个view:

在new.html.erb中的表单中,加入:

<p><label>Title:</label><%= f.text_field :title %></p>

在show.html.erb最上边,加入:

<%= h @todo.title %>

其他view先不管了。接下去修改todos_controller:

将index中的:

@todos = Todo.find(all)

修改为:

@todos = Todo.all()

将show中的:

@todo = Todo.find(params[:id])

修改为:

@todo = Todo[params[:id]]

好了,用script/server把应用跑起来,测试一下。访问http://localhost:3000/todos/new,创建一个新的todo:

Stone new

创建成功后,访问http://localhost:3000/todos/1,显示也正确:

Stone Show

不错,果然是非常易用。那么Stone把数据存到哪去了呢?答案是在app/datastore下。在这个目录下可以找到一个todo子目录,里边有刚创建的todo对象的数据文件1.yml,文件内容为:

--- !ruby/object:Todo 
errors: !ruby/object:Validatable::Errors 
  errors: {}

id: 1
title: "tada #1"

结论:Stone很好很强大,待这个库发展更成熟一些后,可以在规模较小又不计划使用MySql或其他数据库的应用上使用。

Technorati停止对WordPress 2.5之前版本进行收录

April 10, 2008 Tags:

由于WordPress 2.5之前的版本存在安全隐患(被利用的话,在博客的页面上,会被偷偷地插进隐藏的垃圾链接),Technorati将停止对存在隐患的老版本WordPress博客进行收录。

要知道整件事的来龙去脉,可以看这篇Technorati官方博客文章

Firefox 3 Beta 5中的复活节彩蛋

April 9, 2008 Tags:

在Firefox 3 Beta 5的地址栏里输入”about:robots”,会出来一个可爱的机器人。

Firefox Easter Egg

页面上描述了机器人的行为准则,当然这并不是机器人三定律(Three Laws of Robotic),lol。

底下有个”Try Again”按钮,好奇地点了一下,按钮变成了”Please do not press this button again.”,更加好奇了,再点了一下,呜呼,这个按钮不见了。

BTW,说起机器人,动画片WALL·E相当值得期待啊。

Firefox 3 Beta 5 Easter Egg via Lifehacker

CSS 裸奔节

April 5, 2008 Tags: ,

第三届CSS裸奔节来了,今年(CSS Naked Day ‘08)的时间定在4月9日。

活动目的

CSS裸奔节的目的是推动Web标准。简洁为美。使用正确的(x)html,语义标记,良好的层次结构。暂时把页面设计抛弃,直接展示<body>吧。

如何参与

这里填表报名,报名后一个小时内,你的网站会在官方列表中出现。

到了4月9日,将你网站上的CSS移除,抛掉页面设计。

你也可以在那天把以下HTML内容放置于网站顶部:

<h3>What happened to the design?</h3>
<p>To know more about why styles are disabled on this website visit the
<a href="http://naked.dustindiaz.com" title="Web Standards Naked Day Host Website">
Annual CSS Naked Day</a> website for more information.</p>

注:加上这些标注仅仅是为了向你网站的访问者说明情况,并不是为了带来流量或赚钱。CSS裸奔官方网站上没有任何广告,以后也不会放置广告。

活动日期

很多人非常关心CSS裸奔节的活动时间。今年定于4月9日,理由如下:

  • 活动日期应该定于周二、周三或周四,这几天网站流量比较高
  • 时间应该在4月份的第一周前后
  • 不应该是4月1日(要不谁信呢,呵呵)
  • 在活动通告发出至活动日期,至少有五天时间

如何裸奔

下面这个PHP函数可以用来裸奔:

<?php
function is_naked_day($d) {
  $start = date('U', mktime(-12, 0, 0, 04, $d, date('Y')));
  $end = date('U', mktime(36, 0, 0, 04, $d, date('Y')));
  $z = date('Z') * -1;
  $now = time() + $z; 
  if ( $now >= $start && $now <= $end ) {
    return true;
  }
  return false;
}
?>

可以这样使用该函数:

<head>
...
<?php
if ( is_naked_day(9) ) {
  echo '<!-- naked day has no styles -->';
} else {
  echo '<link rel="stylesheet" type="text/css" href="styles.css" />';
}
?>
...
</head>

工具、插件

you are dust, and to dust you shall return

April 4, 2008

you are dust, and to dust you shall return.

My grandfather, a godly Christian, passed away peacefully and without pain last week at the age of 90. God rest his soul.