Roy Notes

技术 创业 思考

Mac osx自动添加VPN路由

最近需要频繁使用VPN拨号,但由于网段不一样,每次连上后都需要手工添加路由,在Mac下同样可以通过ip-up和ip-down自动完成路由的添加。

非常简单的代码,其中第7行的${5:-} 对应远程IP地址,另还有以下参数可以使用

$1 the interface name used by pppd (e.g. ppp3)
$2 the tty device name
$3 the tty device speed
$4 the local IP address for the interface
$5 the remote IP address
$6 the parameter specified by the 'ipparam' option to pppd

最后,必须赋执行权限

1
2
3
4
$ sudo chmod a+x /etc/ppp/ip-up

#查看是否添加成功
$ netstat -nr

待遇问题

农历年回来后就一直非常紧张地进行招聘工作,幸运的是在不到一个月的时间能够确定了三位技术新同事。

在本周一扎堆报到时的确是让我异常的兴奋,今年的团队建设任务在开始阶段就成效不错。三位新同事中还有两位是资深技术人员,这非常重要,因为今年团队招聘名额不多,但在创业团队中组成一个倒三角架构是可以减少犯错机会的。

遗憾的是在今天其中一位因待遇问题选择了离开,祝福这位共事两天的同事寻觅到自己另一份理想工作。

我们是家创业公司,运营的四年来并没有拿过风投一分钱过日子,我们不太可能给出超越经营成本的薪资成满足大家的待遇要求。事实上,我们也在尽量匹配市场的薪资水平,甚至在有合适的人材时以略超出薪资体系结构的月薪来保持竞争力。

待遇问题真是一个好问题,评判标准因人而异,而且没有谁对谁错。判断对错时如果不是过于在乎短期收益,那么最好想想对公司能给予多少的附加值,附加值包括但不限于:

  • 是否有充足的成长空间
  • 对行业方向是否认同、一致
  • 是否存在长期投资回报收益(公司可持续发展性)
  • 公司气氛、文化是否吻合
  • 技术创新程度
  • 价值观又是否一致
  • 上司是一个怎样的人

这些都属于我值得关注的待遇问题,绝不单纯因为月薪的短期或多或少去加入一家公司,不能臭味相投及DNA不匹配的公司会令我工作得非常痛苦。

未来的时间我们将继续寻找合适的工作伙伴,如果你是一位有多年工作经验的Java开发者,对Rails感兴趣,熟悉linux,非常欢迎将简历投递到邮箱roy.wei#xiangrikui.com

如果希望了解更多,可以访问 向日葵保险网

Node-restify 简介

restifyNode.js的模块。虽然restify的API或多或少的参考了express,但restify不是一个MVC框架,它是一套为了能够正确构建REST风格API而诞生的框架。

安装restify

restify安装到目录restify-dmeo

1
2
3
$ mkdir restify-demo
$ cd restify-demo
$ npm install restify

Hello World

app.js
1
2
3
4
5
6
7
8
9
10
11
12
var restify = require('restify');

function respond(req, res, next) {
  res.send('hello ' + req.params.name);
}

var server = restify.createServer();
server.get('/hello/:name', respond);

server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

保存文件并执行

1
2
$ node app.js
restify listening at http://0.0.0.0:8080

通过curl命令测试,服务器返回HTTP状态码200和一个application/json类型的内容(事实上这里不是)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ curl -is http://localhost:8080/hello/roy
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version
Access-Control-Expose-Headers: X-Api-Version, X-Request-Id, X-Response-Time
Server: restify
X-Request-Id: ec3e9e55-7083-4e12-93ee-9c24a0c5c398
Access-Control-Allow-Methods: GET
Connection: close
Content-Length: 5
Content-MD5: 65tW24XBT3r1jLUpw0o0Fw==
Content-Type: application/json
Date: Sun, 19 Feb 2012 16:14:13 GMT
X-Response-Time: 3

"hello roy"

特性

接触到restify是因为内部系统需要一个手机归属地的查询接口,基于nodejsredis的高性能实现,决定快速实现一个,当时也很自然地选择了express作为web层。但express始终是一个Web MVC框架,它包含了一些我不太需要的功能实现(i.e., templating/rendering)。而我只是需要一个更纯粹的API接口而已–接收请求然后返回一个JSON结果集。

