Francis's Octopress Blog

A blogging framework for hackers.

ubuntu11.10 双显卡笔记本 开3d特效

ubuntu11.10 双显卡笔记本 开3d特效

我的本本是双显卡配置的,集成显卡是intel的,独立显卡是nvidia,使用系统自带的附加驱动装nvidia失败………………..

我也双显卡的。。。在intel集成显卡下弄好了3D桌面 ubuntu本身就能识别intel集成显卡,所以跳过显卡驱动步骤,直接安装compiz就行了
autoremove 所有的 nvidia包就可以开3d了
如果非要安装NVIDIA驱动,
今天上网的时候,偶然发现了这个开源软件,刚刚更新,用于ubuntu下N卡的双显卡问题。大家可以去试试用一下。无需再禁用N卡。 https://github.com/MrMEEE/bumblebee#readme 这个网页上有安装步骤 http://www.martin-juhl.dk
 
ABSOLETE PROJECT: Please READ: http://www.martin-juhl.dk/2011/08/reassemble-of-the-bee/ and http://www.martin-juhl.dk/2011/08/ironhide-reporting-for-duty/         IMPORTANT: Ubuntu Users: Bumblebee has now been packaged into a PPA @ Launchpad: https://launchpad.net/~mj-casalogic/+archive/bumblebee/ This will probably be the most up-to-date version for Ubuntu from now on… For people currently running the script/git version please do : sudo bumblebee-uninstall sudo apt-get install ppa-purge sudo ppa-purge ppa:ubuntu-x-swat/x-updates sudo ppa-purge ppa:xorg-edgers/ppa sudo apt-add-repository ppa:mj-casalogic/bumblebee sudo apt-get update sudo apt-get install bumblebee openSuSE Users: Bumblebee has been ported to the openSuSE Build Service repository : http://download.opensuse.org/repositories/home:/Ximi1970:/bumblebee/openSUSE_11.4/ For people currently running the script/git version please do : sudo bumblebee-uninstall If you have used the nVidia package option: sudo bash NVIDIA-Linux-xxxxx-xxxx.run –uninstall If you have used the nVidia repository (mirror) option: rpm -e x11-video-nvidiaG02 rpm -e nvidia-computeG02 rpm -e nvidia-gfxG02-kmp zypper rr “nVidia Graphics Drivers (local mirror)” Install the nVidia repository and packages if you do not want to use the nouveau driver: zypper ar -f ftp://download.nvidia.com/opensuse/11.4 “nVidia Graphics Drivers” zypper install nvidia-gfxG02-kmp-`uname -r | cut -f3 -d”-“` zypper install x11-video-nvidiaG02 Installing bumblebee: zypper ar -f http://download.opensuse.org/repositories/home:/Ximi1970:/bumblebee/openSUSE_11.4 “Bumblebee” zypper install bumblebee or just use Yast to add the repositories and packages. # —————————————————————————- # “Red Bull License” #  wrote this file and is providing free support # in any spare time. If you need extended support, you can fuel him up by # donating a Red Bull here to get him through the nights..: # # http://tinyurl.com/bumblebee-project # # —————————————————————————- # # —————————————————————————- # “THE BEER-WARE LICENSE” (Revision 42): #  wrote this file. As long as you retain this notice you # can do whatever you want with this stuff. If we meet some day, and you # think this stuff is worth it, you can buy me a beer in return Martin Juhl # —————————————————————————- # #    This file is part of bumblebee. # #    bumblebee is free software: you can redistribute it and/or modify #    it under the terms of the GNU General Public License as published by #    the Free Software Foundation, either version 3 of the License, or #    (at your option) any later version. # #    bumblebee is distributed in the hope that it will be useful, #    but WITHOUT ANY WARRANTY; without even the implied warranty of #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the #    GNU General Public License for more details. #   #    You should have received a copy of the GNU General Public License #    along with bumblebee.  If not, see 

蓄势待发!Rails 3 介绍

蓄势待发!Rails 3 介绍

在过去的两年中,Ruby on Rails 应用程序框架已经具备了一个由托管和服务提供商组成的一体式行业、一套功能广泛且令人印象深刻的开发工具,还有各种在 Ruby 用语里称为 gemsplug-ins 的补充库 — 可增强软件的功能。例如 Engine Yard 和 Heroku 就是两个提供虚拟的、方便的 Rails 软件托管的公司;Oink 和 Bullet 分别用来显示内存使用和性能;Clearance 和 Sunspot 则用来提供现成的身份验证和快速的索引式搜索。

常用缩略语

  • CRUD:创建、读取、更新、删除
  • HTML:超文本标记语言
  • REST:具象状态传输
  • SQL:结构化查询语言

自 2007 年以来,Rails 社区也已不断壮大。全球有众多的 Rails 开发人员充满活力、团结互助,并且渴望不断地改进该软件。可以毫不夸张地说,Rails 的改进应归功于社区,因为是程序员之间不断的相互超越使得构建出的软件越来越完善。如此不断地循环,各个功能才得以从初期阶段快速发展,逐渐变的实用、功 能不断强大并完善,最终成为不可或缺的工具。在很多情况下,社区认为最基本的 gems 和 plug-ins 都会保留到 Rails 核心中。Rails 的 named scopes(一个查询快捷方式),可实现与 nested forms 相同的功能。这是一个新增的功能,可取代以前的尝试,并在相同的 HTML 表单中创建和编辑多个模型。实际上,对于 Rails 开发人员来说最困难的任务或许就是跟上变化的节奏。(幸运的是,目前有一些 Ruby 和 Ruby on Rails 的每周播客,这些播客会组织并呈现最新趋势以及分享最佳实践。)

Rails 下一个主要的发布是 Rails 版本 3,该版本继续保持工具包的快速改进。与以往相同,该软件仍然非常 “固执”,即仍然偏向于约定优于配置。Rails 的核心组件始终存在,即 RESTful 路径、关系、验证、模板和数据库抽象化。不过,这些组件的许多内部内容已经被重写或者进行了改进。最明显的并且很大程度上借用了 Merb 的理念的就是很多 Rails 的基本功能不再密切结合。例如,以前只对 Rails 应用程序可用的数据验证便捷功能现在成为独立的组件,并且可以包含在 Vanilla Ruby 代码中。如呈现部件和模板等控制器功能,现在也是相互独立的,并且可以嵌入到任一库中。

在这篇文章中,您将会了解 Rails 3 及其众多变化和附加功能,以及如何从头创建一个新的 Rails 3 应用程序。截至 2010 年 2 月中旬,Rails 3 还只是预发布的 Beta 版,核心小组正在收集补丁、反馈和文档,以准备在夏季前发布正式版本。不过当前的 Rails 3 版本足够用于构建应用程序以及了解诸多新增功能。

大改动、小变化

Rails 3 中变动的数量太多,无法在此全部列出。要阅读带有补充资料的完整列表,请查询 Rails 3 发布通知(请参阅 参考资料 中的链接)。此处,仅介绍一些很可能会影响到开发人员的一些变动:

  • 一条命令可以控制所有事件。有了 Rails 3,无需在每一个应用程序中使用整套脚本(script/server、script/generate 以及其他),使用一条命令即可取代其功能,该命令恰如其分地被命名为 rails。例如,在以前需要键入 ./script/console 的地方,您现在只需键入 rails consolerails 命令还可以像以前一样生成新的应用程序。其运行方式依据其是否在现有的 Rails 应用程序中启动而有所不同。
  • 可为依赖性提供具体的解决方案。协调和解决 gem 依赖性是个棘手的问题。与可用 gems 的集合一样,gem 的修订也是随系统的不同而有所变化。因为具有这样的多样化,所以很难广泛地部署或共享一个 Rails 应用程序。Rails 3 引入了 Bundler,这是一个专门用于管理依赖性的实用程序(因此无需再使用 config.gem)。您可以在应用程序根目录内一个名为 Gemfile 的目录中声明依赖性。Bundler 将下载和存储所有指定的 gem。您甚至可以在应用程序中 “打包” gem ,以便阻止从外部存储库下载。
  • 不带查询语句的查询功能。一直以来,Rails 已经可以充分运用特定于领域的语言 (DSL) — 考虑一下 has_onevalidates_numericality_of — 有一个明显的例外:数据库查询。可以确定地说,Rails 的动态搜寻器便捷、易用,但混合使用选项哈希值如 :conditions:order:limit 非常常见,因为都是 find_by_sql 语句。Rails 3 合并了 relational algebra,这是专门设计用于表示查询的 DSL。基本命令包括 project(用于选择列)、where(用于表示条件)、join(用于指定关系)、takeskip(分别用于限定和抵消),以及 group(用于聚集)等其他属性。
  • 用于模糊样板代码的控制器。Rails 控制器的核心操作 —newcreateeditupdate — 通常不变,尤其是当控制器大部分用于 CRUD 操作时。事实上,控制器生成器的输出 ./script/generate controller 一般不需要进一步的修改就可以满足需要。考虑到这些相似性,Rails 3 引入了 Responder 来进一步简化代码。例如下面是 create操作全部所需的几行代码:
      class PostsController
        respond_to :html, :xml
    
        def create
          @post = Post.create(params[:post])
          respond_with(@post)
        end
      end
    在该代码片段中,如果 @post 保存成功,respond_with(@post) 将发送到 show 以显示新的记录,而假设对象的验证失败,则发送到 new

这仅仅是一个小样本。您可以在下一章节找到这些新功能的示例以及更多内容,例如从头构建 Rails 3 应用程序。

 

首次构建 Rails 3 应用程序

要运行 Rails 3,您的系统必须安装有 Ruby 1.8.7 版或 Ruby 1.9.2 版,或者该编程语言的较新版本及其附加库和解释程序。您的机器上最好同时安装有 Git 软件版本控制系统,因为 Rails 3 和许多其他重要的 Rails 项目都是在 Git 中进行维护的。您的系统还需要数据库引擎,例如 SQLite(版本 3)、MySQL 或者 PostgreSQL。开发 Rails 应用程序时,Web 服务器不是必须的,但它通常是生产部署的一部分。

要创建 Rails 3 应用程序,您必须拥有 Rails 3 预发布 gem 和所有其相关产品。这时,您只需通过运行几条命令(请参阅 清单 1)即可安装所需的组件。(在您继续进行之前请查看 Rails 3 文档,因为根据版本的不同具体的操作会有所不同。) 清单 1. Rails 3 预发布 gem 和相关产品

               
$ gem install rails3b
Due to a rubygems bug, you must uninstall all older versions of bundler for 0.9 to work
Successfully installed mime-types-1.16
Successfully installed mail-2.1.2
Successfully installed text-hyphen-1.0.0
Successfully installed text-format-1.0.0
Successfully installed memcache-client-1.7.8
Successfully installed rack-1.1.0
Successfully installed rack-mount-0.4.7
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.5
Successfully installed i18n-0.3.3
Successfully installed tzinfo-0.3.16
Successfully installed bundler-0.9.5
Successfully installed thor-0.13.1
Successfully installed rails3b-3.0.1
14 gems installed

$ gem install arel --pre
Successfully installed activesupport-3.0.0.beta
Successfully installed arel-0.2.pre
2 gems installed

$ gem install rails --pre
Successfully installed activemodel-3.0.0.beta
Successfully installed actionpack-3.0.0.beta
Successfully installed activerecord-3.0.0.beta
Successfully installed activeresource-3.0.0.beta
Successfully installed actionmailer-3.0.0.beta
Successfully installed railties-3.0.0.beta
Successfully installed rails-3.0.0.beta
7 gems installed

 

下一步是生成应用程序 — 在 清单 2 中显示了一个小 wiki。该应用程序创建并管理文章。每一篇文章都有一个标题和一些散文,通过从现有页面的正文创建一个指向新文章的引用,您即可创建一篇新的文章。引用可以是任一驼峰式大小写单词,例如 TheSolarSystem 或者 TheOscars

注意:可通过下面的 下载 表格获取该 wiki 应用程序的源代码。 清单 2. Wiki Rails 应用程序

               
$ rails wiki

 

如果您运行了 ls -lR 来查看应用程序的内容,将会显示一些新文件:

  • Gemfile,即前面曾提到的 gem 清单。该文件必须至少包含两行:一行指向 Rails 3 beta gem 的源,另一行则绑定 Rails 3 beta gem 本身。您或许还需要第三行(至少)以连接数据库:
    source 'http://gemcutter.org'
    gem "rails", "3.0.0.beta"
    gem "sqlite3-ruby", :require => "sqlite3"
  • config/application.rb,它包含 config/environment.rb 中以前提供的很多选项。虽然后者仍然保留,但很大程度上已不再使用该文件。config/application.rb 的一个显著的附加功能是 generators block
    config.generators do |g|
      g.orm             :active_record
      g.template_engine :erb
      g.test_framework  :test_unit, :fixture => true
    end
    您的 Rails 3 应用程序可以使用一些兼容的对象关系映射器 (ORM)、模板引擎和测试框架。生成器块会指定应用程序的首选项,并根据您的模型、视图等调用适当的生成器。
  • db/seeds.rb,该文件对于 Rails 3 来说并不是新增的,但却有必要着重介绍一下,因为它是最近不久刚增加的功能(在 Rails 2.3.4 版引入的)。如果您的应用程序需要初始数据以正常运行,例如一个管理用户、价格代码或静态页面,那么您可以在 db/seeds.rb 中创建这些数据并运行任务 rake db:seed。在 Seed 文件之前,不存在初始化的惯例,许多开发人员把代码放入迁移中,这样容易混淆创建数据库和填充数据库之间的不同之处。
  • config.ru,存在于每个 Rails 3 应用程序的根目录下,即所谓的 rackup 文件,也就是基于 Rack 的应用程序的配置文件。Rails 3 是一个 Rack 应用程序,并且与任一支持 Rack 的 Web 服务器相兼容。总的来说,除非您想要添加其他 Rack 组件,否则请不要更改 config.ru 文件。

