How to Enable Remote Access to PostgreSQL Server

Thursday, March 10, 2011

OS: ubuntu

$ sudo vi /etc/postgresql/8.4/main/postgresql.conf

    listen_addresses = '*'
    password_encryption = on

$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf

    host    all         all         192.168.0.0/24        trust

Accessing PostgreSQL 9 with Python via Psycopg2

Wednesday, December 15, 2010

install psycopg2 via easy_install:

easy_install psycopg2

test in python shell:

>>> import psycopg2
>>> conn = psycopg2.connect(database='mydb')
>>> cur = conn.cursor()
>>> cur.execute('''select * from users''')
>>> for row in cur.fetchall():
...     print row[0], row[1]
... 
1 eric
2 lxneng
3 luoxiaoneng
>>> cur.close()
>>> conn.close()

Install PostgreSQL 9 in Mac OSX via Homebrew

Wednesday, December 15, 2010

install PostgreSQL 9 in Mac OSX via Homebrew

Mac OS X Snow Leopard

System Version: Mac OS X 10.6.5 Kernel Version: Darwin 10.5.0

Install notes for PostgreSQL 9.0.1 install using Homebrew:

sh-3.2# brew install postgresql
Warning: It appears you have MacPorts or Fink installed.
Software installed with MacPorts and Fink are known to cause problems.
If you experience issues try uninstalling these tools.
==> Downloading ftp://ftp.ossp.org/pkg/lib/uuid/uuid-1.6.2.tar.gz
######################################################################## 100.0%
==> ./configure --disable-debug --without-perl --without-php --without-pgsql --p
==> make
==> make install
/usr/local/Cellar/ossp-uuid/1.6.2: 11 files, 364K, built in 17 seconds
==> Downloading http://ftp9.us.postgresql.org/pub/mirrors/postgresql/source/v9.0
######################################################################## 100.0%
==> ./configure --disable-debug --prefix=/usr/local/Cellar/postgresql/9.0.1 --enable-thread
==> make install
==> cd contrib/adminpack; make install
==> cd contrib/dblink; make install
==> cd contrib/fuzzystrmatch; make install
==> cd contrib/lo; make install
==> cd contrib/uuid-ossp; make install
==> cd contrib/pg_buffercache; make install
==> cd contrib/pg_trgm; make install
==> cd contrib/pgcrypto; make install
==> cd contrib/tsearch2; make install
==> cd contrib/vacuumlo; make install
==> cd contrib/xml2; make install
==> cd contrib/intarray; make install
==> cd contrib/pg_upgrade; make install
==> cd contrib/pg_upgrade_support; make install
==> cd contrib/hstore; make install
==> Caveats
If builds of Postgresl 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
  https://github.com/mxcl/homebrew/issues/issue/2510

To build plpython against a specific Python, set PYTHON prior to brewing:
  PYTHON=/usr/local/bin/python  brew install postgresql
See:
  http://www.postgresql.org/docs/9.0/static/install-procedure.html


If this is your first install, create a database with:
    initdb /usr/local/var/postgres

If this is your first install, automatically load on login with:
    cp /usr/local/Cellar/postgresql/9.0.1/org.postgresql.postgres.plist ~/Library/LaunchAgents
    launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist

If this is an upgrade and you already have the org.postgresql.postgres.plist loaded:
    launchctl unload -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
    cp /usr/local/Cellar/postgresql/9.0.1/org.postgresql.postgres.plist ~/Library/LaunchAgents
    launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist

Or start manually with:
    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

And stop with:
    pg_ctl -D /usr/local/var/postgres stop -s -m fast

If you want to install the postgres gem, including ARCHFLAGS is recommended:
    env ARCHFLAGS="-arch x86_64" gem install pg

To install gems without sudo, see the Homebrew wiki.
==> Summary
/usr/local/Cellar/postgresql/9.0.1: 1219 files, 20M, built in 3.4 minutes
sh-3.2# exit

Init Database:

Erics-MacBook:~ eric$ initdb /usr/local/var/postgres
The files belonging to this database system will be owned by user "eric".
This user must also own the server process.

The database cluster will be initialized with locale en_US.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english".

creating directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers ... 2400kB
creating configuration files ... ok
creating template1 database in /usr/local/var/postgres/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    postgres -D /usr/local/var/postgres
or
    pg_ctl -D /usr/local/var/postgres -l logfile start

Run Database:

Erics-MacBook:~ eric$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start &

Create a Database:

Erics-MacBook:~ eric$ createdb mydb

Open the mydb database and do some test:

Erics-MacBook:~ eric$ psql mydb
psql (9.0.1)
Type "help" for help.

mydb=# create table users(id serial, name varchar(25));
NOTICE:  CREATE TABLE will create implicit sequence "users_id_seq" for serial column "users.id"
CREATE TABLE
mydb=# insert into users(name) values('eric');
INSERT 0 1
mydb=# insert into users(name) values('lxneng');
INSERT 0 1
mydb=# select * from users;
 id |    name     
----+-------------
  1 | eric
  2 | lxneng
mydb=# \q

update@2012-08-17

bugs on OSX 10.8 Mountain Lion

> psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

mkdir /var/pgsql_socket
sudo chown $USER /var/pgsql_socket

Open /usr/local/var/postgres/postgresql.conf in a text editor, and uncomment + edit the unix_socket_directory key to:

unix_socket_directory = '/var/pgsql_socket'

【转】Serialize / Deserialize nested objects in ActiveRecord

Monday, November 29, 2010

Using ActiveRecord’s
serialize
method you can save Ruby objects in a single field of your model. The
serialization is done through YAML. Today I tried to save a nested
object structure with this method. These are the classes:

class PhotoStyle
  attr_accessor :image

  def initialize
    @image = StyleElement.new
  end
end


class StyleElement
  attr_accessor :selector, :style

  def initialize
    @selector = '*'
    @style = {}
  end
