六月 20, 2011

关于字符编码,你所需要知道的

字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助。

还是得从ASCII码说起

说到字符编码,不得不说ASCII码的简史。计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更多的事,例如文本处理。但由于计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母‘A’,66代表字母‘B’,以此类推。但是计算机之间字符-数字的对应关系必须得一致,否则就会造成同一段数字在不同计算机上显示出来的字符不一样。因此美国国家标准协会ANSI制定了一个标准,规定了常用字符的集合以及每个字符对应的编号,这就是ASCII字符集(Character Set),也称ASCII码。

当时的计算机普遍使用8比特字节作为最小的存储和处理单元,加之当时用到的字符也很少,26个大小写英文字母还有数字再加上其他常用符号,也不到100个,因此使用7个比特位就可以高效的存储和处理ASCII码,剩下最高位1比特被用作一些通讯系统的奇偶校验。

注意,字节代表系统能够处理的最小单位,不一定是8比特。只是现代计算机的事实标准就是用8比特来代表一个字节。在很多技术规格文献中,为了避免产生歧义,更倾向于使用8位组(Octet)而不是字节(Byte)这个术语来强调8个比特的二进制流。下文中为了便于理解,我会延用大家熟悉的“字节”这个概念。

ASCII table

ASCII字符集由95个可打印字符(0×20-0x7E)和33个控制字符(0×00-0×19,0x7F)组成。可打印字符用于显示在输出设备上,例如荧屏或者打印纸上,控制字符用于向计算机发出一些特殊指令,例如0×07会让计算机发出哔的一声,0×00通常用于指示字符串的结束,0x0D和0x0A用于指示打印机的打印针头退到行首(回车)并移到下一行(换行)。

那时候的字符编解码系统非常简单,就是简单的查表过程。例如将字符序列编码为二进制流写入存储设备,只需要在ASCII字符集中依次找到字符对应的字节,然后直接将该字节写入存储设备即可。解码二进制流的过程也是类似。

Continue reading

六月 20, 2011

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

by Joel Spolsky

Wednesday, October 08, 2003

Ever wonder about that mysterious Content-Type tag? You know, the one you’re supposed to put in HTML and you never quite know what it should be?

Did you ever get an email from your friends in Bulgaria with the subject line “???? ?????? ??? ????”?

I’ve been dismayed to discover just how many software developers aren’t really completely up to speed on the mysterious world of character sets, encodings, Unicode, all that stuff. A couple of years ago, a beta tester for FogBUGZ was wondering whether it could handle incoming email in Japanese. Japanese? They have email in Japanese? I had no idea. When I looked closely at the commercial ActiveX control we were using to parse MIME email messages, we discovered it was doing exactly the wrong thing with character sets, so we actually had to write heroic code to undo the wrong conversion it had done and redo it correctly. When I looked into another commercial library, it, too, had a completely broken character code implementation. I corresponded with the developer of that package and he sort of thought they “couldn’t do anything about it.” Like many programmers, he just wished it would all blow over somehow.

But it won’t. When I discovered that the popular web development tool PHP has almost complete ignorance of character encoding issues, blithely using 8 bits for characters, making it darn near impossible to develop good international web applications, I thought, enough is enough.

So I have an announcement to make: if you are a programmer working in 2003 and you don’t know the basics of characters, character sets, encodings, and Unicode, and I catch you, I’m going to punish you by making you peel onions for 6 months in a submarine. I swear I will.

And one more thing:

Continue reading

六月 20, 2011

Best “must know” open sources to build the new Web

[Edited 07/06/2011]

文章来源:Best “must know” open sources to build the new Web

Here the dump of my ultimate collection of online Web development resources and directory, oriented for the Front-End user Interface (UI).

HTML5 and all related open standards are moving fast, but for now, building a whole Website/WebApp on top of that can be very inconsistent, especially across various browsers experiences.

So… how to embrace new awesome web technologies ?

Now, as Web Developers and Designers, we have to build on top of more stable framework. It’s here that come JavaScript jQuery, acting like interface into browser’s implementations. That how we can expect more stability and consistency.

There is not only JS, building a state-of-the-art webSite. That now like making a big movie, with hundred specialized tasks and jobs…

From A to Z, this is huge ! Even if i think we don’t need to be an expert for all… (Thus we try) ^^

Best things in life are free, time to learn !

LEARNING HTML 5, CODING AND DESIGN

  • HTML5 Rocks : Learn HTML5 by Major Feature Groups  (HTML5 Demos, tutos and playground). Sources by Google
  • Awesome HTML5 Dashboard by Mozilla
  • WhatWG Developers, A clear technical specification of HTML5 for Web developers
  • StackOverflow : Welcome to Q&A for professional and enthusiast programmers
  • Addyosmani, jQuery & JavaScript articles and tutorials for the community
  • Sohtanaka, jQuery & JavaScript articles and tutorials for the community
  • Nettuts+ is a site aimed at web developers and designers offering tutorials and articles on technologies, skills and techniques to improve how you design and build websites. We cover HTML, CSS, Javascript, CMS’s, PHP and Ruby on Rails.
  • Codrops, tutorials and web resources
  • WebAppers, best Open Source Resources for Web Developers
  • Tutorialzine – PHP MySQL jQuery CSS Tutorials, Resources and Freebies
  • Mozilla JavaScript guide for developers
  • WebDev and jQuery wiki codes snippets, compiled by myself ;)