还有一些其他新文件;不过大多数看上去与 Rails 版本 2.3 相似。config/routes.rb 文件的功能与以往相同,只不过更加简化、更具有 Ruby 的特色。您将很快会看到一个示例。

生成应用程序并编辑 Gemfile 以声明依赖性之后,下一步就是收集应用程序所需的 gem。这是由新的实用程序 bundle(请参阅 清单 3)来完成的工作。 清单 3. 收集所需的 gem

               
$ bundle
installFetching source index from http://gemcutter.org
Resolving dependencies
Installing abstract (1.0.0) from system gems
Installing actionmailer (3.0.0.beta) from system gems
Installing actionpack (3.0.0.beta) from system gems
Installing activemodel (3.0.0.beta) from system gems
Installing activerecord (3.0.0.beta) from system gems
Installing activeresource (3.0.0.beta) from system gems
Installing activesupport (3.0.0.beta) from system gems
Installing arel (0.2.1) from rubygems repository at http://gemcutter.org
Installing builder (2.1.2) from system gems
Installing bundler (0.9.7) from rubygems repository at http://gemcutter.org
Installing erubis (2.6.5) from system gems
Installing i18n (0.3.3) from system gems
Installing mail (2.1.2) from system gems
Installing memcache-client (1.7.8) from system gems
Installing mime-types (1.16) from system gems
Installing rack (1.1.0) from system gems
Installing rack-mount (0.4.7) from system gems
Installing rack-test (0.5.3) from system gems
Installing rails (3.0.0.beta) from system gems
Installing railties (3.0.0.beta) from system gems
Installing rake (0.8.7) from system gems
Installing sqlite3-ruby (1.2.5) from rubygems repository at
    http://gemcutter.org with native extensions
Installing text-format (1.0.0) from system gems
Installing text-hyphen (1.0.0) from system gems
Installing thor (0.13.3) from rubygems repository at http://gemcutter.org
Installing tzinfo (0.3.16) from system gems
Your bundle is complete!

 

bundle 实用程序,简称 Bundler,可用于下载和安装所有在 Gemfile 中指定的 gem 以及任何这些 gems 的依赖项(请参阅 清单 4)。该 bundle 实用程序还可以将所有依赖项复制到您的应用程序中,使得您的代码库自给自足。具体来说,如果您运行 bundle pack,Bundler 会将所有 gem 的资料复制到 vendor/cache。 清单 4. 运行 bundle 实用程序

               
$ bundle pack
Copying .gem files into vendor/cache
  * bundler-0.9.7.gem
  * thor-0.13.3.gem
  * abstract-1.0.0.gem
  * mime-types-1.16.gem
  * text-hyphen-1.0.0.gem
  * rack-mount-0.4.7.gem
  * rake-0.8.7.gem
  * text-format-1.0.0.gem
  * tzinfo-0.3.16.gem
  * rack-test-0.5.3.gem
  * builder-2.1.2.gem
  * erubis-2.6.5.gem
  * memcache-client-1.7.8.gem
  * rack-1.1.0.gem
  * sqlite3-ruby-1.2.5.gem
  * i18n-0.3.3.gem
  * activesupport-3.0.0.beta.gem
  * arel-0.2.1.gem
  * mail-2.1.2.gem
  * activemodel-3.0.0.beta.gem
  * activerecord-3.0.0.beta.gem
  * actionpack-3.0.0.beta.gem
  * railties-3.0.0.beta.gem
  * actionmailer-3.0.0.beta.gem
  * activeresource-3.0.0.beta.gem
  * rails-3.0.0.beta.gem

$ ls vendor/cache
abstract-1.0.0.gem      memcache-client-1.7.8.gem
actionmailer-3.0.0.beta.gem mime-types-1.16.gem
actionpack-3.0.0.beta.gem   rack-1.1.0.gem
activemodel-3.0.0.beta.gem  rack-mount-0.4.7.gem
activerecord-3.0.0.beta.gem rack-test-0.5.3.gem
activeresource-3.0.0.beta.gem   rails-3.0.0.beta.gem
activesupport-3.0.0.beta.gem    railties-3.0.0.beta.gem
arel-0.2.1.gem          rake-0.8.7.gem
builder-2.1.2.gem       sqlite3-ruby-1.2.5.gem
bundler-0.9.7.gem       text-format-1.0.0.gem
erubis-2.6.5.gem        text-hyphen-1.0.0.gem
i18n-0.3.3.gem          thor-0.13.3.gem
mail-2.1.2.gem          tzinfo-0.3.16.gem

 

将 vendor/cache 视为应用程序自己的 gem 存储库。您可以将代码库移动到任何地方,并可以获得您所需的 gem 软件和版本 — 无需远程存储器即可实现。例如,如果您在 bundle pack 之后运行 bundle install,gem 会从您的应用程序存储库安装到您的系统中(请参阅 清单 5)。 清单 5. 安装 gem

               
Fetching source index from http://gemcutter.org
Resolving dependencies
Installing abstract (1.0.0) from .gem files at
  /Users/strike/projects/rails3/wiki/vendor/cache
Installing actionmailer (3.0.0.beta) from .gem files at
  /Users/strike/projects/rails3/wiki/vendor/cache
Installing actionpack (3.0.0.beta) from .gem files at
  /Users/strike/projects/rails3/wiki/vendor/cache
...
Installing thor (0.13.3) from .gem files at
  /Users/strike/projects/rails3/wiki/vendor/cache
Installing tzinfo (0.3.16) from .gem files at
  /Users/strike/projects/rails3/wiki/vendor/cache
Your bundle is complete!

 

 

使用 wiki

要创建应用程序,则需要为页面生成一个工作框架(scaffold)、创建数据库、将初始页面放到数据库并且设定所需的路径(请参阅 清单 6)。 为了简单化,仅限在某些字段使用 wiki 页面记录:标题、标头(标题的缩略语)、正文和时间截(以用于记录页面的创建时间和最新修改时间)。标题和标头是字符串字段;散文是文本字段;时间截是日 期和时间字段。(当然,一个真正的 wiki 还会有其他字段,如最近的作者以及页面的修订历史记录。为了尽量简洁,该例子还省略了用户和会话、格式以及各种身份验证和授权。)您可以使用 rails generate scaffold 命令生成一个初始模型、一系列视图以及一个控制器。 清单 6. 完整的 wiki 应用程序

               
$ rails generate scaffold page title:string slug:string body:text --timestamps
      invoke  active_record
      create    db/migrate/20100221115613_create_pages.rb
      create    app/models/page.rb
      invoke    test_unit
      create      test/unit/page_test.rb
      create      test/fixtures/pages.yml
       route  resources :pages
      invoke  scaffold_controller
      create    app/controllers/pages_controller.rb
      invoke    erb
      create      app/views/pages
      create      app/views/pages/index.html.erb
      create      app/views/pages/edit.html.erb
      create      app/views/pages/show.html.erb
      create      app/views/pages/new.html.erb
      create      app/views/pages/_form.html.erb
      create      app/views/layouts/pages.html.erb
      invoke    test_unit
      create      test/functional/pages_controller_test.rb
      invoke    helper
      create      app/helpers/pages_helper.rb
      invoke      test_unit
      create        test/unit/helpers/pages_helper_test.rb
      invoke  stylesheets
      create    public/stylesheets/scaffold.css

 

如果您想知道 ./script/generate 命令有何变化,回忆一下,该命令已经被全能的 rails 命令包含了。

运行 rake db:create db:migrate 以创建数据库:

$ rake db:create db:migrate
==  CreatePages: migrating ====================================================
-- create_table(:pages)
   -> 0.0010s
==  CreatePages: migrated (0.0011s) ===========================================

 

该 Wiki 现已存在,但却是空的。添加一个初始页面作为所有其他页面的基准。编辑文件 db/seeds.rb,并编写代码以创建一个新的页面,如 清单 7 中所示。 清单 7. wiki 基准页面

               
Page.create(
  :title    => 'The Marx Brothers Wiki',
  :slug     => 'Home',
  :body     => 'An encyclopedic guide to the Marx Brothers.')

 

运行 rake db:seed 以执行代码。您可以通过使用 rails console 快速浏览以验证页面,如 清单 8 中所示。 清单 8. 验证基准页面

               
$ rake db:seed
(in /Users/strike/projects/rails3/wiki)

$ rails console
Loading development environment (Rails 3.0.0.beta)
irb(main):001:0> Page.all
=> [#<Page id: 1, title: "The Marx Brothers Wiki", slug: "Home",
    body: "An encyclopedic guide to the Marx Brothers.",
    created_at: "2010-02-21 12:24:43", updated_at: "2010-02-21 12:24:43">]

 

在继续运行编码之前,请先设定路径。需要两条路径:一条默认的路径用来查找主页面,而另外一条路径则通过标头来查找页面。清单 9 显示了最终版的 config/routes.rb 文件。 清单 9. config/routes.rb(最终版)

               
Wiki::Application.routes.draw do |map|
  resources :pages
  root :to => "pages#show"
end

 

清单 6 中,rails generate scaffold page 这一行命令可自动在第二行创建路径,这是 REST 式的。您必须在第三行手动添加路径。用于指定站点路径的默认 “根目录” 的语法是 Rails 3 中的新增功能。第三行定义的是,“将路径 ‘/’ 映射到页面控制器的 ‘show’ 方法”。show 方法的代码将在数据库中查找主页面并显示出来。

添加新的根目录路径后,需要删除 public/index.html 文件以避免产生冲突:

$ rm public/index.html

 

现在,让我们来关注页面控制器。Rails 3 中的控制器代码可以极其简单。清单 10 通过单一的 show 方法,显示了控制器的初始实现。 清单 10. Rails 3 控制器

               
class PagesController < ApplicationController
  respond_to :html

  def show
    @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first
    respond_with( @page )
  end
end

 

正如您所看到的,通常在 Rails 2 控制器中提供的所有模板都不见了。respond_to 列出了控制器所支持的格式;此处,它仅会对 HTML 的请求做出反应。respond_with 是逻辑快捷方式,用于决定控制器应如何继续处理。

查询的语法也是大有不同。查询是 Rails 3 关系代数的一个示例。您可能会想知道为什么需要有 first 后缀。where 和其他表达查询的操作数并不会真正引起查询语句被执行。相反地,查询站点一直闲置,直到真正需要数据时才启动。这就是延迟加载,即尽可能长的延迟查询语句的执行。first 命令将触发数据库中的实际查询。

如果您现在运行应用程序,您会看到与 图 1 相似的情况。 图 1. Rails 3 wiki 应用程序 该屏幕截图显示带有以下文本的页面:“标题:”Marx Brothers wiki;“标头:”主页;“正文:” Marx Brothers 的百科全书指南。底部显示有 “编辑” 和 “后一页” 的按钮。

现在,您可以向控制器中添加更多的代码。清单 11 显示了完整的控制器。 清单 11. 完整的 Rails 3 控制器

               
class PagesController < ApplicationController
  respond_to :html
  before_filter :get_page, :except => [ :create ]

  def create
    respond_with( @page = Page.create( params[ :page ] ) )
  end

  def edit
  end

  def index
    render :action => :show
  end

  def show
    @page ||= Page.new( :slug => params[ :id ] )

    if @page.new_record?
      render :action => :new
    else
      respond_with( @page )
    end
  end

  def update
    @page.update_attributes( params[ :page ] )
    respond_with( @page )
  end

  private

    def get_page
      @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first ||
        Page.where( :id => params[:id] ).first
    end
end

 

在该控制器中,index 方法仅仅反映没有页面标示符的 show 操作,从而呈现主页面。show 会显示一个页面,并提供一个 ID 或标头(所有操作的查询都集中在 get_page 中,从而进一步减少了代码的数量);如果某个页面不存在,则会准备一个新的页面以供进行编辑。

Page 模型仅仅可以验证所有显示的字段:

class Page > ActiveRecord::Base
  validates_presence_of :body, :slug, :title
end

 

将驼峰式大小写引用转换为指向其他页面的链接,这一工作是在 Page 模型的视图中进行的。由 app/helpers/pages_helper.rb 中的 helper 函数来完成这一工作,从而保持视图的最小化(请参阅 清单 12)。 清单 12. 驼峰式大小写转换 helper 函数

               
module PagesHelper
  def wikify( page )
    return '' if page.body.blank?
    page.body.gsub( /^([A-Z][[:alnum:]]*([A-Z][[:alnum:]]*)+)/ ) do |match|
      link_to( $1, :action => :show, :id => $1 )
    end
  end
end

 

该视图是典型的视图,如 清单 13 中所示。 清单 13. 典型视图

               
<p>
  <b>Title:</b>
  <%= @page.title %>
</p>

<p>
  <b>Body:</b>
  <%= raw wikify( @page ) %>
</p>

<%= link_to 'Edit', edit_page_path(@page) %> |
<%= link_to 'Back', pages_path %>

 

