Leopard system environment PATH setting

Posted by jay
on August 09, 2008

Leopard PATH setting is quite different from Tiger. Configuring PATH on Tiger, we used to either modify the /etc/path or user path configuration. With Leopard, system-wide path configuration is managed by /etc/profile. The file loads a path_helper script. So what the script does?

The path_helper constructs the system environment PATH in this order:

  1. Reads the local user configuration first, under ~/.bash_login
  2. Appends default system paths /usr/bin:/bin:/usr/sbin:/sbin
  3. Reads the paths line by line in /etc/paths
  4. Retrieves all the files in /etc/paths.d/ that contains other packages configurations. For example, I created a file /etc/paths.d/system and stuff in some user paths settings. They are appended after step 3.

In my case, I wanted my XAMPP packages overrides the default Leopard MySQL, PHP and Apache paths ( so I don’t have to type in /Application/xampp/xamppfile/bin to use the command every time, also the package is easier to manage ). So just put the paths in the ~/.bash_login, that will override the system default.

Close the Terminal and open it again, to check your path settings, type:

 echo $PATH

There we go, it’s updated.


Git:更好的SCM版本管理系统

Posted by jay
on July 12, 2008

一直在忙着工作的事情,清闲下来准备一下毕业项目的资料。特别是代码版本管理的软件,有考虑到CVS, SVN等等,这些大多数是中心服务器结构的管理,最近看到Google工程师开发的Git, 让我感到一阵兴奋。

Linus Torvalds 开发了Git,一开始主要因为CVS和SVN不能满足开源的需求,需要一种新的方式管理Linux Kernel。Git是一个distributed SCM(Source Code Management). 他的最大优势在于开发人员可以随意的创建自己的Brunch,简便多版本的整合(merge)问题,并且优化下载速度。

如果有人用过CVS, SVN在一个开发小组,都会发现这样的问题:大家都不能Commit,直到觉得代码被第二个开发人员review过,或者通过测试才可以,这样才能保持Source trunk的整洁。这样是件很麻烦的事情,如果在SVN, CVS上创建branch, 做自己的一些新功能的试验,也会造成麻烦,你会想到底用什么tag? 大的公司里面会有一堆的规则创建branch(加B下划线版本号码等等),然后整合到trunk上又给自己代来一堆麻烦,所以如果用过centerailized SCM开发人员大都会在trunk上开发。

如果你是一个充分利用Brunch的开发人员,那Git可以是一个不错的选择。给个Git官方网站,还有YouTube 2005年的Git开发介绍会(一个小时的录像)。


CSS优化:减少HTTP Requests

Posted by jay
on June 28, 2008

大多数的前端用户都会遇到一个问题,那就是下载速度。对于网络优越的用户,不是问题,但是考虑到移动用户或者是网络条件较差的使用者,最终要的是速度。现在的网站有很多的内容,比如Flash, 图像,声音,JavaScript等等都会减慢页面下载速度。

最基本的优化方法是减少客户端对HTTP Requests。有很多方法可以实现:

使用单个文件。就是说尽量把多个文件的CSS,或者JavaScript放到一个文件里面。虽然有时后我们需要不同的样式在不同的界面,但是在开发过程中能尽量考虑到这个问题,会给减少页面反馈等待时间。

显示图片的局部。如果一个按钮在hover和link的状态用不同的图,大多的方法是利用2个图片来实现鼠标的反馈。其实利用 background-image 和 background-position CSS属性可以实现用显示图片的局部。这样其实页面只做了一次对服务器的Request.

图片定义放在CSS中。如果显示图片的时候把图片插入到页面,这样会使得文本档尺寸增大,增加下载时间。我们可以把图片定义尽量放在缓存的CSS中,这样第一可以减少页面大小,也减少了http requests.

减少Http request是一个最好的性能优化起点。经过一些调查,百分之40-60的用户基本上是带着干净的缓存访问网站的,给他们的第一感觉一定是要页面装载迅速。


It’s all about OPEN these days

Posted by jay
on June 22, 2008