后来从推上找到了restify时,我就觉得这才是我想要的:

  1. 路由

    • 基本等同于express/sinatra的路由方式
    • 路由正则表达式支持
    • 版本化支持
  2. 自动选择内容格式进行响应,并可以自定义格式

  3. 内置REST风格的错误处理机制,重载了400和409来解析应答,得到一个包含codemessage的JSON对象。也可以子类化restify.RestError实现自己错误代码和信息。

    已实现的RestError:

    • RestError
    • BadDigestError
    • BadMethodError
    • InternalErrorError
    • InvalidArgumentError
    • InvalidContentError
    • InvalidCredentialsError
    • InvalidHeaderError
    • InvalidVersionError
    • MissingParameterError
    • NotAuthorizedError
    • RequestExpiredError
    • RequestThrottledError
    • ResourceNotFoundError
    • WrongAcceptError
  4. 插件机制

  5. DTrace支持,这个绝对是调式、诊断和性能测量利器

虽然现在restify还是初生婴儿,我还是把上面提到的手机归属地查询接口改用了restify来实现了一个moquery

正如官方描述一样

restify is a smallish framework, similar to `express` for building REST APIs. 

Installing GitLab on Ubuntu Server 11.10

打算在团队内推广Git,替换掉当前使用的SVN。所以打算挑选一个类GitHub的管理界面,最终在GitLab和Gitblit中选择了前者。本文为GitLab在虚拟机下的安装过程。

安装Ubuntu 11.10

安装好Ubuntu Server后,我设置源指向163

1
2
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
$ sudo echo "" > /etc/apt/sources.list

编辑source.list加入

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse 
deb-src http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse 
deb http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted

更新服务器并安装一些必要软件

1
2
3
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y
$ sudo apt-get install git-core openssh-server sendmail curl gcc libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev python-setuptools  

如果使用VMWare的虚拟机,最好安装一下VMWare-tools

安装rvm & ruby

gitlab需要使用ruby 1.9.2-p290,习惯了使用rvm来管理ruby版本,所以把rvm也安装一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
$ source /etc/profile.d/rvm.sh
$ type rvm | head -1
rvm is a function


#Rubies installed in system, gemsets separated per user:
$ rvm user gemsets
$ rvmsudo rvm install 1.9.2
$ sudo -H -i   #切换到root
$ rvm --default use 1.9.2
$ exit #退出root
$ rvm reload
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

基于速度的原因,把rubygem的源调整成taobao

1
2
3
4
5
6
7
$ gem sources -a http://ruby.taobao.org/
$ gem sources --remove http://rubygems.org/
$ gem sources -l 
*** CURRENT SOURCES ***

http://ruby.taobao.org/
$ 

淘宝镜像上第1,2行跟我这里反过来的,按官网写法我无法删除rubygems的源,另外我的source文件rubygems.org域名后面是有/的,所以也要加入才能删除。

或直接通过手工编辑vi ~/.gemrc删除。

由于使用了rvm多用户模式所以部分命令需要加上rvmsudo 进行。

安装rails

1
2
$ rvmsudo gem update --system 1.8.14 #安装1.8.15会出错
$ rvmsudo gem install rails

或安装GitLab指定版本

1
$ rvmsudo gem install rails -v 3.1.1 --no-ri --no-rdoc

安装和设置Gitolite

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
$ sudo adduser \
  --system \
  --shell /bin/sh \
  --gecos 'git version control' \
  --group \
  --disabled-password \
  --home /home/git \
  git

# Add your user to git group
$ sudo usermod -a -G git `eval whoami` 

# Create ssh key
$ ssh-keygen -t rsa

# copy your pub key to git home
sudo cp ~/.ssh/id_rsa.pub /home/git/rails.pub

# clone gitolite
sudo -u git -H git clone git://github.com/gitlabhq/gitolite /home/git/gitolite

# install gitolite
sudo -u git -H /home/git/gitolite/src/gl-system-install

# Setup (Dont forget to set umask as 0007!! 搜索0077修改为0007)
sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup ~/rails.pub"