raw 操作数是 Rails 3 中新增的功能。与以前版本的 Rails 不同,默认情况下所有的字符串都可以(去掉了 HTML)安全发送。如果要通过 HTML 发送一个字符串,则必须使用 raw

 

切换 Rails

除了此处所介绍的功能改进和便捷性,Rails 3 还提供了比以前版本更佳的性能,尤其是在呈现部件方面。您还可以创建您专有的验证器类,并充分利用更为流畅的标准验证。例如,由 Jeremy McAnally 编写以下验证,一次需要四行单独的代码:

validates :login, :presence => true, :length => {:minimum => 4},
  :uniqueness => true, :format => { :with => /[A-Za-z0-9]+/ }

 

Rails 的官方教程 “Rails 指南” 目前正在更新为 Rails 3 版。您也可以在 Jeremy McAnally、Yehuda Katz、Gregg Pollack 和其他社区领导者们的博客中找到更详细的说明以及更便捷的解决方案(请参阅 参考资料)。一些受大众欢迎的书籍也正在进行修订,其中包括十分创新的《应用 Rails 进行敏捷 Web 开发》(请参阅 参考资料)。

折腾rails3

折腾rails3

///////////gem install 报错或是太慢,gem install 本地安装/////////////////////////

或是gem install 太慢 或是无法联接 timeout

这时可以通过本地安装的方式安装gem

首先进入gem官网http://rubygems.org/

然后搜索找到你要安装的gem,下载下来

应该是像rails-3.0.gem的文件

然后执行gem install -l rails-3.0.gem

-l参数意思是直接执行从本地安装

如果该gem没有依赖包,则直接就安装成功了

如果有依赖包,则会抱错提示缺少依赖的gem

然后只要再去下载该包,gem install -l xxx.gem

按照这个步骤安装虽然操作不方便,但是非常快。

如果要新装一台机器的话,只需把所有依赖包放到一个文件夹里,依次安装所有包,那会非常节省时间的,而且不一定需要联网的。

/////////////////////////安装不了rails3////////////////////////////

当出现以上错误时,有几种原因,网速过慢、gem服务器太慢、被墙了。 解决方案有几种,一种是自己一个一个下载gem包,本地安装,不过太麻烦。 另一种是修改源地址: 先查看一下当前源地址

gem env
gem sources list

一般默认是:http://rubygems.org/ 增加几个源路径:

sudo gem sources -a http://gems.rubyforge.org
sudo gem sources -a http://gems.github.com

问题应该解决了。关于gem sources的用法可以看帮助:gem help sources

//////////////////////////////////////加速gem///////////////////

下载gem-fast, 来加速你的Gem安装!(还有附赠下载进度条显示噢)

terminal中输入: gem install gem-fast

如果遇到问题, 想回退到之前的下载模式, 只需:gem uninstall gem-fast即可

一切如你所愿!

项目地址: http://github.com/dazuiba/gem-fast

Bug Track:  http://github.com/dazuiba/gem-fast/issues

  1. jhjguxin@jhjguxin-Aspire-4750:~$ sudo apt-get install curl
  2. Reading package lists… Done
  3. Building dependency tree
  4. Reading state information… Done
  5. The following NEW packages will be installed:
  6.   curl
  7. 0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
  8. Need to get 134 kB of archives.
  9. After this operation, 389 kB of additional disk space will be used.
  10. Get:1 http://mirrors.sohu.com/ubuntu/ oneiric/main curl i386 7.21.6-3ubuntu3 [134 kB]
  11. Fetched 134 kB in 1s (132 kB/s)
  12. Selecting previously deselected package curl.
  13. (Reading database … 182147 files and directories currently installed.)
  14. Unpacking curl (from …/curl_7.21.6-3ubuntu3_i386.deb) …
  15. Processing triggers for man-db …
  16. Setting up curl (7.21.6-3ubuntu3) …
  17. j
  18. jhjguxin@jhjguxin-Aspire-4750:~$ sudo gem install gem-fast
  19. Fetching: gem-fast-0.0.6.3.gem (100%)
  20. ========================================================================
  21.   Thanks for installing Gem-Fast!
  22.   Gem-Fast will use curl to make your gem install faster!
  23.   Try it now use:  gem install rails
  24. ========================================================================
  25. Successfully installed gem-fast-0.0.6.3
  26. 1 gem installed
  27. Installing ri documentation for gem-fast-0.0.6.3…
  28. Installing RDoc documentation for gem-fast-0.0.6.3…
  29. jhjguxin@jhjguxin-Aspire-4750:~$ sudo gem install rails
  30. Downloading http://rubygems.org/latest_specs.4.8.gz
  31. ##############################                                            42.2%

///////////结果呢 各种爬墙 各种 折腾都没能在线安装好 rails3 最后实在不行 本地安装咯 31个gem包//////////////////////

我的ubuntu11.10 在http://rubygems.org/ 上面下载了如下的包(放在一个文件中),实际上还是根据实际的依赖提示来

actionmailer-3.1.1.gem    i18n-0.6.0.gem         rails-3.1.1.gem actionpack-3.1.1.gem      json-1.6.1.gem         railties-3.1.1.gem activemodel-3.1.1.gem     mail-2.3.0.gem         rake-0.9.2.2.gem activerecord-3.1.1.gem    mime-types-1.17.2.gem  rdoc-3.11.gem activeresource-3.1.1.gem  multi_json-1.0.3.gem   sprockets-2.0.3.gem activesupport-3.1.1.gem   polyglot-0.3.3.gem     thor-0.14.6.gem arel-2.2.1.gem            rack-1.3.5.gem         tilt-1.3.3.gem builder-3.0.0.gem         rack-cache-1.1.gem     treetop-1.4.10.gem bundler-1.0.21.gem        rack-mount-0.8.3.gem   tzinfo-0.3.30.gem erubis-2.7.0.gem          rack-ssl-1.3.2.gem hike-1.2.1.gem            rack-test-0.6.1.gem

然后:::

jhjguxin@jhjguxin-virtual-machine:~/Downloads/rails$ sudo gem install rails-3.1.1.gem Building native extensions.  This could take a while… Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported  = 1.8.7 : gem install rdoc-data; rdoc-data —install  = 1.9.1 : gem install rdoc-data; rdoc-data —install >= 1.9.2 : nothing to do! Yay! Successfully installed multi_json-1.0.3 Successfully installed activesupport-3.1.1 Successfully installed builder-3.0.0 Successfully installed i18n-0.6.0 Successfully installed activemodel-3.1.1 Successfully installed rack-1.3.5 Successfully installed rack-cache-1.1 Successfully installed rack-test-0.6.1 Successfully installed rack-mount-0.8.3 Successfully installed hike-1.2.1 Successfully installed tilt-1.3.3 Successfully installed sprockets-2.0.3 Successfully installed erubis-2.7.0 Successfully installed actionpack-3.1.1 Successfully installed arel-2.2.1 Successfully installed tzinfo-0.3.30 Successfully installed activerecord-3.1.1 Successfully installed activeresource-3.1.1 Successfully installed mime-types-1.17.2 Successfully installed polyglot-0.3.3 Successfully installed treetop-1.4.10 Successfully installed mail-2.3.0 Successfully installed actionmailer-3.1.1 Successfully installed rake-0.9.2.2 Successfully installed thor-0.14.6 Successfully installed rack-ssl-1.3.2 Successfully installed json-1.6.1 Successfully installed rdoc-3.11 Successfully installed railties-3.1.1 Successfully installed bundler-1.0.21 Successfully installed rails-3.1.1 31 gems installed Installing ri documentation for multi_json-1.0.3… Installing ri documentation for activesupport-3.1.1… Installing ri documentation for builder-3.0.0… Installing ri documentation for i18n-0.6.0… Installing ri documentation for activemodel-3.1.1… Installing ri documentation for rack-1.3.5… Installing ri documentation for rack-cache-1.1… Installing ri documentation for rack-test-0.6.1… Installing ri documentation for rack-mount-0.8.3… Installing ri documentation for hike-1.2.1… Installing ri documentation for tilt-1.3.3… Installing ri documentation for sprockets-2.0.3… Installing ri documentation for erubis-2.7.0… Installing ri documentation for actionpack-3.1.1… Installing ri documentation for arel-2.2.1… Installing ri documentation for tzinfo-0.3.30… Installing ri documentation for activerecord-3.1.1… Installing ri documentation for activeresource-3.1.1… Installing ri documentation for mime-types-1.17.2… Installing ri documentation for polyglot-0.3.3… Installing ri documentation for treetop-1.4.10… Installing ri documentation for mail-2.3.0… Installing ri documentation for actionmailer-3.1.1… Installing ri documentation for rake-0.9.2.2… Installing ri documentation for thor-0.14.6… Installing ri documentation for rack-ssl-1.3.2… Installing ri documentation for json-1.6.1… Installing ri documentation for rdoc-3.11… Installing ri documentation for railties-3.1.1… Installing ri documentation for bundler-1.0.21… Installing ri documentation for rails-3.1.1… Installing RDoc documentation for multi_json-1.0.3… Installing RDoc documentation for activesupport-3.1.1… Installing RDoc documentation for builder-3.0.0… Installing RDoc documentation for i18n-0.6.0… Installing RDoc documentation for activemodel-3.1.1… Installing RDoc documentation for rack-1.3.5… Installing RDoc documentation for rack-cache-1.1… Installing RDoc documentation for rack-test-0.6.1… Installing RDoc documentation for rack-mount-0.8.3… Installing RDoc documentation for hike-1.2.1… Installing RDoc documentation for tilt-1.3.3… Installing RDoc documentation for sprockets-2.0.3… Installing RDoc documentation for erubis-2.7.0… Installing RDoc documentation for actionpack-3.1.1… Installing RDoc documentation for arel-2.2.1… Installing RDoc documentation for tzinfo-0.3.30… Installing RDoc documentation for activerecord-3.1.1… Installing RDoc documentation for activeresource-3.1.1… Installing RDoc documentation for mime-types-1.17.2… Installing RDoc documentation for polyglot-0.3.3… Installing RDoc documentation for treetop-1.4.10… Installing RDoc documentation for mail-2.3.0… Installing RDoc documentation for actionmailer-3.1.1… Installing RDoc documentation for rake-0.9.2.2… Installing RDoc documentation for thor-0.14.6… Installing RDoc documentation for rack-ssl-1.3.2… Installing RDoc documentation for json-1.6.1… Installing RDoc documentation for rdoc-3.11… Installing RDoc documentation for railties-3.1.1… Installing RDoc documentation for bundler-1.0.21… Installing RDoc documentation for rails-3.1.1… jhjguxin@jhjguxin-virtual-machine:~/Downloads/rails$ rails -v Rails 3.1.1

提问的智慧 - How to Ask Questions the Smart Way [Eric Raymond]

提问的智慧 – How To Ask Questions The Smart Way [Eric Raymond]

艾瑞克.史蒂文.雷蒙德(Eric Steven Raymond)

Thyrsus Enterprises 瑞克.莫恩(Rick Moen) 版权©2001, 2006 Eric S. Raymond, Rick Moen

原文:How To Ask Questions The Smart Way http://www.catb.org/~esr/faqs/smart-questions.html 翻译:囗囗 时间:2010年9月28日 内容

译文

弃权申明 引言 提问前 提问时 仔细挑选论坛 面向新手的论坛和互联网中继聊天(IRC)通常响应最快 第二步,使用项目的邮件列表 使用有意义且明确的主题 使问题容易回复 用清晰、语法、拼写正确的语句书写 使用易于读取且标准的文件格式发送问题 描述问题应准确且有内容 量不在多,精炼则灵 别急于宣称找到臭虫 低声下气代替不了做自己的家庭作业 描述问题症状而不是猜测 按时间先后罗列问题症状 描述目标而不是过程 别要求私下回复电邮 提问应明确 关于代码的问题 别张贴家庭作业式问题 删除无意义的要求 不要把问题标记为“紧急”, 即使对你而言的确如此 礼貌总是有益的 问题解决后追加一条简要说明 如何解读回答 “读读该死的手册”(RTFM)和“搜搜该死的网络”(STFW):如何明白你已完全搞砸 如果还不明白…… 对待无礼 别象失败者那样反应 提问禁忌 好问题与坏问题 如果得不到回答 如何更好地回答 相关资源 译文 鸣谢

译 文: 印尼语、 巴西葡萄牙语、 汉语、 捷克语、 丹麦语、 荷兰语、 爱沙尼亚语、 芬兰语、 法语、 乔治亚语、 德语、 希腊语、 希伯来语、 匈牙利语、 意大利语、 日语、 蒙古语、 波兰语、 葡萄牙语、 罗马尼亚语、 俄语、 塞尔维亚语、 西班牙语、 瑞典语、 泰语、 土耳其语。 如果你想复制、镜像、翻译或引用本文,请参阅我的 复制协议。

弃权申明

许多项目的网站在如何取得帮助的部分链接了本文,这没有关系,也正是我们想要的。但如果你是该项目生成此链接的网管,请在链接附近显著位置注明:我们不提供该项目的服务支持!

我们已经领教了没有此说明带来的痛苦,我们将不停地被一些白痴纠缠,他们认为既然我们发布了本文,那么我们就有责任解决世上所有的技术问题。