最近两年,我一直在关注一些Open Source(开源)相关的信息。例如, 有关开源的项目, 开源的理念和经营模式。很多大型的公司选择项目工具的时候都会避免一些开源的项目,特别是一些桌面程应用序都会最后选择Micr*soft的解决方案。为什么他们不选择开源的语言或者Framework进行项目开发呢?可能有以下几个原因:

  • 开发效率。大多开源的项目开发效率相比商业化的软件还是慢很多。对于用户来说,他们所看到的只有最后的结果,比如说他们需要一个创建历史纪录的功能,只要你们写的软件能做到这个功能,用户根本不会在乎开发人员是如何实现的。人力资源是很昂贵的,所以企业更愿意花大比的钱买license,节省开发时间。另一个问题是IDE, 大部份开源的程序缺少效率高的IDE, 企业级别的IDE支持。
  • 技术支持。商业的产品大多有比较好的技术支持,如果他们提供的产品有一个严重的bug要修理,购买的license会带有高级用户的支持联系方式,一般第三方公司会在很快的时间内给你解决办法(这样项目就会承担很小的Risk)。特别是做一个大项目,用很多第三方的软件节省开发周期,那他们之间会有很多不兼容的问题,这个时候更需要技术支持。相反,开源的更需要community的支持,要看这个社区的规模,要看项目的Status(active?)。如果开源项目完全停止,那企业无法很快找到解决办法,或者根本没有办法追究责任。
  • 开发人员缺乏。懂得开源程工具和framework的人比较占少数,在欧洲,高等教育选择教开源工具比较多,但是真正的工作的时候大多公司还是选择商业的解决方案。所以毕业的学生到了这些公司,开发商业化的库,end up with these skill sets. 即使有开发人员,可能真正成为expert的人也是个别的。
  • 安全问题。开源的代码公开,所有的安全问题是公开的。企业当然需要隐私并且牢牢把握主安全这个窗口。

那这样,open source还有存在的意义么?或者创造开源就是那些passionate的人们的产物?如果这样想,我觉得完全是错的。相反,开源其实是非常重要的。大部分的商业产品是从开源发展出来,拿了开源的主意。拿一些最近的例子,iPhone的interaction设计是从一个大学Touch Technology衍生而来的,他们有相同的操作方法(多触点操作),有相同的, 相同的产物还有MS的Surface产品; 苹果的Mac操作系统是从开源的Linux衍生而来的; 我们现在用的Internet Address System(internet protocols-HTTP, FTP等等) 都是开源的; 挑战IE的Firefox也是开源的产物。

Open给我们带来了什么?

  • Freedom。虽然没有商业支持,但是开发起来更加的自由。其实商业软件有他们的局限性。如果想做出一些新颖的东西其实是比较困难的,商业化的程序都有自己的模式,如果违反他们设计的模式开发,只会给项目带来很多麻烦。
  • Standard。每商业产品都会为了版权设计自己的规范。其实这样给用户和开发人员带来很多麻烦,对技术或者任何产品的发展都是不力的。最典型的就是MS最早发布自己的HTML规范,直到现在他对公认的W3C规范负面影响很大。
  • Interaction。交流是非常重要的,人们可以任意发表自己的建议,所以最后的解决方案都是用户最想要的结果,或者说是Best solution。在社区会有不同技术类型的开发人员,他们提出的建议可以让人们考虑每一个问题角度。然而商业化的,永远都是局限在一些开发人员的解决方案,他们的经验和知识都是很有局限性的。

说到这里就想起Steve Jobs在第一次被Apple开除之前的一个采访,印象很深,他说:”The only thing about ********* is, they just have no taste.” 我感觉到他说的那家公司也正在市场转型。现在的趋势,对于用户来说,单有技术是不够的,他们需要的不是技术,而是技术在现实生活种的应用。什么是应用? 应用就是User friendly。所以现在真正缺乏的是前端的工程师,他们懂得用户真正的需求。如果用商业软件,是很少有机会做出一些另人惊人的产品的。说说为什么?那我们看看一些有名的网络产品,Google(大多的内部系统都是开源的), Facebook(开源程序语言开发,并且把platform设为开源), Twitter(开源RoR的产物), Yahoo!(运用很多的开源项目开发出来的). Linux(最稳定,最受欢迎的host平台之一), Wiki(最强大的社区字典), 等等。(太多了,如果大家熟悉还有例子,可以留言)。

也许,再过不久封闭模式的开发会跟不上社区模式的进度。也许,社区模式的开发能做出更加有创意的产品。