sudo chmod -R g+rwX /home/git/repositories/
sudo chown -R git:git /home/git/repositories/

检查gitolite安装是否成功,先重新登录确保已经加入git用户组

1
2
3
4
5
6
# clone admin repo to add localhost to known_hosts
# & be sure your user has access to gitolite
git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin 

# if succeed  you can remote it
rm -rf /tmp/gitolite-admin 

如果有下面类似提示

1
2
3
4
5
6
7
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
  LANGUAGE = "en_US:",
  LC_ALL = (unset),
  LC_CTYPE = "zh_CN.UTF-8",
  LANG = "en_US.UTF-8"
    are supported and installed on your system.

编辑sudo vi /etc/environment添加以下内容到最后

1
2
3
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
LANGUAGE="zh:en_US:en"

保存后执行source /etc/environment使其生效。

安装和设置GitLab

这里安装的是GitLab的Stable 2.1版本

安装GitLab必须包
1
2
3
$ sudo apt-get install python-dev python-pip sendmail redis-server libicu-dev
$ sudo pip install pygments
$ sudo gem install bundler

安装gitlab

按个人习惯将gitlab装在/usr/local目录下

1
2
3
4
$ sudo git clone -b stable git://github.com/gitlabhq/gitlabhq.git
$ sudo chown -R `eval whoami`:`eval whoami` /usr/local/gitlabhq
$ cd /usr/local/gitlabhq
$ rvmsudo gem install charlock_holmes -v '0.6.8'

修改GemFile的http://rubygems.orghttp://ruby.taobao.org/,然后

1
2
3
$ bundle install --without development test 
$ bundle exec rake db:setup RAILS_ENV=production
$ bundle exec rake db:seed_fu RAILS_ENV=production

Start Server

bundle exec rails s -e production

测试安装

打开 http://<ip>:3000,使用以下帐号和密码登录

User - admin@local.host Password - 5iveL!fe

进入http://<ip>:3000/admin/users新增一个用户,完成后退出管理帐号。

使用刚新增的用户登录,并进入http://<ip>:3000/keys添加一个ssh key,如果没有则生成一个(可以参考github设置你的Git)。

返回首页,新建一个project成功后按系统提示操作

1
2
3
4
5
6
7
8
$ mkdir mylab
$ cd mylab
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin git@localhost:mylab.git   #将loaclhost换成你的ip
$ git push -u origin master

如果push成功,你应该可以通过浏览http://<ip>:3000/mylab/repository看到刚刚的第一次提交。

后续安装

通过安装Passenger+Nginx可以使用系统管理更加方便,可以参考官方文档介绍。

Enjoy!


参考资料

  1. 如何在Ubuntu Server 11.10上安装GitLab
  2. Gitolite 构建 Git 服务器
  3. Create git user & install gitolite
  4. Installing GitLab on Ubuntu Server
  5. GitLab stable版Ubuntu安装

安装autoddvpn

在家已经成功部署autoddvpn近两个月,所以在家里上网的感觉特好(偶尔拉风一下),特记录下来为大家做一次明灯。

动机

在用dd-wrt方案前,我用的是ssh tunnel再加上本地autopac,基本已经是一个无敌的解决方案了,也特靠谱的。但家里设备一多,你得想尽办法为每台设备折腾一下,找解决方案。折腾的这些东西都是很折腾人的。与其这样,何不在路由上做功夫,一劳永逸呢。

需要环境

准备

关于DD-WRT路由器

家里正好有两台设备,一台是D-Link DIR-605 D1 ,通过查询是wip状态:

work in progress, router support is in the works, but please don’t ask how long it takes, we cannot give you a schedule in the most cases.

另一台为Netgear WGR614 v9,非常悲剧也是wip。正要放弃准备购买新设备时得知,DIR-605可以刷DIR-615 D2,经过两个晚上的几个小时尝试最终也刷成功,但最后我还是买了一台路由器,因为DIR-605无论如何也支持不了OpenVPN。

如果设备支持OpenVPN,在下载页会列出标有vpn字样的下载链接

我为什么需要OpenVPN?因为我拥有一个Astrill的VPN帐号推广链接,就因为这个家伙介绍支持DD-WRT我才知晓可以这样玩. Astrill VPN本身是不支持多设备同时登录,通过DD-WRT则可允许7台设备同时使用。