Continue reading

五月 19, 2011

再次写给我们这些浮躁的程序员

2010年初写过一篇博客(我们是一群和平年代充满浮躁与抱怨的程序员),一年过去了,社会好像更浮躁,也有网友问我这方面的问题,于是有了下面这篇文章,再次写给我们这些刚入行浮躁的程序员,如何成长,以下是列出了一些成长的心得,我们不必每条都去实践,但是优秀的程序员成长过程中总会实践里面的几条。

多做项目,多思考

不要害怕做事,刚毕业的同学最缺的就是工作经验,乱七八糟的项目能让你很快就了解了一个公司的业务与使用的技术,并且可以多接触同事与客户。

当你毕业后刚进一家公司时,如果主管没有把你安排到项目组工作,那真的很杯具,因为他认为你还不能胜任工作或者你的加入会让项目组更糟。

还有人说,我刚进公司,公司就把我当成了苦工,工资又低,项目组加入好几个,也做了很多事情,每天都要加班。我估计有很多人感觉是这种状态,为什么会是这样,因为全国人民(不只是程序员)里有90%可 能都和你一样的感觉,这说明你现在状况是很普遍的,也说明你现在的能力并没有很多出众的地方。也许是逆境才能让人成长,如果有一天你让你的团队从这些苦力 工作中解脱出来或者能给你的团队前进的动力,那你就升华了,你就比他们出众。你没有能力去改变现状,所以只能接受,而不要认为是自己生不逢时,或者说公司 环境太差。创业也一样,不要认为公司没发展的主要原因是环境太差,那你不要去当老板算了,投资环境都非常好还能轮到你吗。

还 有很多同学感觉自己付出了很多,回报太少,这个问题很难平衡,首先一点,公司在聘你进来后不会因为你没有成绩就先给你回报,公司也不可能会在你有了成绩后 就立即给你回报,但是长时间付出没有回报,那这个公司就不值得你付出。我不赞成频繁换公司,这么做至少可以说明你是一个只求回报不求付出的人。

至于薪资的问题,这个很难去评估,因为每个企业的收益相差太远。但是刚毕业的同学工作需要关注薪资+成长环境,当薪资可以满足普通生活需求后,成长环境更为重要,就好比,给你一月5000元,或者6000元,真的不那么重要,因为这些收入在你以后的人生中基本没有影响。当然,如果你现在在大城市几年里每个月只拿着1000元,那还是需要选择一下收入更好的公司,因为这么低的收入会严重影响你的工作学习计划,也说明你的公司不重视员工,没有能力给员工好生活的公司,将来的发展也是有限的。

特 别说明一点,互联网公司与传统信息化企业不一样,互联网一直是风险比较高的行业,也许你选择了一个看好的企业,也佩服老板的眼光,可能你现在需要的是与公 司同甘共苦。不要指望在刚创业的团队里拿到非常好的待遇,因为你现在就是在投资,也许几年后公司成功了,你就是功臣,不怎么出色的你也可以当上总监或副总 裁。 Continue reading

三月 6, 2011

10 Open Source Flash Framework for Flash Developers

Using framework in a project is really a challenging task. Now a days there are numbers of open source framework available across the web and developers are using frameworks without any fear.

If you are a flash developer and looking a open source framework to use in your next project then this post going to help you. In this post I am sharing some very advance open source Flash framework. This list includes GAIA, Soma, CASA Lib, ASAP, Gugga etc.

Continue reading

二月 15, 2011

Facebook 如何发布代码 (How Facebook Ships Code 译文)

我对 Facebook 的运作方式着迷。这是个非常独特的环境,很难被复制(这个方式并不适合所有的公司,即使有些公司尝试过这么做)。下面这些笔记来自我和Facebook的许多朋友的交谈,关于他们开发、运维与软件发布等方面。

好像很多人都对 Facebook 感兴趣… 这家公司的工程师驱动文化(Developer-driven culture)已经被公众大加研究,并且其它其它公司也在探求是否/如何实现工程师驱动文化。Facebook 的内部流程实在够神秘,当然,工程师团队也会发布一些关于新功能以及部分内部系统公开备忘,不过这些大多数是”说明”类的文章(What),而非讲述”机制”(How)… 所以,外部人员很难明白 Facebook 的创新以及如何比其它公司做到更有效的对服务进行优化。我作为外部人员尝试深入理解 Facebook 的运作,汇集了几个月来的这些观察信息。出于对信息来源的隐私保护,我去掉了特定功能/产品的名字。我又等了6个月以后才发布这些记录,所以,有些信息肯定过时了。我希望发布这些信息会有助于了解 Facebook 的管理机制如何在组织中进行决策的推行而非逐步陷入混轮…很难说这与 Facebook 的成败或是 Facebook 的产品协作相关。我相信很多面向消费者的互联网公司会从 Facebook 这个案例受益。

