Saturday, May 22, 2010

Money

Money is like gasoline during a road trip. You don’t want to run out of gas on your trip, but you’re not doing a tour of gas stations. You have to pay attention to money, but it shouldn’t be about the money. – Tim O’Reilly

Sunday, May 16, 2010

Dropbox was blocked in China

Ah…yes…

Finally, it had happened before a few days ago. As you know, every popular services will be blocked in this country. Though I knew that it’s only the problem of time. Therefore, I don’t want to talk anything about this country. It’s not that i don’t want to, but i can’t.

Fortunately, I’ve just bought a foreign VPS. So, I have set a proxy such as VPN up for myself. I don’t care anymore about if the site was blocked. It saved a lot of time for me.

I’m feeling so good!

Wednesday, May 12, 2010

A sleepless night

Over and over again, I have just got up several times but still cannot fall asleep…

What happened to me? Maybe I need to do some work until I can’t do anything exhaustedly?!

Time passed so fast!!!

Friday, March 26, 2010

35 Useful Applications of Android for Chinese Geeks

HTC G1 作为我的第一款智能手机,已经使用了半年了,在这半年的时间,Android 突飞猛进,从 Hero, Droid, N1 到 HTC G4, 从 Android 1.6 到 2.1,使我对 Android 平台有了更多的期待,我坚信 Android 超过 iPhone 只是时间上的问题,在我看来,这就如同开放与封闭之间的斗争一样,最后占有优势的必然是开放的一方。

以下软件是我经过多款同类软件的使用后,根据个人偏好所精选的一批软件,希望能与更多的朋友进行分享,如果你有更好的建议及意见,欢迎回复,或给我邮件。

  1. Aldiko
    一款不错的阅读软件,有大量免费的电子书可直接下载,用户体验不错。
  2. aLogcat
    不需要 DDMS Logcat,在手机上也可直接查看日志信息,软件简洁,但是功能实用,可以根据 Log 级别方便过滤日志信息,随时查看调试日志。
  3. AndChat
    Android 上的 IRC 客户端,放了很久,但没用过。
  4. AndFTP
    FTP 客户端,对中文支持不太好,有时候会乱码。
  5. AnFetion
    中国移动飞信客户端(非官方),功能没有官方全面,但是够用,且支持 WIFI。
  6. aQQ
    目前最好的 Android 平台原生 QQ。(非官方)
  7. Astrid
    GTD 党必备 TODO 软件,支持 RememberTheMilk 双向同步。
  8. ASTRO
    一款强大的文件管理器,还有其它一些功能。
  9. aTrackDog
    为已安装的应用建立追踪数据库,可检查哪些应用已有更新可用。
  10. Autostarts
    系统优化必备软件,可定制开机启动项和基于事件的启动项。
  11. Bluetooth File Transfer
    解决 Android 蓝牙互传文件的问题。
  12. ConnectBot
    非常实用的 SSH 客户端。
  13. Contact2Sim
    可将联系人导入至 SIM 卡。
  14. Discover Pro
    基于 Flex ,开启一个 Web 服务,可以直接通过浏览器访问,访问文件系统,下载/上传等操作。
  15. Documents To Go
    支持 Word, PDF 等格式文件。
  16. EasyMoney
    十分实用,强大的理财软件。可惜有试用期限,需要购买 License。
  17. FlashLight
    非常简单的手电筒软件,拖动即可调整亮度。
  18. fring
    非常强大的一款 VOIP 软件,支持多种协议,MSN,GTalk,Skype 等。
  19. Advanced Task Manager
    非常实用的任务管理器。
  20. HiDict
    一款不错的英/汉翻译软件。
  21. iReader
    目前 Android 平台最好的 CHM 阅读软件。
  22. NewsRob
    可与 Google Reader 同步的 RSS Reader。
  23. Paperdroid
    可与 Read It Later 同步的 RSS Reader。
  24. Remote RDP
    RDP 远程桌面管理客户端,收费软件。
  25. Remote VNC
    VNC 远程桌面管理客户端,收费软件。
  26. RMaps
    除 Google Maps,还支持 Windows Live Map 等其它第三方地图。
  27. Share By QRCode
    生成 QR 识别码
  28. Shazam
    音乐搜寻软件,只需播放一段十秒的音乐,软件就会通过网络查找并给出相关歌曲信息,十分强大。
  29. SIM Checker Lite
    当 SIM 卡被更换,则会通过短信,邮件发送警告,利用 GPS 或网络定位告知所在地,防盗必备。
  30. Simple Last.fm Scrobbler
    last.fm scrobbler 客户端,支持系统内置的音乐播放器。
  31. SwiFTP
    FTP 服务端,使你的手机成为一台 FTP 服务器。
  32. Toggle Screen Timeout
    关闭屏幕延迟快捷开关。
  33. Transdroid
    免费,开源,更新快,P2P 爱好者必备软件,支持 BitTorrent 6+, Deluge 1.2+, DLink Router BT, Ktorrent, rTorrent, Torrentflux-b4rt, Transmission, uTorrent, Vuze 等多种 BT 客户端的远程管理。
  34. Twidroid / Twigee
    目前最受欢迎的 Twitter 客户端,有免费和付费版。
  35. Wake On Lan
    如果你的主板支持 WOL,那么便可以通过手机远程打开计算机。

以上软件(除部分收费软件),均可直接在市场中找到。

欢迎分享,转载,请注明出处,本文章可能会随时修改并标注最新发布日期。

Friday, February 12, 2010