当时我还不知道有autoddvpn这个东西,只能按Astrill的安装介绍来寻找一台支持OpenVPN版本的DD-WRT路由器了。而Astrill推荐Asus RT-N16Linksys WRT 160N,刚好有朋友从香港回来就托运了一台,这样又多花费550人左右。所以我最后用的设备是RT-N16。

事实上,你不需要OpenVPN,用PPTP也是可以的,只要按照autoddvpn的文档写好你的脚本。通过Astrill的安装界面只是图个方便而已。这里我用“可能”来描述是因为我没有进行测试。只不过到后来我也放弃了Astrill的内置安装模式。

关于PPTP或OpenVPN帐号

刚才我说了,我的解决方案是Astrill,大概一年70刀,最近又涨价了。而且现在竟然将DD-WRT单独出来做增值收费, 需要另付 $1/月。

如果你有root权限的主机,自建一个OpenVPN Server也是不错的选择。反正我就没有时间折腾,留给后来人做。

而淘宝上也有很多廉价VPN,总会有你合适的吧。想不花点钱还是不太靠谱吧?

顺便说说Astrill的优势在于服务器节点多,虽然很多速度也不怎么样,但香港节点和美国部分节点都非常的快,而且都不限流量。试过有一次通过New York节点下载XCode 4 ,是1MB/秒的速度。

ADSL

中国电信的8M ADSL

安装调试

刷新固件

硬件准备好后就可以开始刷设备了,从dd-wrt.com下载合适的rom文件到本地。针对我的RT-N16,我一共下载了三个文件

  • dd-wrt.v24-14896_NEWD-2_K2.6_mini_RT-N16.trx
  • dd-wrt.v24-14896_NEWD-2_K2.6_mini.bin
  • dd-wrt.v24-14896_NEWD-2_K2.6_openvpn.bin

用网线接上路由器,访问路由器设置网,找到通过本地上传方式更新固件的位置,必须先刷第一个文件,即扩展名为.trx的那个。刷新成功后,再刷其它,都非常简单就不表了。可以看看这里

设置路由

如果使用的是Astrill服务,非常简单。连上网络后通过Astrill的客户端调出安装界面按提示执行就可以了。安装成功后在DD-WRT的路由设置页面进行设置,而且有专门针对GFW的设置,其实原理跟autoddvpn差不多,通过判断IP是否在墙内选择链路。

不过最后,我还是选择了使用autoddvpn介绍的最好模式graceMode。通过Astrill的傻瓜方式虽然可行,但:

  • 连接服务不知为何非常的慢。
  • 访问国内网站cdn cache会失效
  • 依赖VPN的稳定性,试过几次VPN掉了连国内网站都访问不到

而autoddvpn是反向处理,使用的是本地DNS,对于部分指定的域名才走VPN链路。所以就算VPN不稳定的情况下,至少能保障国内的网站可以访问。

至于如何设置autoddvpn这里不说了,我认为官方的文档已经足够详细。如果你也像我一样使用Astrill VPN服务的话,通过ssh登录路由器,准备你的OpenVPN设置。

openvpn.conf文件需要用到的证书可以通过登录as trill的会员中心VPN SERVICES - OpenVPN certificates 下载。Server List则可以获取当前的服务器状态和IP,选择几个最快的节点吧,我使用的是HK1和NY1。

使用感受

两个月来,在家上网的体验是最好的,唯一不足是最近路由器竟然连接不上,会自动死掉也不会重启,重启后很快又正常。也不知道是否因为刷了DD-WRT而不稳定,我听朋友说他家的官ROM还是非常稳定的,有空时我想重刷一次看看效果。

这样作在家里用倒不错,但出门后就有点麻烦了。手机还好,需要那个情况不好,而且twitter也可以用API Proxy解决。所以我的Mac还是装用iSSH和PAC以备不时之需。其实我想过段日子每天出街自备一个TP—LINK TL-WR800N,连上网络后再接家里的VPN Server端口再访问出去……但多绕啊!再看看吧,不一定弄了。

