20
Apr 12
创业公司需要怎样的技术
从开始到现在也已经过去大半个年头了,在这过程中有许多体会,正好最近也在思考团队建设问题,这里就顺便谈谈我的一些理解和体会。
既然是创业团队,想必初始团队成员不会很多,但基本上至少会有1~2个人负责技术。我相信选择创业的每一个起初都是满怀希望,胸有大志的。但是,一个月后呢?这里我首先想所的就是团队的执行力,作为创业团队都知道这比什么都重要。“设计师已经迭代了3个版本了,结果第一个版本都还没上线”,这种事情在创业团队似乎很常见,如果你做了3个月连一个Demo都没上线,你还如何创业?
天下武功为快不破,创业者需要具备的基本技能之一就是快,快速迭代,快速成长。这里想到白鸦的逛guang.com,4天就上线了,虽然只有4张静态页面,但至少表达出了自己的产品。不知道是不是受苹果的影响,很多创业者非得做的把产品做到非常完美才愿意上线,我就经常听到某些团队工作一年多了,产品还未上线,以至于我们以为他们早就洗手不干了。所以,我这里说的快指的不仅仅是没日没夜的工作,也要讲究一些方法,要有取舍,要丢得起面子,大不了第二个版本再完善。
从技术角的选择来看,尽量选择开源且有良好社区支持的技术,这样万一在使用过程中出现问题也可以快速找到解决方案,就如现在Unix/Linux占领服务器大半市场,必尤其合理性。微软的产品虽然刚开始的时候入门门槛低,但是它其实并不简单,如果真的碰上什么问题,这个风险和成本很难控制,如果你不小心已经上了微软的贼船,是否破釜沉舟掉头就另当别论了。但初创团队,在决定自己技术之前,我觉得你可以大胆的使用开源技术。但这时候问题又来了,开源技术就像大海一样广阔,人人都可以从中分享和获取资源。很多人在大海中拼命的探索最新最酷的技术,我也是一枚Coder,我很能理解作为程序员的这种满足感,但是这是在创业,做公司,不是一个释放自己满足感的地方,很新很酷技术可以研究,以备将来之用,但不要用在自己的产品上,这样会浪费本多不必要的时间,就如当初在决定小恩爱xiaoenai.com的技术时,Ruby on Rails也是我能接受的最大尺度。Go、NodeJS、Opa什么的了解了解就可以了。
在研发的过程中,也会遇到这样的问题,我们希望把代码写得尽量简洁,美观。有时候我们会为了把一个50行的代码优化成30行清晰、具有维护性的代码花去半天甚至一天时间,这样的错误我相信所有阅读这篇文章的Coder们都犯过。在产品还没有稳定前,不要急于重构代码。这点不细说,大家应该都明白。但换个角度估计会有很多人想不明白,在产品研发初期,我们是否需要在效率问题上话太多时间?有些人一开始就用100w用户的标准做一个网站我觉得是不适合的,在我看来在初期只要考虑能承受上线后3个月内用户增长规模的标准就可以了,甚至第一版、第二版压根不儿用考虑什么效率问题,肯定跑不死。
有了这些技术和素质,作为创业公司在技术应该80%以上可以站稳了,剩下的就是活动你的双手,用代码构建产品的灵魂。
06
Mar 12
从Github被Hack谈Rails安全隐患
小恩爱在第二版开始采用rails框架进行开发,在体验极度便捷的同时,我们也得时刻提防便利同时带来的安全隐患。 昨天得知Github被Hack,让我再次提高了警惕。下面让我们看看Rails是如何带来的安全隐患。
Github发生了什么
Github上Rails的master被hacker插入了一个commit,Github终于被入侵了。这事情在国外的开发圈闹得沸沸扬扬,这几天在微博上我也看到相关的消息。
Github是如何被Hack,Rails出现了什么问题
Rails拥有极大的便利我们使用的ActiveRecord,当我们需要插入一条数据库时,特别是提交10多项表单的时候喜欢使用下面这样的语句,这就是我们熟悉的massive assignement 特性
model = Model.create(params[:post])
model.save
举个简单的例子说明这个问题
假设我们有一个users表,我们有如下字段:
id username password nickname motto point created_at updated_at
其中,point表示积分
我们有一个用户注册的单项
<%= form_for @post do |f| %>
<%= f.text_field :username %>
<%= f.text_field :passowrd %>
<%= f.text_field :nickname %>
<%= f.text_field :motto %>
<%= f.sumbit "Submit" %>
<% end %>
后台提交代码如下
class UserController < ApplicationController
def create
@user = User.create(params[:post])
if @user.save
# do something
else
# do another thing
end
end
end
用起来的确非常简单,如此多的表单只要一句话就搞定了,但是真是这一句话,稍不留神就带来了安全隐患。
剖析Rails安全隐患
正常情况下,这段代码可能很顺利的运行,但是如果Hacker在post多加一个字段会如何?但我们在post里面增加一项point,把value设置成99999,我们会惊奇的发现,该新注册用户瞬间就拥有了99999个积分。举一个例子。拿这个漏洞还可以盗用别人的名义发信息,添加任何人为好友等等
Rails的漏洞?如何解决?
很多人在微博上惊呼,Rails出现重大bug,其实不然,真正的原因在于开发者自己,Rails早就为我们做好的这方面的考虑,Rails为Model提供了attr_accessible或attr_protected,这个属性的作用是保护字段,受保护字段只能通过@post.point = 10这种方式赋值,这样就解决了上述情况带来的风险。
class User < ActiveRecord::Base
attr_accessible :username, :nickname, :motto
#或者
#attr_protected :id, :point, :password, :created_at, :updated_at
#
# !! 个人认为,从防御式编程的角度讲, attr_accessible 更安全
end
04
Mar 12
Windows 8 终将是个过渡系统
前几天微软放出Windows 8 消费者预览版。顿时间,微博上充满了各种有关Win8的讨论。虽然我一直都用Mac,但是我还是不能免俗的加入了Win8的试用阵营。现在网上讨论Win8的文章多了去了,不过大多都是从用户体验方面下手。我接下从另外一个角度谈,我认为 Win8 将是一个过度系统。
硬件需求过高 如果要真正的体验Metro的操作性,显然还得有一个触摸(这个重担只能落在Win8平板上面了),否则win8和Win7几乎无异,唯一的区别就是硬件要求更高,速度变慢而已。看如今平板是ipad天下,Android奋力追赶依旧被远远甩在后头,Android在手机横行的时候却无法占领平板市场,而wp7还没热,win8平板短时间也难成气候。
操作革新,老用户很难适应 Metro界面的引进的确让我们觉得Win8用户体验比以之前任何版本好上很多,但是在中国就不得不考虑庞大的小白用户群体,太多人觉得的Win7都不能适应,而且近30% IE6用户中我们不难得出,至少还有1/3的用户依然跑着10年前的Windows XP。而如今Metro界面和传统界面交错的Win8难道能让小白们买单(这里我说的买单指得是硬件升级,因为国内几乎没有人买正版。)?我看未必。
兼容性 微软虽然尽最大努力确保Win8能尽可能的向下兼容,但是重目前的情况看来结果并不乐观,加上很多企业依然跑着N久前开发的系统以及昂贵的升级费用,企业用户升级更是难上加难。此外Desktop应用不能兼容Metro UI,这样势必带来开发成本,可以断言,很长一段时间里面,Metro仅仅是一个摆设。
总结:与其说Windows 8是革命性产品不如说其是过度产品,Desktop 和 Metro、传统计算机和平板的分水岭,从目前4.5亿Win7的销售量来说,Win8要想超过Win7几乎是不可能,但是否会像vista那样悲剧,这还得市场说了算。
附: Windows 8 预览版下载地址: 点击下载
02
Mar 12
Android摘记——在Java中设置width和height
Android 开发的确是个令人头疼的东西,代码不统一,API几乎几天一个变化,今天我就遇到一个问题,在Java代码中修改空间的width和height。
众所周知,在resource的xml中我们通常这样写:
<relativelayout android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</relativelayout>
而在Java中的代码应该是这样:
public class Demo extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, // 对应 xml中的 fill_content,数字则代表实际高度
ViewGroup.LayoutParams.WRAP_CONTENT // 对应 xml中的 wrap_content
);
layout.setLayoutParams(params);
RelativeLayout layout = ((RelativeLayout) findViewById(R.id.relativelayout));
}
}
29
Feb 12
全平台编辑器推荐:Sublime Text 2
用 Sublime Text 2 快半年了,我也一点一点的见证Sublime Text 2的变化,我觉得,是时候推荐给大家了。如果你用Mac,你一定听说过TextMate这等“神器”,但是作者似乎有些疲软,2.0始终是可望而不可及,现在,你可以不用等了,让我们一起来体验Sublime Text 2吧。
- Sublime Text 2 支持的环境:
Windows 32 bit/64 bit
OS X (OS X 10.6 or 10.7 is required)
Linux 32 bit/64 bit
- Sublime Text 2 特点:
UI:也许这并不能打动你,但在我看来,赏心悦目的UI是必须的。
主题:我对编辑器的配色还是很在意的,但在这点上,默认的配色就很让我满意。
支持TextMate Bundle:如果你习惯了TextMate Bundle 中的Snippet,在Sublime Text 2 也可以很好的支持。
无干扰模式:当你按下快捷键 Control + Command + F 就能隐藏所有无关的工具条,同事支持OS X Lion原生的全屏模式。
快捷的命令面板:通过快捷键 Command + T 就能快速的跳转到指定文件,而且支持及时文件预览。
插件拓展:如果有些功能不能满足你,你可以去网上找找有没有相关的插件,或者自己写一个。支持插件大大增加了Sublime的拓展性。
高速:sublime Text 2 性能控制很好,使用起来很平滑,这也算一个特点吧。
- Sublime Text 2 缺点和不足:
VIM模式:虽然Sublime Text 2 有VIM模式,但是实际使用起来和VIM相差还是有点大的,如果长期用VIM开发的同学可能很难适应。
价格:Sublime Text 2 售价 $59.00 对于学生用户来说的确不便宜,这姑且算一个缺点吧。
- 相关截图