采访280 Slides的开发人员

Posted by jay
on June 08, 2008

最近看到280 Slides的release, 第一感觉让人觉得惊讶。界面很像Mac的设计,有很多人叫它”Keynote on the web”. Boucher, Tom Robinson和Francisco Tolmasky在采访中还介绍了一些设计思路和未来的计划。相比Google Doc看重在互动和共享, 280 Slides更注重用户的体验。

访谈里面谈到Objective-J,Obj-J运用JavaScript并把它变成面向对象的语言(就好像把C转成Obj-C). 和Obj-C相近, 写代码的时候会看到很多方括号([]). 浏览器读到.j文件的时候会处理这些文件,这样就以为着开发人员可以做任何的标准的JavaScript的效果。提到Obj-J是不是很难学的问题,如果做过是一个JavaScript或者Obj-C的开发人员很快就能学会使用新的语言,但是了解frameworks需要一些时间。

Obj-J的framework被命名为Cappuccino. 开发者用Cappuccino的时候不用担心DOM的object, 不用担心CSS, HTML只要主意界面的开发。同时给开发人员一种开发平台的感受,而不是只是写一些代码。说道这个framework的起源是从3人大学开始的,之后为了开发一个网络程序,需要一个强大的javascript支持,所以设计了自己的framework。

更另人惊讶的是,Objective J将会是开源的,所有的代码都将可以在objective-j.org下载的到(现在可能还不存在)。这样还有很多经常遇见的问题,比如open source license, source control system, 还有documentation等等。(not an easy job :P )


Type-Safe Objects in PHP

Posted by jay
on May 23, 2008


Xcode使用感受

Posted by jay
on May 05, 2008

昨天半夜买了Apple ADC member subscription,最便宜的$99的。 虽然可以用jailbreak的iPhone和pwe,让写的程序在iPhone上运行,发布的时候,编译好的程序是带有xcode developer id的。主要因为当iphone 2.0发布的时候,iTune shop可以发布自己写的程序的,Steve Jobs说为了防止程序人员发布代有恶意代码的程序,所有的发布软件都有开发人员的信息。

我用的是Xcode 3.1, 带有iPhone SDK的。网上很少能找到3.1的教学,从3.1开发工具有一些改变。Xcode, UIBuilder结合是一种很神奇的开发感受。在过去的一年里面我一直都在用Visual Studio 2003开发.net 2.0/3.x的程序,相比下来,Xcode上手不容易,但是generated code给开发人员的感觉是很干净的, 有UI设计的文件.xib(Xcode 3.0之前是.nib文件),OO架构的 interface (.h)和implementation(.m)。看过Visual Studio的designer.cs文件,如果这个文件出错,想找出问题来可不容易,而且即使没有对UI的文件有改变,VS还是会把代码位置移动一下,当你commit文件到CVS/SVN服务器上的时候一定要小心。

学OO-C不难,用习惯了VS2003,Eclipse和NetBeans要是IDE没有code completion写起程序来就会很麻烦,特别是 对初学者,有一个列表的instanse methods是很有帮助的开始。记得我在开始学PHP + symfony的时候,为了找一个理想的IDE花了很长时间,测试了6种支持多操作系统的IDE, 最后还是选了Zend Studio Eclipse。好在Xcode有不错的code completion功能,需要一些小小的customization, 比如说我设定F5为显示completion list。在UI的部分给我的感觉是MVC,一致都在把UI和Controller用鼠标拖移的方式连接,然后model和business logic那部分当然要自己写。


NetBeans 6.1发布

Posted by jay
on April 29, 2008

虽然刚刚发布的NetBeans 6.1被发现了很多的Bugs, 值得称赞的不仅仅是性能上的优化,还有很多新的功能。

值得提到的是:

  • 支持 Spring Framework
  • 支持 JavaScript
  • 最新的MySQL Explore. 好像MS SQL management studio一样,注册数据库,创建table, 等等基本的数据库造作。
  • Javadoc Code Completion. 编辑文档更加简单了。
  • 窗口支持透明化。 当然需要graphic card支持的。

官方有详细的Release note, 这里就不想细说了。 这里下载NetBeans 6.1.

个人觉得JavaScript Debugger和Code completion 是比较有用的工具。