如 果你是因为需要帮助正在阅读本文,然后就带着可以直接从作者那取得帮助的印象离开,那么 你 就不幸成了我们所说的白痴之一。 别向 我们 提问,我们不会理睬的。 我们只是在这教你如何从那些真正懂得你软硬件问题的人那里取得帮助,但 99.9% 的时间我们不会是那些人。除非你非常地 确定 本文的作者是你遇到问题方面的专家,请不要打搅,这样大家都更开心一点。

引言

在 黑客 的世界里,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,本文将教你如何提问才更有可能得到满意的答复。

开源程序的应用已经很广,你通常可以从其他更有经验的用户而不是黑客那里得到解答。这是好事,他们一般对新手常有的毛病更容忍一点。然尔,使用我们推荐的方法,象对待黑客那样对待这些有经验的用户,通常能最有效地得到问题的解答。

第一件需要明白的事是黑客喜欢难题和激发思考的好问题。假如不是这样,我们也不会写本文了。如果你能提出一个有趣的问题让我们咀嚼玩味,我们会感激你。好问题是种激励与礼物,帮助我们发展认知,揭示没有注意或想到的问题。在黑客中,“好问题!” 是非常热烈而真挚的赞许。

此外,黑客还有遇到简单问题就表现出敌视或傲慢的名声。有时,我们看起来还对新手和愚蠢的家伙有条件反射式的无礼,但事情并不真是这样。

我 们只是毫无歉意地敌视那些提问前不愿思考、不做自己家庭作业的人。这种人就象时间无底洞──他们只知道索取,不愿意付出,他们浪费了时间,这些时间本可用 于其它更有趣的问题或更值得回答的人。我们将这种人叫做 “失败者(loser)” (由于历史原因,我们有时将“loser”拼写为“lusers” 。)

我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,计算机只是种工具,是种达到目的的手段而 已。他们有自己的生活并且有更要紧的事要做,我们承认这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。不过,我们回答问题的风格是为了适应那 些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不该变。如果连这都变了,我们就会在自己能做得最好的事情上不再那么犀利。

我们(大多数)是自愿者, 从自己繁忙的生活中抽时间来回答问题,有时会力不从心。因此,我们会毫不留情地滤除问题,特别是那些看起来象是失败者提的,以便更有效地把回答问题的时间留给那些胜利者。

如 果你认为这种态度令人反感、以施惠者自居或傲慢自大,请检查你的假设,我们并未要求你屈服──事实上,假如你做了该做的努力,我们中的大多数将非常乐意平 等地与你交流,并欢迎你接纳我们的文化。试图去帮助那些不愿自救的人对我们简直没有效率。不懂没有关系,但愚蠢地做事不行。

所以,你不必在技术上很在行才能吸引我们的注意,但你 必须 表现出能引导你在行的姿态──机 敏、有想法、善于观察、乐于主动参与问题的解决。如果你做不到这些使你与众不同的事情,我们建议你付钱跟别人签商业服务合同,而不是要求黑客无偿帮助。

如果你决定向我们求助,你不会想成为一名失败者,你也不想被看成一个失败者。得到快速有效回答的最好方法是使提问者看起来象个聪明、自信和有想法的人,并且暗示只是碰巧在某一特别问题上需要帮助。

(欢迎对本文指正,可以将建议发至 esr@thyrsus.com 或 respond-auto@linuxmafia.com。 请注意,本文不想成为一般性的 网络礼仪 指南,我一般会拒绝那些与引出技术论坛中有用的回答不特别相关的建议。)

提问前

在通过电邮、新闻组或论坛提技术问题以前,做以下事情:

尝试在你准备提问论坛的历史文档中搜索答案

尝试搜索互联网以找到答案

尝试阅读手册以找到答案

尝试阅读“常见问题文档”(FAQ)以找到答案

尝试自己检查或试验以找到答案

尝试请教懂行的朋友以找到答案

如果你是程序员,尝试阅读源代码以找到答案

提问时,请先表明你已做了上述事情,这将有助于建立你不是寄生虫与浪费别人时间的印象。最好再表述你从中 学到的东西 ,我们喜欢回答那些表现出能从答案中学习的人。

运 用某些策略,比如用谷歌(Google)搜索你遇到的各种错误提示(既搜索 谷歌论坛,也搜索网页), 这样很可能直接就找到了解决问题的文档或邮件列表线索。 即使没有结果,在邮件列表或新闻组寻求帮助时提一句“我在谷歌中搜过下列句子但没有找到什么有用的东西” 也是件好事,至少它表明了搜索引擎不能提供哪些帮助。将搜索关键词与你的问题及可能的解决方案联系起来,还有助于引导其他有类似问题的人。

别 着急,不要指望几秒钟的谷歌搜索就能解决一个复杂的问题。读一下常见问题文档。在向专家提问之前,先向后靠靠放松一下,再思考一下问题。相信我们,他们能 从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑抛出,只因你的第一次搜索没有结果(或者结果太多)。

认真地思考,准备好你的问题。轻率的提问只能得到轻率的回答,或者压根没有。在提问时,你越是表现出在此前做过思考与努力去解决自己的问题,你越有可能得到真正的帮助。

注意别提错问题。如果提问基于错误的假设,某黑客多半会一边想 “愚蠢的问题……”,一边按将错就错的答案回复你,并且希望这种只是得到你自己“问的问题”而非真正所需的解答,给你一个教训。

永远不要假设你 有资格 得到解答。你没有这种资格,毕竟你没有为此服务付费。如果你能够提出有内容、有趣和激励思考的问题──那种毫无疑问能够向社区贡献经验,而不仅仅是消极地要求从别人那获取知识的问题,你将“挣到”答案。

另一方面,表明你有能力也乐意参与问题的解决是个很好的开端。“有没有人能指个方向?”,我这还差点什么?”,“我应该查哪个网站?”,通常要比 “请给出我可以用的完整步骤”更容易得到回复,因为你表明了只要有人能指个方向,你就很乐意完成剩下的过程。

提问时

仔细挑选论坛

要对在哪提问留心,如果你做了下述事情,多半会被一笔勾销或被看成“失败者”:

[*]张贴与论坛主题无关的问题

[*]在面向高级技术问题的论坛上张贴肤浅的问题,或者反之。

[*]在太多不同的新闻组同时张贴

[*]给既非熟人也没有义务解决你问题的人发送你私人的电邮

[*]为保护通信的渠道不被无关的东西淹没,黑客会除掉那些没有找对地方的问题,你不会想让这种事落到自己头上的。

因 此,第一步是找对论坛。谷歌和其它搜索引擎还是你的朋友,可以用它们搜索你遇到困难的软硬件问题最相关的项目网站。那里通常都有项目的常见问题 (FAQ)、邮件列表及文档的链接。如果你的努力(包括 阅读 FAQ)都没有结果,这些邮件列表就是最后能取得帮助的地方。项目的网站也许还有报告臭虫的流程或链接,如果是这样,去看看。

向陌生的人或论坛发送邮件极有可能是在冒险。譬如,不要假设一个内容丰富的网页的作者想充当你的免费顾问,不要对你的问题是否会受到欢迎做太乐观的估计──如果你不确定,向别处发或者压根别发。

在 选择论坛、新闻组或邮件列表时,别太相信名字,先看看 FAQ 或者许可书以明确你的问题是否切题。发贴前先翻翻已有的帖子,这样可以让你感受一下那里行事的方式。事实上,张贴前在新闻组或邮件列表的历史文档中搜索与 你问题相关的关键词是个极好的主意,也许就找到答案了。即使没有,也能帮助你归纳出更好的问题。

别象机关枪似的一次性“扫射”所有的帮助渠道,这就象大喊大叫一样会令人不快,温柔地一个一个来。

弄懂主题!最典型的错误之一是在某种致立于跨平台可移植的语言、库或工具的论坛中提关于 Unix 或 Windows 操作系统程序接口的问题。如果你不明白为什么这是大错,最好在搞清楚概念前什么也别问。

一般来说,在仔细挑选的公共论坛中提问比在私有论坛中提同样的问题更容易得到有用的回答。有几个道理支持这点,一是看潜在的回复者有多少,二是看论坛的参与者有多少,黑客更愿回答能启发多数人的问题。

可以理解,老练的黑客和一些流行软件的作者正在承受过多的不当消息。就象那根最后压垮骆驼背的稻草一样,你的加入也有可能使情况走向极端──已经好几次了,一些流行软件的作者退出了对自己软件的支持,因为伴随而来的涌入其私人邮箱的垃圾邮件变得无法忍受。

面向新手的论坛和互联网中继聊天(IRC)通常响应最快

本 地的用户组织或者你所用的 Linux 发行版也许正在宣传新手取得帮助的论坛或 IRC 通道(在一些非英语国家,新手论坛很可能还是邮件列表),这些地方是开始提问的好去处,特别是当你觉得遇到的也许只是相对简单或者很普通的问题时。经过宣 传的 IRC 通道是公开邀请提问的地方,通常可以得到实时的回复。