最后感觉变成Astrill的推广文了,不写了…其实我觉得如果有Linode的东京节点,自建个OpenVPN Server应该也是不错的选择。

如有问题欢迎跟我交流联系.

Sinaly将退伇

一大早的,见到trunk.ly已经被AVOS收购,将整合到Delicious,同时trunk.ly将于2012年1月13日停止运作。那么我的同步程序Sinaly也可以于同一天停止动作了,大家尽快适应Delicious吧。

现在我的问题是还不知道如何将旧delicious的书签导入到新版?又如何将trunkly导入?

后者trunkly正在努力,我相信会有好的解决方案,祝贺trunk.ly团队

Gitbox=git+dropbox

自从没有今天背着手提电脑上班后,感觉颈椎真的轻松了很多,为了身体,未来一段时间也不会背着电脑移动。但电脑不移动后,就要想办法将办公室与家里的电脑同步,以保持文档版本的一致性。

现在云服务非常流行,当然将主要文档同步到云端去,我选择了一直使用的dropbox做简单的文档同步就好了。而又有一些属于私人性质的项目代码使用Git进行版本控制,当然我暂时不想将它们公开放到github,又不想购买私有仓库。当然用https://bitbucket.org/ 也不错,它现在已经提供免费的git私有仓库了。当然用dropbox DIY一个其实也挺靠谱的,你只需要这样做:

~/project $ git init
~/project $ git add .
~/project $ git commit -m “first commit”
~/project $ cd ~/Dropbox/git

~/Dropbox/git $ mkdir project.git
~/Dropbox/git $ cd project.git
~/Dropbox/git $ git init –bare
~/Dropbox/git $ cd ~/project

~/project $ git remote add origin ~/Dropbox/git/project.git
~/project $ git push origin master

Macbook 467 + Ssd

自从升级到Lion,我的老467就开始显得非常的老迈,本来就有了更换SSD的想法,某天被好友@tsmib刺激下,决意更换。记录一下更换过程和心得

先看看更换后的测试结果:

看样子还不错,对不?但其实我只用了不太被推荐的kingston 128GB,因为是朋友送的,就暂时先用着吧。

准备

在SSD的选择上,因为有朋友友情赞助就没有选择@tsmib 强烈推荐的Corsair Force Series GT ,再加上467只支持SATA2,没必要买这个。

开盒照

还涉及到光驱盒、支架这些我没有自己去找,直接按@老甘 的指引买入,但有点小问题,容后再述。

硬盘支架

外置USB光驱盒

商家赠送的工具,但杯具的是与467的螺丝型号不符,这是一个小问题。

备份

推荐使用carbon copy cloner这个工具,可以有选择性地Cloner系统。我将一些相片、视频、下载包都排除在外进行复制,整个过程大约1个多小时。

更换硬盘

最后我是动用自己的工具开拆!如果拆得不踏实,可以到网上找找拆机图示教程,这里就不表述了,要点是一步一步来,别急。

我也选择了安装在光驱位。

这里说说前面说的小问题,@老甘 介绍的配件装到467上后会多出两颗螺丝,因为支架上少了这两颗螺丝的安装位,我不知道其他型号是不是也是这样。图不太清,将就着看:

多出来的两颗螺丝

开机验收

第一次开机启动按着Opt键,选择由SSD启动。

进入系统后的第一件事,建立一些软链接将旧硬盘上的内容链进来

暂时先不要删除旧硬盘上的数据,以便故障恢复,但如果你有Time Machine则见机行事吧。

第二件事,进入系统偏好设置-启动磁盘设置你的SSD为永久启动磁盘

后话

SSD安装后,系统开机由3分钟以上立杆见影地缩短到30秒。网上还有一些SSD的优先方法,我暂时未进行,有兴趣可从参考资料里找找。

升级SSD后,经常有程序无故占用了大量的CPU,原因暂时未知,或许内存不足?计算量过大?还是Clone系统的问题呢?系统暂时不打算重装了,等过段时间换上8GB内存再看看效果又会如何。

参考资料