end

The model which saves a PhotoStyle object:

class Photo < ActiveRecord::Base
  serialize :style, PhotoStyle
end

This first approach didn’t quite work out. Saving the model worked fine,
but when I loaded it only PhotoStyle got deserialized to the original
type. The nested StyleElement didn’t:

p = Photo.last
p.style
=> #<PhotoStyle:0xb70a906c @image=#<YAML::Object:0xb72079a4 @ivars={"selector"=>"#theimage", "style"=>{"border"=>"0", "box-shadow"=>"1px 3px 15px #555"}}, @class="StyleElement">}, @class="PhotoStyle">>

Note the YAML object assigned to the @image instance variable. I’m not
sure if that’s a bug in Rails3 or if that is by design. You can however
“fix” it by running this code snippet when your application starts up:

YAML::Syck::Resolver.class_eval do
  def transfer_with_autoload(type, val)
    match = type.match(/object:(\w+(?```\w+)*)/)
    match && match[1].constantize
    transfer_without_autoload(type, val)
  end
  alias_method_chain :transfer, :autoload
end

Save it e.g. in yaml_autoloader.rb in the config/initializers folder of
your app. Now all types will autoload:

#<PhotoStyle:0xb73dcb08 @image=#<StyleElement:0xb73dd058 @selector="#theimage", @style={"border"=>"0", "box-shadow"=>"1px 3px 15px #555"}>>

I found above code snippet here. Thanks!
Read more about ActiveRecord’s serialize method here: Simple user
preferences for your Rails
app
.

Update:
Still not sure if that’s a bug, but I submitted a lighthouse
ticket
.

Update 2:
Apparently this is not a bug in Rails, but a problem in my
code :-) Please see Aaron’s comment in above
ticket
.
http://blog.project-sierra.de/archives/1539

【转】用简单的数字诠释生活

Sunday, November 14, 2010

把生活的智慧用简单的数字来诠释,不仅易懂,还让人印象深刻,今天分享的数字是1.1、20%、631。

一、成功必须要做1.1


企业管理培训流行一个简单的数字游戏:1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1


1 乘1,乘以10 次,答案是多少?很简单,当然是1。


那,1.1 乘1.1,乘以10 次,答案又是多少?按按计算机,结果是2.59。


假如每天进步一点点,日积月累,积极向前,那么日子有功,成果是显然的。 1.1 乘以10 次是2.85,即使1.01 乘10 次也有1.1,那怕前进步伐有多慢, 总比一成不变1 x 1 原地踏步的好。


但如果每天懒散一点、懈怠一点呢?那就等于0.9 乘0.9。若把0.9 乘0.9,乘以10 次,结果更令人惊讶,是0.35!只懒了一丁点可以吗? 0.99 乘0.99,十次之后,会是0.9。数目看起来不太差,但长此下去,后果仍是不堪。


换言之,只要我们能够有多一点正能量,积极生活,坚持理想,永不放弃,成绩自然会亮丽。有了小成果之后,只要再加努力,越见成绩。相反,假惹我们爱偷懒、做事马虎大意,没有目标,命运将会出现倒退景象。 2.59 和0.31 正反映「积极」与「懈怠」截然不同的命运。


要注意的是不屈的毅力。 0.1 的差距虽然看似很少,但不继的累积就会有成效。相反,三分钟热度,即使能有0.8,也都只是1 x 1.8 x 1 x 1 x 1 x 1 x 1 x 1 = 1.8,比不上2.85。



还有,世上没有免费午餐(no free lunch),要有精彩人生,就必须实际行动。静态被动,只会成为1 x 1,固步自封。请把目标放远,胸怀天下,勇于尝试。当每天都能进步一点点时,成功在望!

“Patience, persistence and perspiration make an unbeatable combination for success.” — Napoleon Hill
耐心,毅力和汗水就说是成功的组合。

“Little by little one walks far.”— Peruvian Proverb


——摘自:Fanny

二、Make the Change:你是20%,还是80%?


影响时代的20%(精英),往往保有如下观念(20%成了很多人的分水岭):


  • 20%的人用脖子以上赚钱,80%的人用脖子以下赚钱;

  • 20%的人认为行动才有结果,80%的人认为知识就是力量;

  • 20%的人买时间,80%的人卖时间;

  • 20%的人做事业,80%的人做事情;

  • 20%的人爱投资,80%的人爱购物;

  • 20%的人明天的事情今天做,80%的人今天的事情明天做;

  • 20%的人支配别人,80%的人受别人支配;

  • 20%的人是我要怎么做才有钱,80%的人是我要有了钱我就怎么做;

  • 20%的人有目标,80%的人爱瞎想;

  • 20%的人计划未来,80%的人早上起来才想今天干些啥;

  • 20%的人相信自己会成功,80%的人不愿改变,甚至不愿意接受新变化。

  • ……


—— 摘自《销售与市场(渠道版)》2010年10月刊


三、冯仑:做生意的“ 6-3-1”办法


在中国社会做生意,无非是要在人情世故上让大家都舒服了。我一般采取的是“6-3-1”的办法。

“6”是情势,是社会、法律强制要求我们遵守的;

“3”是经济利益,算账;

“1”是面子,是妥协。

在社会上,面子意味着特权、通行证,也是一种从别人口袋里拿钱的资格。所以在中国研究面子,最后就是在人情世故中学会找面子,你有面子别人也会给你帮助。

什么是面子?简单地说,面子就是一套程序,一套贬低自己抬高别人的表演。美国传教士明恩愽认为,中国人看重面子的原因来自对戏曲的喜爱。生活就像戏曲中的场景,每个角色都要体面地上台,在一片喝彩和赞扬声中下台,否则就“下不了台”。

按照鲁迅说的,“面子是中国人的精神纲领”。总是尊重别人,把人家放到台上,你在下面,“善处下则驭上”,这样企业在社会中就可以比较好地发展自己。

——摘自《冯仑管理日志》


转自:左岸读书

通过Python得到一张图片或logo的主要颜色

Wednesday, November 3, 2010

看到一篇博客Pick the dominant colour from a logo using
Python
,一段代码实现了该功能,
效果还不错, 我把代码稍微完善了一下, 方便测试 :-)

python pick_dominant_color.py -f xxx.gif

# -*- coding: utf-8 -*-

import colorsys
from PIL import Image
import optparse


def get_dominant_color(image):
    """
   Find a PIL image's dominant color, returning an (r, g, b) tuple.
   """

    image = image.convert('RGBA')

    # Shrink the image, so we don't spend too long analysing color
    # frequencies. We're not interpolating so should be quick.
    image.thumbnail((200, 200))

    max_score = None
    dominant_color = None

    for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
        # Skip 100% transparent pixels
        if a == 0:
            continue

        # Get color saturation, 0-1
        saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

        # Calculate luminance - integer YUV conversion from
        # http://en.wikipedia.org/wiki/YUV
        y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

        # Rescale luminance from 16-235 to 0-1
        y = (y - 16.0) / (235 - 16)

        # Ignore the brightest colors
        if y > 0.9:
            continue

        # Calculate the score, preferring highly saturated colors.
        # Add 0.1 to the saturation so we don't completely ignore grayscale
        # colors by multiplying the count by zero, but still give them a low
        # weight.
        score = (saturation + 0.1) * count

        if score > max_score:
            max_score = score
            dominant_color = (r, g, b)

    return dominant_color

def main():
    usage = 'usage: %prog -f filepath'
    parser = optparse.OptionParser(usage)
    parser.add_option('-f', '--filepath', dest='filepath', help='-f filepath', type='string')
    (options, args) = parser.parse_args()
    if options.filepath == None:
        parser.error('must has -f option!')
    try:
        img = Image.open(options.filepath)
    except:
        print("can not open the file")
        return

    print '#%02x%02x%02x' % get_dominant_color(img)

if __name__ == '__main__':
    main()

《悟空传》 喜欢的对白

Thursday, October 28, 2010

《悟空传》是一本网络小说,也有出版,推荐大家去看看!

经典从那句豪言壮语开始:我要这天再遮不住我眼,

我要这地在埋不了我心,

我要这众生都明白我意,

我要那诸佛都烟消云散。

等到那一刹那,黑暗的天空突然被一道巨大的闪电划开.

孙悟空一跃而起,将金箍棒直指向苍穹.”来吧”!那一刻被

电光照亮的他的身姿,千万年后仍凝固在传说之中 !

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.“什么东西天上地下,唯我独尊?”唐僧问。

  “猴子!”孙悟空说。

  “不!是猪!”猪八戒叫。

  “都错了,是我。”唐僧说。“如来祖出生时,一手指天,一手指地,如此说的。”

28.对我来说,任何一个地方都是家,。可有的人却把家放在世界某一个地方。所以他们才会找不到,才会死在路上。

29.你以为你有很多路可以选择,但是在你四周有很多看不见的墙,其实你只有一条路可以走.

30.人生难道不是梦幻么?你所得到的终究会失去。你以为那是真的,你就会痛苦;而你知道那不过是一场游戏一场梦境,你就能解脱。人生在世,百年也好,千万年也好,都只是未来前的一瞬。这一瞬之后你什么都没有。你曾有的只是你自己。你在这世界上永远的孤寂着。永远找不到能依托你心的东西,除非你放弃你自己。

31.为什么要让一个无力作为的人去看他年少是的梦想呢?

32.如果你不想被改变,就先要知道自己是谁

33.天空的云移过来

光阴被切成一层层

一片片的阳光在地上行走

翻山越岭,被风追逐.

五百年,很多东西沉埋了,再过五万年,就不会有人记起,但它们还在.

在记录着当年的光线与光线所照过的人,你把它挖出来,它会告述你一个故事.

你会觉得它很可笑,因为你看见了历史,原来它和你想的那么不一样.

你不知道是应该相信光,还是相信黑暗的岩石.

五百年了,五百年不见阳光的岁月,所有的人都欲言又止,每个人都知道你的过去,他们认为你不应该是这样.

而你知道你就是你自己.从来也没有改变过.

34.猪八戒抬头望天:”你看,雪在烧,龙要下海,猪要上天了。”

35.此乃天外之炎,无根而出,其源却是人间的欲望。心魔一去,其火就自灭了。”如来道。

“这火是灭不了的。”紫霞说,”因为我们会做它的燃料。”

她托起孙悟空的尸体,走向火焰。

36.”当年你和天界撕杀,又为的什么?”

“我以为……有些事是可以靠力量来改变的,后来才发觉,反抗不过是徒增痛苦,才受封做了神仙。”

“可在神仙眼里,你却是妖。”

“神仙……妖,区别在何处呢?”

“……神仙是没有妖那么多恶心贪欲的。”

“真的么?神不恶,为何容不得一点对其不敬,神不贪,为何要将地上千万生灵命运,握于手中?”

“厖”

“我为什么要作神仙?因为我想,那样至少自己的命运,不用握在他人之手。”孙悟空声音高了起来。

37.你在树上,一刻也不敢睡死,随时注意着不寻常的声响,你会担心,一睁眼的时候会看见一张血盆的大口,你的身体随时都准备弹起来逃命或博斗,每一个晚上都那么的长,直到天边的微光照到你的眼皮上,你会想谢天谢地你又多活了一个晚上,为了你又赚到的一天在这个白天你要尽情的蹦跳,狂叫,把所有能找到的吃的塞进嘴里,但是夜晚很快又来了,你甚至还来不及找到一个朋友,你会想你受够了!但是你却不能不活着,你恐惧着生,却又恐惧着死,你不知道你每天为什么这样活着,

哦……现在你知道了,我为什么要做神仙!

38.”哈哈哈哈!这样一个破天烂地,烧了罢!”孙悟空吼道,”火!好大的火啊!”突然又抱头呜咽起来,

“火……不要烧,不要烧我的花果山……”

39.我一旦在清醒时思考,就是痛苦的开始.

40. “太飘渺了,我触不着它们,那么美丽的东西。一触就破了,一

触就醒了,醒了,什么也没有”。

41. “我爱的人永远不知道我真面目我留了我最美的笑,他却看不

见,我恨!”
42.
xx
虎:我能吃你么? 兔:你没吃过兔子么?虎:今天妈妈不在家…… 兔:那你以前吃什么?虎:…… 兔:大点声!虎:吃奶~

【转】“少!快!精!”

Thursday, October 28, 2010

DHH因其身为Rails框架的创始人而为技术圈知名,可是他所在的公司37signals也是一家在商业上成功的公司。除了BaseCamp等多项轻量级SaaS产品之外,DHH和37signals还出了两个附带产品:《Getting Real》和《Rework》。前一本书讲述有关web产品的开发,后一本则为有创业冲动的人提供帮助。《Rework》这本书刚出来时间不长,从昨天到现在,前后用了大概4个小时左右的时间,把DHH的这本Rework看完了。整体看下来,“少、快、精”是本书的精髓。下面是本书的各节阅读笔记。
  
  顺便说一句:这也是我第一次在Amazon上付费购买的、可通过Kindle观看的书籍。(主要是在Kindle for Mac上看的,呵呵)
  
  
  Chapter First
  
  The New Reality: 如今,人人都能开创事业。
  
  Chapter Takedowns
  
  Ignore the real world: “在现实中行不通”只是在为不去尝试找借口,与你,想开创事业的你,无关。
  
  Learning from mistake is overrated: 失败不是成功她妈,让其他人失败去吧。要知道自己应该做什么,从成功走向成功。
  
  Planning is guessing: 计划等于是让过去驱动未来,要学会即兴演出——知道当下最应该做什么,而不是盲目遵循计划。
  
  Why Grow?: 很多公司死于过早雇人。“小”不只是阶段,也可以是目的。成功事业的核心特性是可持续、能赢利,与大小无关。
  
  Workaholism:工作狂最愚蠢,不动脑子的工作狂只能创造出笨重的方案,甚至是危机。工作狂会影响其他人的士气,同时自己也将会无法分辨轻重,效率也未见得高。
  
  Be a starter, enough with “entrepreneurs”: 只要有想法、自信和推动力,任何创建新事业的人都可以是starter,不需要MBA、认证、西装、公文包。。。
  
  Chapter Go
  
  Make a dent in the universe: 要有改变世界、乃至宇宙的豪情,而不是做另一个copycat。
  
  Scratch your own itch: 解决自己遇到的实际问题,你自己知道问题所在——机会所在,你自己可以作为用户——不必等待反馈。
  
  Start making something:主意人人有,想法多得是。赶紧动手做,考验执行力。
  
  No time is no excuse: 没有时间只是保护自我的借口,很多人只是没有那么想要。。。没有完美的时机,这只是借口。。。
  
  Draw a line in the sand: 前进时要记得自己为什么要做自己在做的事情,还要为其而辩护。不要指望能讨所有人的欢心,要坚守自己的目标,即使减少某些临时的收入也没有关系,因为树立起了更好的形象和品牌。
  
  Mission statement impossible: 让空洞无物的企业宗旨去死,真正相信自己做的事情,并以之为生活方式。
  
  Outside money is Plan Z: 花别人的钱会:
   • 失去控制力。
   • 投资人只想折现,不想打造长远的高品质事业。
   • 花别人的钱容易上瘾。
   • 时机太早,通常都是不好的交易。
   • 只满足投资人,没满足客户。
   • 融资超级耗费精力。
  趁着还没后悔,还是花自己的吧。
  
  You need less than you think: 由俭开始,你不需要那么多,慎着花。
  
  Start a business, not a startup: 无法盈利的事业不是事业,是嗜好。
  
  Building a filp is building a flop: 用承诺策略替代退出策略,思考如何成长和成功。不要把自己的事业拱手卖人。
  
  Less mass:轻装上阵,不管是业务模式、优先级、产品、关注点,都会易于改变,最重要的是思维方式。
  
  Chapter Progress
  
  Embrace constraints: 少是好事,创意从少中激发。
  
  Build half a product, not a half-assed product: 伟大从砍掉刚刚好的部分开始。
  
  Start at the epicenter: 从应该做的核心开始,倾尽全力,将其做好,未来成功的基础来源于此。
  
  Ignore the details early on: 过早执着于细节只会浪费时间和精力。
  
  Making the call is making progress: 早作决定,加快进度。
  
  Be a curator: 去粗取精,留下最精华的部分。
  
  Throw less at the problem: 减少投入,少就是多。
  
  Focus on what won’t change: 发现万变中的不变。
  
  Tone is in your fingers: 别做工具控,想法和内容最重要。
  
  Sell your by-products: 注意你的副产品,也许可以卖。。
  
  Launch now: 让核心功能提早上线。
  
  Chapter Productivity
  
  Illusions of agreement: 去掉抽象描述,Get Real!!
  
  Reasons to quit:提问,确保有意义的思考和回答。
  
  Interruption is the enemy of productivity: 集中注意力,减少中断。
  
  Meetings are toxic:让无意义的会议去死,好会议要遵守规则。
  
  Good enough is fine: 不要过早优化/完美化。
  
  Quick wins: 积跬步以致千里,积小流以成江海。
  
  Don’t be a hero: 如果预先估算出现问题,也不要打持久战、逞英雄。有时三十六计走为上。
  
  Go to sleep:好的休息能带来更好的工作。缺少睡眠带来:老顽固、没创意、低士气、火脾气、
  
  Your estimates suck: 人类不善于给大项目做估算,解决方法:化大为小,逐个击破。
  
  Long lists don’t get done: 同样地,化大为小,逐个击破。在设定优先级时,将最上面一个作为优先级最好的任务,以此下推,不做具体定义。
  
  Make tiny decisions: 小决策易于调整后果,灵活机动。
  
  Chapter Competitors
  
  Don’t copy: 只能复制表象,缺乏深层次的理解无法持续,何况总是只能跟在人家屁股后头。
  
  Decommoditize your product(Pour yourself into your product):把自己投入到自己的产品中去,没有人能够复制你的思维方式在产品及其周边服务的投射。
  
  Pick a fight: 找到你的敌人,让人们注意到你,点燃人们的激情。
  
  Underdo your competition: 减少功能,将其做好。
  
  Who cares what they’re doing? :用心做好自己,不去管别人,不要让别人定义你的产品。
  
  Chapter Evolution
  
  Say no by default: 不可能做到让所有人满意,盲目妥协只会给自己带来麻烦。
  
  Let your customers outgrow you: 不要被大客户牵着鼻子走,满足最基本、最简单、最下的需求集合。
  
  Don’t confuse enthusiasm with priority: 好主意层出不穷,当下的好主意过一段时间再看就不一定了。
  
  Be at-home good: 用核心功能留住用户,打动用户,让他们帮你传播。
  
  Don’t write it down: 重要的功能客户会反复提醒你,不用写下来。
  
  Chapter Promotion
  
  Welcome obscurity: 在还没什么人注意你的时候,先小范围发布,让用户尝试,这样有助于积累自信和激励。
  
  Build an audience: 使用各种web 2.0手段,培养真正关心你、倾听你的用户。
  
  Out-teach your competition:让人们从你这里学到点什么,培养他们的忠诚度。
  
  Emulate chefs:像大厨一样分享你的成功“秘方”。
  
  Go behind the scenes: 让人们看到你的事业的内部运作,让他们的好奇心培养他们的忠诚。
  
  Nobody likes plastic flowers:你不必完美,让大家看到你的问题,看到你在改善方面做出的努力。
  
  Press Releases are spam: 新闻稿平庸无聊,采取个人化的沟通方式。
  
  Forget about the Wall Street Journal: 小企业没钱,别指望重量级媒体关注你,让利基网站和博客来关注你们吧,发掘社区的力量。
  
  Drug dealers get it right: 拿出你最好的功能,让人们免费试用,吸引他们。
  
  Marketing is not a department: 你的一举一动都会对市场和客户产生影响,注意与客户相关的一切。
  
  The myth of the overnight sensation: 别指望一夜成名,好品牌与顾客的关系是长期经营的结果,像婚姻一样。
  
  Chapter Hiring
  
  Do it yourself first: 自己先做,然后再招人,保证对工作全景的了解。
  
  Hire when it hurts: 只有应付不过来、并因此而影响到产品质量的时候才招人
  
  Pass on great people: 别看着好人都想要,别看着美女都想娶,你管不过来。
  
  Strangers at a cocktail party: 不要一下招聘很多人,大家会碍于面子无法深入沟通。
  
  Resumes are ridiculous: 简历都是忽悠人的,相信你在看简历时的直觉。
  
  Years of irrelevance: 工作年限不重要,重要的是工作能力。
  
  Forget about formal education: 正式的教育不重要,学院派教育出来的人倾向于表现僵化。扩大你的待选招聘范围。
  
  Everybody works:不要招聘喜欢发号施令、自己不干活的人。
  
  Hire managers of one: 招聘能够自我驱动、完成工作的人,评选标准:找曾经从头至尾做过一件事情、一个项目的人。
  
  Hire great writers: 好的写作者能够理清自己的思路,知道如何沟通,让事物易于理解,能够站在别人的角度考虑问题。在今天,写作是好主意的流通货币。
  
  The best are everywhere: 牛人遍布世界各地,不必非得坐在一起。每天要有时间定期沟通,每年定期面对面交流。
  
  Test-drive employees:招人后,要让其做个小项目看看真正的工作状态。
  
  Chapter Damage Control
  
  Own your bad news: 自己首先发布对自己不利的消息,反面典型请参考某国gov。
  
  Speed changes everything: 要表现得像快速反应部队一样。。。
  
  How to say you’re sorry: 道歉必须真诚,去掉空话套话。具体情况具体分析。
  
  Put everyone on the front lines: 让所有的人都能上到客户第一线。
  
  Take a deep breath: 发布新特性后,不要急于回应客户的负面反应,稍微等等。
  
  Chapter Culture
  
  You don’t create a culture: 文化来自于日常做事的方式,就像好酒要慢慢酿制。
  
  Decisions are temporary: 快决策,更灵活。如今的市场,想得太远等于杞人忧天。
  
  Build a rockstar environment, skip the rock stars: 用环境培养人,平凡的人做不平凡的事。
  
  They’re not thirteen: 相信你的员工,给他们自我放松和调整的时间。
  
  Send people home at 5: 工作时间不重要,工作效率更重要。
  
  Don’t scar on the first cut: 有人犯错,不要急着定制度,等有人频繁犯错再说。
  
  Sound like you: 用亲和力替代所谓的“商业化”、“职业化”语言。
  
  Four-letter words: 讨论中不要预设立场、不要绝对化。
  
  ASAP is poison: 所有的事情都是高优先级等于没有优先级。
  
  Chapter Conclusion
  
  Inspiration is perishable: 有创业冲动?赶紧动手!

原文链接:http://book.douban.com/review/3118105/

解决wordpress 3.0.1中Gravatar头像无法正常显示问题

Sunday, October 17, 2010

在v2ex中看到个帖子“悲剧的Gravatar”, 说是Gravatar被墙了,
我查了下我的博客中的头像好好的, 看到marguin的回复(“没有被墙,不过在WordPress
3中,默认的代码有问题,URL有变化所致”)
,查了下装的wordpress
3.0.1的博客, 头像真不显示了

解决办法: 在根目录的wp-includes文件夹找到pluggable.php文件, 并按下面的代码修改(在1645行)

        //if ( is_ssl() ) {
        //      $host = 'https://secure.gravatar.com';
        //} else {
        //      if ( !empty($email) )
        //              $host = sprintf( "http://%d.gravatar.com", ( hexdec( $em
ail_hash{0} ) % 2 ) );        //      else
        //              $host = 'http://0.gravatar.com';
        //}

        if (is_ssl()){
                $host = 'https://secure.gravatar.com';
        } else {
                $host = 'http://www.gravatar.com';
        }

感谢marguin的分享:解决WordPress升级到版本3后Gravatar头像无法显示的问题

---------------------------------update 2010-10-18
11:04--------------------------------------------
也可以用GravatarLocalCache 插件将头像缓存到BLOG自身服务器,来解决WP头像无法显示的问题

【转】《REWORK》读书笔记

Thursday, September 2, 2010

37signals是一家很特别的公司,他们有很独特的理念。虽然他们的团队只有16人,但他们的几个产品每年都会带来相当可观的利润。他们反对风 险投资,反对扩大规模,反对堆砌功能。如果让我用一个词形容他们的话,那就是maverick,在某种程度上他们与乔布斯有相似之处。David Heinemeier Hansson是37signals的一个主要成员,我写过一篇文章介绍他的两个演讲。除了他们的产品外,他们还有一些byproduct: 一个很著名的博客:Signal vs Noise,还有2本书:《getting real》《rework》,今天我就要介绍一下《rework》这本书。

《getting real》是一本和《rework》风格类似的书,毕竟是同一家公司出的,也值得一读,用不了多少时间。让人兴奋的是《getting real》可以在线免费读,地址是:这里">http://gettingreal.37signals.com/,而《rework》是要花美金买的,我有电子版的,下载地址在这里

用一个词形容《rework》这本书就是“短小精悍”,只有130页,你只需要3-4个小时就可以读完,而且书中每一个观点都配了一张图,看起来很 轻松,一点都不乏味。我们说“字如其人”,同样的道理,这本书很鲜明反映了37signals这家公司的特点。废话不多说了,我把每个观点都通用一句汉语 总结出来了:

轻装上阵



  • 不要被教条所束缚

  • 失败并非成功之母,不要“崇拜”失败,从成功中你可以学到更多

  • 计划等同于猜测,未来有太多你不能够控制的因素,长远的计划没有任何意义

  • 企业不应盲目扩张,规模不是衡量企业成功与否的因素,小企业有大企业所没有的优势:灵敏

  • 不要成为工作狂,你需要时间思考更重要的东西

  • “创业家”(entrepreneur)这个词应该被替换成“起步者”(startup),每个人都可以开创自己的事业


出发



  • 做一些能够引起轰动的事,最关键的是能够真正帮助别人解决一些问题,而不是去山寨别人的产品

  • 抓住自己的需求,设计能够解决自己所遇到的问题的产品

  • 立即开始去行动,你的计划和想法并不代表你做了什么

  • “没有时间”是借口,做你真正喜欢的事你不会说“没有时间”

  • 必须有自己的信条,它是设计产品时的准绳

  • 努力实现你的承诺,捍卫你的信条,而不是把它作为口号挂在墙上

  • 拿VC的钱是最差的选择,花别人的钱你会上瘾,最终失去对于公司的控制

  • 你所需要的并不多,创业公司不是大公司,你需要的只是一个车库罢了

  • 不要用“创业公司(startup)”这个词麻痹自己了,你需要的是盈利,你需要开始真正的事业

  • 你应该考虑如何让自己的企业获得成功,而不是尽早拿着现金退出

  • 抛弃那些没有意义的东西吧,比如:长远的计划,过量的员工,无聊的会议,繁琐的制度


前进



  • “少”是一件好事,限制更是一种优势

  • 一段时间只做一件事,做最重要的事,把全部精力投入到一个产品上去

  • 从最核心的地方开始,细枝末节的部分以后慢慢修改

  • 开始的时候不要太关注细节,它只会浪费你的时间

  • 不断做决定的过程就是不断前进的过程,不要优柔寡断

  • 抓住最核心的东西,抛弃那些不重要的东西,真正重要的东西迟早会引起你的注意

  • 少即是多,不做最多的,而做最对的

  • 专注于那些不会改变的东西,而不是那些时髦的新事物

  • 问题的关键是争取顾客并赚钱,而不是你使用什么工具。一跟贵的高尔夫球杆不能保证你打球出色

  • 买出你的“副产品”,做任何事总会给你带来“副产品”,他们可能同样具有价值

  • 不要总被细枝末节所羁绊,不要等到尽善尽美才发布,尽快发布产品,并且发布后不断改进


效率



  • 现实一点吧,用最直观的方式描述事物,放弃那些没有任何意义的文档和图表

  • 不要只顾低头干事,还要抬起头来问问自己究竟为什么要这样做,这件事真的有意义吗

  • 中断是高效的天敌,拿出一块完整的连续的时间做一件事,这样的效率最高

  • 开会就像毒药

  • 足够好就可以了,不必苛求完美,不必最求繁杂,那只会满足你的虚荣心

  • 速度第一,尽快实现一个一个小的目标,这会激励你实现最终的大目标

  • 放弃不等于失败,该放弃时就放弃,逞能只会让你失去的更多

  • 注意休息,缺乏睡眠会让你失去创造力,士气低落,并且变得暴躁易怒

  • 把大计划分成小计划,把大块时间切割成小块时间,这会帮助你更好的做出计划和选择

  • 任务清单要小,每次只关心一件事

  • 不断做出小的决定,并且不断根据时机而改变


对手



  • 不要抄袭,通过抄袭你无法理解事物的本质,而且你一直处于被动的地位

  • 把你自身融入到产品中去,变成产品的一部分,这是对手所抄袭不来的

  • 找出对立的对手,让自己变得鲜明,同时也利于产品的营销

  • 不要通过冷战的方式与对手较量,你需要的不是比对手做的更多,而是更少更精

  • 把精力集中于自己,而不是竞争对手


进化



  • 学会说不,不能被顾客牵着鼻子走,要有自己的原则

  • 不要专门为一两个大客户而改变产品,你需要专注于一类用户,而不是一两个

  • 想到好的想法不要头脑发热,先把它写下来,日后仔细考虑,互相比较,再决定实现哪一个

  • 做那种让用户越用越喜欢的东西,而不是买完就后悔的东西,这样他会向他的朋友推荐你的产品,这是最好的广告

  • 没有必要把用户反馈都记录下来,真正重要的建议你会多次接触,自然能记住


晋级



  • 开始的时候默默无闻是一件好事,它给你犯错误的空间

  • 培养你自己的听众,让他们主动了解你,博客是一个很不错的方式

  • “教育”用户,让他们对你“忠诚”,他们会尊敬你,apple是个好例子

  • 学会分享,分享不会使你被别人超越,人们会喜欢你,你将从中收益

  • 向用户展示产品背后的故事,这会拉近你与用户的关系

  • 做真实的自己,正视自己的不足,残缺也是一种美

  • 不要向记者们群发新闻稿,约他们出来,富有激情的向他们推销,这样你会获得最好的报道

  • 不要指望通过那些大型媒体营销自己,相反那些草根博主也许可以帮助你

  • 开始时免费给用户提供一些服务,如果他们喜欢,他们会花钱使用你更完善的服务

  • 没有必要专门设置“销售部”,你发的每封邮件,回的每个电话都是在marketing

  • 一夜成名的背后必然是数年的心血和默默的付出


招聘



  • 招聘之前自己先体验一下这个岗位,这不仅有助于找到合适的人,还会帮助你日后更好的管理

  • 在真正需要时才招聘,而不是仅仅为了扩大规模

  • 不要因为对方很优秀就把他招进来,招最合适的,而不是最好的

  • 不要不停大量招新人,这会使每一位员工身边都有大量陌生人,这对于公司发展很不利

  • 同一份简历同时发给很多公司的人不要招。如何辨别这样的人:看信中他是在与你沟通,还是在堆砌要点

  • 5年工作经验与半年工作经验没有太大区别,你很难辨别其间的区别

  • GPA并不重要,除非你需要一个教授,但事实上你不需要

  • 对于小团队,每个成员都必须实实在在地做事,你不需要只会指手画脚的人

  • 你需要一个能够从小事做起,并且总揽大局的管理者

  • 聘用有更好写作能力的人,他们有更清晰的思维,更好的表达能力

  • 合适的人选在世界各地,没必要在乎地理位置,是否在同一个城市对于一个团队并不重要

  • 可以给应聘者一个小项目做,这是检验他能否胜任的最好方式


应对问题



  • 当负面新闻出现时,坦诚地向消费者解释,而不是试图掩盖它

  • 迅速解决客户遇到的问题,对方不但不会抱怨,反而会更加信任你

  • 对于道歉要学会换位思考:如果你是被道歉者,你想听到怎样的道歉?最重要的是真诚

  • 让每一个员工都能接触到客户,对于任何岗位这都有好处

  • 发布新版本后深吸一口气吧,抵制改变是人的天性。不要消极应对客户的抱怨,而是要耐心的向他们解释


企业文化



  • 企业文化不是你能够创造的,它是在长时间内一点点形成的

  • 决定都是暂时的,要随着形势的不断变化而不断改变决定

  • 企业的文化必须尊重每一个人的工作

  • 不要像对待孩子一样对待员工,你应该信任他们,给予他们足够的空间

  • 不要强行加班,这会降低员工白天的工作效率,最终不会给企业带来任何好处

  • 不要往别人的伤口上撒盐,也不要惩罚那些偶然出现的问题,你应该关注那些经常出现的问题

  • 不要装腔作势,那其实是一种自卑的表现

  • 不要出现need, must, can't, easy, just, only, fast这几个单词

  • 只将真正紧急的事情贴上紧急标签


结语



  • 当灵感出现时,立即抓住它,不要拖延。你可以有很多idea,但如果不实践,他们都等于零

转自: http://www.colorfulcloud.com/rework.html

在Rails中配置多个邮件服务器发邮件

Friday, August 27, 2010

在项目中不同的mailer用不同的邮件地址发送邮件


  1. 新建一个配置文件(#{RAILS_ROOT}/config/action_mailer.yml)
  2. noreply:
      domain: lxneng.com
      user_name: noreply@lxneng.com
      password: noreply
      address: smtp.gmail.com
      port: 587
      authentication: :plain
    bug:
      domain: lxneng.com
      user_name: service@lxneng.com
      password: service
      address: smtp.gmail.com
      port: 587
      authentication: :plain
    
  3. 然后在Mailer中加载设置
  4. class UserMailer < ActionMailer::Base
      #-----------------loding smtp setting------------------------
      def load_settings
        options = YAML.load_file("#{RAILS_ROOT}/config/action_mailer.yml")["noreply"]
        @@smtp_settings = {
          :address => options["address"],
          :port => options["port"],
          :domain => options["domain"],
          :authentication => options["authentication"],
          :user_name => options["user_name"],
          :password => options["password"]
        }
      end
      #-----------------deliver method-----------------------------
      def welcome_email(recipient, sent_at = Time.now)
        load_settings
        subject  'Thank you for visiting'
        recipients  recipient
        from  'lxneng <noreply@lxneng.com>'
        sent_on  sent_at
      end
    end
    

在表单中设置默认值

Monday, August 23, 2010

用google大仙搜索了一把 , 找到了Form Field Default Value这篇博客, 作者写了一个jquery插件,代码如下

jQuery.fn.DefaultValue = function(text) {
return this.each(function() {
    $(this).attr("autocomplete", "off");
    //Make sure we're dealing with text-based form fields
    if (this.type != 'text' && this.type != 'password' && this.type != 'textarea') {
        return;
    }

    //Store field reference
    var fld_current = this;

    //Set value initially if none are specified
    if (this.value == '') {
        this.value = text;
    } else {
        //Other value exists - ignore
        return;
    }

    //Remove values on focus
    $(this).focus(function() {
        if (this.value == text || this.value == '')
        this.value = '';
    });

    //Place values back on blur
    $(this).blur(function() {
        if (this.value == text || this.value == '')
        this.value = text;
    });

    //Capture parent form submission
    //Remove field values that are still default
    $(this).parents("form").each(function() {
        //Bind parent form submit
        $(this).submit(function() {
            if (fld_current.value == text) {
                fld_current.value = '';
            }
        });
    });
});
};

作者的插件中没有做对autocomplete属性的关闭,miclle加上了$(this).attr("autocomplete", "off"); 这一行修复了这个问题!
使用例子:

$(“#myfield”).DefaultValue(“My Default Value..”);

======================华丽丽的分隔线======================
后来, miclle把这插件改了一下, 变得更完美了

jQuery.fn.DefaultValue = function(){
return this.each(function(){
    var flied=this, value=this.value=this.title;
    $(this).focus(function(){
        (flied.value==value||flied.value=='')?flied.value='':''
        }).blur(function(){
        (flied.value==value||flied.value=='')?flied.value=value:''
        }).parents("form").each(function(){
        $(this).submit(function(){
            (flied.value==value)?flied.value='':''
            });
    });
});
};

这样的话,使用的时候只要在标签中加个title属性就ok了
例如

<input type="text" title="title is default value" />
<textarea title="title is default value" ></textarea>
$("input:text, textarea").DefaultValue();

Demo

用Python做单词拼写检查

Wednesday, August 11, 2010

easy_install pyenchant

In [1]: import enchant
In [2]: d = enchant.Dict('en_US')
In [3]: d.check('python')
Out[3]: True
In [4]: d.suggest('pytho')
Out[4]: ['python', 'Python', 'Pythias', 'Pythagoras', 'Pythagorean', 'pathos', 'paths']

【译】Rails中的两个小技巧

Wednesday, August 4, 2010

原文:http://developer.idapted.com/2010/08/04/rails-small-tips/

1. flash 和 flash.now

flash在rails中用来做消息提示, 它是使用session来完成这个功能。

def create

  if User.authorize(params[:login], params[:password])
    flash[:notice] = "login success"
    redirect_to target_path
  else
    flash[:error] = "login fail"
    render :new
  end
end

flash[:notice]在redirect_to后产生效果,在这个例子中, 如果登录失败,
错误消息将不会显示在“new”模板中,会在下一个调转页面中, 当我们使用render时候应该用flash.now
flash.now[:notice]将在当前页面生效,即在new页就能看到错误消息

2.select 和 include

Rails的ActiveRecord的finder的 “select”选项在用 “include”预先加载关联记录集时不能正常工作

class Student < ActiveRecord::Base
   has_one :call
end

class Call < ActiveRecord::Base
   belongs_to :student
end

我们要查询Student对象的Call对象的updated_at 优化前:

@students = Student.all(:include => [:call], :select=> "students.id, students.login, students.called_times, calls.updated_at as last_called_at")

这里依然预先加载了“call” 而且返回了一个完整记录 优化后:

#include eql left outer join
@students = Student.all(:select => "students.id, students.login, students.called_times,
calls.updated_at as last_called_at", :joins => "left outer join calls on students.id = calls.student_id")

现在,我们只从students表取了我们需要的字段

NameError (uninitialized constant REXML::Encoding::BINARY) 错误

Friday, July 30, 2010

A NameError occurred in daily_actions#get_action_property:

uninitialized constant REXML::Encoding::BINARY
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:440:in `load_missing_constant'
.....
-------------------------------
Backtrace:
-------------------------------

/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:440:in `load_missing_constant'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in `const_missing'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoding.rb:53:in `escape'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/string.rb:3:in `to_json'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoding.rb:70:in `encode'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoding.rb:18:in `__send__'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoding.rb:18:in `encode'
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/prototype_helper.rb:1000:in `javascript_object_for'
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/prototype_helper.rb:1005:in `arguments_for_call'
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/prototype_helper.rb:1005:in `map'
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/prototype_helper.rb:1005:in `arguments_for_call'
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/prototype_helper.rb:901:in `call'
[RAILS_ROOT]/vendor/plugins/jrails/lib/jrails.rb:79:in `insert_html'
[RAILS_ROOT]/app/controllers/ajax_controller.rb:73

然后我打开encoding.rb这个文件看了下,
把BINARY换成了UTF_8就正常了, 但是不知道为什么 :-p

============update=====================
是否安装了gimite-google-spreadsheet-ruby这个插件, 如果是的话把它删了重装一下 gem sources -a
http://gemcutter.org sudo gem install google-spreadsheet-ruby 这样问题就解决了

【译】复查你的数据库迁移文件

Tuesday, July 27, 2010

原文:http://rails-bestpractices.com/posts/32-double-check-your-migrations

当你创建了一个新的迁移, 前进后退都试一遍确保没有错误

很多开发者只检查迁移的在前进 (rake db:migrate) 步骤是否正常工作, 但是通常没有检查后退(rake
db:rollback)时是否正常工作 当我新建了一个迁移, 我都会前进后退步骤都执行一下确保没有错误正常工作

rake db:migrate
rake db:migrate:redo

© 2009-2013 lxneng.com. All rights reserved. Powered by Pyramid

go to Top