“用得少”不代表“没有用”

  • cite 包含引用信息或者对其他来源的参考说明。
  • dfn 表示所包含的是术语的定义。
  • code 指明一段计算机程序代码。
  • samp 指明一段程序或脚本等的输出。
  • kdb 表示由用户输入的文本。
  • var 表示一个变量或者程序参数的实例。
  • abbr 表示一种简写形式(例如 WWW、HTTP、URI、Mass 等)。
  • acronym 表示只取首字母的缩写形式(例如 WAC、radar 等)。
  • address 表示地址信息
  • big 在一段文本中表示字号更大。
  • small 在一段文本中表示字号更小。
  • blockquote 表示引用一段文本,块级元素
  • hr 分隔符,块级元素
  • label 表单字段标签
  • sub 下标
  • sup 上标
  • ins 定义被插入的文本(默认不显示)
  • del 定义被删除的文本(文本带有删除线)

现在有了这么多的标签,你的 div 和 span 又减少了多少呢?

Recommended Redmine’s Plugins

BBT 项目开发规范参考

写于 2009 年 5 月,这里留个备份:

Last update: billy@090522-0207

前端

  • 网络层优化
    1. 减少 DNS 查找时间
    2. DNS 缓存和TTL
    3. 启用 Gzip 压缩传输 (大于 1KB 或 2KB)
    4. 代理缓存
    5. CDN
    6. 所有静态请求全部分发至 CDN 节点服务器
    • HTTP 优化
      1. 编码统一为 UTF-8 without BOM
      2. 减少 HTTP 请求次数
      3. 合理使用 304 状态码(避免下载已经存在于浏览器缓存中的数据)
      4. CSS Spirtes 将相关小图合并
      5. 外链资源合并 (JavaScript, CSS)
      6. 若链接为目录, 则应在某尾加上 "/" , 避免产生 301 重定向
      7. 添加 Expires 头
      8. Max-Age 和 mod_expires
      9. 配置 ETag
      10. 避免重复脚本(提高代码重用度)
      • XHTML
        1. 所有标签必须闭合
        2. 压缩空白并使用Gzip输出(发布时)
        • CSS 优化
          1. 将CSS放在顶部
          2. 禁止使用 @import
          3. 禁止使用 CSS 表达式
          4. 压缩并合并外链CSS(发布时)
          5. 选择器明确简短
          6. 属性简写 (如 background-color, background-image 等合并为 background)
          • JavaScript 优化
            1. 将脚本放在底部
            2. 使用 DEFER 属性(FF目前不支持)
            3. 压缩混淆并合并(发布时)
            4. 使 Ajax 可缓存
            5. 循环, 递归, 正则等算法优化
            • Flash, gif, jpeg
              1. Flash 以兼容性, 效率, 容量为顺序发布
              2. gif, jpeg 选择合适的颜色及压缩级别

              后端(待定)

              • 前端 PHP 应用服务器集群
                1. 使用 APC 缓存本地全局数据
                2. 使用 APC 编译为 OP Code
                3. 使用 hidef 提高 define 性能
                4. 使用 xdebug profiler 优化
                5. apache / lighttpd / nginx 性能优化
                • 后端 Java 逻辑应用服务集群
                  1. jboss 集群
                  2. 同时发布为 WebService 内部接口
                  3. 动态数据库连接池
                  4. 避免动态反射
                  5. JVM 优化
                  • memcache 集群
                    1. Session 共享
                    2. Consistent Hash (libketama)
                    3. Java 和 PHP 统一存储为 PHP Native Object / JSON
                    • MySQL 集群
                      1. 读写分离(在后端逻辑应用层实现)
                      2. 故障转移(failover)
                      3. 定时备份(cron)
                      • 静态文件集群
                        1. rsync 文件同步
                      • API 发布标准
                        1. 一个基类接口, 三个实现(XML, Soap, JSON)

                        其它

                        • 所有代码遵循开闭原则 (连接池除外)
                        • 遵循 DRY, KISS 原则

                        Sunday, January 24, 2010

                        Unlimited Categories Implementation by Recursively

                        1. MySQL Table Definition:
                          CREATE TABLE `categories` (
                          `id` int(10) unsigned NOT NULL auto_increment,
                          `name` varchar(50) NOT NULL,
                          `parent_id` int(10) unsigned zerofill NOT NULL,
                          `type` int(10) unsigned zerofill NOT NULL default '0',
                          PRIMARY KEY (`id`)
                          ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
                        2. Implementation for DataObject
                          public static function get_all($type = NULL, $parent_id = 0, $depth = 3, $count = 0){
                          if($count == $depth) return;
                          $condition = is_int($type) ? "AND type=$type" : '';

                          $categories = Database::instance()->query("SELECT * FROM categories WHERE parent_id = '$parent_id' $condition")->result_array(FALSE);

                          if(count($categories) == 0) return NULL;
                          foreach ($categories as &$category) {
                          $category['parent_id'] = intval($category['parent_id']);
                          $category['type'] = intval($category['type']);
                          $subcategories = self::get_all($type, $category['id'], $depth, $count+1);
                          if($subcategories) $category['subcategories'] = $subcategories;
                          }

                          return $categories;
                          }
                        3. Implementation for Logical UI
                          public static function output_options($categories,  $depth = 2, $level = 0, $nest = 0){
                          if($nest == $depth || !is_array($categories)) return '';

                          $html = '';
                          foreach($categories as $category){
                          $html .= "<option value=\"{$category['id']}\"";
                          if($nest < $level) $html .= ' disabled="disabled"';
                          $html .= '>';
                          for($i=0,$j=$nest;$i<$j;$i++) $html .= ' ';
                          $html .= "{$category['name']}</option>\n";

                          if(isset($category['subcategories'])) {
                          $html .= self::output_options($category['subcategories'], $depth, $level, $nest+1);
                          }
                          }
                          return $html;
                          }
                        4. Usage
                          $categories = category::get_all(0,0,2); // All Type, Parent Id = 0, MaxDepth = 2
                          echo category::output_options($categories, 2);