[1] http://www.mcetech.com/optibay/ [2] Mac OS X 下与 SSD 相关的优化:http://blog.jjgod.org/2010/04/17/macosx-ssd-tweaks/ [3] 干掉光驱、拥抱 SSD:http://apple4.us/2011/03/kill-cdrom-embrace-ssd.html [4] 关于《干掉光驱、拥抱 SSD》一文的补充:http://apple4.us/2011/03/kill-cdrom-embrace-ssd-followu.html [5] 教您给 Unibody 的 MacBook Pro 安装第二块硬盘:http://www.cocoabob.net/?p=502 [6] Macbook Pro拆机光驱更换固态硬盘实战 http://www.osxtoy.com/?p=1182

更新:

2011-10-20:今早@老甘 问我的SSD为什么那么快,我说我这个应该是最差的了。然后找到朋友的测速图,40G 的海盗船 F系列,还是比我的快

关于书漂计划的一些想法

2011年6月21日我发了一条微博,希望大家可以把自己认为有价值的书共享出来到某个地方传阅、交换。意想不到的是,一个多月后anson将这个想法实施出来了,是书漂计划。当然这个计划只是跟我的想法不谋而合而已,我只是认为有这样一个资源共享计划非常的好,毕竟有一些书是适合用来传阅的而不是收藏的。而且同时希望可以将这个计划延伸出去扩展到物品。

虽然anson实施了,但这个计划能否顺利有序地持续进行下去,很大程度在于“用户”有没有履行与计划的协定。将书放入计划是意味着该书已经属于计划,而非属于任何人,绝不允许有人将物品私有化。而书的持有者有义务在收到收书人的请求时,与之沟通并协助将书本发送到收书人手上,但产生的费用应该由收书人支出。

为了让书能更自由的漂流,网站可以提供一些交互元素。让大家用社交帐号登录,可以将自己的书加入计划。可以跟踪每本书的漂流轨迹。或许可以通过API将大家在豆瓣的书评、评分同步展示。

同时可以细分一下规则,为书设置有时间限制的状态,如:idle->reading->pending->extend

  1. idle时,收书人通过系统发出邮件向持有人请求该书,并在email中提供联系方式
  2. 持有人与收书人沟通,并发出书本,并更新系统状态为sending(5天后自动更新为reading)
  3. 收书人从拿到一本书开始有30天的reading时间,主动更新系统状态为reading
  4. 30天reading状态后将自动进入7天的pending状态。系统发邮件通知持有人是否要extend,否则将自动进入idle等待下一个收书人
  5. 最多只能extend一次,将书延长30天的阅读时间,过后将自动进入idle
  6. 每个收书人同时只允许有两本书在reading或extend
如果再为系统添加一个手机客户端,这个计划将更有趣。让每个人的书柜成为公共书柜这个主意不错,正在根据这些想法用rails做程序骨架,进度缓慢中…

创业为了什么?

创业,绝大部分人是为了赚钱吧,赚钱为了什么?为了可以过上好的生活。因此多数人都有创业的冲动, 为了“住洋楼养番狗”过上富豪生活,尤其是在互联网的世界中,网络创业门槛非常低,拉一根网线、买一台电脑、孤身一人就可以对别人说:我创业了。
如果创业只是为了赚取更多的金钱,这可不是一件什么好玩的事情,这会让人每天都很纠结与折磨。如果能正确认识到什么是财富,为了财富去创业或许会轻松很多,金钱只是财富的一种价值体现。
在创业的过程中赚取到的第一桶“金”绝不应该是金钱,它应该是另外的一种财富。
  • 你创造一个社区,让无聊的人们有店可去
  • 你让自己棱角更分明了,重新塑造了自己
  • 你创造就业机会,让更多人有一种工作
  • 你获取了人生经验
  • 你认识了现在的妻子
  • 你学会了如何办证(你懂的)
  • ……
  • 最后你才赚取到金钱,让自己过上好的生活
为什么说金钱可能是最后才得到的,因为在达成梦想前得不知创造多少其他“副产品”,最大的原因是:失败的几率比成功高得多。我们又不是资本家与投资者,他们的眼中只有金钱,那是他们心中对于“财富”的定义。金钱是终极目标,需要拼尽全力去达成,但也要享受、认可在创业过程中我们为自己创造的“财富”
整理自STARTUP+Noise 中的一个帖子