RSS

Archive | Programming RSS feed for this section

WordPress the_excerpt Plugin

21. October 2008

0 Comments

Recently, I was looking for a solution for extracting post text by defining the length of the string. WordPress offers two useful functions: the_content(): returns the full content of a post the_excerpt(): returns a fixed extracted text from a post, but no parameter option is provided. The idea is to write a better function that has a few [...]

Continue reading...

VirtualHost browser cache

10. August 2008

0 Comments

Setting up a virtual host on PC, Mac or Linux isn’t difficult, but the browser cache problem drives me crazy. Apart from editing the /etc/hosts mappings and httpd.conf, you need to restart both Apache and browser. Refreshing the browser(Firefox) doesn’t clean the cache, so the result will be always add /xampp/index.php at the end of [...]

Continue reading...

Leopard system environment PATH setting

9. August 2008

0 Comments

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: Reads the local user [...]

Continue reading...

Code Collector Pro帮助整理代码

6. August 2008

3 Comments

代码整理问题一直是我的难题,不想用大的IDE整理自己的代码,特别是一些很小的部分。今天看到Code Collector Pro这个在MacOSX上面简单的程序能够帮助整理日常用的代码碎片。 确实,如果你是一个经常写代码的工作人员或者学生,总是有一些有用的代码需要记住又一时不能记下来,一般的办法,就是创建一个空的文本档暂时粘贴到里面;再有就好好整理到一个自己的记事本上;或者再源文件里加上注释;要么在什么网站上找到的就当作书签。时间长了,代码就都很凌乱,这样总不是个办法。 CCP支持很多整理功能: 将代码分组 语言种类的标实 搜索 Drag & Drop代码的片断 增加标签 输入,导出文本 到CodeCollector.net上下载或者上传代码的碎片 设置这片代码的版权 自动更新版本,等等 CCP有两个版本,一个免费的Lite版本,支持少部分的功能,但是足够可以完成整理的工作;收费版本支持更多的功能,价钱也很合理,大约20欧元。 如果大家知道Windows和Linux下面有什么整理代码的好工具,可以留言和我分享一下。

Continue reading...

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

12. July 2008

1 Comment

一直在忙着工作的事情,清闲下来准备一下毕业项目的资料。特别是代码版本管理的软件,有考虑到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开发介绍会(一个小时的录像)。

Continue reading...

CSS优化:减少HTTP Requests

28. June 2008

0 Comments

大多数的前端用户都会遇到一个问题,那就是下载速度。对于网络优越的用户,不是问题,但是考虑到移动用户或者是网络条件较差的使用者,最终要的是速度。现在的网站有很多的内容,比如Flash, 图像,声音,JavaScript等等都会减慢页面下载速度。 最基本的优化方法是减少客户端对HTTP Requests。有很多方法可以实现: 使用单个文件。就是说尽量把多个文件的CSS,或者JavaScript放到一个文件里面。虽然有时后我们需要不同的样式在不同的界面,但是在开发过程中能尽量考虑到这个问题,会给减少页面反馈等待时间。 显示图片的局部。如果一个按钮在hover和link的状态用不同的图,大多的方法是利用2个图片来实现鼠标的反馈。其实利用 background-image 和 background-position CSS属性可以实现用显示图片的局部。这样其实页面只做了一次对服务器的Request. 图片定义放在CSS中。如果显示图片的时候把图片插入到页面,这样会使得文本档尺寸增大,增加下载时间。我们可以把图片定义尽量放在缓存的CSS中,这样第一可以减少页面大小,也减少了http requests. 减少Http request是一个最好的性能优化起点。经过一些调查,百分之40-60的用户基本上是带着干净的缓存访问网站的,给他们的第一感觉一定是要页面装载迅速。

Continue reading...

It’s all about OPEN these days

22. June 2008

1 Comment

最近两年,我一直在关注一些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(最强大的社区字典),  等等。(太多了,如果大家熟悉还有例子,可以留言)。 也许,再过不久封闭模式的开发会跟不上社区模式的进度。也许,社区模式的开发能做出更加有创意的产品。

Continue reading...

采访280 Slides的开发人员

8. June 2008

0 Comments

最近看到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)

Continue reading...

Gets File Extension

1. June 2008

0 Comments

Here we can compare the syntax of these languages, how do they get file extension. 我们可以比较一下php, perl, ruby, bash, python的语法,同样的功能是如何实现的。 in PHP: $ext = pathinfo($file_name, PATHINFO_EXTENSION); in Perl: my $ext = ($file_name =~ m/[^.]+$/)[0]; in Ruby: ext = File.extname(file_name) in Bash: ext=${file_name#*.} name=${file_name%.*} in Python: import os ext = os.path.splitext(file_name)[1]

Continue reading...

Syntax highlighter Test

30. May 2008

0 Comments

写了一些代码测试一下。 1 2 3 4 5 6 7 8 9 10 public function executeShow() { $this->post = PostPeer::retrieveByPk($this->getRequestParameter('id')); $this->forward404Unless($this->post);   $c = new Criteria(); $c->add(CommentPeer::POST_ID, $this->getRequestParameter('id')); $c->addAscendingOrderByColumn(CommentPeer::CREATED_AT); $this->comments = CommentPeer::doSelect($c); } def my_ruby_snippet blog_post.should(be_highlighted) end

Continue reading...