Continue reading

二月 15, 2011

数学不好就不要玩三国杀

三国杀牌种分类
三国杀一共有108张,其中30张杀(21张黑杀,9张红杀,70%黑)、15闪(全红)、8桃(全红)、6过河拆 桥、5顺手牵羊、4无中生有、3南蛮入侵、3决斗、3乐不思蜀、3无懈可击、2闪电、2五谷丰登、2借刀杀人、1万箭齐发、1桃园结义;装备共20件 (60%为黑色),其中+1/-1马各3匹,11把武器(诸葛连弩2把,其他各1)、3防具(2八卦阵、1仁王盾)

一些基本情况的概率判定

1.仁王盾和八卦盾,选哪个比较好?这个问题是因人因形式而异的。一般情况下,黑杀有70%,而八卦判 定概率为50%(红黑牌各54张),所以仁王盾的防御力比八卦盾高一点,但有几种情况下要特殊对待的。

a) 如果你选择的 人物是郭嘉,那就选择八卦盾吧,凡是判定的牌都归你所有,也就是说当你有了八卦盾,别人打你只是给你送牌。这时候会有一种情况比较有意思,你的队友装备了 连弩,然后让他攻击你,当你判定失败并且扣血摸牌后,你可以将杀再给队友,呵呵,有点变态了……

b) 如果有司马懿在场,要考虑下他是否和你是队友,如果是的话,可以考虑用八卦,如果不是的话,八卦就变成垃圾了。

c) 如果 有关羽在场,并且不是队友的话,要注意了。关羽有54张红色的牌作为杀,还有21张黑色的杀,对于这号人物,他有72%的红杀,你的仁王盾还是考虑换成八 卦吧。

d) 如果有赵云在场,并且不是队友的话,也要注意了。赵云有45张杀(24张红杀,其中15张红闪),红色杀的概 率为53.3%,仁王盾就不太好用了。

e) 最后要注意一点,就是仁王盾是没有几率的,当关羽赵云杀你的时候,基本上都会出红杀,所以从实践角度来说,碰到这两个人,仁王盾就是一个摆设。

Continue reading

十月 30, 2010

成为一名优秀程序员所需要知道的那些事

导读:编程虽是复杂活,但成就优秀程序员的很多因素和我们在学校中最早学到的相差无几。

1. 懂得分享。尽可能使用开源,并且当你有能力的时候,要对其有所贡献。聚全社会之智慧,胜过某些“大”公司之短视。

2. 公平竞争。尝试其他技术、框架、方法和观点。不要总以为只有你的选择才是可行的。别的选择也有可能比你的要强得多。要以开放的心态,来检验其他人的选择。

3. 不要攻击他人。像第2条所说的,不要仅仅因为别人恰巧使用.Net、Java或PHP就去攻击他们(我在这方面有一次教训)。有时,它们或许要比你所认为的更有效。只要别人不是一无是处,你就可以从他们那里学到很多东西。

4. 自我完善。尽量发布可以运行的代码。不要指望QA能给你找出所有的程序错误。要经常并且全面深入地测试你的代码。

5. 不要拿不属于自己的东西。使用软件要遵守许可,不要偷了之后又装无辜。
Continue reading

十月 30, 2010

每位开发人员都应铭记的10句编程谚语

所谓谚语,就是用言简意赅、通俗易懂的方式传达人生箴言和普遍真理的话,它们能很好地帮助你处理生活和工作上的事情。也正因如此,我才整理了10句编程谚语,每位开发人员都应该铭记他们,武装自己。

1. 无风不起浪

无风不起浪    伯乐在线-职场博客
别紧张,这也许只是一场消防演习

代码设计是否糟糕,从某些地方就可以看出来。比如:

  • a. 超大类或超大函数
  • b. 大片被注释的代码
  • c. 逻辑重复
  • d. If/else嵌套过深

程序员们通常称它们作代码异味(Code Smell),但是就我个人认为“代码警报”这个名字更为合适一些,因为它有更高的紧迫感的含义。根本问题处理不当,终将引火烧身。

译注:Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。

2. 预防为主,治疗为辅

预防为主,治疗为辅       伯乐在线-职场博客
好吧,我相信了!

20世纪80年代,丰田公司的流水作业线因为它在缺陷预防方法上的革新变得出了名的高效。每个发现自己的部门有问题的成员都有权暂停生产。这个方法意在宁可发现问题后马上暂定生产、解决问题,也不能由其继续生产而导致更棘手且更高代价的修复/更换/召回后的问题。

程序员总会做出生产率就等同于快速编码的错误臆断。许多程序员都会不假思索地直接着手代码设计。可惜,这种Leeroy Jenkins式鲁莽的做法多会导致软件的开发过程变得很邋遢,拙劣的代码需要不断的监测和修改——也可能会被彻底地替换。最终,生产率所涉及到的因素就 不仅仅是写代码所消耗的时间了,还要有调试的时间。稍不留神就会“捡了芝麻丢了西瓜”。(因小失大。)

译注:Leeroy Jenkins 行为:WOW游戏中一位玩家不顾大家独身一人迎敌,导致灭团。

Continue reading