28
Feb 12
Debian/Ubuntu轻松搭建VPN
今天在v2ex上看到有同学问到Linode上无法搭建VPN,正好我刚刚把服务器迁移到Linode,也顺利搭好了VPN,顺便简单的写一个教程,供今后的同学参考,此外看着流量有很多剩余,我也做点公益事业,在不影响博客正常运转的前提下免费发放VPN,需要的同学请点击《赠送你一个全新的世界》,好,废话不多说,下面简单介绍在Debain/Ubuntu下搭建VPN。
1、用root账户登陆服务器
2、安装PPTPD
apt-get install pptpd
3、编辑pptpd.conf文件
vi /etc/pptpd.conf
取消注释下面内容
option /etc/ppp/pptpd-options localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245
这几句的意思是:当外部计算机通过pptp联接到vpn后所能拿到的ip地址范围和服务器的ip地址设置。
4、添加用于登陆的账户
vi /etc/ppp/chap-secrets
格式如下:
用户名 pptpd "密码" *
密码需要用英文双引号
星号(*)代表允许接入的ip可以是任意ip。
这样,vpn就搭建好了,不过大多数人包括我在内,用国外服务器搭VPN都是为了偶尔能跳出局域网,所以我们还需要配置转发。
5、设置DNS解析,编辑pptpd-options文件
vi /etc/ppp/pptpd-options
找到ms-dns,取消掉注释,并修改DNS地址,这里我推荐大家用Google DNS 8.8.8.8 和 8.8.4.4
6、开启转发
vi /etc/sysctl.conf
取消注释以下内容
net.ipv4.ip_forward=1
这句话意思是:打开内核IP转发
7、安装iptables并设置
apt-get install iptables iptables -t nat -I POSTROUTING -j MASQUERADE
后面这句话作用是:立刻让LINUX支持NAT(platinum)
8、重新启动服务
/etc/init.d/pptpd restart
9、大功告成,你可以使用你的VPN在无疆的互联网中翱翔啦~
25
Feb 12
赠送你一个全新的世界
当你有了VPN 后,你就拥有了一个全新的世界。 ——Yes2.Me
刚刚搬迁了服务器,估算了一下有多余流量,本着能为中国互联网尽一点微薄之力,特开几个VPN账号免费发放。
支持我,请告诉你身边的朋友^_^
需要的同学微博: @钟超Yes2Me 私信我
24
Feb 12
服务器迁移到Linode
这是一篇测试博客,仅仅为了检测博客是否正常运行。
由于使用nginx,所以顺便记录下nginx rewrite 配置文件
if ($http_user_agent !~ FeedBurner) {
rewrite ^/feed$ http://feeds2.feedburner.com/yes2me redirect;
rewrite ^/feed/$ http://feeds2.feedburner.com/yes2me redirect;
}
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
21
Feb 12
iOS 创新交互应用——Clear之殇
这几天,试用了一款网上讨论很热门的效率应用clear,短短几天,这款应用就窜到美国区收费应用的Top1,中国区收费Top5。如此好的成绩不禁要问,Clear是一款怎样的应用?下面我们就一起慢慢体验吧。废话之前我们先来看看Clear的官方视频。
1、所谓创新
Clear在创新的宣传上可谓下足了功夫,在正式发布以前,各种报道已经见于媒体,大家都好奇这个号称颠覆传统交互体验的应用。包括我在内,在刚刚发布的时候我也第一时间购买了这个应用。从上面的视频也可以看出,Clear在操作方式上的确很酷,没有按钮,取而代之的是各种手势,加上动画的修饰,Clear简直是文艺青年咖啡厅装B必备应用^_^
2、实际使用
过了刚开始的新鲜期,我渐渐开始思考这款应用的实用性。首先,提供的功能非常简单,创建删除List,添加删除事件。没有时间设置,没有提醒,没有多设备同步。一定会有不知好歹的家伙跳出来说,这是简约,少就是多!我pei!
3、交互究竟怎样
对于这个问题,我只能说,仅仅是cool,全手势操作,操作逻辑上不清晰,不同页面的区分度也很小,我连续使用几天依旧很难掌握,甚至十分混乱,用户体验就可想而知了。举个例子,添加新条目和返回上级菜单采用相同的手势,就是下滑,唯一区别就是滑动的距离不一样。单单这个简单的操作就让我意识混乱了好久!!
4、Clear算成功iOS应用么
如果是独立开发者,我觉得Clear的传播是成功的,如果光看appstore排名也是相当不错,但作为应用本身我觉得Clear并不合格,至少目前是这样的。