事实上,如果出问题的程序来自某发行版(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序本身的项目论坛或邮件列表,(否则)该项目的黑客可能仅仅回复“用 我们的 代码”。

在任何论坛发贴以前,先看看有没有搜索功能。如果有,就试着用问题的几个关键词搜索一下,也许就有帮助。如果在此之前你已做过全面的网页搜索(你应该这样去做),还是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的全部内容。

通过论坛或 IRC 通道提供项目的用户支持有增长的趋势,电子邮件交流则更多地为项目开发者保留。所以先在论坛或 IRC 中寻求与该项目相关的帮助。

第二步,使用项目的邮件列表

当某个项目存在开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。查一查项目的文档和主页,找到项目的邮件列表并使用它。采用这种办法有几个很好的理由:

向个别开发者提的问题(如果)足够好,也将对整个项目组有益。相反,如果你认为自己的问题对整个项目组来说太愚蠢,这也不能成为骚扰个别开发者的理由。

向列表提问可以分散开发者的负担,个别开发者(尤其是项目领导)也许太忙以至于没法回答你的问题。

大多数邮件列表都要存档,那些存档将被搜索引擎索引,如果你向列表提问并得到解答,将来其它人可以通过网页搜索找到你的问题和答案,也就不用再次发问了。

如果某些问题经常被问到,开发者可以利用此信息改进文档或软件本身,以使其更清楚。如果只是私下提问,就没有人能看到最常见问题的完整场景。

如果一个项目既有 “用户” 也有“开发者”(或 “黑客”)邮件列表或论坛,而你又不摆弄那些代码,向“用户”列表或论坛提问。不要假设自己会在开发者列表中受到欢迎,那些人多半会遭受你的噪音干扰。

然尔,如果你 确信 你的问题不一般,而且在“用户” 列表或论坛中几天都没有回复,可以试试“开发者”列表或论坛。建议你在张贴前最好先暗暗地观察几天以了解那的行事方式(事实上这是参与任何私有或半私有列表的好主意)

如 果你找不到一个项目的邮件列表,而只能查到项目维护者的地址,只管向其发信。即便在这种情况下,也别假设(项目)邮件列表不存在。在你的电子邮件中陈述你 已经试过但没有找到合适的邮件列表,也提及你不反对将自己的邮件转发给他人(许多人认为,即使没什么秘密,私人电子邮件也不应该被公开。通过允许将你的电 子邮件转发他人,你给了相应人员处置你邮件的选择)。

使用有意义且明确的主题

在 邮件列表、新闻组或论坛中,主题是你在五十个或更少的字以内吸引有资格专家注意的黄金机会,不要用诸如 “请帮我” (更别提大写的 “请帮我!!!!”,这种主题的消息会被条件反射式地删掉)之类的唠叨浪费机会。不要用你痛苦的深度来打动我们,相反,要在这点空间中使用超级简明扼要的 问题描述。

使用主题的好惯例是“对象──偏差”(式的描述),许多技术支持组织就是这样做的。在“对象”部分指明是哪一个或哪一组东西有问题,在“偏差”部分则描述与期望的行为不一致的地方。

愚蠢: 救命啊!我的笔记本视频工作不正常!

明智: X.org 6.8.1 扭曲鼠标光标,MV1005 型号的某显卡芯片组

更明智: 使用 MV1005 型号的某显卡芯片组在 X.org 6.8.1 的鼠标光标被扭曲

编 写 “对象──偏差”式描述的过程有助于你组织对问题的细致思考。是什么被影响了?仅仅是鼠标光标或者还有其它图形?只在 X.org 中出现?或只是在其 6.8.1 版中?是针对某显卡芯片组?或者只是其中的 MV1005 型号?一个黑客只需描一眼就能够立即明白什么是你遇到的问题,什么是你自己的问题。

更一般地,想象一下在一个只显示主题的文档索引中查找。让你的主题更好地反映问题,可以使下一个搜索类似问题的人能够在文档中直接就找到答案的线索,而不用再次发贴提问。

如果你想在回复中提问,确保改变主题以表明你是在问一个问题,一个主题象 “Re: 测试” 或者 “Re: 新臭虫”的消息不太可能引起足够的注意。同时,将回复中与新主题不甚相关的引用内容尽量删除。

对于列表消息,不要直接点击回复(按钮)来开始一个全新的线索,这将限制你的观众。有些邮件阅读程序,比如 mutt,允许用户按线索排序并通过折叠线索来隐藏消息,这样做的人永远看不到你发的消息。

仅仅改变主题还不够。mutt 和其它一些邮件阅读程序还要检查邮件头主题以外的其它信息,以便为其指定线索,所以宁可发一个全新的邮件。

在 论坛,因为消息与特定的线索紧密结合,并且通常在线索之外不可见,好的提问方式略有不同,通过回复提问并不要紧。不是所有论坛都允许在回复中出现分离的主 题,而且这样做了基本上没有人会去看。不过,通过回复提问本身就是令人怀疑的做法,因为它们只会被正在查看该线索的人读到。所以,除非你 只想 在该线索当前活跃的人群中提问,还是另起炉灶比较好。

使问题容易回复

以“请向……回复”来结束问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟考虑你的问题更麻烦。如果你的邮件客户端程序不支持这样做,换个好点的;如果是操作系统不支持所有这种邮件客户端程序,也换个好点的。

在 论坛,要求通过电子邮件回复是完全无礼的,除非你确信回复的信息也许是敏感的(而且有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只 是想在有人回复线索时得到电子邮件提醒,可以要求论坛发送。几乎所有论坛都支持诸如“留意本线索”、“有回复发送邮件”等功能。

用清晰、语法、拼写正确的语句书写

经验告诉我们,粗心与草率的作者通常也粗心与草率地思考和编程(我敢打赌)。为这些粗心与草率的思考者回答问题没有什么好处,我们宁可将时间花在其它地方。

清楚、良好地表达你的问题非常重要。如果你觉得这样做麻烦,我们也觉得注意(你的问题)麻烦。花点额外的精力斟酌一下字句,用不着太僵硬与正式──事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它 必须 很准确,而且有迹象表明你是在思考和关注问题。

正 确地拼写、使用标点和大小写,不要将“its”混淆为“it’s”,“loose”搞成“lose”或者将“discrete”弄成 “discreet”。不要全部用大写,这会被视为无礼的大声嚷嚷 (全部小写也好不到哪去,因为不易阅读。Alan Cox [注:著名黑客,Linux 内核的重要参与者] 也许可以这样做,但你不行。)

一般而言,如果你写得象个半文盲似的傻子,多半得不到理 睬。也不要使用即时通讯中的简写,如将“you”简化为“u”会使你看起来象一个为了节约二次击键的半文盲式的傻子。更糟的是,如果象个小孩似地鬼画桃符 那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。

如果在非母语论坛提问,你的拼写与语法错误会得到有限的宽容, 但懒惰完全不会被容忍(是的,我们通常看得出其中的差别)。同时,除非你知道回复者使用的语言,请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂语 言写的消息。在互联网上英语是工作语言,用英语书写可以将你的问题不被阅读就被直接删除的可能性降到最低。

使用易于读取且标准的文件格式发送问题

如果你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,所以:

[*]使用纯文本而不是 HTML(超文本标注语言)( 关闭HTML 并不难)

[*]使用 MIME(多用途互联网邮件扩展)附件通常没有问题,前提是真正有内容(譬如附带的源文件或补丁),而不仅仅是邮件客户端程序生成的模板(譬如只是消息内容的拷贝)。

[*]不要发送整段只是单行句子但多次折回的邮件(这使得回复部分内容非常困难)。设想你的读者是在80个字符宽的文本终端阅读邮件,设置你的行折回点小于 80 列。

但是,也 不要 用任何固定列折回数据(譬如日志文件拷贝或会话记录)。数据应该原样包含,使回复者确信他们看到的是与你看到的一样的东西。

在英语论坛中,不要使用’Quoted-Printable’ MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持。当它们分断时,那些文本中四处散布的 “=20”符号既难看也分散注意力,甚至有可能破坏内容的语意。

永远不要 指望黑客们阅读使用封闭的专用格式编写的文档,诸如微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就象有人将还在冒热气的猪粪倒在你门口时你的反应一样。即使他们能够处理,也很厌恶这么做。

如果你从使用视窗的电脑发送电子邮件,关闭微软愚蠢的“聪明引用”功能,以免在你的邮件中到处散布垃圾字符。

在论坛,勿滥用“表情符号”和“HTML”功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来象个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是有用的回复更有兴趣。

如 果你使用图形用户界面的邮件客户端程序(如网景公司的 Messenger、微软公司的 Outlook 或者其它类似的),注意它们的缺省配置不一定满足这些要求。大多数这类程序有基于菜单的“查看源码”命令,用它来检查发送文件夹中的消息,以确保发送的是 没有多余杂质的纯文本文件。

描述问题应准确且有内容

[*]仔细、清楚地描述问题的症状

[*]描述问题发生的环境(主机、操作系统、应用程序,任何相关的),提供销售商的发行版和版本号(如:“Fedora Core 7”、“Slackware 9.1”等)

[*]描述提问前做过的研究及其理解。

[*]描述提问前为确定问题而采取的诊断步骤。

[*]描述最近对计算机或软件配置的任何相关改变。

[*]如果可能,提供在可控环境下重现问题的方法。

[*]尽最大努力预测黑客会提到的问题,并提前备好答案。

[*]如果你认为是代码有问题,向黑客提供在可控环境下重现问题的方法尤其重要。当你这么做时,得到有用且及时回复的可能性将大大增加。

西蒙.泰瑟姆(Simon Tatham)写过一篇 如何有效报告臭虫 的文章,我强烈推荐各位阅读。

量不在多,精炼则灵

你应该(写得)精炼且有内容,简单地将一大堆代码或数据罗列在求助消息中达不到目的。如果你有一个很大且复杂的测试样例让程序崩溃,尝试将其裁剪得越小越好。

至少有三个理由支持这点。第一,让别人看到你在努力简化问题使你更有可能得到回复。第二,简化问题使你更有可能得到 有用的 回复。第三,在提纯臭虫报告的过程中,你可能自己就找到了解决办法或权宜之计。

别急于宣称找到臭虫

当 你在一个软件中遇到问题,除非你 非常、非常 的有根据,不要动辄声称找到了臭虫。提示:除非你能提供解决问题的源代码补丁,或者对前一版本的回归测试表现出不正确的行为,否则你都多半不够完全确信。 对于网页和文档也如此,如果你(声称)发现了文档的“臭虫”,你应该能提供相应位置的替代文本。

记住,还有许多其它用户并未经历你遇到的问题,否则你在阅读文档或搜索网页时就应该发现了(你在报怨前已经做了这些,是吧 ?)。这也意味着很有可能是你弄错了而不是软件本身有问题。

编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了臭虫,也就置疑了他们的能力,即使你是对的,也有可能会使其中的部分人感到不快。(此外,)在主题中嚷嚷“臭虫”也是特别不老练的。

提问时,即使你私下非常确信已经发现一个真正的臭虫,最好写得象是 你 做错了什么。如果真的有臭虫,你会在回复中看到这点。这样做的话,如果真有虫子,维护者就会向你道歉,这总比你弄砸了然后欠别人一个道歉要强。

低声下气代替不了做自己的家庭作业

有些人明白他们不应该粗鲁或傲慢地行事并要求得到答复,但他们退到相反的低声下气的极端:“我知道我只是个可怜的新丁,一个失败者,但……”。这既使人困扰,也没有用,当伴随着对实际问题含糊的描述时还特别令人反感。

别用低级灵长类动物的办法浪费你我的时间,相反,尽可能清楚地描述背景情况和你的问题,这比低声下气更好地摆正了你的位置。

有时,论坛设有单独的初学者提问版面,如果你真的认为遇到了肤浅的问题,到那去就是了,但一样别低声下气。

描述问题症状而不是猜测

告 诉黑客是什么导致了问题是没用的(如果你的诊断理论是了不起的东西,你还会向别人咨询求助吗?)。所以,确保只是告诉他们问题的原始症状,而不是你的解释 和理论,让他们来解释和诊断。如果你认为陈述自己的猜测很重要,应清楚地说明这只是你的猜测并描述为什么它们不起作用。

愚蠢: 我在编译内核时接连遇到 SIG11 错误,怀疑主板上的某根电路丝断了,找到它们的最好办法是什么?

明智: 我 组装的电脑(K6/233 CPU、FIC-PA2007 主板[威盛 Apollo VP2 芯片组]、Corsair PC133 SDRAM 256Mb 内存)最近在开机 20 分钟左右、做内核编译时频繁地报 SIG11 错,但在头 20 分钟内从不出问题。重启动不会复位时钟,但整夜关机会。更换所有内存未解决问题,相关的典型编译会话日志附后。

由于以上这点许多人似乎难 以掌握,这里有句话可以提醒你:“所有的诊断专家都来自密苏里州”。美国国务院的官方座右铭则是“让我看看”(出自国会议员威勒德.D.范迪弗 [Willard D. Vandiver]在1899年时的讲话:“我来自一个出产玉米、棉花、牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州, 你必须让我看看。”)针对诊断者而言,这并不是怀疑,而只是一种真实而有用的需求,以便让他们看到与你看到的原始证据尽可能一致的东西,而不是你的猜测与 总结。(所以,)让我们看看。

按时间先后罗列问题症状

刚出问题之前发生的事情通常包含有解决问题最有效的线索。所以,记录中应准确地描述你、电脑和软件在崩溃前都做了什么。在命令行处理的情况下,有会话日志(如运行脚本工具生成的)并引用相关的若干(如20)行记录会非常有帮助。

如果崩溃的程序有诊断选项(如-v详述开关),试着选择这些能在记录中增加排错信息的选项。记住,“多”不等于“好”。试着选取适当的排错级别以便提供有用的信息而不是将阅读者淹没在垃圾中。

如果你的记录很长(如超过四段),在开头简述问题随后按时间先后罗列详细过程也许更有用。这样,黑客在读你的记录时就知道该注意哪些内容了。

描述目标而不是过程

如果你想弄清楚如何做某事(而不是报告一个臭虫),在开头就描述你的目标,然后才陈述遇到问题的特定步骤。

经常出现这种情况,寻求技术帮助的人在脑袋里有个更高层次的目标,他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身有问题,结果要费很大的劲才能通过。

愚蠢: 我怎样才能让某图形程序的颜色拾取器取得十六进制的 RGB 值?

明智: 我正试着用自己选定数值的颜色替换一幅图片的色表,我现在知道的唯一方法是编辑每个表槽,但却无法让某图形程序的颜色拾取器取得十六进制的 RGB 值。

第二种提法是明智的,它使得建议采用更合适的工具以完成任务的回复成为可能。

别要求私下回复电邮

黑客们认为问题的解决过程应该公开、透明,此过程中如果更有才能的人注意到不完整或者不当之处,最初的回复才能够、也应该被纠正。同时,作为回复者也因为能力和学识被其它同行看到而得到某种回报。

当你要求私下回复时,此过程和回报都被中止。别这样做,让 回复者 来决定是否私下回答──如果他真这么做了,通常是因为他认为问题编写太差或者太肤浅,以至于对其它人毫无意义。

对这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么“向我发电邮,我将为论坛归纳这些回复”将是神奇的句子。试着将邮件列表或新闻组从洪水般雷同的回复中解救出来是非常有礼貌的──但你必须信守诺言。

提问应明确

漫无边际的问题通常也被视为没有明确限制的时间无底洞。最有可能给你有用答案的人通常也是最忙的人(假如只是因为他们承担了太多工作的话),这些人对于没有止境的时间无底洞极其敏感,所以他们也倾向于讨厌那些漫无边际的问题。

如果你明确了想让回复者做的事(如指点方向、发送代码、检查补丁或其它),你更有可能得到有用的回复。(因为)这样可以让他们集中精力并间接地设定了他们为帮助你需要花费的时间和精力上限,这很好。

要想理解专家生活的世界,可以这样设想:那里有丰富的专长资源但稀缺的响应时间。你暗中要求他们奉献的时间越少,你越有可能从这些真正懂行也真正很忙的专家那里得到解答。

所以限定你的问题以使专家回答时需要付出的时间最少──这通常与简化问题还不太一样。举个例,“请问可否指点一下哪有好一点的 X 解释?”通常要比“请解释一下 X”明智。如果你的代码不运行了,通常请别人看看哪有问题比叫他们帮你改正更明智。

关于代码的问题

别要求他人给你出问题的代码排错而不提及应该从何入手。张贴几百行的代码,然后说一声“它不能运行”会让你得不到理睬。只贴几十行代码,然后说一句“在第七行以后,本应该显示,但实际出现的是”非常有可能让你得到回复。

最 精确描述代码问题的方法是提供一个能展示问题的最小测试样例。什么是最小测试样例?它是对问题的展现,只需要刚好能够重现非预期行为的代码即可。如何生成 一个最小测试样例?如果你知道哪一行或哪一段代码会产生问题,将其复制并提供刚好够用的外围支撑代码以构成一个完整的样例(够用是指源码刚好能被编译器、 解释器或任何处理它的程序所接受)。如果你不能将问题缩小到特定的段落,复制源码并去除那些与问题无关的代码段。你能提供的最小测试样例越小越好(参见 量不在多,精炼则灵 )。

生成一个非常小的最小测试样例并不总是可能,但尽力去做是很好的锻练,这有可能帮助你找到需要自己解决的问题。即使你找不到,黑客们喜欢看到你努力过,这将使他们更合作。

如果你只是想让别人帮忙审一下代码,在最开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。

别张贴家庭作业式问题

黑客们善于发现“家庭作业”式的问题。我们中的大多数人已经做了自己的家庭作业,那是该 你 做的,以便从中学到东西。问一下提示没有关系,但不是要求完整的解决方案。

如果你怀疑自己碰到了一个家庭作业式的问题,但仍然无法解决,试试在用户组、论坛或(作为最后一招)在项目的“用户”邮件列表或论坛中提问。尽管黑客们 会 看出来,一些老用户也许仍会给你提示。

删除无意义的要求

抵 制这种诱惑,即在求助消息末尾加上诸如“有人能帮我吗?”或“有没有答案?”之类在语义上毫无意义的东西。第一,如果问题描述还不完整,这些附加的东西最 多也只能是多余的。第二,因为它们是多余的,黑客们会认为这些东西烦人──就很有可能用逻辑上无误但打发人的回复,诸如“是的,你可以得到帮助”和“不, 没有给你的帮助”。

[*]一般来说,避免提“是或否”类型的问题,除非你想得到 “是或否”类型的回答。

[*]不要把问题标记为“紧急”, 即使对你而言的确如此

[*]这是你的问题,不要我们的。宣称“紧急”极有可能事与愿违:大多数黑客会直接删除这种消息,他们认为这是无礼和自私地企图得到即时与特殊的关照。

有一点点局部的例外,如果你是在一些知名度很高、会使黑客们激动的地方使用程序,也许值得这样去做。在这种情况下,如果你有期限压力,也很有礼貌地提到这点,人们也许会有足够的兴趣快一点回答。

当 然,这是非常冒险的,因为黑客们对什么是令人激动的标准多半与你的不同。譬如从国际空间站这样张贴没有问题,但代表感觉良好的慈善或政治原因这样做几乎肯 定不行。事实上,张贴诸如“紧急:帮我救救这个毛绒绒的小海豹!”肯定会被黑客回避或光火,即使他们认为毛绒绒的小海豹很重要。

如果你觉得这不可思议,再把剩下的内容多读几遍,直到弄懂了再发贴也不迟。

礼貌总是有益的

礼貌一点,使用“请”和“谢谢你的关注”或者“谢谢你的关照”,让别人明白你感谢他们无偿花时间帮助你。

坦率地讲,这一点没有语法正确、文字清晰、准确、有内容和避免使用专用格式重要(同时也不能替代它们)。黑客们一般宁可读有点唐突但技术鲜明的臭虫报告,而不是那种有礼但含糊的报告。(如果这点让你不解,记住我们是按问题能教我们什么来评价它的)

然尔,如果你已经谈清楚了技术问题,客气一点肯定会增加你得到有用回复的机会。

(我 们必须指出,本文唯一受到一些老黑客认真反对的地方是以前曾经推荐过的“提前谢了”,一些黑客认为这隐含着事后不用再感谢任何人的暗示。我们的建议是要么 先说 “提前谢了”,事后 再 对回复者表示感谢,要么换种方式表达,譬如用“谢谢你的关注”或“谢谢你的关照”)。

问题解决后追加一条简要说明

问题解决后向所有帮助过的人追加一条消息,让他们知道问题是如何解决的并再次感谢。如果问题在邮件列表或新闻组中受到广泛关注,在那里追加此消息比较恰当。

最 理想的方式是向最初提问的线索回复此消息,并在主题中包含“已解决”、“已搞定”或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见线索 “问题 X”和“问题 X-已解决”的潜在回复者就明白不用再浪费时间了(除非他个人觉得“问题 X”有趣),因此可以利用此时间去解决其它问题。

追加的消息用不着太长或太复杂,一句简单的“你好──是网线坏了!谢谢大家──比尔”就比什么都没有要强。事实上,除非解决问题的技术真正高深,一条简短而亲切的总结比长篇大论要好。说明是什么行动解决了问题,用不着重演整个排错的故事。

对于有深度的问题,张贴排错历史的摘要是恰当的。描述问题的最终状态,说明是什么解决了问题,在此之后 才指明可以避免的弯路。应避免的弯路部分应放在正确的解决方案和其它总结材料之后,而不要将此消息搞成侦探推理小说。列出那些帮助过你的名字,那样你会交到朋友的。

除了有礼貌、有内容以外,这种类型的追帖将帮助其他人在邮件列表、新闻组或论坛文档中搜索到真正解决你问题的方案,从而也让他们受益。

最 后,此类追帖还让每位参与协助的人因问题的解决而产生一种满足感。如果你自己不是技术专家或黑客,相信我们,这种感觉对于你寻求帮助的老手和专家是非常重 要的。问题叙述到最后不知所终总是令人沮丧的,黑客们痒痒地渴望它们被解决。“挠痒痒”为你挣到的信誉将对你下次再次张贴提问非常非常的有帮助。

考虑一下怎样才能避免他人将来也遇到类似的问题,问问自己编一份文档或 FAQ 补丁会不会有帮助,如果是的话就将补丁发给维护者。

在黑客中,这种良好的后继行动实际上比传统的礼貌更重要,也是你善待他人而赢得声誉的方式,这是非常有价值的财富。

如何解读回答

“读读该死的手册”(RTFM)和“搜搜该死的网络”(STFW):如何明白你已完全搞砸

有一个古老而神圣的传统:如果你收到“读读该死的手册”(RTFM) 的回复,发信人认为你应该去“读读该死的手册”。他或她多半是对的,去读一下吧。

“读读该死的手册”(RTFM)有个年轻一点的亲戚,如果你收到“搜搜该死的网络”(STFW)的回复,发信人认为你应该“搜搜该死的网络”。那人多半也是对的,去搜一下吧。(更温和一点的说法是“谷歌是你的朋友!”)

在论坛,你也可能被要求去搜索论坛的文档。事实上,有人甚至可能热心地为你提供以前解决此问题的线索。但不要依赖这种关照,提问前应该先搜索一下文档。

通常,叫你搜索的人已经打开了能解决你问题的手册或网页,正在一边看一边敲键盘。这些回复意味着他认为:第一,你要的信息很容易找到。第二,自已找要比别人喂到嘴里能学得更多。

你不应该觉得这样就被冒犯了,按黑客的标准,回复者没有不理你就是在向你表示某种尊敬,你反而应该感谢他热切地想帮助你。

如果还不明白……

如果你看不懂回答,不要马上回复一个要求说明的消息,先试试那些最初提问时用过的相同工具(如手册、FAQ、网页、懂行的朋友等)试着搞懂回答。如果还是需要说明,展现你已经明白的。

譬 如,假如我告诉你:“看起来象是某输入项有问题,你需要清除它”,接着是个 不好 的回帖:“什么是某输入项?”。而这是一个 很好 的跟帖:“是的,我读了手册,某某输入项只在 -z 和 -p 开关中被提到,但都没有涉及到如何清除它们,你指的是哪一个还是我弄错了什么?”

对待无礼

很多黑客圈子中看似无礼的行为并不是存心冒犯。相反,它是直接了当、一针见血式的交流风格,这种风格对于更关注解决问题而不是使别人感觉舒服而混乱的人是很自然的。

如果你觉得被冒犯了,试着平静地反应。如果有人真的做了过格的事,邮件列表、新闻组或论坛中的前辈多半会招呼他。如果这 没有 发生而你却光火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而 你 将被视为有错的一方,这将伤害到你获取信息或帮助的机会。

另 一方面,你会偶而真的碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击、用犀利的语言将其驳得体无完肤都是可以接受的。然尔,在行事之前一定 要非常非常的有根据。纠正无礼的言论与开始一场毫无意义的口水战仅一线之隔,黑客们自己莽撞地越线的情况并不鲜见。如果你是新手或外来者,避开这种莽撞的 机会并不高。如果你想得到的是信息而不是消磨时光,这时最好不要把手放在键盘上以免冒险。

(有些人断言很多黑客都有轻度的自闭症或阿斯伯 格综合症,缺少用于润滑人类社会“正常”交往所需的脑电路。这既可能是真也可能是假。如果你自己不是黑客,兴许你认为我们脑袋有问题还能帮助你应付我们的 古怪行为。只管这么干好了,我们不在乎。我们 喜欢 现在这个样子,并且一般都对病号标记有站得住脚的怀疑。)

在下一节,我们会谈到另一个问题,当 你 行为不当时会受到的“冒犯”。

别象失败者那样反应

在黑客社区的论坛中有那么几次你可能会搞砸──以本文描述或类似的方式。你会被示众是如何搞砸的,也许言语中还会带点颜色。

这种事发生以后,你能做的最糟糕的事莫过于哀嚎你的遭遇、宣称被口头攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、忘了关马桶盖等等。相反,你该这样去做:

熬过去,这很正常。事实上,它是有益健康与恰当的。

社区的标准不会自己维持,它们是通过参与者积极而 公开 地执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送,这不是事情运作的方式。当有人评论你的一个说法有误或者提出不同看法时,坚持声称受到个人攻击也毫无益处,这些都是失败者的态度。

也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称“如果你不想帮助用户就闭嘴”。有思路的参与者纷纷离开的结果只会使它们变成了毫无意义的唠叨与无用的技术论坛。

是夸张的“友谊”(以上述方式)还是有用?挑一个。

记 着:当黑客说你搞砸了,并且(无论多么刺耳地)告诉你别再这样做时,他正在为关心你和他的社区而行动。对他而言,不理你并将你从他的生活中滤除要容易得 多。如果你无法做到感谢,至少要有点尊严,别大声哀嚎,也别因为自己是个有戏剧性超级敏感的灵魂和自以为有资格的新来者,就指望别人象对待脆弱的洋娃娃那 样对你。

有时候,即使你没有搞砸(或者只是别人想象你搞砸了), 有些人也会无缘无故地攻击你本人。在这种情况下,报怨倒是 真的 会把问题搞砸。

这些找茬者要么是毫无办法但自以为是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用自己的方式对付他们。这些找茬者在给自己找麻烦,这点你不用操心。

也别让自己卷入口水战,大多数口水战最好不要理睬──当然,是在你核实它们只是口水战、没有指出你搞砸的地方,而且没有巧妙地将问题真正的答案藏于其中之后(这也是可能的)。

提问禁忌

下面是些典型的愚蠢问题和黑客不回答它们时的想法。

问:我到哪可以找到某程序或 X 资源? 问:我怎样用 X 做 Y? 问:如何配置我的 shell 提示? 问:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗? 问:我的{程序、配置、SQL 语句}不运行了 问:我的视窗电脑出问题了,你能帮忙吗? 问:我的程序不运行了,我认为系统工具X有问题 问:我安装 Linux 或 X 遇到困难,你能帮忙吗? 问:我如何才能破解超级用户口令/盗取通道操作员的特权/查看某人的电子邮件? 问: 我到哪可以找到某程序或 X 资源?

答: 在我找到它的同样地方,笨旦──在网页搜索引擎上。上帝啊,难道还有人不知道如何使用 谷歌 吗?

问: 我怎样用 X 做 Y?

答: 如果你想解决的是 Y,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 完全无知,也对要解决的 Y 问题糊涂,还被特定形势禁锢了思维。等他们把问题弄好再说。

问: 如何配置我的 shell 提示?

答: 如果你有足够的智慧提这个问题,你也该有足够的智慧去 “读读该死的手册”(RTFM),然后自己去找出来。

问: 我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗?

答: 试试就知道了。如果你试过,你既知道了答案,又不用浪费我的时间了。

问: 我的{程序、配置、SQL 语句}不运行了

答: 这不是一个问题,我也没有兴趣去猜你有什么问题──我有更要紧的事要做。看到这种东西,我的反应一般如下:

你还有什么补充吗?

噢,太糟了,希望你能搞定。

这跟我究竟有什么关系?

问: 我的视窗电脑出问题了,你能帮忙吗?

答: 是的,把视窗垃圾删了,装个象 Linux 或 BSD 的开源操作系统吧。

注意:如果程序有官方的视窗版或者与视窗有交互(如 Samba),你 可以 问与视窗相关的问题,只是别对问题是由视窗操作系统而不是程序本身造成的回复感到惊讶,因为视窗一般来说太差,这种说法一般都成立。

问: 我的程序不运行了,我认为系统工具 X 有问题

答: 你完全有可能是第一个注意到被成千上万用户反复使用的系统调用与库文件有明显缺陷的人,更有可能的是你完全没有根据。不同凡响的说法需要不同凡响的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文档作后盾。

问: 我安装 Linux 或 X 遇到困难,你能帮忙吗?

答: 不行,我需要亲手操作你的电脑才能帮你排错,去向当地的 Linux 用户组寻求方便的帮助(你可以在 这里 找到用户组列表)

注意:如果安装问题与某 Linux 发行版有关,在针对 它 的邮件列表、论坛或本地用户组织中提问也许是恰当的。此时,应描述问题的准确细节。在此之前,先用 “linux”和 所有 被怀疑的硬件 [作关键词] 仔细搜索。

问: 我如何才能破解超级用户口令/盗取通道操作员的特权/查看某人的电子邮件?

答: 想做这种事情说明你是个卑劣的家伙,想让黑客教你做这种事情说明你是个白痴。

好问题与坏问题

最后,我将通过举例来演示提问的智慧。同样的问题两种提法,一种愚蠢,另一种明智。

愚蠢:我在哪能找到关于 Foonly Flurbamatic 设备的东西? 这个问题在乞求得到 “搜搜该死的网络”(STFW) 式的回复。

明智: 我用谷歌搜索过“Foonly Flurbamatic 2600”,但没有找到什么有用的,有谁知道在哪能找到这种设备的编程信息? 这个人已经搜索过网络了,而且听起来他可能真的遇到了问题。

愚蠢: 我不能编译某项目的源代码,它为什么这么破? 提问者假设是别人搞砸了,太自大了。

明智: 某项目的源代码不能在某 Linux 6.2 版下编译。我读了常见问题文档,但其中没有与某 Linux 相关的内容。这是编译时的记录,我做错了什么吗? 提问者已经指明了运行环境,读了常见问题文档(FAQ),列出了错误,也没有假设问题是别人的过错,这家伙值得注意。

愚蠢: 我的主板有问题,谁能帮我? 某黑客对此的反应可能是:“是的,还需要帮你拍背和换尿布吗?”,然后是敲下删除键。

明 智: 我在 S2464 主板上试过 X、Y 和 Z,当它们都失败后,又试了 A、B 和 C。注意我试 C 时的奇怪症状,显然某某东西正在做某某事情,这不是期望的行为。通常在 Athlon MP 主板上导致某某事情的原因是什么?有谁知道我还能再试点什么以确定问题? 相反地,这个人看来值得回答。他或她展现了解决问题的能力而不是坐等天上掉馅饼。

在最后那个问题中,注意“给我一个回答”与“请帮我看看我还能再做点什么测试以得到启发”之间细微但重要的差别。

事实上,最后那个问题基本上源于 2001 年 8 月 Linux 内核邮件列表(lkml)上的真实事件,是我(Eric)当时提了那个问题,我发现 Tyan S2462 主板有神秘的死机现象,邮件列表成员给我提供了解决此问题的关键信息。

通过这种提问方式,我给了别人可以咀嚼玩味的东西。我设法使之对参与者既轻松又有吸引力,也表明了对同行能力的尊敬并邀请他们与我一起协商。通过告诉他们我已经走过的弯路,我还表明了对他们宝贵时间的尊重。

事后,当我感谢大家并评论这次良好的经历时,一个 Linux 内核邮件列表的成员谈到,他认为我得到答案并不是因为我的名字挂在列表上,而只是因为我正确的提问方式。

黑客们在某种方面是非常不留情面的精英分子。我想在这事上他是对的,如果我 表现得 象个不劳而获的寄生虫,不管我是谁都会被忽略或斥责。他建议将整个事件作为对其它人提问的指导,这直接导致了本文的编写。

如果得不到回答

如果得不到回答,请不要认为我们不想帮你,有时只是因为被问到的小组成员的确不知道答案。没有回复不等于不被理睬,当然必须承认从外面很难看出两者的差别。

一般而言,直接将问题再张贴一次不好,这会被视为毫无意义的骚扰。耐心一点,知道你问题答案的人可能生活在不同的时区,有可能正在睡觉,也有可能你的问题一开始就没有组织好。

还有其它资源可以寻求帮助,通常是在一些面向新手的资源中。

有许多在线与本地的用户组织,虽然它们自己不编写任何软件,但是对软件很热心。这些用户组通常因互助和帮助新手而形成。

还有众多大小商业公司提供签约支持服务(红帽与 SpikeSource 是两家最出名的,还有许多其它的)。别因为要付点钱才有支持就感到沮丧!毕竟,如果你车子的汽缸垫烧了,你多半还得花钱找个修理店把它弄好。即使软件没花你一分钱,你总不能指望服务支持都是免费的。

象 Linux 这样流行的软件,每个开发者至少有一万个以上的用户,一个人不可能应付这么多用户的服务要求。记住,即使你必须付费才能得到支持,也比你还得额外花钱买软件要少得多(而且对封闭源代码软件的服务支持与开源软件相比通常还要贵一点,也要差一点)。

如何更好地回答

态度和善一点。问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。

对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找 FAQ 都不知道。

如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来象个专家好玩就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。

如果帮不了忙,别妨碍。 不要在具体步骤上开玩笑,那样也许会毁了用户的安装──有些可怜的呆瓜会把它当成真的指令。

探索性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西──你也可以。试试将很差的问题转变成好问题,别忘了我们都曾是新手。

尽管对那些懒虫报怨一声“读读该死的手册”(RTFM)是正当的,指出文档的位置(即使只是建议做个谷歌关键词搜索)会更好

如果你决意回答,给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计,应推荐更好的工具,重新组织问题。

帮助你的社区从中学习。当回复一个好问题时,问问自己 “如何修改相关文件或 FAQ 文档以免再次解答同样的问题?”,接着再向文档维护者发一份补丁。

如果你是在研究一番后才做出的回答,展现你的技巧而不是直接端出结果。毕竟“授人以鱼,不如授人以渔”。

相关资源

如果需要个人电脑、Unix 和互联网如何工作的基础知识,参阅 Unix 和互联网工作的基本原理。

当你发布软件或补丁时,试着按 软件发布实践 操作。

鸣谢

伊夫林.米切尔(Evelyn Mitchell)贡献了一些愚蠢问题例子并启发了编写“如何更好地回答问题”这一节,米哈伊尔.罗门迪克(Mikhail Ramendik)贡献了一些特别有价值的建议和改进。


/*** * @brief 启智开源 编码自由 * @brief Open Source, Coding for free! * @param author 佟辉 Tong Hui

Acer 4738G 系列机型 激活OEM windows7的BIOS 1.12附win7 SP1下载地址

acer 4738G 系列机型 激活OEM windows7的BIOS 1.12附win7 SP1下载地址

本 合集有40多个映像,支持50个品牌(子品牌),是用官方MSDN下载到的中文原版(微软官方整合SP1)做母盘,然后添加OEM资料制作成的,无任何个 人信息,无任何破解方式存在,只要你的电脑的主板bios里有silc2.1存在,就能自动激活。本合集包含32位和64位系统, 请大家根据自己电脑的状况自由选择安装。 1、简体中文,With SP1。32位、64位各1个DVD; 2、在MSDN官方原版基础上添加OEM资料制作而成,未进行其他删减或增加。 3、更新PE3.0 PE的程序移至开始菜单; 4、除Admin版本外,其他版本均为默认设置; 5、Admin版本:启用内管理员Adminitrator帐号自动登录, 仅做以下设置调整: (1)关闭休眠; (2)显示桌面常用图标; (3)开始菜单显示“运行”; (4)右键添加“显示隐藏文件与后缀名”、“用记事本打开” 6、子映像名称列表(安装选择菜单): [1] Windows 7 旗舰版 32位 ThinkPad [2] Windows 7 旗舰版 32位 联想 [3] Windows 7 旗舰版 32位 宏碁 [4] Windows 7 旗舰版 32位 华硕 [5] Windows 7 旗舰版 32位 惠普 [6] Windows 7 旗舰版 32位 康柏 [7] Windows 7 旗舰版 32位 戴尔 [8] Windows 7 旗舰版 32位 神舟 [9] Windows 7 旗舰版 32位 同方 [10] Windows 7 旗舰版 32位 方正 [11] Windows 7 旗舰版 32位 明基 [12] Windows 7 旗舰版 32位 索尼 [13] Windows 7 旗舰版 32位 技嘉 [14] Windows 7 旗舰版 32位 长城 [15] Windows 7 旗舰版 32位 海尔 [16] Windows 7 旗舰版 32位 七喜 [17] Windows 7 旗舰版 32位 微星 [18] Windows 7 旗舰版 32位 三星 [19] Windows 7 旗舰版 32位 精英 [20] Windows 7 旗舰版 32位 东芝 [21] Windows 7 旗舰版 32位 富士通 [22] Windows 7 旗舰版 32位 LG [23] Windows 7 旗舰版 32位 Gateway [24] Windows 7 旗舰版 32位 Alienware [25] Windows 7 旗舰版 32位 eMachines [26] Windows 7 旗舰版 32位 Retail [27] Windows 7 旗舰版 32位 OEM通用 [28] Windows 7 旗舰版 32位 OEM通用 (Admin) [29] Windows 7 旗舰版 32位 OEM通用-无LOGO (Admin) [30] Windows 7 专业版 32位 Retail [31] Windows 7 专业版 32位 OEM通用 [32] Windows 7 专业版 32位 OEM通用 (Admin) [33] Windows 7 专业版 32位 OEM通用-无LOGO (Admin) [34] Windows 7 家庭高级版 32位 Retail [35] Windows 7 家庭高级版 32位 OEM通用 [36] Windows 7 家庭高级版 32位 OEM通用 (Admin) [37] Windows 7 家庭高级版 32位 OEM通用-无LOGO (Admin) [38] Windows 7 家庭基本版 32位 Retail [39] Windows 7 家庭基本版 32位 OEM通用 [40] Windows 7 家庭基本版 32位 OEM通用 (Admin) [41] Windows 7 家庭基本版 32位 OEM通用-无LOGO (Admin) [42] Windows 7 简易版 32位 Retail [43] Windows 7 简易版 32位 OEM通用 [44] Windows 7 简易版 32位 OEM通用 (Admin) [45] Windows 7 简易版 32位 OEM通用-无LOGO (Admin) (1)除了没有简易版外,64位合集的结构与32位是一样的,不再列举了; (2)标有“Retail”的映像为官方原版映像。其他的均为OEM版本,需要SLIC2.1支持才会自动激活; (3) 关于“OEM通用”版本,此次改进了安装过程中的品牌自动识别方法。“OEM通用”版本既支持前面单列的25个品牌,也支持下列25个品 牌:ADVENT、AQUARIUS、DEALIN、EXPER、HANNSPREE、HCL、HIGRADE、HYRICAN、JOOYON、 KRAFTWAY、KSYSTEMS、LANIX、MEDION、NEC、NOKIA、PBELL、QUANMAX、SEMPTOSHIBA、 SYNNEX、SYSTEMAX、TRIGEM、TWINHEAD、VILIV、VSONIC、WORTMANN 7、安装 安装媒介:光盘、硬盘、U盘,与原版无异。 安装方式:常规方法(光盘或硬盘安装)、PE3.0环境安装、IMAGEX安装,与原版无异

---文件校验值及下载---

32位版本: CN_WIN7_SP1_X86_33in1_V1.2.iso (2.97 GB) 文件: CN_WIN7_SP1_X86_33in1_V1.2.iso 大小: 3183771648 字节 修改时间: 2011年2月26日, 15:59:34 MD5: CE98B39F334C5DE1ADD03B040E3ED2B7 SHA1: E6D03500FDFA0897E99D3E6DCC6A491E6C0794D7 CRC32: 2BB635FD

64位版本: CN_WIN7_SP1_X64_33in1_V1.2.iso (3.68 GB) 文件: CN_WIN7_SP1_X64_33in1_V1.2.iso 大小: 3955359744 字节 修改时间: 2011年2月26日, 17:41:17 MD5: 31EEA8518D97A26393587454E7D38FEF SHA1: 3648C5918E8F541FFB77B198F0C555AE3DC6E8B7 CRC32: 28DAD8E3

标签: acer oem sp1 win7

为什么印度的穷人不仇富?

为什么印度的穷人不仇富?

——-从而产生为什么我们社会的穷人会仇富的感慨!

文/汪华斌

今天陪同一位老师到学校有事,碰见一位印度研究生;以前只知道日本人刻苦,谁知这印度研究生也叫我见识了什么叫刻苦。我原以为这是一位印度富贵人家的后代,谁知人家竟然就是个贫穷人家的孩子;这有点如同我们社会上个世纪八十年代到美国留学,贫穷人家的孩子多的是;正因为如此,所以当时美国的洗盘子等活全部被中国留学生包了;因为这留学生还想赚钱给家里的父母亲。这印度留学生就是这样的状况,所以我才说见识了印度人的刻苦。后来这位老师告诉我,如今印度人成功之路主要就是刻苦;所以在世界各地见到成功的印度人都是刻苦的。由于我就喜欢刻苦的人,所以也就攀谈了起来;我主要是想知道为什么同样是两极分化的印度,社会却是那么和谐;难道印度穷人不仇富吗?

从这位留学生这里我知道了,印度全国大概有6~7亿穷人;其中有2.5亿人生活在最低贫困线以下。按照印度政府的标准,每天收入不足10个卢比者(约2元人民币);即是处在贫困线以下的穷人。正因为如此,所以在印度见到的穷人比比皆是;而且政府也不回避贫民窟等客观事实。所以在印度见到睡在大街上的穷人不希奇,而且印度政府也从不掩饰这一社会现象。正因为如此,所以印度的官员从不以解决印度人吃饭而自喜;因为印度还没有出敢为天下先的领导人,所以维持秩序成为印度政府的主要职责。

然而印度人很奇怪,他们的生活水平要求并不高;所以低收入的人并不会改变生活状况,从而心理没有落差是印度的国情。如印度穷人整体上生活成本低就与印度的国情有关系,因为是国情决定了穷人的生活成本并不高。首先是印度人吃的成本很低,相当于维持生命的概念;如印度人半数以上不吃荤,穷人的饮食结构中不包括鸡鸭鱼肉非常正常;甚至相当多的富人也从不开荤。其二是印度人的穿的成本也很低,因为服装简陋也是印度的国情;由于印度天气炎热,所以不少印度人一年四季穿件短衣短裤就够了。其三就是印度人对住的概念很淡化,他们竟然习惯睡在大街上、操场上、过道上;而且只需一块布、一张纸铺在地上。所以印度人没有争先恐后卖商品房的概念,仅仅当成栖身的需要而已。正因为如此,所以印度人对住的投入很低,甚至低到不支出的程度。再加上印度用水免费,到公立医院看病等都不用掏钱;所以印度穷人虽然收入低,但基本生活却是无忧的。

虽然印度也有官员贪污受贿,但它却不是印度致富的主要途径;印度人致富也不是商业,而是知识。正因为如此,今天的印度的软件依然是世界一流;然而正是这一流的技术,却使印都知识分子成为致富的主要人群。在印度国内的有律师等知识分子,在国外的有软件工程师等知识分子;这些人的确富了,而且移民的美国的也不少。正因为如此,所以印度穷人尽管再穷都不眼红;因为致富需要知识,而知识的道路是平等的。所以印度穷人一般只怨前世造了孽,很少会把怨气发到富人身上;他们整体上没有嫉富、仇富的“红眼病”,更没有杀富济贫的造反意识。再加上印度致富并不是占用或占用公共资源,而是用知识去获取财富;所以印度富人带给穷人的是社会财富的增加,而不是穷人更穷的概念。

再加上印度人相信因果报应、业报轮回的宗教思想,所以他们只希望神保佑他们从苦海中解脱。正因为如此,所以印度贫富之间基本上能相安无事并和平共处;就连印度的乞丐一般也不会去偷盗抢劫,所以印度没有穷人报复富人的事件发生。不是有位中国记者到孟买印度门参观时随身带了1个照相机,离开时竟然忘在那儿了;谁知在记者往回走的路上,后边一个稚气未除的乞丐一面紧紧跟着;一面高声大叫。记者先以为是追上来要钱,仔细一听才知道原来他说的是“先生,您的照相机”。

印度富人为什么很有安全感,因为他们没有不义之财;所以印度的富豪们,没有被抢被偷的;更没有被杀的。印度也是两极分化的社会,贫富悬殊到了极致;但穷人富人竟能井水不犯河水,核心问题还是致富的公开性;上帝给了你致富的机会你都不能富,难道你还能仇富吗?所以印度人心态很平和,就如同中国的上大学与没有上大学的人;彼此相安无事,这才是值得我们社会思考的问题。

中国穷人为什么仇富,因为我在你富人的位置上也是富人;而印度却需要自己的知识,这才是根源。不要总说中国人仇富,实际还是致富不公平的原因;

你应该知道的django博客引擎【翻译】

你应该知道的django博客引擎【翻译】

这段时间一直在学python和django,准备写个小小的blog巩固下自己学到的东西,看到了GAE上的一些程序,大部分都是纯python的,想找一些基于django的,还真是难。无意中搜索到一篇文章,就翻译一下,渣技术,实在不行,就去看en文的吧。 en文地址 Michael Trier在两年以前就写了一篇叫“基于django的blog引擎在哪儿?”。James Bennett随后也跟着写了一篇名叫“哪儿才有django的blog应用”,他论述了为什么最终没有Django blog engine(也就是基于django的博客引擎)。最近Daniel Greenfeld写了一篇“向哥展示你们的开源Django blog吧”,它里面,他定义了这个Django blog项目所需要的各项要求。自从读了那篇文章以后,我就开始一直写现在的这篇文章。 下面我挑选了一些我相信你应该会注意的blog引擎,并且根据它们最近的更新日期排列。如果这些blog engine的作者描述了他们的blog,那么我就直接引用作者们的描述,如果没有,那哥就总结一下我对该项目的一些了解。如果你有自己开发的blog引擎并且值得哥注意的,那么就在下面留言吧,记得加上姓名和地址。 Byteflow博客程序并没有被包含在下面,这是因为这个项目在我写这片博客之前就已经关闭了下载的地址(= =!)。

Biblion

标语:eldarion.com 的blog程序一般适用于企业或者项目级别的引用。 源码地址:http://github.com/eldarion/biblion 最后更新:2010年2月9号 在线的demo:http://eldarion.com/blog/ 描述:Bilion是eldarion.com的一个已经被提取和开源的blog程序,这个blog目前的定位是,它能够被应用于类似的eldarion.com和pinaxproject.com这样的网站或者博客项目。一旦我们完成Bilion的功能,那么我们就用它去代替内部的Pinax博客程序。 特点: 1.多渠道支持(比如:技术对业务)      #这句真没看懂啥意思 2.使用Creole作为标记格式 3.Atom feeds            #求翻译帝现身 4.在博客发布前预览其效果 5.可以选择同步推特

Django-article

标语:牛X的基于django开发的博客引擎 源码:http://bitbucket.org/codekoala/django-articles/ 最后更新:2010年2月8号 现在demo:codekoala.com 描述:作者是Josh VanderLinden,牛X的基于django开发的博客引擎。 显著特点: 1.标签系统 2.在django的后台中自动完成标签功能 3.支持草稿(就是现预存,以后再发布) 4.文章到期设定     #这是啥设定啊,还翻译有毛病 5.可以使用文本或者HTML或者使用Markdown或者ReStructured Text或者Textile markup来写文章。                  #这里面有几个属于不是很懂 6.支持相关文章显示 7.支持后续文章(就是上一篇下一篇) 8.支持Disqus评论系统               #想知道Disqus是啥,请猛击。 9.文章分页存档 10.支持多语言(国际化个锤子) 11.支持为每篇文章添加个单独的链接,并且检测该链接。  #连wordpress的url设定差不多。- -,我猜的。 12.字数统计             #这个功能到底有个啥锤子用啊 13.支持最新文章的RRS Feeds 14.支持最新的文章标签的RRS Feeds 娘的,真累,而且翻译得不好,以后有时间再翻译翻译吧,真蛋疼。

Siri 现在都能听懂哪些句子(英语)

Siri 现在都能听懂哪些句子(英语)

自从 iPhone 4S 发布以来,除了对这部手机“软硬兼施”地评测,最重要的事莫过于调戏Siri了。现在我们来说点“严肃的”话题,Siri 目前可以对哪些句子做出反应呢?或能够回答什么样的问题呢?假如你已经有了 iPhone 4S,或者今后越狱工作者将 Siri 移植到老款 iPhone 上之后,你就可以参考下面的一系列命令了,这些句子都是能被 Siri 轻松理解的。而且,在中文版的 Siri 到来之前,就当学习一次英语了吧! 地址簿 询问联系人
  • What’s Michael’s address?
  • What is Susan Park’s phone number?
  • When is my wife’s birthday?
  • Show Jennifer’s home email address 查找联系人
  • Show Jason Russell
  • Find people named Park
  • Who is Michael Manning? 使用人称代词或关系
  • My mom is Susan Park
  • Michael Manning is my brother
  • Call my brother at work 日历 添加事件
  • Set up a meeting at 9
  • Set up a meeting with Michael at 9
  • Meet with Lisa at noon
  • Set up a meeting about hiring tomorrow at 9am
  • New appointment with Susan Park Friday at 3
  • Schedule a planning meeting at 8:30 today in the boardroom 更改事件
  • Move my 3pm meeting to 4:30
  • Reschedule my appointment with Dr. Manning to next Monday at 9am
  • Add Lisa to my meeting with Jason
  • Cancel the budget review meeting 问询事件
  • What does the rest of my day look like?
  • What’s on my calendar for Friday?
  • When is my next appointment?
  • When am I meeting with Michael?
  • Where is my next meeting? 闹钟 设定闹钟
  • Wake me up tomorrow at 7am
  • Set an alarm for 6:30am
  • Wake me up in 8 hours
  • Change my 6:30 alarm to 6:45
  • Turn off my 6:30 alarm
  • Delete my 7:30 alarm 查询时间
  • What time is it?
  • What time is it in Berlin?
  • What is today’s date?
  • What’s the date this Saturday? 使用定时器
  • Set the timer for ten minutes
  • Show the timer
  • Pause the timer
  • Resume
  • Reset the timer
  • Stop it 电子邮件 发送邮件
  • Email Lisa about the trip
  • Email Jennifer about the change in plans
  • New email to Susan Park
  • Mail Dad about the rent check
  • Email Dr. Manning and say I got the forms, thanks
  • Mail Lisa and Jason about the party and say I had a great time 检查邮件
  • Check email
  • Any new email from Michael today?
  • Show new mail about the lease
  • Show the email from Lisa yesterday 回复邮件
  • Reply Dear Susan sorry about the late payment
  • Call him at work 朋友 进行各种八卦
  • Where’s Jason?
  • Where is my sister?
  • Is my wife at home?
  • Where are all my friends?
  • Who is here?
  • Who is near me? 地图 查询方位
  • How do I get home?
  • Show 1 Infinite Loop Cupertino California
  • Directions to my dad’s work 本地商务和服务
  • Find coffee near me
  • Where is Starbucks?
  • Find some burger joints in Baltimore
  • Find a gas station within walking distance
  • Good Mexican restaurants around here 消息 发送文字信息
  • Tell Susan I’ll be right there
  • Send a message to Jason Russell
  • Send a message to Lisa saying how about tomorrow
  • Tell Jennifer the show was great
  • Send a message to Susan on her mobile saying I’ll be late
  • Send a message to 408 555 1212
  • Text Jason and Lisa where are you? 阅读文字信息
  • Read my new messages
  • Read it again 回复文字信息
  • Reply that’s great news
  • Tell him I’ll be there in 10 minutes
  • Call her 音乐 播放音乐
  • Play The Light of the Sun
  • Play Trouble
  • Play Taking Back Sunday shuffled
  • Play Alicia Keys
  • Play some blues
  • Play my party mix
  • Shuffle my roadtrip playlist
  • Play
  • Pause
  • Skip 备忘录 创建及问询备忘录
  • Note that I spent $12 on lunch
  • Note: check out that new Alicia Keys album
  • Find my restaurant note
  • Create a reading list note
  • Add Tom Sawyer to my reading list note 电话 拨打电话
  • Call Jason
  • Call Jennifer Wright mobile
  • Call Susan on her work phone
  • Call 408 555 1212
  • Call home
  • FaceTime Lisa 提醒事项 增添提醒事项
  • Remind me to call mom
  • Remind me to call my mom when I get home
  • Remember to take an umbrella
  • Remind me take my medicine at 6am tomorrow
  • Remind me to pick up flowers when I leave here
  • Remind me when I leave to call Jason
  • Remind me to finish the report by 6 股票 问询股票信息
  • What’s Apple’s stock price?
  • What is Apple’s PE ratio?
  • What did Yahoo close at today?
  • How is the Nikkei doing?
  • How are the markets doing?
  • What is the Dow at? 天气 问询天气预报
  • What’s the weather for today?
  • What’s the weather for tomorrow?
  • Will it rain in Cupertino this week?
  • Check next week’s forecast for Burlington
  • What’s the forecast for this evening?
  • How’s the weather in Tampa right now?
  • How hot will it be in Palm Springs this weekend?
  • What’s the high for Anchorage on Thursday?
  • What’s the temperature outside?
  • How windy is it out there?
  • When is sunrise in Paris? 网络搜索 问询信息
  • Search the web for Bora Bora
  • Search for vegetarian pasta recipes
  • Search the web for best cable plans
  • Google the war of 1812
  • Search Wikipedia for Abraham Lincoln
  • Search for news about the World Cup
  • Bing Alicia Keys 使用 Wolfram Alpha 智能问答
  • How many calories in a bagel?
  • What is an 18% tip on $86.74 for four people?
  • Who’s buried in Grant’s tomb?
  • How long do dogs live?
  • What is the Gossamer Condor?
  • What’s the square root of 128?
  • How many dollars is €45?
  • What was the Best Picture of 1983?
  • How many days until Christmas?
  • How far away is the Sun?
  • When is the next solar eclipse?
  • Show me the Orion constellation
  • What’s the population of Jamaica?
  • How high is Mt. Everest?
  • How deep is the Atlantic ocean?
  • What’s the price of gasoline in Chicago?

关于 Ruby &Ruby on Rails 的一些书及论坛网站

关于 Ruby &Ruby on Rails 的一些书及论坛网站

需要用到的一些书 The Ruby Way   Programming Ruby 2nd edition Agile Web Development with Rails Best of Ruby Quiz Rails Recipes Enterprise Integration with Ruby Ruby Hacking Guide Ruby In A Nutshell

http://www.itpub.net/forum61.html 里大多有下,重点推荐 Programming Ruby 2nd edition Agile Web Development with Rails oreilly.rails.cookbook.jan.2007.ebook-bbl.chm [/COLOR]

一些不错的论坛 及网站 国内的

http://www.javaeye.com/forums/board/Ruby http://chinaonrails.com http://www.railscn.com http://railscn.crispynews.com/   http://r4rclub.schtuff.com/ http://rorwiki.hellopen.net

国外的 http://www.ruby-forum.com/[/COLOR] http://www.rubyonrailsforum.com/rails-code-questions/ http://rubyforge.org/ http://www.rubyonrails.org/ http://www.ruby-lang.org/en/ http://www.webrick.org/ http://www.yaml.org/

blog

<博客> 铁道播客:有诸多视频教程 http://rorcast.blogger2blogger.com/

my4java的文字博客:有很多教程的译稿、笔记等 http://my4java.itpub.net/

cnruby道喜技术日记:众多实例教程 http://www.hhtong.com/blog1/

caphe的博客 http://www.blogjava.net/cap

Caiwangqin的博客 http://www.uuzone.com/blog/uu_1115110/

中文RubyOnRailsWiki http://rorwiki.hellopen.net/index.php?title=%E9%A6%96%E9%A1%B5

关于rails和ajax相结合 http://www.rubynoob.com/

http://inquirylabs.com/blog/

这个当中有一些介绍 http://www.railscn.com/about704.html