<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[網站製作學習誌]]></title>
  
  <link href="http://www.jaceju.net/" />
  <updated>2012-02-13T14:28:16+08:00</updated>
  <id>http://www.jaceju.net/</id>
  <author>
    <name><![CDATA[jaceju]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jaceju/fxRa" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jaceju/fxra" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/web-link-share-20120213" />
    <updated>2012-02-13T14:26:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/web-link-share-20120213</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://www.lornajane.net/posts/2012/building-a-restful-php-server-routing-the-request">Building A RESTful PHP Server: Routing the Request</a></li>
  <li><a href="http://www.devshed.com/c/a/PHP/Using-PHP-Closures-as-View-Helpers/">Using PHP Closures as View Helpers</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/01/session-status-php-5-4/">Get Session Status in PHP 5.4</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/testing-your-php-codebase-with-enhancephp/">Testing your PHP Codebase with EnhancePHP</a></li>
  <li><a href="http://codeception.com/01-20-2012/starting-acceptance.html">Introduction to Codeception</a></li>
  <li><a href="http://phpmaster.com/liskov-substitution-principle/">The Liskov Substitution Principle</a></li>
  <li><a href="http://blog.iworks.at/?/archives/4-Dropping-server-load-with-HTTP-caching.html">Dropping server load with HTTP caching</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/01/php-magic-constants/">PHP Magic Constants Explained</a></li>
  <li><a href="http://www.lornajane.net/posts/2012/php-5-4-built-in-webserver">PHP 5.4 Built In Webserver</a></li>
  <li><a href="http://www.script-tutorials.com/powerful-chat-system-lesson-3/">Powerful Chat System – Lesson 3</a></li>
  <li><a href="http://pages.engineyard.com/FutureofPHPInternals.html">Future of PHP Series</a></li>
  <li><a href="http://davidwalsh.name/data-uri-php">Image Data URIs with PHP</a></li>
  <li><a href="http://www.lornajane.net/posts/2012/building-a-restful-php-server-output-handlers">Building a RESTful PHP Server: Output Handlers</a></li>
  <li><a href="http://www.laruence.com/2012/02/02/2515.html">我們什麼時候應該使用異常?</a></li>
  <li><a href="http://talks.php.net/show/etsy2012/">PHP in 2012</a></li>
  <li><a href="http://elblinkin.info/2012/02/mockery-test-case-for-phpunit/">Mockery Test Case for PHPUnit</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/02/use-gravatar-as-favicon/">Use Gravatar as Favicon</a></li>
  <li><a href="http://elblinkin.info/2012/02/php-codesniffer-for-recently-changed-files/">PHP CodeSniffer for Recently Changed Files</a></li>
  <li><a href="http://joshosopher.tumblr.com/post/17295179484/php-5-4-traits-closures-and-prototype-based">PHP 5.4 Traits, Closures, and Prototype-based Programming</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/">Using Doctrine 2 in Zend Framework 2</a></li>
  <li><a href="https://github.com/feibeck/application.ini/">feibeck/application.ini - GitHub</a></li>
  <li><a href="http://mwop.net/blog/zf2-modules-you-can-use-today">ZF2 Modules You Can Use Today</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://shutterstock.github.com/rickshaw/">Rickshaw</a></li>
  <li><a href="http://badassjs.com/post/16355968400/font-js-a-powerful-font-toolkit-for-javascript">Font.js: A Powerful Font Toolkit for JavaScript</a></li>
  <li><a href="https://github.com/OpenGamma/RouteMap">RouteMap</a></li>
  <li><a href="http://lobjs.wordpress.com/">Javascript Line of Business Development</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/meet-crockfords-jsdev/">Meet Crockford’s JSDev</a></li>
  <li><a href="http://badassjs.com/post/16412147197/resumable-js-fault-tolerant-resumable-file-uploads-in">Resumable.js: Fault Tolerant Resumable File Uploads in JavaScript</a></li>
  <li><a href="http://www.joezimjs.com/javascript/javascript-design-patterns-factory-part-2/">JavaScript Design Patterns: Factory Part 2</a></li>
  <li><a href="http://blog.davidpadbury.com/2011/08/21/javascript-modules/">JavaScript Modules</a></li>
  <li><a href="http://enyojs.com/">Enyo JavaScript Application Framework</a></li>
  <li><a href="http://www.smartjava.org/content/using-d3js-visualize-gis">Using d3.js to visualize GIS</a></li>
  <li><a href="http://www.i-programmer.info/programming/graphics-and-imaging/3639-getting-started-with-box2d-in-javascript.html">Getting Started with Box2D in JavaScript</a></li>
  <li><a href="http://blogs.adobe.com/cantrell/archives/2012/01/how-to-download-data-as-a-file-from-javascript.html">How to Download Data as a File From JavaScript</a></li>
  <li><a href="http://jonnystromberg.com/listjs-0-2-0-plugins-paging/">List.js 0.2.0: Plugins and Paging</a></li>
  <li><a href="http://www.adomokos.com/2012/01/javascript-testing-with-mocha.html">JavaScript Testing with Mocha</a></li>
  <li><a href="http://www.joezimjs.com/javascript/javascript-design-patterns-proxy/">JavaScript Design Patterns: Proxy</a></li>
  <li><a href="http://blog.digitalbackcountry.com/2012/01/dealing-with-binary-data-from-a-canvas-object-using-javascript-typedarrays/">Dealing with Binary Data from a Canvas Object using JavaScript TypedArrays</a></li>
  <li><a href="http://www.2ality.com/2012/01/object-plus-object.html">What is {} + {} in JavaScript?</a></li>
  <li><a href="http://davidwalsh.name/nudejs">nude.js: Nudity Detection with JavaScript</a></li>
  <li><a href="http://blog.xuite.net/vexed/tech/56843365">JavaScript memory leak pattern</a></li>
  <li><a href="http://blog.weareon.net/interesting-facts-of-equality-operators-in-javascript/">Interesting facts of equality operators in javascript</a></li>
  <li><a href="http://creativejs.com/">CreativeJS | The very best of creative JavaScript and HTML5</a></li>
  <li><a href="http://www.queness.com/post/10440/keyboardjsadd-keyboard-shortcut-support-to-your-websites">KeyboardJS - Add Keyboard Shortcut Support to Your Websites</a></li>
  <li><a href="http://www.turnjs.com/">turn.js - The page flip effect for HTML5</a></li>
  <li><a href="http://www.joezimjs.com/javascript/javascript-design-patterns-observer/">JavaScript Design Patterns: Observer</a></li>
  <li><a href="http://js1k.com/2012-love/demos">js1k.com - demos - A lovely js competition</a></li>
  <li><a href="http://1p1e1.tumblr.com/post/16921184216/how-to-implement-an-awesome-javascript-jsonp-api-in-4">How to implement an awesome JavaScript JSONP API in 4 easy steps</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/using-javascripts-prototype-with-mvc/">Using JavaScript’s Prototype with MVC</a></li>
  <li><a href="http://www.joezimjs.com/javascript/javascript-templating-adding-html-the-right-way/">JavaScript Templating: Adding HTML the Right Way</a></li>
  <li><a href="http://cloudtu.blogspot.com/2012/02/javascriptping.html">利用JavaScript實作Ping程式</a></li>
  <li><a href="http://www.ajaxline.com/15-javascript-micro-frameworks-for-web-and-mobile">15 javascript micro frameworks for web and mobile</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://www.queness.com/post/10476/jquery-textexttags-autocomplete-ajax-support-for-input-field">jQuery Textext - Tags, Autocomplete, AJAX Support for Input Field</a></li>
  <li><a href="http://textextjs.com/">jQuery TextExt Plugin</a></li>
  <li><a href="http://devsnippets.com/article/reviews/using-jquery-to-style-design-elements-20-impressive-plugins.html">Using jQuery to Style Design Elements: 20 Impressive Plugins</a></li>
  <li><a href="http://notes.unwieldy.net/post/16047334773/the-paste-wasteland">The Paste Wasteland</a></li>
  <li><a href="http://vadikom.com/demos/poshytip/">Poshy Tip jQuery Plugin Demo Page</a></li>
  <li><a href="http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/">Poshy Tip - jQuery Plugin for Stylish Tooltips</a></li>
  <li><a href="http://blog.nejimaki-act.com/pointer-js/">pointer.js – クリックに楽しみを</a></li>
  <li><a href="http://php.refulz.com/custom-events-in-jquery/">Custom Events in jQuery</a></li>
  <li><a href="http://www.script-tutorials.com/10-fresh-jquery-plugins-january-2012/">10 fresh jQuery plugins</a></li>
  <li><a href="http://learnjquery.tutsplus.com/">Learn jQuery in 30 Days</a></li>
  <li><a href="http://www.smashingapps.com/2012/01/30/35-highly-advanced-yet-simple-to-use-jquery-plugins.html">35 Highly Advanced Yet Simple To Use jQuery Plugins</a></li>
  <li><a href="http://www.bennadel.com/blog/2322-Using-jQuery-Deferred-To-Chain-Validation-Rules-In-An-Asynchronous-Non-Blocking-Environment.htm">Using jQuery Deferred To Chain Validation Rules In An Asynchronous, Non-Blocking Environment</a></li>
  <li><a href="http://technotab.com/10-best-jquery-plugins-of-january-2012/">10 Best jQuery Plugins Of January 2012</a></li>
  <li><a href="http://coderbay.com/top-jquery-tree-plugins/">Top JQuery Tree Plugins</a></li>
  <li><a href="http://andreas.haufler.info/2012/02/keyboard-navigation-between-input.html">Keyboard Navigation between Input Fields using JQuery</a></li>
  <li><a href="http://smashinghub.com/7-jquery-parallax-and-scrolling-effect-plugins.htm">7 jQuery Parallax and Scrolling Effect Plugins</a></li>
  <li><a href="http://coding.smashingmagazine.com/2012/02/09/beginners-guide-jquery-based-json-api-clients/">A Beginner’s Guide To jQuery-Based JSON API Clients</a></li>
  <li><a href="http://www.webresourcesdepot.com/5-free-jquery-page-flip-plugins-for-book-like-interfaces/">5 Free jQuery Page-Flip Plugins For Book-Like Interfaces</a></li>
</ul>


<h2>Backbone.js</h2>


<ul>
  <li><a href="http://blog.carbonfive.com/2011/12/19/exploring-client-side-mvc-with-backbonejs/">Exploring Client-side MVC with Backbone.js</a></li>
  <li><a href="http://blog.involver.com/2012/01/26/testing-backbone-js-best-practices-2/">Testing Backbone.js Best Practices</a></li>
  <li><a href="http://veerasundar.com/blog/2012/01/backbone-js-hello-world-tutorial/">Backbone JS – Hello World tutorial</a></li>
  <li><a href="http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app/">Backbone.js Lessons Learned and Improved Sample App</a></li>
  <li><a href="http://pau.calepin.co/backbone-dealing-with-stateful-applications-part-1.html">Backbone: Dealing with stateful applications (part 1) </a></li>
  <li><a href="http://lostechies.com/derickbailey/2012/02/09/asynchronously-load-html-templates-for-backbone-views/">Asynchronously Load HTML Templates For Backbone Views</a></li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://userinexperience.com/?p=753">CoffeeScript Object Comprehensions</a></li>
  <li><a href="http://dosync.posterous.com/comparing-javascript-coffeescript-clojurescri">Comparing JavaScript, CoffeeScript &amp; ClojureScript</a></li>
  <li><a href="http://maxtaco.github.com/coffee-script/">IcedCoffeeScript</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://www.useragentman.com/blog/2011/12/21/cross-browser-css-cursor-images-in-depth/">Cross Browser CSS cursor Images In Depth</a></li>
  <li><a href="http://www.noupe.com/css/useful-css-snippets-for-your-coding-arsenal.html">Useful CSS Snippets for Your Coding Arsenal</a></li>
  <li><a href="http://css-tricks.com/star-ratings/">Star Ratings With Very Little CSS</a></li>
  <li><a href="http://www.terrenceryan.com/blog/post.cfm/venn-diagram-entirely-in-css">Venn Diagram entirely in CSS</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://tympanus.net/codrops/2012/01/22/how-to-spice-up-your-menu-with-css3/">How to spice up your menu with CSS3</a></li>
  <li><a href="http://www.inserthtml.com/2012/01/css3-multi-column-layout-implementation-change-website-design/">CSS3: The Multi Column Layout and How it Will Change Web Design</a></li>
  <li><a href="http://www.catswhocode.com/blog/mastering-html5-prefetching">Mastering HTML5 Prefetching</a></li>
  <li><a href="http://www.adityaravishankar.com/2011/11/command-and-conquer-programming-an-rts-game-in-html5-and-javascript/">Command and Conquer – Programming an RTS game in HTML5 and Javascript</a></li>
  <li><a href="http://www.red-team-design.com/css3-breadcrumbs">CSS3 breadcrumbs</a></li>
  <li><a href="http://www.hunterdavis.com/quickgrapher/">QuickGrapher</a></li>
  <li><a href="http://www.script-tutorials.com/html5-game-development-lesson-7/">HTML5 Game Development – Lesson 7</a></li>
  <li><a href="http://blog.elemdage.com/technology/one-mans-html5-developer-workflow">One Man’s HTML5 Developer Workflow</a></li>
  <li><a href="http://html5please.us/">HTML5 Please</a></li>
  <li><a href="http://www.developerdrive.com/2012/01/developing-a-responsive-website-part-2-navigation-and-content/">Developing a Responsive Website Part 2: Navigation and Content</a></li>
  <li><a href="http://www.script-tutorials.com/html5-canvas-slideshow/">HTML5 Canvas Slideshow</a></li>
  <li><a href="http://www.html5admin.com/">HTML5 ADMIN</a></li>
  <li><a href="http://www.script-tutorials.com/css3-image-hover-effects/">CSS3 Image Hover Effects</a></li>
  <li><a href="http://www.kendoui.com/mobile.aspx">Kendo UI Mobile</a></li>
  <li><a href="http://tumultco.com/blog/2012/01/20/easy-html5-animations-in-ibooks-using-tumult-hype-and-ibooks-author/">Easy HTML5 Animations in iBooks using Tumult Hype and iBooks Author</a></li>
  <li><a href="http://joeycadle.com/blog/article/1/2012/22/01/html5-canvas-and-processing-js">HTML5 Canvas &amp; Processing JS</a></li>
  <li><a href="http://css-tricks.com/animate-to-an-inline-style/">Animate to an Inline Style</a></li>
  <li><a href="http://www.photonstorm.com/archives/2759/the-reality-of-html5-game-development-and-making-money-from-it">The Reality of HTML5 Game Development and making money from it</a></li>
  <li><a href="http://davatron5000.github.com/deCSS3/">deCSS3 - a bookmarklet for graceful degradation.</a></li>
  <li><a href="http://azadcreative.com/2012/01/bulletproof-css3-dropdown-navigation-menu/">Bulletproof CSS3 Dropdown Navigation Menu</a></li>
  <li><a href="http://www.terrenceryan.com/blog/post.cfm/github-ribbons-in-css">Github Ribbons in CSS</a></li>
  <li><a href="http://www.longtailvideo.com/html5/">The State Of HTML5 Video</a></li>
  <li><a href="http://designmodo.com/create-css3-buttons/">How to Create CSS3 Buttons [Tutorial]</a></li>
  <li><a href="http://www.sitepoint.com/css3-target-selector/">How to Put Your CSS3 on :target</a></li>
  <li><a href="http://blog.sc5.fi/2012/01/html5-web-app-architecture-explained/">HTML5 web app architecture explained</a></li>
  <li><a href="http://webdesignerwall.com/tutorials/css3-image-styles-part-2">CSS3 Image Styles – Part 2</a></li>
  <li><a href="http://tympanus.net/codrops/2012/01/30/page-transitions-with-css3/">Page Transitions with CSS3</a></li>
  <li><a href="http://tympanus.net/codrops/2012/02/01/how-to-create-animated-tooltips-with-css3/">How to create animated tooltips with CSS3</a></li>
  <li><a href="http://www.ajaxline.com/CSS-gradients-Tools-and-examples">CSS gradients. Tools and examples</a></li>
  <li><a href="http://paulirish.com/2012/box-sizing-border-box-ftw/">* { box-sizing: border-box } FTW</a></li>
  <li><a href="http://www.ajaxline.com/Best-HTML5-video-players">Best HTML5 video players</a></li>
  <li><a href="http://tympanus.net/codrops/2012/02/06/3d-gallery-with-css3-and-jquery/">3D Gallery with CSS3 and jQuery</a></li>
  <li><a href="http://jacklmoore.com/notes/css3-ribbon-menu/">CSS Ribbon Menu</a></li>
  <li><a href="http://css.dzone.com/articles/10-resources-get-most-out-css">10 resources to get the most out of the CSS text-shadow property</a></li>
  <li><a href="http://www.developerdrive.com/2012/02/moving-web-page-elements-using-the-css3-translate-transform/">Moving Web Page Elements Using The CSS3 Translate Transform</a></li>
  <li><a href="http://www.sitepoint.com/5-things-i-love-about-css3/">5 Things I Love About CSS3</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/02/css3-pulse-effect/">Awesome CSS3 Pulse Effect</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://www.androiduipatterns.com/2012/01/best-design-tools-for-android.html">Best Design Tools for Android</a></li>
  <li><a href="http://android-meda.blogspot.com/2012/01/writing-your-first-android-app-body.html">Writing Your First Android App - Body Mass Index Calculator</a></li>
  <li><a href="http://www.alexcurylo.com/blog/2011/08/19/ios-scene-graph-library/">iOS Scene Graph Library</a></li>
  <li><a href="http://blog.amt.in/mobile-boilerplate-mbp-templates-simplifying">Mobile Boilerplate (MBP) – Templates Simplifying Mobile Web App Development</a></li>
  <li><a href="http://html5boilerplate.com/mobile">Mobile Boilerplate</a></li>
  <li><a href="http://coenraets.org/blog/2012/02/sample-mobile-app-with-backbone-js-and-phonegap/">Sample Mobile App with Backbone.js and PhoneGap</a></li>
  <li><a href="http://www.1stwebdesigner.com/inspiration/mobile-web-designs-show-future-trends/">45 Mobile Web Designs To Show You One Of Future Trends</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://smashinghub.com/best-chrome-extensions.htm">30 Best Chrome Extensions For Web Developers and Designers</a></li>
  <li><a href="http://www.designyourway.net/blog/resources/new-tools-and-resources-for-web-designers/">New Tools And Resources For Web Designers</a></li>
  <li><a href="http://mqframework.com/">MQFramework</a></li>
  <li><a href="http://www.developerdrive.com/2012/01/responsive-widgets/">Responsive JavaScript Widgets</a></li>
  <li><a href="http://filamentgroup.com/lab/open_source_code_repositories/">Filament Group’s Open Source Code Repositories</a></li>
  <li><a href="http://spyrestudios.com/how-to-design-a-dribbble-style-homepage-layout/">How to Design a Dribbble-Style Homepage Layout</a></li>
  <li><a href="http://tympanus.net/codrops/collective/collective-2/">Collective #2</a></li>
  <li><a href="http://www.putyourlightson.net/responsive-cp">Responsive CP</a></li>
  <li><a href="http://tympanus.net/codrops/2012/01/27/modular-front-end-development-with-less/">Modular front-end development with LESS</a></li>
  <li><a href="http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/">PUT or POST: The REST of the Story</a></li>
  <li><a href="http://www.benjaminkeen.com/misc/bricss/">Responsive Design Test Bookmarklet</a></li>
  <li><a href="http://www.sitepoint.com/responsive-web-design/">Responsive Web Design</a></li>
  <li><a href="http://jqueryuivskendoui.com/">jQuery UI vs Kendo UI</a></li>
  <li><a href="http://www.alistapart.com/articles/responsive-images-how-they-almost-worked-and-what-we-need/">Responsive Images: How they Almost Worked and What We Need</a></li>
  <li><a href="http://www.9lessons.info/2012/01/facebook-timeline-design-using-jquery.html">Facebook Timeline Design using JQuery and CSS.</a></li>
  <li><a href="http://www.script-tutorials.com/form-validation-with-javascript-and-php/">Form Validation with Javascript and PHP</a></li>
  <li><a href="http://smashinghub.com/top-50-free-online-web-apps-for-designers-and-developers-2011.htm">Top 50 Free Online Web Apps For Designers and Developers From 2011</a></li>
  <li><a href="http://webdesignledger.com/tools/8-useful-online-tools-for-web-designers-and-developers">8 Useful Online Tools for Web Designers and Developers</a></li>
  <li><a href="http://charliepark.org/bootstrap_buttons/">Beautiful Buttons for Twitter Bootstrappers</a></li>
  <li><a href="http://designbomb.blogspot.in/2012/02/multi-directional-hover-effect-in-css.html">A Multi-Directional Hover Effect in CSS</a></li>
  <li><a href="http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/">Enhance Your Website with the FullScreen API</a></li>
  <li><a href="http://www.findbestopensource.com/article-detail/searchengines-built-on-lucene">8 Best Open Source Searchengines built on top of Lucene</a></li>
  <li><a href="http://mobile.tutsplus.com/tutorials/mobile-web-apps/build-a-contacts-application-with-jquery-mobile-the-android-sdk-part-1/">Build a Contacts Application With jQuery Mobile &amp; the Android SDK – Part 1</a></li>
  <li><a href="http://wrapbootstrap.com/">Themes for Twitter Bootstrap - WrapBootstrap</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://rubysource.com/installing-ruby-with-rvm-on-ubuntu/">Installing Ruby with RVM on Ubuntu</a></li>
  <li><a href="http://net.tutsplus.com/articles/web-roundups/24-extremely-useful-ruby-gems-for-web-development/">24 Extremely Useful Ruby Gems for Web Development</a></li>
  <li><a href="http://blog.fogus.me/2012/01/25/lisp-in-40-lines-of-ruby/">Lisp in 32 lines of Ruby</a></li>
  <li><a href="http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/">My five favorite “hidden” features in Rails 3.2</a></li>
  <li><a href="http://rubyreloaded.com/trickshots/">A Video of 24 Ruby Tips and Tricks</a></li>
  <li><a href="http://blog.joshsoftware.com/2011/12/23/designing-rails-api-using-rabl-and-devise/">Designing Rails API using Rabl and Devise</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://tools.percona.com/">Percona Online Tools</a></li>
  <li><a href="http://blog.schauderhaft.de/2012/01/15/tipps-for-testing-database-code/">Tips for Testing Database Code</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="http://fennb.com/nodejs-a-giant-step-backwards">node.js - A giant step backwards?</a></li>
  <li><a href="http://dotheweb.posterous.com/nodejs-for-php-programmers-1-event-driven-pro">Node.js for PHP Programmers #1: Event-driven programming&#8230; and Pasta.</a></li>
  <li><a href="http://badassjs.com/post/16583192105/seriously-js-a-realtime-node-based-video-compositor">Seriously.js: A Realtime, Node-Based Video Compositor for the Web</a></li>
  <li><a href="http://nodemanual.org/latest/nodejs_ref_guide/index.html">Node.js API Reference</a></li>
  <li><a href="http://www.sitepoint.com/serving-static-files-with-node-js/">Serving Static Files with Node.js</a></li>
  <li><a href="http://www.cloudshift.cl/">Cloudshift Application Framework</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://victorsavkin.com/post/14885946737/30-minute-exercise-to-become-a-better-programmer">30-Minute Exercise to Become a Better Programmer</a></li>
  <li><a href="http://pragprog.com/magazines/2012-01/unit-tests-are-first">Unit Tests Are FIRST</a></li>
  <li><a href="http://www.webdesignerdepot.com/2012/01/7-mistakes-developers-make/">7 mistakes developers make</a></li>
  <li><a href="http://codebuild.blogspot.com/2012/01/15-best-practices-about-exception.html">15 Best Practices for Exception Handling</a></li>
  <li><a href="http://elblinkin.info/2012/02/developer-testing-not-necessarily-tdd-revisited/">Developer Testing, Not Necessarily TDD… Revisited</a></li>
</ul>


<h2>Python</h2>


<ul>
  <li><a href="http://blueprintforge.com/blog/2012/01/08/python-injecting-mock-objects-for-powerful-testing/">Python: Injecting Mock Objects for Powerful Testing</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://tympanus.net/codrops/2012/01/26/be-less-annoying-reduce-bounce-rates-through-better-web-design/">Be Less Annoying: Reduce Bounce Rates through Better Web Design</a></li>
  <li><a href="http://elliotjaystocks.com/blog/a-better-photoshop-grid-for-responsive-web-design/">A better Photoshop grid for responsive web design</a></li>
  <li><a href="http://smashinghub.com/40-contact-forms-of-all-time-for-designer-inspiration.htm">40 Contact Forms of All Time For Designer Inspiration</a></li>
  <li><a href="http://www.webdesignbooth.com/logo-design-principles/">10 Principles That Should Be Considered Before Designing a Logo</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://www.openfoundry.org/tw/tech-column/8558-another-choice-for-distributed-version-control-system-fossil">分散式版本控制系統的新選擇－Fossil</a></li>
  <li><a href="http://blog.jayway.com/2012/01/25/finding-with-git/">Finding with Git</a></li>
  <li><a href="http://www.saintsjd.com/2012/01/a-better-ui-for-git/">A Better UI (CLI) for git</a></li>
  <li><a href="http://blog.wu-boy.com/2012/02/how-to-use-git-version-control-for-new-beginner/">新人 Git 版本控制教學</a></li>
  <li><a href="http://www.ducea.com/2012/02/07/howto-completely-remove-a-file-from-git-history/">HowTo completely remove a file from Git history</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://net.tutsplus.com/articles/news/htaccess-files-for-the-rest-of-us/">.htaccess Files for the Rest of Us</a></li>
  <li><a href="http://barelysufficient.org/2012/01/high-load-websites-scalable-http-infrastructure/">High load websites: Scalable HTTP infrastructure</a></li>
  <li><a href="http://www.jumpingbean.co.za/optimising-Apache-performance-cache-control">Optimising Website Performance on Apache with Cache Control Settings</a></li>
  <li><a href="http://www.howtoforge.com/vboxheadless-running-virtual-machines-with-virtualbox-4.1-on-a-headless-ubuntu-11.10-server">VBoxHeadless - Running Virtual Machines With VirtualBox 4.1 On A Headless Ubuntu 11.10 Server</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/02/limit-request-methods-using-htaccess/">Limit Request Methods Using .htaccess</a></li>
  <li><a href="http://toolbelt.heroku.com/">Heroku Toolbelt</a></li>
</ul>


<h2>Other</h2>


<ul>
  <li><a href="http://swombat.com/2012/1/23/startup-skill-set">The startup skill set</a></li>
  <li><a href="http://pictos.cc/server">Pictos</a></li>
  <li><a href="http://alexeymk.com/a-brief-guide-to-tech-internships">A brief guide to tech internships</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[領悟 - 程序員版]]></title>
    <link href="http://www.jaceju.net/blog/archives/realize" />
    <updated>2012-02-07T21:16:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/realize</id>
    <content type="html"><![CDATA[<p>時程一直是專案很難掌握的東西，尤其是上頭訂下一個尷尬的死線時。然後自己明知道不可為，但為了面子就只能勉強答應下來。</p>

<p>所以新網站在還沒完全測試後就上線了，只好邊看規格邊修 Bug 。</p>

<p>這時腦海裡突然浮現出一首歌的旋律，心有七七煙的我，就改出了以下的歌詞：</p>

<!--more-->


<h2>領悟 - 程序員版</h2>

<p>我以為有寫測試，但是我沒有；</p>

<p>我只是征征望著那些錯誤，然後像孩子一樣無助。</p>

<p>這何嘗不是一種領悟，讓我把規格看清楚；</p>

<p>雖然那加班的痛苦，將日日夜夜在我靈魂最深處。</p>

<p>&nbsp;</p>


<p>我以為我會度姑，但是我沒有；</p>

<p>當我看到我親手寫的程式，給我那大紅色的錯誤。</p>

<p>這何嘗不是一種領悟，讓你把程式看清楚；</p>

<p>測試是奢侈的幸福，可惜 PM 從來不在乎。</p>

<p>&nbsp;</p>


<p>啊！一段程式就此刪除&#8230;</p>

<p>啊！一小時眼看要荒蕪。</p>

<p>我的程式若是錯誤，願 user 沒有白白受苦；</p>

<p>曾經無日無夜忙碌，就只有「辛苦」。</p>

<p>&nbsp;</p>


<p>啊！多麼痛的領悟，這規格不是全部；</p>

<p>只是我回首開會時的每一步，都走的好孤獨。</p>

<p>&nbsp;</p>


<p>啊！多麼痛的領悟，這時程已經延誤；</p>

<p>只願我掙開票的枷鎖， PM 束縛，全力追逐，別再為 bug 受苦。</p>

<object width="150" height="50" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="wmode" value="transparent" /><embed src="http://muzicons.com/musicon_v_srv_new.swf" width="150" height="50" menu="false" quality="high"  align="middle" type="application/x-shockwave-flash" flashvars="&nomuz=muzicon%20unavailable&site=http://www.muzicons.com/&icon_pic=7.png&music_file=http://du.axiba.info/COFFdD0xMzI4NjI4MjU3Jmk9MTIyLjExNi4yMDYuMTU0JnU9U29uZ3MvdjIvZmFpbnRRQy81MC9hZS8xNTMxMGM5MWUwZjFmMmE0ZTBhMmM0M2IzYzEwYWU1MC5tcDMmbT1iMTYyODZlMDIyODc3NDFmNDFiM2YyNTA5OTNlNTE2OCZ2PWRvd24mbj3B7M7yJnM9wO7X2sqiJnA9bg==.mp3&bg_color=339966&type_of_clip=simple&text_color=FFFFFF&text_message=Last+day" wmode="transparent" menu="false" quality="high"></embed></object>


<br/><a href='http://Muzicons.com' target='_blank' style='font-size:11px;color:339966'>Muzicons.com</a>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[我的 Web 開發工具]]></title>
    <link href="http://www.jaceju.net/blog/archives/my-webdev-tools" />
    <updated>2012-01-23T16:42:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/my-webdev-tools</id>
    <content type="html"><![CDATA[<p>在我從事 Web 開發這段期間，其實一直依賴著很多好用的工具及參考文件；當然也不是所有的工具和文件我都精通，但它們確實幫我節省了很多開發的時間，也讓我學到很多有趣的技術。</p>

<p>以下我就來分享一些我收集並放在手邊參考的資訊，我也會大略地描述它們的內容與用途。</p>

<!--more-->


<h2>Javascript</h2>

<h3>Formatter</h3>

<ul>
<li><p><a href="http://jsbeautifier.org/">Online javascript beautifier</a></p>

<p>用來格式化雜亂無章的 JavaScript 程式碼，通常我都用來偷看別人壓縮過的 JavaScript 是怎麼寫的。</p></li>
<li><p><a href="http://jscompress.com/">Online JavaScript Packer</a></p>

<p>跟上面那個剛好相反，用來打包 JavaScript 程式碼。當然目前還有很多更好的選擇，能直接整合在開發流程裡，但線上版的總是比較方便。</p></li>
</ul>


<h3>Library / CDN</h3>

<ul>
<li><p><a href="http://www.cdnjs.com/">cdn js - the missing cdn</a></p>

<p>這個網站幫我們很多常見的 JavaScript Library 放在 CDN 服務上。如果 Google Libraries API 找不到的話，可以來這裡找找看。</p></li>
<li><p><a href="http://microjs.com/">Microjs</a></p>

<p>這個網站收集了很多較不常見的 JavaScript Library ，並且分門別類讓我們可以清楚的瞭解它們的用途。通常我用到的機會不大，但有用到時，就會發現有很多寶可以挖。</p></li>
<li><p><a href="http://medialize.github.com/URI.js/">URI.js - URLs in Javascript</a></p>

<p>用來解析網址的好工具，我目前是用它來製作 Portable 的 Backbone.js 程式。</p></li>
</ul>


<h3>JSON</h3>

<ul>
<li><p><a href="http://jsonviewer.stack.hu/">Online JSON Viewer</a> / <a href="http://json.parser.online.fr/">Json Parser Online</a></p>

<p>這兩個工具可以用樹狀的方式來呈現 JSON 輸出；除了可以用來驗證 JSON 外，我通常也用來看 JSON 的結構是不是正確的。</p></li>
</ul>


<h3>Converter</h3>

<ul>
<li><p><a href="http://js2coffee.org/">Js2coffee</a></p>

<p>這個工具可以幫我們把 JavaScript 轉成 CoffeeScript ；有趣的是，它也是 CoffeeScript 寫的。一開始學習 CoffeeScript 時，用到的機會比較多。</p></li>
</ul>


<h3>Syntax</h3>

<ul>
<li><p><a href="http://bonsaiden.github.com/JavaScript-Garden/">JavaScript Garden</a></p>

<p>這是收集了一些 JavaScript 常見問題的網站，通常我在遇到某些語法問題時，會來看看。</p></li>
</ul>


<h3>Online Tester</h3>

<ul>
<li><p><a href="http://jsfiddle.net/">jsFiddle</a></p>

<p>線上測試 JavaScript 的好用服務，而且也提供一些主流 JavaScript Library 的預載。</p></li>
<li><p><a href="http://tinkerbin.com/">Tinkerbin</a></p>

<p>跟 jsFiddle 一樣的服務，但它直接支援 CoffeeScript/SASS/LESS 等語法。</p></li>
<li><p><a href="http://jsbin.com/#javascript,html">JS Bin</a></p>

<p>這個服務也可以線上測試 JavaScript ，也支援多數主流 JavaScript Library 。</p></li>
</ul>


<h3>jQuery</h3>

<ul>
<li><p><a href="http://api.jquery.com/">jQuery API</a></p>

<p>開發 jQuery 必備參考手冊。</p></li>
<li><p><a href="http://www.appelsiini.net/projects/lazyload">Lazy Load Plugin for jQuery</a></p>

<p>延遲載圖的 jQuery Plugin ，目前我是用在圖多的網站上。</p></li>
<li><p><a href="http://jquery.malsup.com/form/">jQuery Form Plugin</a></p>

<p>讓表單支援 Ajax 的好工具，也能使用 Ajax 來處理檔案上傳；它一直是我最愛的 jQuery Plugin 之一。</p></li>
<li><p><a href="http://www.datatables.net/">DataTables (table plug-in for jQuery)</a></p>

<p>很漂亮且功能強大的 Table Plugin ，而且支援 jQuery UI 的 Theme 。</p></li>
<li><p><a href="http://pinesframework.org/pnotify/">Pines Notify</a></p>

<p>類似 Mac 上的 Growl ，讓網站可以在網頁右上方顯示通知。</p></li>
</ul>


<h3>Backbone.js</h3>

<ul>
<li><p><a href="http://documentcloud.github.com/backbone/">Backbone.js</a></p>

<p>Backbone.js 的官方網站，同時也是參考手冊；目前是我最常瀏覽的網站。</p></li>
<li><p><a href="http://documentcloud.github.com/underscore/">Underscore.js</a></p>

<p>除了是 Backbone.js 必要的 library 外，它裡面提供的很多功能對 JavaScript 開發也非常有用。</p></li>
<li><p><a href="http://backbonetutorials.com/">Backbone.js Tutorials</a></p>

<p>收集了一些 Backbone.js 的教學文件。</p></li>
<li><p><a href="https://github.com/documentcloud/backbone/wiki/Tutorials%2C-blog-posts-and-example-sites">Tutorials, blog posts and example sites</a></p>

<p>Backbone.js 官方列出的教學與範例原始碼，我有時會來這裡看高手是怎麼用 Backbone.js 。</p></li>
<li><p><a href="http://ricostacruz.com/backbone-patterns/">Backbone patterns</a></p>

<p>使用 Backbone.js 可以應用的一些 Patterns ，有很多好用的密技。</p></li>
<li><p><a href="https://github.com/tbranyen/backbone-boilerplate">Backbone Boilerplate</a></p>

<p>一個結合了後端 Node.js 程式，很完整的 Backbons.js App 範本。</p></li>
</ul>


<h2>CSS</h2>

<h3>SASS Tools</h3>

<ul>
<li><p><a href="http://sass-lang.com/">SASS</a></p>

<p>提供可程式化的 CSS 語法，也是我目前在 Web 開發上的利器。</p></li>
<li><p><a href="http://compass-style.org/">Compass</a></p>

<p>目前是我製作前端網站必備工具之一，它在 SASS 語法上加入更多方便的外掛，讓我可以很輕鬆地處理很多原本很複雜的 CSS 。</p></li>
<li><p><a href="http://css2sass.heroku.com/">css2sass</a></p>

<p>這個工具可以把 CSS 轉換成 SASS ，當我需要把某些別人寫好的 CSS 片段放到目前的 SASS 檔案中時，我就會用這個工具來協助我轉換。</p></li>
</ul>


<h3>Layout</h3>

<ul>
<li><p><a href="http://csscreator.com/version2/pagelayout.php">CSS Layout Generator</a></p>

<p>視覺化的 CSS Layout 產生工具，雖然很久沒用了，但依舊推薦給剛學 CSS Layout 的朋友。</p></li>
<li><p><a href="http://www.maxdesign.com.au/articles/css-layouts/">CSS layouts</a></p>

<p>這是一個收集 CSS Layout 教學的網站，我之前會在這裡找接近專案需要的版型，再舉一反三地套用到專案上。</p></li>
</ul>


<h3>Formatter</h3>

<ul>
<li><p><a href="http://procssor.com/process">ProCSSor - Advanced CSS Prettifier</a></p>

<p>用來重新格式化 CSS 的工具，也有選項可以設定。</p></li>
<li><p><a href="http://cdburnerxp.se/cssparse/css_optimiser.php?lang=zh">CSS整形與最佳化工具</a></p>

<p>利用 CSSTidy 來重整 CSS 程式碼，也提供格式化輸出。</p></li>
<li><p><a href="http://csslint.net/">CSS Lint</a></p>

<p>這個工具可以用來找出 CSS 寫法上的問題，讓 CSS 可以更加精鍊。</p></li>
<li><p><a href="http://unused-css.com/">Remove unused CSS</a></p>

<p>可以找出網站沒用到的的 CSS ，並整理出乾淨的 CSS 讓我們下載。</p></li>
</ul>


<h3>Browser Support</h3>

<ul>
<li><p><a href="http://www.quirksmode.org/css/contents.html">CSS - Contents and compatibility</a></p>

<p>這個網頁整理了目前主流瀏覽器對 CSS 2.1 / CSS 3 各種屬性的支援程度。</p></li>
</ul>


<h3>Snippets</h3>

<ul>
<li><p><a href="http://webexpedition18.com/articles/useful-css-snippets/">Incredibly Useful CSS Snippets</a></p>

<p>這是很久以前找到的好用 CSS 程式片段，但後來用了 Compass 後就比較少參考了。</p></li>
<li><p><a href="http://www.broculos.net/en/article/css-word-wrap">CSS Word-wrap</a></p>

<p>很有用的程式碼片段，它將目前各家瀏覽器支援的 white-space 屬性做了整理。</p></li>
</ul>


<h3>Framework</h3>

<ul>
<li><p><a href="http://www.formee.org/">Formee</a></p>

<p>表單美化的 CSS Framework ，但目前用到的機會也是很少。</p></li>
<li><p><a href="http://twitter.github.com/bootstrap/">Bootstrap, from Twitter</a></p>

<p>目前最常用的 CSS Framework 。</p></li>
<li><p><a href="http://www.martinbean.co.uk/bootstrap-generator/">Twitter Bootstrap Generator</a></p>

<p>如果沒有安裝 LESS 時，這個工具可以用來調整 Twitter-Bootstrap CSS 的參數。如果有裝 LESS 的話，直接改其中的 scaffolding.less 會比較快。</p></li>
<li><p><a href="http://getskeleton.com/">Skeleton</a></p>

<p>目的跟 Twitter-Bootstrap 很像，也是一個很完整的 CSS Framework 。不過 Skeleton 多了 Media Query 的特色，更適合用在行動裝置上。</p></li>
</ul>


<h3>CSS3 Generator</h3>

<ul>
<li><p><a href="http://css3maker.com/">CSS3.0 Maker</a></p>

<p>這個線上工具大概是我看過最完整的 CSS3 特效產生器了。</p></li>
<li><p><a href="http://layerstyles.org/">Layer Styles</a></p>

<p>這個 CSS 產生器的介面很類似 Photoshop 的屬性視窗來協助我們調整 Box 的相關屬性。利用它也可以作出很多不錯的按鈕樣式。</p></li>
<li><p><a href="http://www.css3generator.com/">CSS3 Generator</a></p>

<p>這個 CSS3 產生器也是非常完整，它的特色是會用問答的方式幫我們產生出想要的 CSS3 樣式。</p></li>
<li><p><a href="http://css3.mikeplate.com/">CSS3 Playground</a></p>

<p>也是支援多種 CSS3 特效的產生器。</p></li>
<li><p><a href="http://www.css3.me/">CSS3 Generator</a></p>

<p>這個工具的功能就少了一點，但介面很好看。</p></li>
<li><p><a href="http://www.colorzilla.com/gradient-editor/">Ultimate CSS Gradient Generator</a></p>

<p>專業級的 CSS3 漸層產生器，能設定的選項鉅細靡遺。</p></li>
<li><p><a href="http://westciv.com/tools/gradients/">Linear Gradients</a></p>

<p>也是用來產生 CSS3 漸層特效的工具，但後來也加入了一些其他 CSS3 效果。</p></li>
<li><p><a href="http://gradients.glrzad.com/">CSS3 Gradient Generator</a></p>

<p>也是很不錯的 CSS3 漸層產生器，但選項稍微少了點。</p></li>
</ul>


<h3>Button Maker</h3>

<ul>
<li><p><a href="http://css3button.net/">CSS3 Button Generator</a></p>

<p>很專業的 CSS3 按鈕樣式產生器。</p></li>
<li><p><a href="http://css-tricks.com/examples/ButtonMaker/">Button Maker</a></p>

<p>也是按鈕產生器，但介面上就沒有上面那個專業。</p></li>
</ul>


<h3>References</h3>

<ul>
<li><p><a href="http://www.css3.com/">CSS3.com</a></p>

<p>這個網站就是有關 CSS 的問答網站，也提供了基本的 CSS 參考手冊。</p></li>
<li><p><a href="http://mediaqueri.es/">Media Queries</a></p>

<p>這個網站收集了很多使用 Media Query 的網站，主要我是用來參考高手們如何在不同尺寸下呈現網站。</p></li>
</ul>


<h2>HTML5</h2>

<h3>Detection</h3>

<ul>
<li><p><a href="http://www.modernizr.com/">Modernizr</a></p>

<p>這個 Library 可以用來偵測瀏覽器對 HTML5 / CSS3 的支援程度，讓開發者可以選擇替代方案。</p></li>
</ul>


<h3>Template</h3>

<ul>
<li><p><a href="http://html5boilerplate.com/">HTML5 Boilerplate</a></p>

<p>提供預先設定好的 HTML5 範本，，讓我們不必從無到有建置 HTML5 網站。</p></li>
<li><p><a href="http://www.initializr.com/">Initializr</a></p>

<p>基於上面的 HTML5 Boilerplate 的 HTML5 範本，但提供了更多樣化的選項，讓我們可以自訂要加在範本上的元件；它也是目前我製作新網站一定會用到的工具之一。</p></li>
<li><p><a href="http://switchtohtml5.com/">SwitchToHTML5</a></p>

<p>這個工具可以產生一個簡單的 HTML5 範本，不過目前我很少用了。</p></li>
</ul>


<h3>Features List</h3>

<ul>
<li><p><a href="http://html5doctor.com/element-index/">Element Index</a></p>

<p>這個網站把所有 HTML5 支援的 HTML 標籤都列出來；是我剛開始學習 HTML5 時，會來查詢標籤定義的地方。</p></li>
<li><p><a href="http://html5demos.com/">HTML5 Demos and Examples</a></p>

<p>這個網站展示了很多 HTML5 的新特色；先前 HTML5 剛流行起來時，我會在這裡看看有什麼新玩意兒。</p></li>
<li><p><a href="http://html5test.com/">The HTML5 test</a></p>

<p>測試瀏覽器對 HTML5 的支援程度，一般是在新瀏覽器版本推出時，我會用這個服務來測試。</p></li>
<li><p><a href="http://mobilehtml5.org/">Mobile HTML5</a></p>

<p>這個網站列出目前行動裝置對 HTML5 的支援，這是之前在製作 <a href="http://phpconf.tw">PHPConf.TW</a> 網站時會參考到的。</p></li>
<li><p><a href="http://www.findmebyip.com/litmus/">CSS3 &amp; HTML5 Browser Support</a></p>

<p>列出目前主流瀏覽器對 HTML5 及 CSS3 的支援狀況。</p></li>
</ul>


<h3>Framework</h3>

<ul>
<li><p><a href="http://www.limejs.com/">LimeJS HTML5 Game Framework</a></p>

<p>可以用來製作 HTML5 遊戲，目前還沒機會用到。</p></li>
<li><p><a href="http://bakerframework.com/">Baker Ebook Framework 2.0</a></p>

<p>製作 HTML5 電子書的框架，目前也還沒有機會用到。</p></li>
</ul>


<h3>Tools</h3>

<ul>
<li><p><a href="http://manifested.dregsoft.com/">Manifested</a></p>

<p>可以幫網站建立離線檔案清單，目前還沒有機會在實戰中使用。</p></li>
</ul>


<h3>Reference</h3>

<ul>
<li><p><a href="http://www.popstardefense.com/blog/js-development-reading-list">HTML5 web dev reading list</a></p>

<p>這是一份學習 HTML5 的推薦閱讀清單；有時間的話可以全部看看，我目前是挑有興趣的先看。</p></li>
</ul>


<h3>Cheat Sheet</h3>

<ul>
<li><p><a href="http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html">HTML5 Canvas Cheat Sheet</a></p>

<p>把 HTML5 Canvas 的特色精簡成一份小抄，可以在邊開發時邊參考。</p></li>
<li><p><a href="http://html5sec.org/">HTML5 Security Cheatsheet</a></p>

<p>這個網站把 HTML5 安全方面的問題整理起來，並提供簡單的解決方案。</p></li>
</ul>


<h2>DOM Tools</h2>

<ul>
<li><p><a href="http://westciv.com/xray/">XRAY</a></p>

<p>這是很久以前我就一直放在手邊用的 bookmarklet 小工具，可以列出 HTML 元素的一些概況。重要的是它支援各家主流瀏覽器，讓我在沒有 Firebug 時也可以使用。</p></li>
<li><p><a href="http://westciv.com/mri/">MRI</a></p>

<p>用來測試輸入的 Selector 是不是能找到我們想要的那些元素，尤其在寫 jQuery 時非常方便。</p></li>
</ul>


<h2>Browser Tools</h2>

<ul>
<li><p><a href="http://resizemybrowser.com/">resizeMyBrowser</a></p>

<p>這個工具提供了很多常見的行動裝置可視區域大小，點選後可以快速把瀏覽器重設為我們選擇的大小。通常我是用來測試網站能不能在某些行動裝置上看。</p></li>
<li><p><a href="http://detectmobilebrowsers.com/">Detect Mobile Browsers</a></p>

<p>提供了偵測是否為行動裝置瀏覽器的各種做法，這也是我在做行動網站時會用到的好工具。</p></li>
</ul>


<h2>PHP</h2>

<h3>Database Client</h3>

<ul>
<li><p><a href="http://www.phpmyadmin.net/home_page/index.php">phpMyAdmin</a></p>

<p>這應該不用多介紹了，幾乎我手邊的機器都會安裝的 MySQL 線上 Client 工具。</p></li>
</ul>


<h3>Formatter</h3>

<ul>
<li><p><a href="http://beta.phpformatter.com/">PHP Formatter</a></p>

<p>用來格式化 PHP 程式碼的好工具，這是我在寫作時會用到的。</p></li>
</ul>


<h3>Snippet</h3>

<ul>
<li><p><a href="http://www.jonasjohn.de/snippets/php/headers.htm">PHP Modify HTTP Headers (Examples)</a></p>

<p>這個也是我常參考的程式片段，不然我每次都記不住 header 的內容該怎麼下。</p></li>
</ul>


<h2>Design</h2>

<h3>Templates</h3>

<ul>
<li><p><a href="http://zoomzum.com/15-best-sites-to-download-free-web-templates/">Free Web Templates</a></p>

<p>每次有需要做頁面時，我都會在這些網站裡找靈感。</p></li>
</ul>


<h3>Color</h3>

<ul>
<li><p><a href="http://kuler.adobe.com/">kuler</a></p>

<p>Adobe 推出的色彩配置工具，雖然我很少用。</p></li>
<li><p><a href="http://colorschemedesigner.com/">Color Scheme Designer 3</a></p>

<p>也是非常強大的色彩配置工具。</p></li>
</ul>


<h3>Icons</h3>

<ul>
<li><p><a href="http://cssload.net/">Loading CSS spinners and bars generator for AJAX &amp; JQuery</a></p>

<p>AJAX 載入圖示的產生器。</p></li>
<li><p><a href="http://faviconist.com/">Faviconist</a></p>

<p>用單一字元來製作網站的 favicon 。</p></li>
<li><p><a href="http://www.favicon.cc/">favicon.ico Generator</a></p>

<p>視覺化的 favicon 製作工具，可預覽它在瀏覽器上呈現的樣子。</p></li>
<li><p><a href="http://favbulous.com/post/774/23-glyph-symbolssimple-icon-sets">23 Glyph, Symbols &amp; Simple Icon Sets</a></p>

<p>這篇文章收集一堆很簡鍊的單色圖示集，也是我在製作網站後台而需要圖示時，會來找尋的地方。</p></li>
</ul>


<h3>Mockup</h3>

<ul>
<li><p><a href="http://designmodo.com/free-wireframe-mockup/">20 Free Wireframe and Mockup Applications</a></p>

<p>這篇文章收集了二十種免費 Mockup 工具，不過我並沒有全部都試過；目前我還是以自己手繪為主。</p></li>
</ul>


<h2>Regular Expression</h2>

<ul>
<li><p><a href="http://www.gskinner.com/RegExr/">RegExr</a></p>

<p>測試 Regular Expression 的工具，應該適用於大多數有支援 Regular Expression 的語言。</p></li>
<li><p><a href="http://www.pagecolumn.com/tool/regtest.htm">Online Javascript Regular Expression Tester</a></p>

<p>專為 Javascript Regular Expression 所寫的線上測試工具。</p></li>
<li><p><a href="http://rubular.com/">Rubular</a></p>

<p>專為 Ruby Regular Expression 所寫的線上測試工具。</p></li>
</ul>


<h2>Documents</h2>

<ul>
<li><p><a href="http://docpool.co/">Docpool.co</a></p>

<p>收集了一些網站前置作業文件的範本。</p></li>
</ul>


<h2>Projects</h2>

<ul>
<li><p><a href="http://www.redmine.org/">Redmine</a></p>

<p>最近終於開始有時間研究的一套強大專案管理工具，支援多種版本控制系統。</p></li>
</ul>


<h2>Site Tools</h2>

<ul>
<li><p><a href="http://martinmelin.se/rewrite-rule-tester/">Test your RewriteRules for Apache mod_rewrite</a></p>

<p>測試 Apache mod_rewrite Rewrite Rules 的服務，不過較複雜的規則可能在判斷上會有問題。</p></li>
<li><p><a href="http://builtwith.com/">BuiltWith</a></p>

<p>從 Header 判斷網站是用什麼技術製作的。</p></li>
<li><p><a href="http://loads.in/">Loads.in</a></p>

<p>可以從世界各角落測試網頁載入的時間。</p></li>
</ul>


<h2>Code</h2>

<h3>Snippets Share</h3>

<ul>
<li><p><a href="http://chopapp.com/">Chop</a></p>

<p>用來分享一段小程式的服務。</p></li>
</ul>


<h3>Online Diff</h3>

<ul>
<li><p><a href="http://www.diffnow.com/">DiffNow - Compare files online</a></p>

<p>線上比對檔案差異，也可以把比對結果分享出來。</p></li>
</ul>


<h2>Git</h2>

<h3>Books</h3>

<ul>
<li><p><a href="http://book.git-scm.com/">Git Community Book</a></p>

<p>這是由 Git 社群所共同完成的一本 Git 入門書籍。</p></li>
<li><p><a href="http://refcardz.dzone.com/refcardz/getting-started-git">Getting Started with Git</a></p>

<p>免費的 Git 入門書。</p></li>
</ul>


<h3>References</h3>

<ul>
<li><p><a href="http://gitref.org/">Git Reference</a></p>

<p>很有用的 Git 指令參考文件。</p></li>
<li><p><a href="http://schacon.github.com/git/everyday.html">Everyday GIT With 20 Commands Or So</a></p>

<p>這個也是很棒的 Git 指令參考文件。</p></li>
<li><p><a href="http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide">Git for beginners: The definitive practical guide</a></p>

<p>將在 stackoverflow 網站上一些很棒的實戰心得收集起來的文章。如果想要找更多實戰心得的話，可以直接連到： <a href="http://stackoverflow.com/questions/tagged/git?sort=votes">Git Questions</a> 。</p></li>
<li><p><a href="http://rogerdudler.github.com/git-guide/">git - the simple guide</a></p>

<p>簡單明瞭的 Git 入門。</p></li>
</ul>


<h3>Tips</h3>

<ul>
<li><p><a href="http://caiustheory.com/automatically-deploying-website-from-remote-git-repository">Automatically Deploying Website From Remote Git Repository</a></p>

<p>利用 post-receive hook 來自動化佈署網站。</p></li>
<li><p><a href="https://plus.google.com/108375073252780151818/posts/8yTDEfYUHDJ">如何切換 Git Repo</a></p></li>
</ul>


<h2>Markdown Editor</h2>

<ul>
<li><p><a href="http://www.ctrlshift.net/project/markdowneditor/">Online Markdown Editor</a></p>

<p>在左方輸入 Markdown 語法，就可以在右方即時預覽的 Markdown 編輯器。</p></li>
<li><p><a href="http://joncom.be/experiments/markdown-editor/edit/">Markdown Editor</a></p>

<p>跟上面一樣，但提供了數種版面配置選項，也可以讓我們上傳 Markdown 文件編輯。</p></li>
</ul>


<h2>Desktop App</h2>

<ul>
<li><p><a href="http://netbeans.org/">NetBeans IDE</a></p>

<p>這個是目前我最得力的 PHP 開發助手。除了 PHP Class/Function 的自動完成與基本重構功能外，還加上了 PHPUnit/ZF/PHPDoc 等外部指令的支援。</p></li>
<li><p><a href="http://www.sublimetext.com/">Sublime Text 2</a></p>

<p>號稱可以取代 Textmate 的強大文字編輯器，因為它啟動速度快，又支援 SASS/CoffeeScript 語法，目前是我在 NetBeans 之外的另一個好助手。</p></li>
<li><p><a href="http://livereload.com/">LiveReload</a></p>

<p>這個 Mac 上的好用工具，可以幫我們監控專案中指定檔案類型的更新；通常是用在 CSS/SASS 及 JavaScript/CoffeeScript 這些檔案上。搭配瀏覽器的外掛程式後，就可以即時預覽這些檔案更動後的變化。</p></li>
<li><p><a href="http://clickontyler.com/virtualhostx/">VirtualHostX</a></p>

<p>用來管理 Mac 上 Apache VirtualHost 的小工具，這也是我在開發 PHP 專案的利器之一。 (如果是 Rails 開發者的話， <a href="http://www.webmonkey.com/2011/04/pow-simplify-ruby-on-rails-for-os-x/">Pow</a> 會是比較好的選擇。)</p></li>
<li><p><a href="http://www.sequelpro.com/">Sequel Pro</a></p>

<p>免費的圖形化介面 Mac MySQL Client ，是在本機操作中，我用來取代 <a href="http://www.phpmyadmin.net/home_page/index.php">phpMyAdmin</a> 的工具。</p></li>
<li><p><a href="http://www.sourcetreeapp.com/">SourceTree</a></p>

<p>除了用 Terminal 直接操作指令外，它是我在 Mac 上使用 Git 必備的 Client 工具。</p></li>
<li><p><a href="http://www.syntevo.com/smartsvn/index.html">SmartSVN</a></p>

<p>因為公司的版本控制系統是 Subversion ，因此這個 Mac Subversion Client 工具也是我目前最常使用的。</p></li>
</ul>


<p>更多好用的 Desktop 工具，可以參考龍哥 (高見龍) 的這篇文章：<a href="http://blog.eddie.com.tw/2012/01/04/my-toolbox/">我的工具箱</a>。</p>

<h2>結論</h2>

<p>這裡所羅列的資訊其實只是茫茫網海的冰山一角而已，我想一定還有更多更好用的工具與文件等待我們去發掘。</p>

<p>希望這篇文章能夠幫助大家在 Web 開發這條路上走得更順暢一些，也歡迎大家能夠分享自己常用的工具。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/web-link-share-20120122" />
    <updated>2012-01-22T17:03:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/web-link-share-20120122</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2012/01/get-twitter-follower-count-with-php/">Get Twitter Follower Count with PHP</a></li>
  <li><a href="http://phpmaster.com/understanding-the-command-design-pattern/">Understanding the Command Design Pattern</a></li>
  <li><a href="http://phpmaster.com/introduction-to-phpdoc/">Introduction to PhpDoc</a></li>
  <li><a href="http://www.laruence.com/2012/01/10/2469.html">如何设置一个严格30分钟过期的Session</a></li>
  <li><a href="http://krisjordan.com/micro-php-manifesto">Micro PHP&#39;s Missing Tenet</a></li>
  <li><a href="http://phpmaster.com/zend-queue/">Zend Job Queue</a></li>
  <li><a href="http://blogs.oracle.com/netbeansphp/entry/apigen_support_added">ApiGen support added (NetBeans for PHP)</a></li>
  <li><a href="http://net.tutsplus.com/articles/nettuts-quiz-9-the-absolute-basics-of-php/">Nettuts+ Quiz #9: The Absolute Basics of PHP</a></li>
  <li><a href="http://www.catswhocode.com/blog/10-super-useful-php-snippets-you-probably-havent-seen">10 super useful PHP snippets you probably haven’t seen</a></li>
  <li><a href="http://brian.moonspot.net/errors-adding-subtracting-dates">Errors when adding/subtracing dates using seconds</a></li>
  <li><a href="http://blog.stuartherbert.com/php/2012/01/17/comparing-contractlib-to-phps-built-in-assert/">Comparing ContractLib to PHP’s Built-In assert()</a></li>
  <li><a href="http://studio.zeuik.com/?p=1105">由樹的節點取得他的路徑</a></li>
  <li><a href="http://blog.everymansoftware.com/2012/01/command-invoker-pattern-with-openclosed.html">Command Invoker Pattern with the Open/Closed Principle</a></li>
  <li><a href="http://www.lornajane.net/posts/2012/building-a-restful-php-server-understanding-the-request">Building A RESTful PHP Server: Understanding the Request</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://phpmaster.com/zf-clamav/">ClamAV as a Validation Filter in Zend Framework</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/zend-framework-from-scratch-models-and-integrating-doctrine-orm/">Zend Framework from Scratch – Models and Integrating Doctrine ORM</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://bartaz.github.com/impress.js/">impress.js | presentation tool based on the power of CSS3 transforms and transitions in modern browsers</a></li>
  <li><a href="http://hangar.runway7.net/javascript-guide-to-objects-functions-scope-prototpyes-closures">The Javascript Guide to Objects, Functions, Closures and Scope</a></li>
  <li><a href="http://yeblon.com/the-craziest-javascript-implementations?ver=desktop">The craziest Javascript implementations on the web</a></li>
  <li><a href="http://svendvanderveken.wordpress.com/2012/01/04/introduction-to-clean-javascript-design/">Introduction to clean javascript design</a></li>
  <li><a href="http://www.nczonline.net/blog/2012/01/03/css-media-queries-in-javascript-part-1/">CSS media queries in JavaScript, Part 1</a></li>
  <li><a href="http://sharedfil.es/js-48hIfQE4XK.html">Vanilla JavaScript FTW</a></li>
  <li><a href="http://www.17html5.com/forum-58-1.html">LimeJS教程</a></li>
  <li><a href="http://coolshell.cn/articles/6441.html">Javascript 面向對象編程</a></li>
  <li><a href="http://killdream.github.com/blog/2011/10/understanding-javascript-oop/index.html">Understanding JavaScript OOP</a></li>
  <li><a href="http://java-success.blogspot.com/2012/01/javascript-interview-questions-and.html">JavaScript Interview Questions and Answers: Overview </a></li>
  <li><a href="http://css.dzone.com/articles/javascript-inheritance-example">JavaScript inheritance by example</a></li>
  <li><a href="http://meri-stuff.blogspot.com/2012/01/javascript-testing-with-jstestdriver.html">JavaScript Testing with JSTestDriver</a></li>
  <li><a href="http://www.script-tutorials.com/fullscreen-javascript-slide-navigation/">Fullscreen Javascript Slide navigation</a></li>
  <li><a href="https://github.com/codejoust/session.js">session.js</a></li>
  <li><a href="http://viralpatel.net/blogs/2012/01/create-zip-file-javascript.html">Create ZIP file in JavaScript.</a></li>
  <li><a href="http://thinkpixellab.com/pxloader/">PxLoader | A Simple JavasScript Preloader</a></li>
  <li><a href="http://www.kirupa.com/html5/advanced_random_numbers_js.htm">Advanced Random Numbers in JS</a></li>
  <li><a href="http://www.joezimjs.com/javascript/javascript-design-patterns-decorator/">JavaScript Design Patterns: Decorator</a></li>
  <li><a href="http://www.queness.com/post/10361/use-revealjs-to-create-css-3d-slideshow">Use Reveal.js to Create CSS 3D Slideshow</a></li>
  <li><a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/">The Top 10 Javascript MVC Frameworks Reviewed</a></li>
  <li><a href="http://query.tornado.no/">Tornado Query</a></li>
  <li><a href="http://blog.amt.in/role-of-javascript-in-building-faster-website">Role of JavaScript in Building Faster Websites</a></li>
  <li><a href="http://www.xpertdeveloper.com/2012/01/substr-vs-substring-javascript/">substr vs substring in Javascript</a></li>
  <li><a href="http://chinese.catchen.me/2012/01/javascript-part-1.html">如何設計大規模 JavaScript 應用 (Part 1 - 概覽)</a></li>
  <li><a href="http://favbulous.com/post/788/10-javascript-text-effects">10 Javascript Text Effects</a></li>
  <li><a href="http://www.queness.com/post/10477/chosen-javascript-plugin-to-create-user-friendly-select-boxes">Chosen Javascript Plugin to Create User-Friendly Select Boxes</a></li>
  <li><a href="http://gitview.logicalcognition.com/">Gitview</a></li>
  <li><a href="http://rezitech.github.com/syze/?utm_source=javascriptweekly&amp;utm_medium=email">syze: Think @media queries powered by Javascript</a></li>
  <li><a href="http://rezitech.github.com/syze/">syze: Think @media queries powered by Javascript</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/from-jquery-to-javascript-a-reference/">From jQuery to JavaScript: A Reference</a></li>
  <li><a href="http://headjs.com/">Head.js</a></li>
  <li><a href="http://blog.othree.net/log/2012/01/22/module-amd-requirejs/">Module, AMD, RequireJS</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://designmodo.com/jquery-techniques-tutorials/">35+ Excellent jQuery Animation Techniques and Tutorials</a></li>
  <li><a href="http://www.script-tutorials.com/10-fresh-jquery-plugins-december-2011/">10 fresh jQuery plugins</a></li>
  <li><a href="http://www.joezimjs.com/javascript/new-jquery-plugin-publish-subscribe/">New jQuery Plugin: Publish/Subscribe</a></li>
  <li><a href="http://www.webresourcesdepot.com/28-high-quality-jquery-plugins-for-building-responsive-websites/">28 High-Quality jQuery Plugins For Building Responsive Websites</a></li>
  <li><a href="http://www.script-tutorials.com/photo-album-with-jquery-fotorama/">Creating photo album with jQuery Fotorama</a></li>
  <li><a href="http://shama.github.com/jmpress.js/#/about">jmpress.js | a jQuery plugin to build a website on the infinite canvas</a></li>
  <li><a href="http://www.tripwiremagazine.com/2012/01/jquery-slider.html">180 Awesome jQuery Slider and Effects Roundup</a></li>
  <li><a href="http://www.egrappler.com/jquery-plugin-for-on-demand-search-box-seacrhmeme/">jQuery Plugin for On-demand Search Box: SeacrhMeme</a></li>
  <li><a href="http://webcloud.se/code/jQuery-Collapse/">jQuery Collapse</a></li>
  <li><a href="http://www.script-tutorials.com/isometric-interactive-interior-guide/">Isometric interactive interior guide</a></li>
  <li><a href="http://css-tricks.com/custom-events-are-pretty-cool/">Custom Events are Pretty Cool</a></li>
  <li><a href="http://tutorialzine.com/2011/12/countdown-jquery/">Making a jQuery Countdown Timer</a></li>
  <li><a href="http://www.jquery-plugins.net/FeedEK/FeedEK.html">FeedEk jQuery RSS/ATOM Feed Plugin</a></li>
  <li><a href="http://corymathews.com/jquery-custom-events/">jQuery Custom Events</a></li>
</ul>


<h2>Backbone.js</h2>


<ul>
  <li><a href="http://blog.chariotsolutions.com/2011/12/introduction-to-backbonejs-with-jquery.html">Introduction to Backbone.js with jQuery Mobile</a></li>
  <li><a href="http://weblog.bocoup.com/introducing-the-backbone-boilerplate">Introducing the Backbone Boilerplate</a></li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://www.catswhocode.com/blog/tutorials-and-snippets-to-get-started-with-coffeescript">Tutorials and snippets to get started with CoffeeScript</a></li>
  <li><a href="http://bloggemdano.blogspot.com/2012/01/introducing-expectthat-coffeescript.html">Introducing ExpectThat: A CoffeeScript Assertion Library</a></li>
  <li><a href="http://jashkenas.github.com/docco/">docco.coffee</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://www.hicss.net/i-know-you-do-not-know-the-negative-margin/">我知道你不知道的负Margin</a></li>
  <li><a href="http://goldengridsystem.com/">Golden Grid System</a></li>
  <li><a href="http://www.noupe.com/design/40-css-reference-websites-and-resources.html">40 CSS Reference Websites and Resources</a></li>
  <li><a href="http://designmodo.com/css-graph-chart-tutorials/">20 Useful CSS Graph and Chart Tutorials and Techniques</a></li>
  <li><a href="http://css1k.com/">CSS1K</a></li>
  <li><a href="https://github.com/jorgebastida/glue">jorgebastida/glue - GitHub</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://tjrus.com/iphone">iPhone 4 in pure CSS3!</a></li>
  <li><a href="http://lamberta.github.com/html5-animation/">Foundation HTML5 Animation with JavaScript</a></li>
  <li><a href="http://www.netmagazine.com/tutorials/getting-started-html5-geolocation">Getting started with HTML5 geolocation</a></li>
  <li><a href="http://www.script-tutorials.com/css3-multilevel-menu-with-transition-and-animation/">CSS3 multilevel menu with transition and animation</a></li>
  <li><a href="http://css.dzone.com/articles/css3-animated-photo-slider">CSS3 Animated Photo Slider</a></li>
  <li><a href="http://attasi.com/labs/picsselz/">Pure CSS3 Bitmap Graphics</a></li>
  <li><a href="http://acuriousanimal.com/blog/2011/09/26/crop-image-on-the-client-side-with-jcrop-and-html5-canvas-element/">Crop image on the client side with JCrop and HTML5 canvas element</a></li>
  <li><a href="http://www.script-tutorials.com/css3-optical-illusions/">CSS3 Optical Illusions</a></li>
  <li><a href="http://www.sitepoint.com/css3-cursor-styles/">Introducing the New Cursor Styles in CSS3</a></li>
  <li><a href="http://www.script-tutorials.com/analog-clock-with-pure-css3/">Analog Clock with Pure CSS3</a></li>
  <li><a href="http://www.red-team-design.com/practical-css3-tables-with-rounded-corners">Practical CSS3 tables with rounded corners</a></li>
  <li><a href="http://creativejs.com/2012/01/day-11-sprite-sheets/">Day 11 – Animating with sprite sheets</a></li>
  <li><a href="http://coding.smashingmagazine.com/2012/01/06/adventures-in-the-third-dimension-css-3-d-transforms/">Adventures In The Third Dimension: CSS 3D Transforms</a></li>
  <li><a href="http://css.dzone.com/articles/10-online-tools-simplify-html5">10 online tools to simplify HTML5 coding</a></li>
  <li><a href="http://www.red-team-design.com/stylish-css3-progress-bars">Stylish CSS3 progress bars</a></li>
  <li><a href="http://css.dzone.com/articles/circular-button-photo-mask">Circular Button with Photo Mask Using CSS</a></li>
  <li><a href="http://designmodo.com/css3-techniques-tutorials/">50 Excellent CSS3 Techniques and Tutorials for Beautiful Design</a></li>
  <li><a href="http://tympanus.net/codrops/2012/01/09/filter-functionality-with-css3/">Filter Functionality with CSS3</a></li>
  <li><a href="http://bloggerspath.com/html5-css3-animation-experiments/">15 HTML5 and CSS3 Experiments Incredible Enough for Brainchild</a></li>
  <li><a href="http://css-tricks.com/better-tabs-with-round-out-borders/">(Better) Tabs with Round Out Borders</a></li>
  <li><a href="http://blog.gerv.net/2011/05/html5_email_address_regexp/">HTML5 Email Address Regexp</a></li>
  <li><a href="http://tympanus.net/codrops/2012/01/11/css-buttons-with-pseudo-elements/">CSS Buttons with Pseudo-elements</a></li>
  <li><a href="http://www.terrenceryan.com/blog/post.cfm/a-custom-textarea-for-mobile-apps">A Custom Textarea for Finicky in HTML5</a></li>
  <li><a href="http://tutorials.jenkov.com/html5-canvas/state.html">HTML5 Canvas State and State Stack</a></li>
  <li><a href="http://www.sitepoint.com/html5-video-vs-html-video/">HTML5 Video vs. HTML Video</a></li>
  <li><a href="http://www.sitepoint.com/image-manipulation-with-html5-canvas-a-sliding-puzzle-2/">Image Manipulation with HTML5 Canvas: A Sliding Puzzle</a></li>
  <li><a href="http://css-tricks.com/youtube-popup-buttons/">YouTube Popup Buttons</a></li>
  <li><a href="http://www.script-tutorials.com/html5-canvas-custom-brush2/">HTML5 canvas – Custom brush #2</a></li>
  <li><a href="http://bloggerspath.com/ultimate-html5-cheat-sheet-for-web-developers/">An Ultimate HTML5 Cheat Sheet for Web Developers</a></li>
  <li><a href="http://smashinghub.com/7-essential-css3-tutorials-for-web-developers.htm">7 Essential CSS3 Tutorials For Web Developers</a></li>
  <li><a href="http://www.catswhocode.com/blog/8-examples-of-stunning-css3-text-effects">8 examples of stunning CSS3 text effects</a></li>
  <li><a href="http://tympanus.net/codrops/2012/01/17/sliding-image-panels-with-css3/">Sliding Image Panels with CSS3</a></li>
  <li><a href="http://www.jquery4u.com/dynamic-css-2/10-css-css3-resources-tools/">10 Must Know CSS and CSS3 Resources and Tools</a></li>
  <li><a href="http://www.inserthtml.com/2012/01/making-awesome-and-animated-menu-css/">Making an Awesome (and Animated) menu with just CSS!</a></li>
  <li><a href="http://www.netmagazine.com/features/developer-s-guide-html5-apis">The developer’s guide to the HTML5 APIs</a></li>
  <li><a href="http://designmodo.com/css3-jquery-loading-animations/">16 CSS3 and jQuery Loading Animations Solutions</a></li>
  <li><a href="http://usejquery.com/posts/create-a-self-caching-website-ready-for-offline-usage-with-html5-and-jquery">Create a self caching website ready for offline usage with HTML5 and jQuery</a></li>
  <li><a href="http://css.dzone.com/articles/can-sloppy-css3-make-your-site">Can &quot;Slopy&quot; CSS3 Make Your Site Look Good?</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://blog.codecentric.de/en/2012/01/continuous-integration-for-ios-projects-with-jenkins-ci/">Continuous Integration for iOS projects with Jenkins CI</a></li>
  <li><a href="http://www.softwaretestingmagazine.com/videos/unit-testing-on-ios/">Unit Testing on iOS</a></li>
  <li><a href="http://blog.8thlight.com/eric-meyer/2011/12/19/hello-ios-development.html">Hello iOS Development</a></li>
  <li><a href="http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-creating-an-awesome-carousel/">iOS SDK: Creating an Awesome Carousel</a></li>
  <li><a href="http://tuts.pinehead.tv/2012/01/13/jquery-mobile-default-back-button-silentscoll-and-another-look-at-swipe/">jQuery Mobile: Default Back Button, silentScoll(), and another look at swipe</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://perfectionkills.com/profiling-css-for-fun-and-profit-optimization-notes/">Profiling CSS for fun and profit. Optimization notes.</a></li>
  <li><a href="http://www.jepija.com/blog/a-clean-calendar-in-css3-jquery/">A clean calendar in CSS3 &amp; jQuery</a></li>
  <li><a href="http://www.terrenceryan.com/blog/post.cfm/css-tables-and-responsive-design">CSS Tables and Responsive Design</a></li>
  <li><a href="http://ckrack.github.com/fbootstrapp/">Fbootstrapp</a></li>
  <li><a href="http://www.bennadel.com/blog/2310-Using-The-RequireJS-Build-Optimizer-To-Concatenate-Modularized-CSS-Files.htm">Using The RequireJS Build / Optimizer To Concatenate Modularized CSS Files</a></li>
  <li><a href="http://coolshell.cn/articles/6470.html">由12306.cn談談網站性能技術 | 酷殼 - CoolShell.cn</a></li>
  <li><a href="http://www.alistapart.com/articles/building-twitter-bootstrap/">Building Twitter Bootstrap</a></li>
  <li><a href="http://www.queness.com/post/10465/7-amazing-interactive-infographics-created-with-html-css-and-javascript">7 Amazing Interactive Infographics Created With HTML, CSS and Javascript</a></li>
  <li><a href="http://www.smashingapps.com/2012/01/18/7-highly-useful-online-tools-for-website-validation-and-testing.html">7 Highly Useful Online Tools For Website Validation And Testing | Free and Useful Online Resources for Designers and Developers</a></li>
  <li><a href="http://css3.bradshawenterprises.com/demos/speed.php">Speed/framerate comparison between jQuery and CSS3 transitions</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://blog.eddie.com.tw/2012/01/06/heroku-the-best-cloud-platform-on-ruby-language/">Heroku ─ Ruby 程式語言的最佳雲端環境</a></li>
  <li><a href="http://rubysource.com/how-to-customize-twitter-bootstrap%E2%80%99s-design-in-a-rails-app/">How to Customize Twitter Bootstrap’s Design in a Rails app</a></li>
  <li><a href="http://vesperapps.com/">Vesper</a></li>
  <li><a href="http://www.softwaretestingmagazine.com/videos/4-steps-to-faster-ruby-on-rails-tests/">4 Steps to Faster Ruby on Rails Tests</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2012/01/repeating-and-scheduling-mysql-events/">Repeating and Scheduling MySQL Events</a></li>
  <li><a href="http://8byte8.com/blog/2012/01/text-search-in-mongodb/">Text search in MongoDB</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="https://gelnior.wordpress.com/2011/12/27/web-application-development-workflow-with-node-js/">Web application development workflow with Node.js</a></li>
  <li><a href="http://obvious.github.com/matador/">MVC Framework for Node — Matador</a></li>
  <li><a href="http://blog.amt.in/nide-a-nice-ide-for-nodejs">nide – A Nice IDE for node.js</a></li>
  <li><a href="http://blog.amt.in/shim-a-nodejs-app-simplifying-cross-browser-d">Shim – a node.js app simplifying Cross Browser/ Device Testing</a></li>
  <li><a href="http://architects.dzone.com/articles/nodeups-recent-podcast-nodejs">Node.js and NoSQL: What You Need to Know</a></li>
  <li><a href="http://blog.james-carr.org/2012/01/16/blog-rolling-with-mongodb-node-js-and-coffeescript/">Blog Rolling with MongoDB, Node.js and Coffeescript</a></li>
  <li><a href="https://github.com/gf3/sandbox">Sandbox - A nifty javascript sandbox for node.js </a></li>
  <li><a href="https://github.com/azer/node-virtualbox">node-virtualbox</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://unspace.ca/blog/duck-programming/">Duck Programming</a></li>
  <li><a href="http://blog.jetbrains.com/kotlin/2012/01/kotlin-web-demo-is-out/">Kotlin Web Demo is out!</a></li>
  <li><a href="http://www.javacodegeeks.com/2012/01/7-mistakes-of-software-testing.html">7 mistakes of software testing</a></li>
  <li><a href="http://techportal.ibuildings.com/2012/01/17/dpc-radio-advanced-oo-patterns/">DPC Radio: Advanced OO Patterns</a></li>
  <li><a href="http://www.simple-talk.com/dotnet/.net-framework/unit-testing-myths-and-practices/">Unit Testing Myths and Practices</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://favbulous.com/post/752/63-free-psd-ui-kits-for-quick-mockup">63 Free PSD UI Kits for Quick MockUp</a></li>
  <li><a href="http://bloggerspath.com/15-best-psd-to-htmlcss-tutorials-for-web-designers/">15 Best PSD to HTML/CSS Tutorials for Web Designers</a></li>
  <li><a href="http://www.randsinrepose.com/archives/2012/01/16/a_design_primer_for_engineers.html">A Design Primer for Engineers</a></li>
  <li><a href="http://speckyboy.com/2012/01/15/5-crucial-points-before-becoming-a-freelance-web-designer/">5 Crucial Points Before Becoming a Freelance Web Designer</a></li>
  <li><a href="http://www.techbang.com.tw/posts/8175-simple-and-elegant-20-america-switch-interface-design">20個美型開關介面設計，每天都在用，原來可以這麼好看</a></li>
  <li><a href="http://spyrestudios.com/31-super-unique-and-functional-website-navigation-menus/">31 Super-Unique and Functional Website Navigation Menus</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://peepcode.com/products/advanced-git">Advanced Git</a></li>
  <li><a href="http://mislav.uniqpath.com/2010/07/git-tips/">A few git tips you didn&#39;t know about</a></li>
  <li><a href="http://nelson.pixnet.net/blog/post/30293960">[投影片分享] Git 超新手入門</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://css.dzone.com/articles/load-balancing-apache">Load Balancing with Apache</a></li>
  <li><a href="http://www.ruanyifeng.com/blog/2012/01/a_bash_script_of_apache_log_analysis.html">處理Apache日誌的Bash腳本</a></li>
  <li><a href="http://www.opsbs.com/index.php/2011/12/my-favorite-shell-shortcuts/">My favorite shell shortcuts</a></li>
  <li><a href="http://pank.org/blog/2012/01/tcping.html">tcping</a></li>
  <li><a href="http://blog.hyfather.com/time-saving-bash-tricks">Time Saving Bash Tricks</a></li>
  <li><a href="http://blog.miniasp.com/post/2012/01/18/Linux-Windows-Ethernet-network-card-speed-and-duplex-settings.aspx">如何在 Windows 與 Linux 變更 Ethernet 網卡速度與雙工設定</a></li>
</ul>


<h2>Software</h2>


<ul>
  <li><a href="http://netbeans.dzone.com/nb-for-simple-apps">NetBeans Platform: For Simple Applications Too!</a></li>
  <li><a href="http://css-tricks.com/spriteright-giveaway/">SpriteRight Giveaway</a></li>
</ul>


<h2>Other</h2>


<ul>
  <li><a href="http://blog.eddie.com.tw/2012/01/04/my-toolbox/">我的工具箱</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Head First CSS Layout]]></title>
    <link href="http://www.jaceju.net/blog/archives/head_first_css_layout" />
    <updated>2012-01-04T23:56:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/head_first_css_layout</id>
    <content type="html"><![CDATA[<p>這是最近的讀書會報告，內容是有關 CSS 排版相關知識與實例分享。</p>

<p>以下是投影片的部份：</p>

<script src="http://speakerdeck.com/embed/4f01c08c119ba7004b00629d.js"></script>


<p>試著用 Head First 的風格來呈現，希望沒有畫虎不成反類犬。</p>

<p>實例的部份等影片整理好後再獻給大家。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/web-link-share-20120102" />
    <updated>2012-01-02T09:59:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/web-link-share-20120102</id>
    <content type="html"><![CDATA[<!-- more -->


<h2>PHP</h2>


<ul>
  <li><a href="http://www.codediesel.com/php/building-a-simple-parser-and-lexer-in-php/">Building a simple Parser and Lexer in PHP</a></li>
  <li><a href="http://edorian.posterous.com/textual-code-coverage-information-for-phpunit">Textual code coverage information for PHPUnit</a></li>
  <li><a href="http://chh.github.com/php-build/">php-build</a></li>
  <li><a href="http://www.laruence.com/2011/11/28/2317.html">PHP5.4中一个需要注意的变化(Chained string offsets)</a></li>
  <li><a href="http://www.rooftopsolutions.nl/blog/phpincludes">PHP Includes file generator</a></li>
  <li><a href="https://github.com/theseer/Autoload">PHP Autoload</a></li>
  <li><a href="http://css.dzone.com/articles/playing-new-php54-features">Playing with the new PHP5.4 features</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/11/30/a-guide-to-php-error-messages-for-designers/">A Guide To PHP Error Messages For Designers</a></li>
  <li><a href="http://giorgiosironi.blogspot.com/2011/12/phpunitselenium-111-has-been-released.html">PHPUnit_Selenium 1.1.1 has been released</a></li>
  <li><a href="http://till.klampaeckel.de/blog/archives/175-Cooking-PHPUnit-and-a-chef-solo-example-on-top.html">Cooking PHPUnit (and a chef-solo example on top)</a></li>
  <li><a href="http://jakefolio.com/2011/12/callback-filter-iterator-in-php/">Callback Filter Iterator in PHP 5.3/5.4</a></li>
  <li><a href="http://www.prodevtips.com/2011/12/05/php-style-empty-function-for-javascript/">PHP style empty function for JavaScript</a></li>
  <li><a href="http://tech.vg.no/2011/03/09/mocking-the-file-system-using-phpunit-and-vfsstream/">Mocking the file system using PHPUnit and vfsStream</a></li>
  <li><a href="http://tech.vg.no/2011/11/29/running-multiple-versions-of-phpunit/">Running multiple versions of PHPUnit</a></li>
  <li><a href="http://www.laruence.com/2011/12/06/2381.html">更简单的重现PHP Core的调用栈</a></li>
  <li><a href="http://blog.mayflower.de/archives/792-05.12.-Doctrine-2.html">Doctrine 2</a></li>
  <li><a href="http://elblinkin.info/2011/12/code-snippet-find-files-without-test-files/">Code Snippet: Find Files Without Test Files</a></li>
  <li><a href="http://www.devshed.com/c/a/PHP/Executing-Shell-Commands-with-PHP/">Executing Shell Commands with PHP</a></li>
  <li><a href="http://ilia.ws/archives/244-PHPs-Output-Buffering.html">PHP&#39;s Output Buffering</a></li>
  <li><a href="http://phpadvent.org/2011/integration-testing-by-wez-furlong">Integration Testing</a></li>
  <li><a href="http://phpadvent.org/2011/better-object-oriented-arrays-by-ryan-parman">Better Object-Oriented Arrays</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/build-an-admin-panel-with-the-fuel-php-framework/">Build an Admin Panel with the Fuel PHP Framework</a></li>
  <li><a href="http://www.littlehart.net/atthekeyboard/2012/12/12/better-http-request-response-in-php/">Better HTTP Request/Response in PHP</a></li>
  <li><a href="http://www.devshed.com/c/a/PHP/Sanitizing-Input-with-PHP/">Sanitizing Input with PHP</a></li>
  <li><a href="http://blog.mayflower.de/archives/785-15.12.-Using-custom-annotations-in-PHP.html">15.12. Using custom annotations in PHP</a></li>
  <li><a href="http://mwop.net/blog/on-error-handling-and-closures">On Error Handling and Closures</a></li>
  <li><a href="http://dev-tips.com/featured/4-fantastic-php-output-buffering-tricks-for-web-developers">4 Fantastic PHP Output Buffering Tricks for Web Developers</a></li>
  <li><a href="http://www.elevatelocal.co.uk/blog/secure-php-form-09084065">Secure PHP form</a></li>
  <li><a href="http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html">How big are PHP arrays (and values) really? (Hint: BIG!)</a></li>
  <li><a href="http://www.laruence.com/2011/12/19/2399.html">关于PHP浮点数你应该知道的(All ‘bogus’ about the float in PHP)</a></li>
  <li><a href="http://c9s.blogspot.com/2011/12/phpunittestmore-phpunit-is-great-unit.html">PHPUnit_TestMore</a></li>
  <li><a href="http://css.dzone.com/articles/using-couchdb-filesystem-php">Using CouchDb as a filesystem with PHP</a></li>
  <li><a href="http://phpadvent.org/2011/php-for-all-the-things-by-matt-graham">PHP for All the Things</a></li>
  <li><a href="http://www.sitepoint.com/php-54-web-server/">PHP 5.4′s New Built-in Web Server</a></li>
  <li><a href="http://www.nainomics.in/2011/12/7-habits-of-efficient-programmers.html">7 habits I learned to become more efficient programmer</a></li>
  <li><a href="http://jburrows.wordpress.com/2011/12/17/what-to-look-for-in-php-5-4-0/">Page not found « Randomness</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/12/php-final-keyword/">PHP Final Keyword Explained</a></li>
  <li><a href="http://www.laruence.com/2011/12/30/2435.html">PHP數組的Hash衝突實例</a></li>
  <li><a href="http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html">Supercolliding a PHP array</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://blog.mayflower.de/archives/799-06.12.-Doctrine-2-Zend-Framework-Integration.html">Doctrine 2 - Zend Framework Integration</a></li>
  <li><a href="http://www.techchorus.net/create-restful-applications-using-zend-framework">Create RESTful Applications Using The Zend Framework</a></li>
  <li><a href="http://css.dzone.com/articles/convert-non-ssl-ssl-links">Convert non-ssl to ssl links automatically and dynamically using Zend</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="https://gist.github.com/1230481/95f6facb74f51d089bea87eba0f470cf3bbed83a">Sudoku Solver in 140bytes</a></li>
  <li><a href="http://neyric.github.com/wireit/">WireIt - a Javascript Wiring Library</a></li>
  <li><a href="http://hpyer.cn/javascript-number-format.html">JavaScript 下四舍五入法、舍去法、进一法截取小数的方法</a></li>
  <li><a href="http://wavded.github.com/humane-js/">Humane JS</a></li>
  <li><a href="http://glittle.org/blog/smiley-slider/">smiley slider</a></li>
  <li><a href="http://adactio.com/journal/5042/">Clean conditional loading</a></li>
  <li><a href="http://favbulous.com/post/639/beautiful-and-consistent-web-forms-with-javascript-plugins">Beautiful And Consistent Web Forms With Javascript Plugins</a></li>
  <li><a href="http://thoughtsonscripts.blogspot.com/2011/12/javascript-prototype.html">JavaScript prototype</a></li>
  <li><a href="http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/">Extending JavaScript Natives</a></li>
  <li><a href="http://dev.opera.com/articles/view/introducing-ecmascript-5-1/">Introducing ECMAScript 5.1</a></li>
  <li><a href="http://darcyclarke.me/development/quick-tip-get-gravatar-images-from-emails-with-javascript/">Quick Tip: Get Gravatar Images from Emails with JavaScript</a></li>
  <li><a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/09/how-to-detect-mobile-device-users-in-your-web-site-javascript.aspx">How To: Detect Mobile Device Users In Your Web Site – JavaScript</a></li>
  <li><a href="http://dutherenverseauborddelatable.wordpress.com/2011/12/06/introducing-javascript-native-file-management/">Introducing JavaScript native file management</a></li>
  <li><a href="http://www.west-wind.com/weblog/posts/2011/Dec/08/A-Key-Code-Checker-for-DOM-Keyboard-Events">A Key Code Checker for DOM Keyboard Events</a></li>
  <li><a href="http://createjs.org/">Create — A new kind of web editing interface</a></li>
  <li><a href="http://www.dhtmlx.com/docs/products/dhtmlxChart/index.shtml">JavaScript Charts with Ajax Support - dhtmlxChart</a></li>
  <li><a href="http://itunes.apple.com/us/podcast/the-javascript-show/id442109513">The Javascript Show</a></li>
  <li><a href="http://phpadvent.org/2011/cross-origin-ajax-with-cors-by-david-walsh">Cross-Origin Ajax with CORS</a></li>
  <li><a href="http://rubysource.com/loccasions-giving-events-a-backbone/">Loccasions: Giving Events a Backbone</a></li>
  <li><a href="http://www.emberjs.com/">Ember.js</a></li>
  <li><a href="http://blog.mayflower.de/archives/816-19.12.-Test-Driven-JavaScript-Development.html">Test Driven JavaScript Development</a></li>
  <li><a href="http://weblogs.asp.net/dwahlin/archive/2011/12/19/using-the-javascript-prototype-property-to-structure-and-extend-code.aspx">Using the JavaScript Prototype Property to Structure and Extend Code</a></li>
  <li><a href="http://www.queness.com/post/10104/powerful-javascript-form-validation-plugins">Powerful Javascript Form Validation Plugins</a></li>
  <li><a href="http://clonn.blogspot.com/2011/12/javascript-regexp1.html">[分享] javascript RegExp.$1 正規表示法理論與範例</a></li>
  <li><a href="http://aaronhardy.com/javascript/javascript-architecture-backbone-js-events/">JavaScript Architecture: Backbone.js Events</a></li>
  <li><a href="http://ericbidelman.tumblr.com/post/14866798359/introducing-filer-js">Introducing filer.js</a></li>
  <li><a href="http://www.quirksmode.org/js/events_advanced.html">Javascript - Advanced event registration models</a></li>
  <li><a href="http://css-tricks.com/get-value-of-css-rotation-through-javascript/">Get Value of CSS Rotation through JavaScript</a></li>
  <li><a href="http://smashinghub.com/top-50-jquery-plugins-and-tutorials-from-2011.htm">Top 50 JavaScript,jQuery Plugins and Tutorials From 2011</a></li>
  <li><a href="http://dotnet.dzone.com/news/javascript-c-developers-module">JavaScript for C# developers: the Module Pattern (part 1)</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://blog.codeschool.com/post/13159446212/jquery-air">jQuery Air: First Flight Free!</a></li>
  <li><a href="http://facedetection.jaysalvat.com/#">Face Detection jQuery Plugin</a></li>
  <li><a href="http://www.sitepoint.com/efficient-jquery-selectors/">5 Tips for More Efficient jQuery Selectors</a></li>
  <li><a href="http://www.catswhocode.com/blog/10-awesome-jquery-snippets">10 awesome jQuery snippets</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/element-storage-with-jquery/">Element Data Storage with jQuery</a></li>
  <li><a href="http://www.jqueryrain.com/2011/11/14-best-jquery-clock-tutorials-both-analog-and-digital-clocks/">14 Best jQuery Clock Tutorials both analog and digital clocks</a></li>
  <li><a href="http://www.noupe.com/jquery/40-useful-and-fresh-jquery-plugins.html">40+ Useful and Fresh jQuery Plugins</a></li>
  <li><a href="http://www.emposha.com/javascript/fcbklistselection-like-facebook-friends-selector.html">fcbkListSelection v 1.1 – like facebook friends selector</a></li>
  <li><a href="http://tutorialzine.com/2011/11/pretty-switches-css3-jquery/">Shiny Knob Control with jQuery and CSS3</a></li>
  <li><a href="http://medialize.github.com/jQuery-contextMenu/">jQuery contextMenu Plugin</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/creating-a-windows-like-interface-with-jquery-ui/">Create a Windows-like Interface with jQuery UI</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/12/05/sisyphus-js-client-side-drafts-and-more/">Auto-Save User&#39;s Input In Your Forms With HTML5 and Sisyphus.js</a></li>
  <li><a href="http://polarblau.github.com/suggest/">jQuery.suggest plugin</a></li>
  <li><a href="http://www.script-tutorials.com/creating-photo-album-with-jquery-chop-slider/">Creating photo album with jQuery Chop Slider</a></li>
  <li><a href="http://www.josscrowcroft.com/projects/motioncaptcha-jquery-plugin/">MotionCAPTCHA – Stop Spam, Draw Shapes</a></li>
  <li><a href="http://blogs.infragistics.com/blogs/jordan_tsankov/archive/2011/12/07/using-column-summaries-in-the-jquery-iggrid.aspx">Using Column Summaries in the jQuery igGrid</a></li>
  <li><a href="http://www.queness.com/community-news/10118/45-fresh-jquery-plugins-and-tutorials">45 Fresh jQuery Plugins and Tutorials</a></li>
  <li><a href="http://designmodo.com/jquery-mobile-development/">18 jQuery Mobile Development Tips and Tutorials</a></li>
  <li><a href="http://24ways.org/2011/your-jquery-now-with-less-suck">24 ways: Your jQuery: Now With 67% Less Suck</a></li>
  <li><a href="http://collaborable.com/blog/disqus-jquery-hack-awesome-ux">Disqus + jQuery Hack = Awesome UX</a></li>
  <li><a href="http://www.blog.highub.com/decoding-jquery/">Decoding jQuery</a></li>
  <li><a href="http://css.dzone.com/articles/jquery-plugins-jstestdriver">jQuery plugins with jsTestDriver</a></li>
  <li><a href="http://codershelpdesk.com/2011/12/06/8-highly-useful-jquery-form-validation/">8 Highly Useful jQuery Form Validation</a></li>
  <li><a href="http://webdesign14.com/85-best-jquery-tutorials-2011/">85 Best jQuery Tutorials 2011</a></li>
  <li><a href="http://hasin.me/2011/12/20/jquery-mouse-direction-plugin/">jQuery Mouse Direction Plugin</a></li>
  <li><a href="http://wezfurlong.org/blog/2011/dec/jquery-tools-form-validator-and-twitter-bootstrap/">jQuery Tools Form Validator and Twitter Bootstrap</a></li>
  <li><a href="http://www.learningjquery.com./2011/12/using-jquerys-pushstack-for-reusable-dom-traversing-methods">Using jQuery’s .pushStack() for reusable DOM traversing methods</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/12/event-delegation-in-jquery/">Event Delegation in jQuery</a></li>
  <li><a href="http://mobipick.sustainablepace.net/">Mobi Pick - An Android-style datepicker widget for jQuery Mobile</a></li>
  <li><a href="http://viralpatel.net/blogs/category/javascript/jquery">JQuery Tutorials, Tips &amp; Tricks</a></li>
  <li><a href="http://www.rrpowered.com/2011/12/safe-submit-with-jquery/">Safe submit with jQuery</a></li>
  <li><a href="http://fuelyourcoding.com/jquery-plugin-design-patterns-part-i/">jQuery Plugin Design Patterns: Part I</a></li>
  <li><a href="http://css-tricks.com/custom-events-are-pretty-cool/">Custom Events are Pretty Cool</a></li>
  <li><a href="http://discussion.oslund.ca/2011/01/a-simple-jquery-ajax-autosuggest-plugin/">An Easy-To-Use jQuery-Ajax Autosuggest Plugin</a></li>
  <li><a href="http://spyrestudios.com/33-fresh-jquery-and-css3-tutorials/">33 Fresh jQuery And CSS3 Tutorials</a></li>
  <li><a href="http://spyrestudios.com/how-to-style-ios-sliding-checkboxes-with-jquery/">How to Style iOS Sliding Checkboxes with jQuery</a></li>
  <li><a href="http://www.developerdrive.com/2011/12/switch-on-with-jquerys-new-event-methods/">Switch on with jQuery&#39;s new event methods</a></li>
  <li><a href="http://masonry.desandro.com/">jQuery Masonry</a></li>
  <li><a href="http://tutorialzine.com/2011/12/countdown-jquery/">Making a jQuery Countdown Timer</a></li>
  <li><a href="http://spyrestudios.com/31-fantastic-new-jquery-plugins-for-web-developers/">31 Fantastic New jQuery Plugins for Web Developers</a></li>
  <li><a href="http://blazejklisz.pl/blog/article/attaching-an-event-to-a-forms-elements-inside-an-iframe-with-a-use-of-jquery">Attaching an event to a form&#39;s elements inside an iframe with a use of jQuery.</a></li>
  <li><a href="http://www.moretechtips.net/2011/12/22-most-popular-jquery-plugins-of-2011.html">22 Most Popular jQuery Plugins of 2011</a></li>
</ul>


<h2>Backbone.js</h2>


<ul>
  <li><a href="http://coenraets.org/blog/2011/12/backbone-js-wine-cellar-tutorial-part-1-getting-started/">Backbone.js Wine Cellar Tutorial — Part 1: Getting Started</a></li>
  <li><a href="http://coenraets.org/blog/2011/12/backbone-js-wine-cellar-tutorial-%E2%80%94-part-2-crud/">Backbone.js Wine Cellar Tutorial — Part 2: CRUD</a></li>
  <li><a href="http://coenraets.org/blog/2011/12/backbone-js-wine-cellar-tutorial-%E2%80%94-part-3-deep-linking-and-application-states/">Backbone.js Wine Cellar Tutorial — Part 3: Deep Linking and Application States</a></li>
  <li><a href="http://lostechies.com/derickbailey/2011/12/16/composite-javascript-applications-with-backbone-and-backbone-marionette/">Composite JavaScript Applications With Backbone And Backbone.Marionette</a></li>
  <li><a href="http://www.ibm.com/developerworks/library/wa-backbonejs/index.html">Getting started with Backbone</a></li>
  <li><a href="http://lostechies.com/derickbailey/2011/12/15/searching-with-a-backbonejs-collection/">Searching With A BackboneJS Collection</a></li>
  <li><a href="http://backbonescreencasts.com/">Backbone.js Screencasts</a></li>
  <li><a href="http://freshbrewedcode.com/jonathancreamer/2011/12/09/backbonejs-modular-app-using-requirejs/">BackboneJS modular app using RequireJS</a></li>
  <li><a href="http://blog.carbonfive.com/2011/12/19/exploring-client-side-mvc-with-backbonejs/">Exploring Client-side MVC with Backbone.js</a></li>
  <li><a href="https://github.com/addyosmani/backbone-fundamentals">Backbone.js Fundamentals</a></li>
  <li><a href="http://ricostacruz.com/backbone-patterns/">Backbone patterns</a></li>
  <li><a href="http://lostechies.com/derickbailey/2011/12/27/the-responsibilities-of-the-various-pieces-of-backbone-js/">The Responsibilities Of The Various Pieces Of Backbone.js</a></li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://www.alistapart.com/articles/getting-started-with-sass/">Getting Started with Sass</a></li>
  <li><a href="http://www.ibm.com/developerworks/web/library/wa-coffee1/index.html">Your first cup of CoffeeScript, Part 1: Getting started</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://coding.smashingmagazine.com/2011/11/24/how-to-set-up-a-print-style-sheet/">How To Set Up A Print Style Sheet</a></li>
  <li><a href="http://css-tricks.com/15153-new-navigation-new-primary-sponsor/">New Navigation / New Primary Sponsor</a></li>
  <li><a href="http://css-tricks.com/15358-numbering-in-style/">Numbering In Style</a></li>
  <li><a href="http://bricss.net/post/13884376788/the-css-profilers-are-coming">The CSS profilers are coming!</a></li>
  <li><a href="http://css.dzone.com/articles/what%e2%80%99s-new-css-4-selectors">What’s new in CSS 4 selectors</a></li>
  <li><a href="http://www.bradshawenterprises.com/blog/2011/speed-up-writing-css-backgrounds/">Speed up writing CSS backgrounds</a></li>
  <li><a href="http://css-tricks.com/multiple-attribute-values/">Multiple Attribute Values</a></li>
  <li><a href="http://css-tricks.com/adobe-like-arrow-headers/">Adobe-like Arrow Headers</a></li>
  <li><a href="http://css-tricks.com/the-checkbox-hack/">Stuff you can do with the &quot;Checkbox Hack&quot;</a></li>
  <li><a href="http://css.dzone.com/articles/20-top-css-frameworks">20+ Modern CSS Frameworks</a></li>
  <li><a href="http://calendar.perfplanet.com/2011/css-selector-performance-has-changed-for-the-better/">CSS Selector Performance has changed! (For the better)</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://www.script-tutorials.com/pure-css3-slider/">Pure CSS3 Slider</a></li>
  <li><a href="http://css.dzone.com/articles/introduction-html5-web-workers">Introduction to the HTML5 Web Workers: the JavaScript multithreading approach</a></li>
  <li><a href="http://hacks.mozilla.org/2011/11/screencast-css-3d-rollover-with-fallback-for-older-browsers/">Screencast: CSS 3D rollover with fallback for older browsers ✩ Mozilla Hacks</a></li>
  <li><a href="http://www.script-tutorials.com/creating-new-html5css3-single-page-layout-rock-portal/">Creating new HTML5&amp;CSS3 single page layout – Rock portal</a></li>
  <li><a href="http://css.dzone.com/articles/drag-and-drop-uploading">HTML5 Drag and Drop uploading</a></li>
  <li><a href="http://www.noupe.com/design/40-beautiful-free-html5-css3-templates.html">40 Beautiful Free HTML5 &amp; CSS3 Templates</a></li>
  <li><a href="http://www.script-tutorials.com/html5-3d-circle-text-with-shadows/">Creating HTML5 3D circle text with shadows</a></li>
  <li><a href="http://www.wagon-bertrand.fr/southParkCSS3.html">South Park en CSS3</a></li>
  <li><a href="http://www.script-tutorials.com/html5-animation-patterns-with-loops/">HTML5 animation – patterns with loops</a></li>
  <li><a href="http://code.google.com/p/html5security/">HTML5 Security Cheatsheet</a></li>
  <li><a href="http://css.dzone.com/articles/using-html5s-pagevisibility">Using HTML5&#39;s PageVisibility API</a></li>
  <li><a href="http://msdn.microsoft.com/en-us/magazine/hh653584.aspx">HTML5 - Responsive Web Design</a></li>
  <li><a href="http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/">What You Need To Know About The HTML5 Slider Element</a></li>
  <li><a href="http://www.script-tutorials.com/pure-html5-file-upload/">Pure HTML5 file upload</a></li>
  <li><a href="http://msdn.microsoft.com/en-us/magazine/hh580735.aspx">Building HTML5 Applications - Integrating Geolocation into Web Applications</a></li>
  <li><a href="http://www.sagarganatra.com/2011/11/using-html5s-pagevisibility-api.html">Using HTML5&#39;s PageVisibility API</a></li>
  <li><a href="http://blogs.msdn.com/b/eternalcoding/archive/2011/12/06/css3-transitions.aspx">Introduction to CSS3 Transitions</a></li>
  <li><a href="http://www.cnbeta.com/articles/165363.htm">HTML5（目前）無法幫你實現的五件事</a></li>
  <li><a href="http://www.red-team-design.com/css3-pricing-table">CSS3 pricing table</a></li>
  <li><a href="http://line25.com/tutorials/how-to-create-a-stylish-drop-cap-effect-with-css3">How To Create a Stylish Drop Cap Effect with CSS3</a></li>
  <li><a href="http://demosthenes.info/blog/446/Turn-Pictures-Into-Postage-Stamps-With-CSS3-border-image">Turn Images Into Postage Stamps With CSS3 border-image</a></li>
  <li><a href="http://bejeweled.popcap.com/html5/0.9.12.9490/html5/Bejeweled.html">Bejeweled</a></li>
  <li><a href="http://www.sitepoint.com/top-5-best-practices-for-building-html5-games%e2%80%a6in-action/">Top 5 Best Practices for Building HTML5 Games…In Action!</a></li>
  <li><a href="http://bloggerspath.com/html5-css3-video-tutorials-december-2011/">25 HTML5 &amp; CSS3 Video Tutorials for Novice Web Developers</a></li>
  <li><a href="http://designmodo.com/html5-frameworks-template-tools/">Useful HTML5 Frameworks, Template Generators and Tools</a></li>
  <li><a href="http://css.dzone.com/articles/5-great-html5-games">5 Great HTML5 Games</a></li>
  <li><a href="http://www.script-tutorials.com/html5-face-builder/">HTML5 Face Builder</a></li>
  <li><a href="http://www.scirra.com/blog/64/why-you-shouldnt-use-mp3-in-your-html5-games">Why you shouldn&#39;t use MP3 in your HTML5 games</a></li>
  <li><a href="http://www.script-tutorials.com/html5-and-games/">HTML5 and Games</a></li>
  <li><a href="http://html5advent2011.digitpaint.nl/16/index.html">Amazing canvas pixels</a></li>
  <li><a href="http://tjrus.com/iphone">iPhone4 on pure CSS3!!!</a></li>
  <li><a href="http://www.kavoir.com/2011/12/css-make-text-to-wrap.html">CSS: Make &lt;pre&gt; Text to Wrap</a></li>
  <li><a href="http://css.dzone.com/articles/how-create-pure-css3-slideshow">How to Create a Pure CSS3 Slideshow</a></li>
  <li><a href="http://css.dzone.com/articles/how-create-offline-html5-web">How to create offline HTML5 web apps in 5 easy steps</a></li>
  <li><a href="http://css.dzone.com/articles/3d-experience-browser-threejs">3D experience in a browser with Three.js</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/say-hello-to-css3-filters/">Say Hello to CSS3 Filters</a></li>
  <li><a href="http://www.qianduan.net/what-is-webkit-filter.html">-webkit-filter是神马？</a></li>
  <li><a href="http://www.cssrex.com/tips-tricks/how-to-create-3d-text-using-css3/">How To Create 3D Text using CSS3</a></li>
  <li><a href="http://css-tricks.com/3d-text-tower/">3D Text Tower</a></li>
  <li><a href="http://tympanus.net/codrops/2011/12/26/css3-lightbox/">CSS3 Lightbox</a></li>
  <li><a href="http://www.infoq.com/presentations/Angry-Birds-on-HTML5">Angry Birds on HTML5</a></li>
  <li><a href="http://blog.freelancer-id.com/2011/12/26/how-to-drag-and-drop-with-html5/">How to: Drag and Drop with HTML5</a></li>
  <li><a href="http://www.script-tutorials.com/css3-christmas-tree-with-snow/">CSS3 Christmas Tree with Snow</a></li>
  <li><a href="http://css.dzone.com/articles/introduction-html5-domstorage">Introduction to HTML5 DOMStorage API with Example</a></li>
  <li><a href="http://designmodo.com/online-html5-tools/">23 Useful Online HTML5 Tools</a></li>
  <li><a href="http://www.techrepublic.com/blog/webmaster/css3-technology-replaces-javascript-functionality/1037">CSS3 technology replaces JavaScript functionality</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://www.9lessons.info/2011/12/jquery-mobile-framework-tutorial.html">jQuery Mobile Framework Tutorial.</a></li>
  <li><a href="http://blog.amt.in/touchdb-a-slim-database-engine-for-your-mobil">TouchDB - A slim Database engine for your Mobile App</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://stackparts.com/">stackparts</a></li>
  <li><a href="http://hyperpolyglot.org/scripting">Scripting Languages: PHP, Perl, Python, Ruby</a></li>
  <li><a href="http://coolshell.cn/articles/5537.html">一些文章资源和趣闻</a></li>
  <li><a href="http://net.tutsplus.com/articles/web-roundups/50-practical-problem-solving-items-from-themeforest/">50 Practical, Problem Solving Items</a></li>
  <li><a href="http://www.aliued.com/2011/11/28/451/">COMMENT IN HTML</a></li>
  <li><a href="http://css-tricks.com/video-screencasts/102-braindump-on-responsive-web-design/">#102: Braindump on Responsive Web Design</a></li>
  <li><a href="http://java.dzone.com/articles/basic-mistakes-database">Basic Mistakes in Database Testing</a></li>
  <li><a href="http://www.slideshare.net/vagmi/building-single-page-apps-with-backbonejs-coffeescript-and-rails-31">Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1</a></li>
  <li><a href="http://webdesignhabits.com/85-amazing-showcase-of-responsive-web-design/">85 Amazing Showcase of Responsive Web Design</a></li>
  <li><a href="http://reference.sitepoint.com/css/mediaqueries">Media Queries</a></li>
  <li><a href="http://demo.solemone.de/overflow-image-with-vertical-centering-for-responsive-web-design/">Overflow Image with vertical centering for Responsive Web Design</a></li>
  <li><a href="http://www.kendoui.com/">Kendo UI - The Art of Web Development</a></li>
  <li><a href="http://css-tricks.com/15276-the-script-tag/">The Script Tag</a></li>
  <li><a href="http://hacks.mozilla.org/2011/11/developer-tools-in-firefox-aurora-10/">Developer Tools in Firefox Aurora 10</a></li>
  <li><a href="http://martinkool.com/post/13629963755/firebug-on-ipad-and-iphone">How to use Firebug on your iPad and iPhone</a></li>
  <li><a href="http://coolshell.cn/articles/6043.html">Web開發中需要瞭解的東西</a></li>
  <li><a href="http://css-tricks.com/15437-html-forms-in-html-emails/">HTML Forms in HTML Emails</a></li>
  <li><a href="http://webdesignerwall.com/tutorials/responsive-design-in-3-steps">Responsive Design in 3 Steps</a></li>
  <li><a href="http://blog.mayflower.de/archives/800-07.12.-One-click-Deployment.html">07.12. One-click Deployment</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/02/reliable-cross-browser-testing-part-1-internet-explorer/">Reliable Cross-Browser Testing, Part 1: Internet Explorer</a></li>
  <li><a href="http://coenraets.org/blog/2011/10/sample-application-with-jquery-mobile-and-phonegap/">Sample Application using jQuery Mobile and PhoneGap</a></li>
  <li><a href="http://designbeep.com/2011/06/28/18-useful-web-based-code-editors-for-developers/">18 Useful Web Based Code Editors for Developers</a></li>
  <li><a href="http://www.qianduan.net/html-special-characters-daquan.html">HTML特殊字符大全</a></li>
  <li><a href="http://www.developerdrive.com/2011/12/designing-a-clean-website-part-2-the-layout/">Designing a Clean Website Part 2: The Layout</a></li>
  <li><a href="http://getfirebug.com/wiki/index.php/Firebug_Extensions">Firebug Extensions</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/12/15/six-css-layout-features-to-look-forward-to/">Six CSS Layout Features To Look Forward To</a></li>
  <li><a href="http://css.dzone.com/articles/7-new-techniques-every-web">7 new techniques every web developer should know</a></li>
  <li><a href="http://www.456bereastreet.com/archive/201112/how_to_adjust_an_iframe_elements_height_to_fit_its_content/">How to adjust an iframe element’s height to fit its content</a></li>
  <li><a href="http://www.andismith.com/blog/2011/11/25-dev-tool-secrets/">25 Secrets of the Browser Developer Tools</a></li>
  <li><a href="http://tutorialzine.com/2011/12/how-to-block-adblock/">How to Block Adblock</a></li>
  <li><a href="http://thoughtsonscripts.blogspot.com/2011/12/xss-cross-site-scripting-attack.html">Thoughts On javaScript: XSS: Cross Site Scripting attack</a></li>
  <li><a href="http://jodd.org/doc/lagarto/htmlstapler.html">Html Stapler</a></li>
  <li><a href="http://net.tutsplus.com/articles/news/recently-in-web-development-december-edition/">Recently in Web Development (December Edition)</a></li>
  <li><a href="http://seancoates.com/blogs/http-1-and-the-connection-header">HTTP 1.0 and the Connection header</a></li>
  <li><a href="http://net.tutsplus.com/articles/general/ten-new-years-resolutions-every-web-developer-should-make/">10 New Year’s Resolutions Every Web Developer Should Make</a></li>
  <li><a href="http://smashinghub.com/top-50-free-online-web-apps-for-designers-and-developers-2011.htm">Top 50 Free Online Web Apps For Designers and Developers From 2011</a></li>
  <li><a href="http://cnborn.net/docs/getting_real/index.html">Getting Real</a></li>
  <li><a href="http://designmodo.com/firefox-add-ons-web-developers/">20+ Useful Firefox Add-ons for Web-developers</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://www.openfoundry.org/tw/tech-column/8534-rubygems-manage-your-gems#.TtiDA5vG9OU.plurk">RubyGems─管理你的紅寶石</a></li>
  <li><a href="http://kresimirbojcic.com/2011/12/02/faking-multiple-blocks-in-ruby.html">Faking Multiple Blocks in Ruby</a></li>
  <li><a href="http://www.horsesaysinternet.com/code/rails-is-not-for-beginners/">Rails Is Not For Beginners</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2011/11/row-locking-with-mysql/">Row Locking With MySQL</a></li>
  <li><a href="http://truelogic.org/wordpress/2011/12/08/complete-solution-to-migrate-a-large-database-sql-file-in-mysql/">Complete solution to migrate a large database sql file in MySql</a></li>
  <li><a href="http://www.mysqlperformanceblog.com/2011/12/16/statement-based-replication-with-stored-functions-triggers-and-events/">Statement based replication with Stored Functions, Triggers and Events</a></li>
  <li><a href="http://huoding.com/2011/12/18/139">MySQL高可用性大殺器之MHA</a></li>
  <li><a href="http://www.engineyard.com/blog/2011/mongodb-best-practices/">MongoDB Best Practices</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="http://cnodejs.org/blog/?p=317">基于node的VPS简易流量监控</a></li>
  <li><a href="http://blog.wu-boy.com/2011/11/node-version-management/">Node.js Version Management 多版本管理</a></li>
  <li><a href="http://www.i-programmer.info/programming/javascript/3400-getting-started-with-nodejs.html">Getting Started with Node.js</a></li>
  <li><a href="http://www.webresourcesdepot.com/the-awesome-node-js-and-its-gang/">The Awesome Node.js And Its Gang</a></li>
  <li><a href="http://roguejs.com/2011-11-30/console-colors-in-node-js/">Console colors in node.js</a></li>
  <li><a href="http://www.catonmat.net/blog/nodejs-modules-dnode/">Node.js modules you should know about: dnode</a></li>
  <li><a href="http://www.catonmat.net/blog/nodejs-modules-hashish/">Node.js modules you should know about: hashish</a></li>
  <li><a href="http://www.slideshare.net/the_undefined/nodejs-best-practices-10428790">Node.js - Best practices</a></li>
  <li><a href="http://www.catonmat.net/blog/nodejs-modules-read/">Node.js modules you should know about: read</a></li>
  <li><a href="http://www.2ality.com/2011/12/nodejs-shell-scripting.html">Write your shell scripts in JavaScript, via Node.js</a></li>
  <li><a href="http://core-js.org/guide">CoreJS — Web Framework</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://www.vincehuston.org/dp/">Huston Design Patterns</a></li>
  <li><a href="http://jodd.org/doc/jerry/index.html">Jerry - jQuery in Java.</a></li>
  <li><a href="http://www.makinggoodsoftware.com/2011/12/15/how-to-write-efficient-unit-tests-5-principles-for-unit-testing/">How to write efficient unit tests. 5 principles for unit testing.</a></li>
  <li><a href="http://adamloving.com/internet-programming/10x-developers">10 habits of 10x developers</a></li>
  <li><a href="http://avdi.org/classifier/">The Design Pattern Classifier</a></li>
</ul>


<h2>Python</h2>


<ul>
  <li><a href="http://blog.eddie.com.tw/2011/10/21/learn-python-and-django-from-the-beginning/">Learn Python and Django from the Beginning</a></li>
  <li><a href="http://mirnazim.org/writings/python-ecosystem-introduction/">Python Ecosystem - An Introduction</a></li>
  <li><a href="http://dpip.testingperspective.com/">Design Patterns In Python</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://jthoenes.bergischweb.de/2011/11/24/14-golden-eggs-of-good-ui-design/">Golden Eggs of Good UI Design</a></li>
  <li><a href="http://smashinghub.com/25-creative-handwriting-used-in-web-designs.htm">25 Creative HandWriting Used in Web Designs</a></li>
  <li><a href="http://www.lis186.com/?p=2293">[簡報] UI於現階段與未來的應用趨勢</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://www.igvita.com/2011/12/19/dont-push-your-pull-requests/">Don’t “Push” Your Pull Requests</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://smashinghub.com/10-free-networking-monitoring-tools.htm">10 Free Networking Monitoring Tools</a></li>
  <li><a href="http://www.kavoir.com/2011/12/ifmoduleifmodule-in-htaccess.html">&lt;IfModule&gt;&lt;/IfModule&gt; in .htaccess</a></li>
  <li><a href="http://blog.teatime.com.tw/1/post/383">Nginx/FastCGI/PHP-FPM 相關設定</a></li>
  <li><a href="http://blog.gslin.org/archives/2011/12/12/2800/%E5%90%8C%E6%99%82%E7%94%A8-mod_deflate-%E8%88%87-mod_fastcgi-%E6%89%80%E7%94%A2%E7%94%9F%E7%9A%84%E5%95%8F%E9%A1%8C/">同時用 mod_deflate 與 mod_fastcgi 所產生的問題…</a></li>
  <li><a href="http://advancedphptutorial.blogspot.com/2011/12/how-to-remove-indexphp-from-url-using.html">How to remove index.php from url using .htaccess (mod_rewrite)</a></li>
  <li><a href="http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html">SSH原理与运用（一）：远程登录</a></li>
  <li><a href="http://wowubuntu.com/ssh-tips.html">16 条技巧让你更高效使用 SSH [技巧]</a></li>
  <li><a href="http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html">SSH原理与运用（二）：远程操作与端口转发</a></li>
</ul>


<h2>Security</h2>


<ul>
  <li><a href="http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/">HTML scriptless attacks</a></li>
  <li><a href="http://coolshell.cn/articles/6193.html">CSDN明文口令洩露的啟示</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-12-23-info-sec-notes-20111222.aspx">資安新聞筆記-開發網站前該知道的二三事</a></li>
</ul>


<h2>Software</h2>


<ul>
  <li><a href="http://www.cnblogs.com/acloud/archive/2011/10/30/2229164.html">程序员应该知道的100个vim命令</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopress Blog Quick Operator]]></title>
    <link href="http://www.jaceju.net/blog/archives/octopress-blog-quick-operator" />
    <updated>2011-11-26T13:51:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/octopress-blog-quick-operator</id>
    <content type="html"><![CDATA[<p>在調整 Octopress 的過程中，找到一篇不錯的參考文章：<a href="http://hychen.wuweig.org/blog/2011/11/13/huan-dao-octopress/">換到octopress</a> 。</p>

<!-- more -->


<p>不過原作者的指令在操作上比較不適合我，因此我將它稍作了改良：</p>

<div><script src='https://gist.github.com/1395104.js?file=blog'></script>
<noscript><pre><code>#!/bin/bash
# Author: Hsin-Yi Chen &lt;ossug.hychen AT gmail.com&gt;
# Modified: Jace Ju
# http://hychen.wuweig.org/blog/2011/11/13/huan-dao-octopress/
ERRMSG_WRONGDIR='You are not under octopress directory.'
[ ! -f _config.yml ] &amp;&amp; echo ${ERRMSG_WRONGDIR} &amp;&amp; exit

BLOGDIR=${PWD}

# Deploy contents
deploy () {
  rake gen_deploy
}

# Upgrade octopress source
update () {
  echo 'Upgrading octopress source...'
  mv _config.yml _config.old.yml
  git pull octopress master
  bundle install
  rake update_source
  rake update_style
  [ -f _config.yml ] &amp;&amp; mv _config.yml _config.new.yml
  mv _config.old.yml _config.yml
}

# Launch preview server
# @param: post title
preview () {
  local title=${1?&quot;&quot;}
  [ ! &quot;$title&quot; == &quot;&quot; ] &amp;&amp; rake isolate[&quot;${title}&quot;]
  rake preview
}

# Upgrade whole site
upgrade () {
  update
  deploy
}

# Start to write new post
# @param: post title
post () {
  local title=${1?&quot;new post&quot;}
  rake new_post[&quot;${title}&quot;]
}

# Main
# ----
actions=&quot;post upgrade preview deploy&quot;
action=${1?&quot;requirs action!, avaliable actions are ${actions}&quot;}

# run action
shift
${action} $@

</code></pre></noscript></div>


<h2>安裝方法</h2>

<p>把它命名為 blog ，並放到 PATH 系統變數可以找到的路徑下，然後設定為可執行即可。</p>

<p class="note">註：上面的程式碼區塊檔名為 blog.sh 其實只是為了要用 Gist 的程式碼變色效果。 :P </p>


<h2>用法</h2>

<p>建立新文章：</p>

<pre><code>blog post "post title"
</code></pre>

<p>僅預覽新文章：</p>

<pre><code>blog preview "post title"
</code></pre>

<p>預覽全站：</p>

<pre><code>blog preview
</code></pre>

<p>然後再用瀏覽器打開 http://localhost:4000 。</p>

<p>發佈文章：</p>

<pre><code>blog deploy
</code></pre>

<p>更新 octopress ：</p>

<pre><code>blog update
</code></pre>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/web-link-share-20111124" />
    <updated>2011-11-24T10:09:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/web-link-share-20111124</id>
    <content type="html"><![CDATA[<!-- more -->


<h2>PHP</h2>


<ul>
  <li><a href="http://edorian.posterous.com/an-introduction-to-phpunits-covers-annotation">An introduction to PHPUnits @covers annotation</a></li>
  <li><a href="http://till.klampaeckel.de/blog/archives/172-PHAR-and-FreeBSD.html">PHAR and FreeBSD</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/type-hinting-php/">Type Hinting in PHP</a></li>
  <li><a href="http://elblinkin.info/2011/11/an-example-avoid-private-functions-in-unit-tests/">An Example: Avoid Private Functions in Unit Tests</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/trait-in-php/">Trait in PHP 5.4</a></li>
  <li><a href="http://phpmaster.com/error-handling-in-php/">Error Handling in PHP</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/class-functions-php/">Class Functions in PHP</a></li>
  <li><a href="http://www.ooso.net/archives/597">php的異步http請求類</a></li>
  <li><a href="http://blog.ulf-wendel.de/2011/consistency-cloud-and-the-php-mysqlnd-replication-plugin/">Consistency, cloud and the PHP mysqlnd replication plugin</a></li>
  <li><a href="http://www.laruence.com/2011/11/11/2296.html">PHP5.4新特性-解引用实例化</a></li>
  <li><a href="http://mwop.net/blog/265-Using-DocBlox">Using DocBlox</a></li>
  <li><a href="http://mwop.net/blog/264-Converting-DocBook4-to-DocBook5">Converting DocBook4 to DocBook5</a></li>
  <li><a href="http://mwop.net/blog/263-Proxies-in-PHP">Proxies in PHP</a></li>
  <li><a href="http://phpmaster.com/getting-started-with-phpunit/">Getting Started with PHPUnit</a></li>
  <li><a href="http://schlueters.de/blog/archives/163-mysqli_result-iterations.html">mysqli_result iterations</a></li>
  <li><a href="http://www.dreamincode.net/forums/topic/214733-introduction-to-pdo/">Introduction To PDO</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/get-gravatar-with-php/">Get Gravatar Image with PHP</a></li>
  <li><a href="http://css.dzone.com/articles/retrieving-urls-parallel-curl">Retrieving URLs in Parallel With CURL and PHP</a></li>
  <li><a href="http://css.dzone.com/articles/php-don%e2%80%99t-call-destructor">PHP: Don’t Call the Destructor Explicitly</a></li>
  <li><a href="http://css.dzone.com/articles/selenium-2-php-code">Selenium 2 from PHP code</a></li>
  <li><a href="http://www.lornajane.net/posts/2011/handling-sql-errors-in-pdo">Handling SQL Errors in PDO</a></li>
  <li><a href="http://schlueters.de/blog/archives/164-High-Performance-PHP-Session-Storage-on-Scale.html">High Performance PHP Session Storage on Scale</a></li>
  <li><a href="http://www.laruence.com/2011/11/18/2305.html">GBK编码PHP脚本导致语法错误(Zend Multibyte) </a></li>
  <li><a href="http://tutorialzine.com/2011/11/lets-write-some-tests-testify-php/">Lets Write Some Tests with Testify.php</a></li>
  <li><a href="http://phpmaster.com/php-sessions/">PHP Sessions</a></li>
  <li><a href="http://phpmaster.com/localizing-php-applications-4/">Localizing PHP Applications “The Right Way”, Part 4</a></li>
  <li><a href="http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl">POSTing JSON Data With PHP cURL</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/how-to-generate-a-complete-excel-spreadsheet-from-mysql/">How to Generate a Complete Excel Spreadsheet From MySQL</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://weierophinney.net/matthew/archives/267-Getting-started-writing-ZF2-modules.html">Getting started writing ZF2 modules</a></li>
  <li><a href="http://mwop.net/blog/261-Code-Generation-with-ZendCodeGenerator">Code Generation with Zend\CodeGenerator</a></li>
  <li><a href="http://mwop.net/blog/262-Backported-ZF2-Autoloaders">Backported ZF2 Autoloaders</a></li>
  <li><a href="http://mwop.net/blog/267-Getting-started-writing-ZF2-modules">Getting started writing ZF2 modules</a></li>
  <li><a href="http://mwop.net/blog/266-Using-the-ZF2-EventManager">Using the ZF2 EventManager</a></li>
  <li><a href="http://blog.calevans.com/2009/07/19/lessons-in-phar/">How to build a Phar archive of Zend Framework</a></li>
  <li><a href="http://blog.calevans.com/2009/07/26/packaging-zend-framework-as-a-phar-revisited/">Packaging Zend Framework As A Phar Revisited</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://msdn.microsoft.com/en-us/scriptjunkie/hh147623">Extending Your jQuery Application with Amplify.js</a></li>
  <li><a href="http://clonn.blogspot.com/2011/11/insertadjacenthtml-innerhtml.html">insertAdjacentHTML和 innerHTML 的差異</a></li>
  <li><a href="http://thoughtsonscripts.blogspot.com/2011/11/javascript-good-part-bad-part.html">JavaScript: the good part, the bad part</a></li>
  <li><a href="http://wolfwind.pixnet.net/blog/post/30009025">[翻譯] 10 個給前端 Javascript 開發者的超級好用的工具</a></li>
  <li><a href="http://momentjs.com/">Moment.js - A lightweight javascript date library</a></li>
  <li><a href="http://theholyjava.wordpress.com/2011/04/04/how-to-customize-ckeditor-with-your-own-plugins-skins-configurations/">How to customize CKEditor with your own plugins, skins, configurations</a></li>
  <li><a href="http://peepcode.com/products/backbone-ii">Backbone.js Tutorial Part II</a></li>
  <li><a href="http://yuiblog.com/crockford/">Crockford on JavaScript: A Public Lecture Series at Yahoo!</a></li>
  <li><a href="http://wtfjs.com/">wtfjs - a little code blog about that language we love despite giving us so much to hate</a></li>
  <li><a href="http://speakerdeck.com/u/addyosmani/p/large-scale-javascript-application-architecture">Large-scale JavaScript Application Architecture</a></li>
  <li><a href="http://www.surf-the-edge.com/2011/11/15/bicavm-jvm-in-javascript-why/">BicaVM: JVM in JavaScript – Why?</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/11/21/create-web-animations-with-paperjs/">How To Create Web Animations With Paper.js</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://www.sitepoint.com/jquery-17-whats-new/">What’s New in jQuery 1.7</a></li>
  <li><a href="http://skytechgeek.com/2011/11/achieving-image-animation-effects-through-jquery-pinbox/">Achieving Image Animation Effects Through JQuery Pinbox</a></li>
  <li><a href="http://www.sharemycode.com/item/view/95/jquery-datatables-plugin-example-with-php-mysql">JQuery Datatables plugin example with Php &amp; Mysql</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-11-07-jquery-1-7-release.aspx">jQuery 1.7筆記</a></li>
  <li><a href="http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/">Building a Slimmer jQuery</a></li>
  <li><a href="http://blog.othree.net/log/2011/03/09/jquery-ujs/">jQuery-ujs</a></li>
  <li><a href="http://www.tripwiremagazine.com/2011/11/jquery-datepicker.html">15 Useful jQuery Datepicker Roundup</a></li>
  <li><a href="http://www.noupe.com/design/getting-started-with-jquery-a-beginners-resource-guide.html">Getting Started With jQuery: A Beginner&#39;s Resource Guide</a></li>
  <li><a href="http://repo.eire-media.com/menu.html">THE JQUERY HANDPICKED PLUGIN REPOSITORY</a></li>
  <li><a href="http://www.script-tutorials.com/cool-background-image-sliding-effect-with-jquery/">Cool Background Image Sliding effect with jQuery</a></li>
  <li><a href="https://github.com/mythz/jquip">jQuery in Parts</a></li>
  <li><a href="http://jquerywebdesign.com/2011/11/21/jquery-tutorials-october-2011/">Fresh jQuery Tutorials from October 2011 – for True jQuery Ninjas!</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-11-23-use-left-right-key-to-movie-focus.aspx">使用方向鍵切換INPUT焦點之左右鍵補遺</a></li>
  <li><a href="http://www.catswhocode.com/blog/10-awesome-jquery-snippets">10 awesome jQuery snippets</a></li>
  <li><a href="http://designbeep.com/2011/08/12/12-jquery-infinite-scrollingscroll-read-plugins-for-content-navigation/">12 jQuery Infinite Scrolling(scroll &amp; read) Plugins for Content Navigation</a></li>
  <li><a href="http://bloggerspath.com/fresh-and-beautiful-jquery-plugins-year-2011/">Fresh and Beautiful JQuery Plugins of Mid 2011</a></li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://speakerdeck.com/u/imathis/p/sass-compass-the-future-of-stylesheets-now">Sass &amp; Compass: The future of stylesheets now.</a></li>
  <li><a href="http://autotelicum.github.com/Smooth-CoffeeScript/SmoothCoffeeScript.html">Smooth CoffeeScript</a></li>
  <li><a href="http://coffeescriptcookbook.com/">CoffeeScript Cookbook</a></li>
  <li><a href="http://arcturo.github.com/library/coffeescript/index.html">The Little Book on CoffeeScript</a></li>
  <li><a href="http://sunilarora.org/coffeescript-with-backbonejs-example">CoffeeScript with Backbone.js Example</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://coding.smashingmagazine.com/2011/11/07/the-future-of-css-embracing-the-machine/">The Future Of CSS: Embracing The Machine</a></li>
  <li><a href="http://davidwalsh.name/css-spin-revisited">Create Spinning Rays with CSS3: Revisited</a></li>
  <li><a href="http://www.vanseodesign.com/css/animation/">Animation With CSS: It’s Easier Than You Think</a></li>
  <li><a href="http://www.designdetector.com/2011/11/8-groovy-css-proposals.php">8 Groovy CSS Proposals</a></li>
  <li><a href="http://designmodo.com/image-swap-effect/">How to Create Image Swap Effect using CSS</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/how-to-create-a-time-based-css-style-sheet-switcher/">How to Create a Time Based CSS Style Sheet Switcher</a></li>
  <li><a href="http://designfestival.com/450-css-layouts/">450+ CSS Layouts</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://css.dzone.com/articles/using-html5s-navigation-timing">Using HTML5&#39;s Navigation Timing API to measure Page Load speed</a></li>
  <li><a href="http://www.coldfusionjedi.com/index.cfm/2011/11/3/HTML5-Data-Attribute-Example">HTML5 Data Attribute Example</a></li>
  <li><a href="http://lea.verou.me/css3-secrets/#intro">CSS3 Secrets 10 things you might not know about CSS3</a></li>
  <li><a href="http://webexpedition18.com/articles/create-super-cool-text-effect-using-css3-and-lettering-js/">Fun with CSS3 Transitions – Create Super Cool Text Effect using CSS3 and Lettering.js</a></li>
  <li><a href="http://css.dzone.com/articles/mastering-html5-audio-tag">Mastering the HTML5 audio tag</a></li>
  <li><a href="http://www.onderhond.com/blog/work/css-background-transitions-how-to">css3 background transitions</a></li>
  <li><a href="http://tympanus.net/codrops/2011/11/02/original-hover-effects-with-css3/">Original Hover Effects with CSS3</a></li>
  <li><a href="http://css.dzone.com/articles/css3-transitions-hover-effects">CSS3 Transitions, Hover Effects, and Two Different Kinds of Interactivity</a></li>
  <li><a href="http://skytechgeek.com/2011/11/html5-frameworks-and-useful-apps-for-mobile-web-development/">HTML5 Frameworks and Useful Apps for Mobile Web Development</a></li>
  <li><a href="http://www.sitepoint.com/css3-multiple-borders/">How to Create Multiple Borders in CSS3</a></li>
  <li><a href="http://www.matlus.com/html5-file-upload-with-progress/">Html5 File Upload with Progress</a></li>
  <li><a href="http://webexpedition18.com/articles/fresh-powerful-css3-tutorials/">15 Fresh and Powerful CSS3 Tutorials</a></li>
  <li><a href="http://michaelhue.com/cssdock/">CSS Dock (V2)</a></li>
  <li><a href="http://www.script-tutorials.com/10-fresh-html5-tutorials/">10 Fresh HTML5 Tutorials</a></li>
  <li><a href="http://www.ryancollins.me/?p=539">CSS3 Lasers!</a></li>
  <li><a href="http://www.developerdrive.com/2011/11/an-introduction-to-html5s-video-api-part-1/">An Introduction to HTML5′s Video API</a></li>
  <li><a href="http://www.htmlfivewow.com/slide1">HTML5 Showcase for Web Developers: The Wow and the How</a></li>
  <li><a href="http://msdn.microsoft.com/en-us/magazine/hh563893.aspx">HTML5 - 12 Cool HTML5 Geolocation Ideas</a></li>
  <li><a href="http://www.ssdtutorials.com/tutorials/title/html5-forms.html">New form features in HTML5</a></li>
  <li><a href="http://smashinghub.com/25-useful-html5-cheat-sheets-and-tutorials-for-web-developer.htm">25 Useful Html5 Cheat Sheets and Tutorials For Web Developer</a></li>
  <li><a href="http://msdn.microsoft.com/en-us/magazine/hh561710.aspx">HTML5 - Working with Media in HTML5</a></li>
  <li><a href="http://css.dzone.com/articles/html5-full-screen-now">HTML5 Full Screen: Now in Firefox</a></li>
  <li><a href="http://www.aliued.com/2011/11/06/402/">HTML5设计原则</a></li>
  <li><a href="http://css-tricks.com/14950-bubble-point-tooltips-with-css3-jquery/">Bubble Point Tooltips with CSS3 &amp; jQuery</a></li>
  <li><a href="http://www.jepija.com/blog/the-overuse-of-html5-and-css/">The overuse of HTML5 and CSS3</a></li>
  <li><a href="http://cubiq.org/build-and-publish-an-html5-game-for-ipad">Build and publish an HTML5 game for iPad</a></li>
  <li><a href="http://www.sitepoint.com/diving-deeper-into-html5-offline-browsing/">Diving Deeper into HTML5 Offline Browsing</a></li>
  <li><a href="http://weblogs.asp.net/dwahlin/archive/2011/11/16/detecting-html5-css3-features-using-modernizr.aspx">Detecting HTML5/CSS3 Features using Modernizr</a></li>
  <li><a href="http://www.scirra.com/blog/58/html5-2d-gaming-performance-analysis">HTML5 2D gaming performance analysis</a></li>
  <li><a href="http://css.dzone.com/articles/three-html5-game-development">Three HTML5 Game Development Tools</a></li>
  <li><a href="http://www.21andy.com/blog/20110611/2016.html">HTML5 模板</a></li>
  <li><a href="http://css.dzone.com/articles/resize-all-screens-css3-media">Embracing All Media for Your Message with CSS3 Media Queries</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-icon-design/">Android User Interface Design: Icon Design</a></li>
  <li><a href="http://skytechgeek.com/2011/09/10-mobile-application-frameworks-for-easy-development/">10 Mobile Application Frameworks For Easy Development</a></li>
  <li><a href="http://spaceport.io/">Spaceport</a></li>
  <li><a href="http://blogs.captechconsulting.com/blog/john-szumski/getting-started-uimenucontroller-ios-5">Getting Started with UIMenuController in iOS 5</a></li>
  <li><a href="http://buildmobile.com/handling-the-twitter-api-in-ios5/">Handling the Twitter API in iOS5</a></li>
  <li><a href="http://css.dzone.com/articles/building-jquery-mobile">Building a jQuery Mobile Application, Part 1</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/smartphone-apps-for-developers-and-designers/">Great Smartphone Apps for Developers and Designers</a></li>
  <li><a href="http://erinylin.blogspot.com/2011/11/some-tips-to-avoid-leaking-memory-in.html">Some tips to avoid leaking memory in Titanium Mobile App</a></li>
  <li><a href="http://www.websbook.com/alltext/UserExperience/iPad_yhjmssjgf_rhzipadssjcp__20750.html">iPad 用戶界面s設計規範</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://huoding.com/2011/11/08/126">OAuth的改变</a></li>
  <li><a href="http://uxdesign.smashingmagazine.com/2011/11/08/extensive-guide-web-form-usability/">An Extensive Guide To Web Form Usability</a></li>
  <li><a href="http://smashinghub.com/7-tips-for-decreasing-load-times-of-web-pages-using-css-and-javascripts.htm">7 Tips For Decreasing Load Times of Web Pages Using CSS and Javascripts</a></li>
  <li><a href="http://www.noupe.com/design/designers-know-your-code-web-design-tutorials.html">Designers Know Your Code: Web Design Tutorials</a></li>
  <li><a href="http://maqetta.org/">Maqetta</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-11-16-img-empty-src.aspx">小心IMG SRC空字串效應</a></li>
  <li><a href="http://www.mnot.net/cache_docs/">Caching Tutorial for Web Authors and Webmasters</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/27/searchable-dynamic-content-with-ajax-crawling/">Searchable Dynamic Content With AJAX Crawling</a></li>
  <li><a href="http://uxdesign.smashingmagazine.com/2011/09/26/content-prototyping-in-responsive-web-design/">Content Prototyping In Responsive Web Design</a></li>
  <li><a href="http://www.hicss.net/the-way-of-be-a-expert-web-front-end-developer/">[轉] Web前端研發工程師編程能力飛昇之路</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/how-to-inject-custom-html-and-css-into-an-iframe/">How to Inject Custom HTML and CSS into an iframe | Nettuts+</a></li>
  <li><a href="http://inspirationfeed.com/inspiration/25-examples-of-wireframes-and-mockups-sketches/">25 Examples of Wireframes and Mockups Sketches</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/qr-code-google-api/">Get QR Code with Google Chart API</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/how-to-use-faye-as-a-real-time-push-server-in-rails/">How to Use Faye as a Real-Time Push Server in Rails</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://coolshell.cn/articles/5826.html">千萬別用MongoDB？真的嗎？！</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/databases/getting-started-with-mongodb/">Getting Started with MongoDB</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="http://www.nodebeginner.org/">The Node Beginner Book</a></li>
  <li><a href="http://james.padolsey.com/javascript/rampant-callback-syndrome/">Rampant Callback Syndrome</a></li>
  <li><a href="http://www.infoq.com/cn/articles/nodejs-in-front-end-engineer-view">一个前端工程师眼里的NodeJS</a></li>
  <li><a href="http://flatironjs.org/">Flatiron.JS</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://www.eclipse.org/hudson/hudsonbook/">The Hudson Book</a></li>
  <li><a href="http://www.oodesign.com/">Design Patterns</a></li>
  <li><a href="http://go-tour-zh.appspot.com/#1">Go 指南</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://designfestival.com/25-beautiful-examples-of-captivating-website-headers/">25 Beautiful Examples of Captivating Website Headers</a></li>
  <li><a href="http://www.noupe.com/tutorial/create-a-business-icon-from-scratch-an-adobe-illustrator-tutorial.html">Create a Business Icon from Scratch an Adobe Illustrator Tutorial</a></li>
</ul>


<h2>Manage</h2>


<ul>
  <li><a href="http://3.7designs.co/blog/2011/11/more-free-project-management-tools/">More Free Project Management Tools</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://mwop.net/blog/258-Git-Subtree-Merging-Guide">Git Subtree Merging Guide</a></li>
  <li><a href="http://subgit.com/">SubGit</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://css.dzone.com/articles/setting-lamp-box-puppet">Setting up a LAMP box with Puppet</a></li>
</ul>


<h2>Other</h2>


<ul>
  <li><a href="http://justcreativedesign.com/2011/11/02/qr-codes-guide/">QR (Quick Response) Code Guide</a></li>
</ul>


<p></body></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Beginning Backbone.JS X CoffeeScript]]></title>
    <link href="http://www.jaceju.net/blog/archives/beginning-backbone-coffeescript" />
    <updated>2011-11-22T22:28:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/beginning-backbone-coffeescript</id>
    <content type="html"><![CDATA[<p>因為想同時練習 Backbone.JS 和 CoffeeScript 這兩個熱門的技術，所以在網路上找了一下，剛好看到這篇 <a href="http://sunilarora.org/coffeescript-with-backbonejs-example">CoffeeScript with Backbone.js Example</a> ，所以快速做個筆記。</p>

<p>這篇文章的範例主要是讓我們可以同時更改所有方塊的顏色和尺寸，只要在上方的文字欄位中輸入顏色與尺寸值即可。</p>

<p>以下就針對實做這篇文章時所碰到的一些問題以及實作上的心得，一一做整理。</p>

<!-- more -->


<h2>HTML</h2>

<p>首先來看一下 HTML 的組成：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span><span class='line'><span class="nt">&lt;html&gt;</span>
</span><span class='line'>  <span class="nt">&lt;head&gt;</span>
</span><span class='line'>    <span class="nt">&lt;title&gt;</span>Backbone <span class="ni">&amp;amp;</span> CoffeeScript<span class="nt">&lt;/title&gt;</span>
</span><span class='line'>    <span class="nt">&lt;meta</span> <span class="na">charset=</span><span class="s">&quot;UTF-8&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/head&gt;</span>
</span><span class='line'>  <span class="nt">&lt;body&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="c">&lt;!-- Interface --&gt;</span>
</span><span class='line'>    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">&quot;config-input&quot;</span> <span class="na">style=</span><span class="s">&quot;padding: 20px;&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>      <span class="nt">&lt;div</span> <span class="na">data-role=</span><span class="s">&quot;fieldcontain&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">&quot;text&quot;</span> <span class="nt">&gt;</span>Enter Color Value (ex. red, green) :<span class="nt">&lt;/label&gt;</span>
</span><span class='line'>        <span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">&quot;color-input&quot;</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">value=</span><span class="s">&quot;blue&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/div&gt;</span>
</span><span class='line'>      <span class="nt">&lt;div</span> <span class="na">data-role=</span><span class="s">&quot;fieldcontain&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">&quot;text&quot;</span> <span class="nt">&gt;</span>Enter Width of the box (ex. 50, 70) :<span class="nt">&lt;/label&gt;</span>
</span><span class='line'>        <span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">&quot;width-input&quot;</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">value=</span><span class="s">&quot;100&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/div&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/div&gt;</span>
</span><span class='line'>    <span class="nt">&lt;ul</span> <span class="na">id=</span><span class="s">&quot;color-boxes&quot;</span> <span class="na">style=</span><span class="s">&quot;display: inline; list-style-type:none;&quot;</span><span class="nt">&gt;&lt;/ul&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="c">&lt;!-- Template --&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">type=</span><span class="s">&quot;text/x-jquery-tmpl&quot;</span> <span class="na">id=</span><span class="s">&quot;color-box-template&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>      <span class="o">&lt;</span><span class="nx">div</span> <span class="nx">style</span><span class="o">=</span><span class="s2">&quot;margin: 20px; float: left;height:${width}px; width: ${width}px; background-color: ${color}; border: 2px solid;&quot;</span><span class="o">&gt;</span>
</span><span class='line'>      <span class="o">&lt;</span><span class="err">/div&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/script&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="c">&lt;!-- Scripts --&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;js/jquery.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;js/underscore.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;js/backbone.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;js/jquery.tmpl.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;js/app.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'>
</span><span class='line'>  <span class="nt">&lt;/body&gt;</span>
</span><span class='line'><span class="nt">&lt;/html&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>在這次的範例裡把 HTML 分成三個部份：輸出入介面、樣版、 JavaScript 。</p>

<p>介面有輸入用的 <code>#config-input</code> 及輸出用的 <code>#color-boxes</code> ，樣版 <code>#color-box-template</code> 則是用來輸出方塊用。</p>

<p>JavaScript 的部份有用到：</p>

<ul>
<li><a href="http://jquery.com">jQuery</a></li>
<li><a href="http://documentcloud.github.com/underscore/">underscore.js</a></li>
<li><a href="http://documentcloud.github.com/backbone/">Backbone.js</a></li>
<li><a href="http://api.jquery.com/jquery.tmpl/">jQuery Template Plugin</a></li>
<li>app.js (app.coffee) - 就是下面要看的部份。</li>
</ul>


<p>接下來就一一來分析 app.coffee 的內容。</p>

<h2>繼承 Backbone 的類別</h2>

<p>原本 Backbone 的類別都已經有提供 extend 這個方法，它讓我們用以下的方法來建立我們的類別：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="nv">ConfigModel = </span><span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span>
</span><span class='line'>    <span class="nv">defaults:</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="nv">ColorBoxView = </span><span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span><span class="p">.</span><span class="nx">extend</span>
</span><span class='line'>    <span class="nv">tagName: </span><span class="s2">&quot;li&quot;</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>    <span class="nv">render: </span><span class="o">=&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>但是它其實跟 CoffeeScript 提供的 <code>extends</code> 敘述做的事是一樣的，所以我們可以將上例改寫成 CoffeeScript 的 class ：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ConfigModel</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nx">ColorBoxView</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span>
</span><span class='line'>    <span class="nv">tagName: </span><span class="s2">&quot;li&quot;</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>    <span class="nv">render: </span><span class="o">=&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Model</h2>

<p>這個範例的 Model 很簡單，就是一個單純的 Value Object ，並在物件初始化時設定初值：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ConfigModel</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>        <span class="nx">@set</span> <span class="s1">&#39;color&#39;</span><span class="o">:</span> <span class="s1">&#39;blue&#39;</span><span class="p">,</span> <span class="s1">&#39;width&#39;</span><span class="o">:</span> <span class="s1">&#39;100&#39;</span><span class="p">,</span> <span class="s1">&#39;height&#39;</span><span class="o">:</span> <span class="s1">&#39;100&#39;</span>
</span></code></pre></td></tr></table></div></figure>


<p>或是這樣寫也可以：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ConfigModel</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>        <span class="nx">@set</span>
</span><span class='line'>            <span class="nv">color: </span><span class="s1">&#39;blue&#39;</span>
</span><span class='line'>            <span class="nv">width: </span><span class="mi">100</span>
</span><span class='line'>            <span class="nv">height: </span><span class="mi">100</span>
</span></code></pre></td></tr></table></div></figure>


<p>也可以改用定義 <code>defaults</code> 屬性：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ConfigModel</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span>
</span><span class='line'>    <span class="nv">defaults:</span>
</span><span class='line'>        <span class="nv">color: </span><span class="s1">&#39;blue&#39;</span>
</span><span class='line'>        <span class="nv">width: </span><span class="mi">100</span>
</span><span class='line'>        <span class="nv">height: </span><span class="mi">100</span>
</span></code></pre></td></tr></table></div></figure>




<p class="note">註： <code>initialize</code> 及 <code>defaults</code> 是 <code>Backbone.Model</code> 的屬性，不是 CoffeeScript 的語法。</p>


<p>這裡的 Model 只負責存住值，然後讓 View 可以來更新它的狀態，或是參考它來更新 View 的狀態。</p>

<h2>View</h2>

<p>這個範例有兩個 View ，一個是輸入設定值的介面，一個是用來呈現方塊的結果。</p>

<p>首先先來看輸入設定值的介面：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ConfigInputView</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span>
</span><span class='line'>    <span class="nv">events:</span>
</span><span class='line'>        <span class="s1">&#39;keyup #color-input&#39;</span><span class="o">:</span> <span class="s2">&quot;updateConfig&quot;</span>
</span><span class='line'>        <span class="s1">&#39;keyup #width-input&#39;</span><span class="o">:</span> <span class="s2">&quot;updateConfig&quot;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nv">updateConfig: </span><span class="p">(</span><span class="nx">e</span><span class="p">)</span><span class="o">=&gt;</span>
</span><span class='line'>        <span class="nx">@model</span><span class="p">.</span><span class="nx">set</span>
</span><span class='line'>            <span class="s1">&#39;color&#39;</span><span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#color-input&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">()</span>
</span><span class='line'>            <span class="s1">&#39;width&#39;</span><span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#width-input&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">()</span>
</span><span class='line'>            <span class="s1">&#39;height&#39;</span><span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#width-input&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure>


<p><code>ConfigInputView</code> 類別定義了兩個 keyup 事件：輸入顏色，以及輸入尺寸；當這兩個事件觸發時，就會呼叫 <code>updateConfig</code> 這個方法。</p>

<p>而 <code>updateConfig</code> 方法就是用來更新 model 的狀態，相信程式很容易看懂。</p>

<p><code>ConfigInputView</code> 所對應的 HTML 為：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'>    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">&quot;config-input&quot;</span> <span class="na">style=</span><span class="s">&quot;padding: 20px;&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>      <span class="nt">&lt;div</span> <span class="na">data-role=</span><span class="s">&quot;fieldcontain&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">&quot;text&quot;</span> <span class="nt">&gt;</span>Enter Color Value (ex. red, green) :<span class="nt">&lt;/label&gt;</span>
</span><span class='line'>        <span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">&quot;color-input&quot;</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">value=</span><span class="s">&quot;blue&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/div&gt;</span>
</span><span class='line'>      <span class="nt">&lt;div</span> <span class="na">data-role=</span><span class="s">&quot;fieldcontain&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">&quot;text&quot;</span> <span class="nt">&gt;</span>Enter Width of the box (ex. 50, 70) :<span class="nt">&lt;/label&gt;</span>
</span><span class='line'>        <span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">&quot;width-input&quot;</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">value=</span><span class="s">&quot;100&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/div&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/div&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>在輸出的部份，這裡是定義在 <code>ColorBoxView</code> 這個類別裡。</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ColorBoxView</span> <span class="k">extends</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span>
</span><span class='line'>    <span class="nv">tagName: </span><span class="s1">&#39;li&#39;</span>
</span><span class='line'>    <span class="nv">initialize: </span><span class="o">-&gt;</span>
</span><span class='line'>        <span class="vi">@template = </span><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#color-box-template&#39;</span><span class="p">).</span><span class="nx">template</span><span class="p">()</span>
</span><span class='line'>        <span class="nx">@model</span><span class="p">.</span><span class="nx">bind</span> <span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">@render</span>
</span><span class='line'>
</span><span class='line'>    <span class="nv">render: </span><span class="o">=&gt;</span>
</span><span class='line'>        <span class="nx">$</span><span class="p">(</span><span class="nx">@el</span><span class="p">).</span><span class="nx">html</span> <span class="nx">$</span><span class="p">.</span><span class="nx">tmpl</span> <span class="nx">@template</span><span class="p">,</span> <span class="nx">@model</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">()</span>
</span><span class='line'>        <span class="k">return</span> <span class="err">@</span>
</span></code></pre></td></tr></table></div></figure>


<p><code>tagName</code> 是告訴 View 物件要輸出哪一種 HTML 元素，這裡為 li 。</p>

<p>而 <code>ColorBoxView</code> 物件在初始化時，會做兩件事：讀取樣版，然後監聽 model 的 <code>change</code> 事件。</p>

<p>當 model 的 <code>change</code> 事件發生時 (也就是值改變了) ， <code>render</code> 方法就會被呼叫，它會用剛剛讀取進來的樣版來重新繪製新的方塊。</p>

<p><code>ColorBoxView</code> 所對應的 HTML 為：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'>    <span class="nt">&lt;ul</span> <span class="na">id=</span><span class="s">&quot;color-boxes&quot;</span> <span class="na">style=</span><span class="s">&quot;display: inline; list-style-type:none;&quot;</span><span class="nt">&gt;&lt;/ul&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script </span><span class="na">type=</span><span class="s">&quot;text/x-jquery-tmpl&quot;</span> <span class="na">id=</span><span class="s">&quot;color-box-template&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>      <span class="o">&lt;</span><span class="nx">div</span> <span class="nx">style</span><span class="o">=</span><span class="s2">&quot;margin: 20px; float: left;height:${width}px; width: ${width}px; background-color: ${color}; border: 2px solid;&quot;</span><span class="o">&gt;</span>
</span><span class='line'>      <span class="o">&lt;</span><span class="err">/div&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/script&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<h2>No Controller</h2>

<p>Backbone 在 0.5.0 版後，把 Controller 改名為 Router 了，因此我們不能再使用 <code>Backbone.Controller</code> 這個類別。</p>

<p>不過這次練習的範例並沒有特別要用到 Router 的功能，因此可以直接建立一個不繼承任何類別的偽 Router 類別，然後在它的 constructor 中初始化我們的 Model 與 View ：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="k">class</span> <span class="nx">ColorBoxRouter</span>
</span><span class='line'>    <span class="nv">constructor: </span><span class="o">-&gt;</span>
</span><span class='line'>        <span class="nv">model = </span><span class="k">new</span> <span class="nx">ConfigModel</span>
</span><span class='line'>        <span class="nv">color_input = </span><span class="k">new</span> <span class="nx">ConfigInputView</span>
</span><span class='line'>            <span class="s1">&#39;el&#39;</span><span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#config-input&#39;</span><span class="p">)</span>
</span><span class='line'>            <span class="s1">&#39;model&#39;</span><span class="o">:</span> <span class="nx">model</span>
</span><span class='line'>        <span class="k">for</span> <span class="nx">x</span> <span class="k">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">..</span><span class="mi">5</span><span class="p">]</span>
</span><span class='line'>            <span class="nv">view = </span><span class="k">new</span> <span class="nx">ColorBoxView</span> <span class="nv">model: </span><span class="nx">model</span>
</span><span class='line'>            <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#color-boxes&#39;</span><span class="p">).</span><span class="nx">append</span> <span class="nx">view</span><span class="p">.</span><span class="nx">render</span><span class="p">().</span><span class="nx">el</span>
</span></code></pre></td></tr></table></div></figure>




<p class="note">註：不過如果未來有需要用到 Router 的功能時，當然還是可以繼承 <code>Backbone.Router</code> 。</p>


<p>在初始化 <code>ConfigInputView</code> 物件時，其中 el 就會指向這個 View 所對應的 DOM Tree ，而 model 就是對應到我們已經初始化好的 <code>ConfigModel</code> 物件。</p>

<p>接著我們建立 5 個方塊，每個方塊都是預設的藍色及 100x100 的尺寸大小；最後把這些方塊一一加到 <code>#color-boxes</code> 這個 UL 元素上。</p>

<h2>Run</h2>

<p>最後要啟動程式時，只要初始化一個 <code>ColorBoxRouter</code> 物件就可以了：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='coffeescript'><span class='line'><span class="nx">$</span><span class="p">(</span><span class="o">-&gt;</span> <span class="nv">cbl = </span><span class="k">new</span> <span class="nx">ColorBoxRouter</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<h2>心得</h2>

<p>Backbone.JS 利用了 Observer 這個 Pattern ，讓我們很容易實作出 Model / View 分離的應用程式。而且在架構上也利用了 MVC 分層，使得程式不會陷在一堆 callback 及 global variables 裡。</p>

<p>而 CoffeeScript 也讓我們可以用簡潔的語法，來撰寫複雜而強大的 JavaScript 程式碼。這兩者的搭配，真的讓我有重新認識 JavaScript 的感覺。</p>

<p>能在有生之年，一直學到新東西，真是太棒了！</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Compass Sprite Quick Start]]></title>
    <link href="http://www.jaceju.net/blog/archives/compass-sprite-quick-start" />
    <updated>2011-11-16T16:53:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/compass-sprite-quick-start</id>
    <content type="html"><![CDATA[<p>用了 Compass Sprite 後，快速做個筆記，免得之後又忘了。</p>

<p>Compass Sprite 可以幫我們快速製作 CSS Sprite ，它有幾個特色：</p>

<ul>
<li><p>可以不需要自行把圖檔串連起來， Compass Sprite 會自動幫我們處理。不過可惜它只支援 PNG 格式的圖檔，這點使用上要小心。</p></li>
<li><p>自動幫我們產生 Sprite CSS ，我們只要在適當的元素的屬性上加入對應的 class 就可以了。</p></li>
</ul>


<p>以下是簡單的使用流程：</p>

<!--more-->


<p>首先在專案的 images (在 config.rb 中定義的那個) 底下建立一個目錄，名稱自訂，這邊以 actions 為例。</p>

<p>接著在 images/actions 下放幾個 PNG 圖檔，寬度要一致，因為預設 Compass Sprite 會垂直串接起所有圖檔。</p>

<p>這裡我假設有以下的圖檔：</p>

<ul>
<li>images/actions/create.png</li>
<li>images/actions/delete.png</li>
<li>images/actions/update.png</li>
</ul>


<p>然後在你的 SCSS/SASS 中加入以下程式碼：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='sass'><span class='line'><span class="k">@import</span> <span class="s">&quot;actions/*.png&quot;</span>
</span><span class='line'><span class="k">@include</span><span class="nd"> all-actions-sprites</span>
</span></code></pre></td></tr></table></div></figure>




<p class="note">註：注意 all-[folder]-sprites 這個用法，我在這裡卡了很久。</p>


<p>最後在你的 HTML 元素中，使用：</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;actions-create&quot;</span><span class="nt">&gt;</span>建立<span class="nt">&lt;/span&gt;</span>
</span><span class='line'><span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;actions-delete&quot;</span><span class="nt">&gt;</span>刪除<span class="nt">&lt;/span&gt;</span>
</span><span class='line'><span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;actions-update&quot;</span><span class="nt">&gt;</span>更新<span class="nt">&lt;/span&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>這樣就可以了，很簡單吧，快試試看。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[PHPConf.TW] Beginning PHPUnit 簡報花絮]]></title>
    <link href="http://www.jaceju.net/blog/archives/secret-of-beginning-phpunit" />
    <updated>2011-11-14T23:59:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/secret-of-beginning-phpunit</id>
    <content type="html"><![CDATA[<p>看了 <a href="http://antbsd.twbbs.org/~ant/wordpress/?p=4011">Ant</a> 和<a href="http://blog.eddie.com.tw/2011/11/14/how-do-i-make-my-slide-and-presentation/">龍哥</a>都各自寫了自己在 PHPConf.TW 簡報的心得，那麼我也來談談我自己的部份好了。</p>

<!--more-->


<p>這次自告奮勇跳出來想要講一場，其實也是想試試自己能否有足夠的勇氣站上台。</p>

<p>算是第一次站上這種大場合，老實說我非常非常緊張。以往有辦過最多三十個人的研討會，但心境上完全無法比擬。</p>

<p>簡報大概在一個月前我就做好了，因為我真的沒辦法像高手們一樣，臨時去準備一場非常有料的演講。而且到了當天，我還在改簡報，就知道我在這種大場合的經驗有多麼不足了。</p>

<p>一開始我打算講五十分鐘，不過因為後來有很多前輩也加入了議程，因此我就把自己的時間縮短到四十分鐘。而在以往的經驗裡，四十分鐘要把 PHPUnit 的特色講完是不可能的；因此我挑了幾個比較基本的主題來介紹 PHPUnit ，儘可能把大家一開始會碰到的問題涵蓋上去。</p>

<p>不過在試講的時候，才發現還是講不完；因此我就把其中一段講測試資料庫的部份給刪了，再重新編排流程，就得到了最後大家看到的版本。</p>

<p>龍哥也在簡報上給了我很多非常受用的建議，像是：</p>

<ul>
<li><p>配合現場的環境來設計簡報。</p></li>
<li><p>不要照著電腦講，試著站出講台，利用遙控來切換簡報。</p></li>
</ul>


<p>這些都讓我自己覺得整個簡報專業度變得好高，這是以往我所沒有的感受。</p>

<p>簡報一開始我就用 Keynote 製作，這是因為我比較喜歡以視覺化的方式來自由地安排簡報內容。可惜我的美感稍差，沒辦法做出高水準的簡報；最後只好用一些比較簡單的技巧來美化，像是使用幾種主要顏色來呈現文字，為簡報加上漸層背景等等。</p>

<p>另外一開始龍哥建議我用 Wii 來控制遙控簡報，但我已經有買了 Keynote Remote 這個 App ，想說就試試看吧。沒想到效果出乎我意料之外的好，滑動的效果其實也不比實體按鈕差，讓我信心大增。</p>

<p>當然站上台後，雖然沒有發抖，但是心情上的緊張真的很難掩飾。來回的踱步和前面一段不停地重複贅詞，直到一半才穩下來。</p>

<p>時間也是我沒有拿捏好的部份，主要是因為龍哥有準備一個 iPad 倒數計時器，結果我只看了一次。直到最後講完，我發現它早就已經重設成下一場的時間了。最後連房間號碼都來不及說出口，我就匆匆下台了。</p>

<p>另外哏的部份也是我沒有講得很好的地方，因為趕著把簡報內容講完，沒有好好去營造丟哏之前的氣氛。另外就是要找大家都知道的哏，才會獲得共嗚。因此 jserv 的鋪哏方式真的非常值得我學習；大師幽默的丟哏，大家笑開懷呀。</p>

<p>最後還是有我小小自豪的部份，那就是內容流程的安排。這次我沒有特地講很多專業術語，但其實裡面包含了很多專業的測試概念；像是大家常聽到的 TDD 開發方式，我沒有明確去指出來，目的就是不讓大家陷入那種思維裡，而是自然而然地去習慣它。當然內容上還是有一些瑕疵，不過當下我就直接略過了。</p>

<p>也許沒辦法像 Ant 、強哥和 jserv 講得這麼好，但我一定會常常找機會來訓練自己的！所以一定還會有下次！</p>

<p>再次謝謝大家，讓這次 PHPConf.TW 2011 圓滿落幕。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/1976" />
    <updated>2011-11-04T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1976</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://phpmaster.com/integrating-amazon-s3-using-pear/">Integrating Amazon S3 using PEAR</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/10/17/getting-started-with-php-templating/">Getting Started With PHP Templating</a></li>
  <li><a href="http://www.zendcasts.com/slimming-out-your-controller/2011/10/">SLIMming Out Your Controller</a></li>
  <li><a href="http://www.sitepoint.com/php-xml-to-json-proxy/">How to Create an XML to JSON Proxy Server in PHP</a></li>
  <li><a href="http://webinsightlab.com/internet/free-e-books-php-development/">50 Free E-books for PHP Development</a></li>
  <li><a href="http://css.dzone.com/news/working-request-objects-php">Working with Request objects in PHP</a></li>
  <li><a href="https://github.com/kenguest/Services_Openstreetmap">Services_Openstreetmap</a></li>
  <li><a href="http://css.dzone.com/news/php-54-will-have-built-web">PHP 5.4 Will Have a Built-in Web Server</a></li>
  <li><a href="http://efiquest.org/2011-10-22/55/">My desperate life quest for efficiency » Blog Archive » Make php-fpm execute arbitrary PHP scripts via socket</a></li>
  <li><a href="http://css.dzone.com/articles/10-php-code-snippets-working">10 PHP code snippets for working with strings</a></li>
  <li><a href="http://www.ooso.net/archives/607">關於php的libevent擴展的應用</a></li>
  <li><a href="http://www.phpcodebase.com/php-exception-explained/">PHP Exception Explained</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/10/abstract-in-php/">Abstract in PHP</a></li>
  <li><a href="http://css.dzone.com/articles/mysql-php-search-four-part">MySQL PHP search: four-part video tutorial series</a></li>
  <li><a href="http://css.dzone.com/articles/closure-object-binding-php-54">Closure Object Binding in PHP 5.4</a></li>
  <li><a href="http://www.kavoir.com/2011/10/php-crontab-class-to-add-and-remove-cron-jobs.html">PHP: Crontab Class to Add and Remove Cron Jobs</a></li>
  <li><a href="http://bergie.iki.fi/blog/composer_solves_the_php_code-sharing_problem/">Composer solves the PHP code-sharing problem</a></li>
  <li><a href="http://phpmaster.com/amazing-articles-at-phpmaster/">Amazing Articles at PHPMaster</a></li>
  <li><a href="http://css.dzone.com/articles/php-5354-best-practices">PHP 5.3/5.4 best practices tutorial: dependency injection</a></li>
  <li><a href="http://css.dzone.com/articles/using-virtual-machine-play">Using a virtual machine to play with multiple versions of PHP</a></li>
  <li><a href="http://blog.ulf-wendel.de/2011/using-mysql-stored-procedures-with-php-mysqli/">Using MySQL stored procedures with PHP mysqli</a></li>
  <li><a href="http://www.ansoncheung.tk/articles/10-useful-php-regular-expression">10 Useful PHP Regular Expression</a></li>
  <li><a href="http://www.laruence.com/2011/11/04/2258.html">三元式(ternary)性能優化</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/11/object-cloning-in-php/">Object Cloning in PHP</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://akrabat.com/zend-framework/updated-tutorial-for-zend-framework-2-beta-1/">Updated tutorial for Zend Framework 2 beta 1</a></li>
  <li><a href="http://akrabat.com/getting-started-with-zend-framework-2/">Tutorial: Getting started with Zend Framework 2 (beta1)</a></li>
  <li><a href="http://www.phpbuilder.com/columns/zendframework2/zend_framework2_10-27-2011.php3">An Early Look at Zend Framework 2.0</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://josscrowcroft.github.com/money.js/">money.js / fx() - javascript currency conversion library</a></li>
  <li><a href="http://james.padolsey.com/javascript/terse-javascript-101-part-1/">Terse JavaScript 101 – part 1 – James Padolsey</a></li>
  <li><a href="http://blackberry.github.com/Alice/">AliceJS</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/10/19/optimizing-long-lists-of-yesno-values-with-javascript/">Optimizing Long Lists Of Yes/No Values With JavaScript</a></li>
  <li><a href="http://www.limboy.com/2010/12/19/module-and-compiler-for-common-js/">通用JS時代的模塊機制和編譯工具</a></li>
  <li><a href="http://www.sitepoint.com/how-to-convert-xml-to-a-javascript-object/">How to Convert XML to a JSON-Like JavaScript Object</a></li>
  <li><a href="http://javascriptmvc.com/">JavaScriptMVC</a></li>
  <li><a href="http://worrydream.com/Tangle/">Tangle: a JavaScript library for reactive documents</a></li>
  <li><a href="http://listjs.com/">List.js - Add search, sort and flexibility to plain HTML lists with cross-browser native JavaScript</a></li>
  <li><a href="http://www.vcarrer.com/2011/10/draw-shapes-in-photoshop-with.html">Draw Shapes in Photoshop with JavaScript</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/enhancing-web-apps-with-amplifyjs/">Enhancing Web Apps with AmplifyJS</a></li>
  <li><a href="http://css.dzone.com/articles/crop-image-client-side-jcrop">Crop image on the client side with JCrop and HTML5 canvas element</a></li>
  <li><a href="http://blog.mgm-tp.com/2011/10/must-know-url-hashtechniques-for-ajax-applications/">Must-Know URL Hash Techniques for AJAX Applications</a></li>
  <li><a href="http://www.smashingmagazine.com/2011/10/28/useful-coding-workflow-tools-for-web-designers-developers/">Useful Coding Tools and JavaScript Libraries For Web Developers</a></li>
  <li><a href="http://greweb.fr/slider/">Slider.js: Slideshow with jQuery, CSS Transitions and Canvas</a></li>
  <li><a href="http://css.dzone.com/news/getting-started-javascript%e2%80%a6">Getting Started with JavaScript… again</a></li>
  <li><a href="http://blog.amt.in/jsmart-a-port-of-the-smarty-template-engine-t">jSmart - a port of the Smarty Template Engine to Javascript</a></li>
  <li><a href="http://srirangan.net/2011-11-notifier-js-elegant-javascript-notifications">Notifier.js – Elegant Javascript notifications</a></li>
  <li><a href="http://geekswithblogs.net/jkrebsbach/archive/2011/11/01/javascript-memory-leaks.aspx">Javascript memory leaks</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://bloggerspath.com/14-jquery-navigation-menu-for-your-websites/">14 Beautiful JQuery Navigation Plugins for Your Websites</a></li>
  <li><a href="http://css.dzone.com/news/how-html5-use-formdata-object">How to in HTML5: Use the FormData object in XHR2</a></li>
  <li><a href="http://www.csslab.cl/2011/08/18/jquery-timelinr/">jQuery Timelinr</a></li>
  <li><a href="http://www.devcurry.com/2011/10/jquery-add-elements-dynamically.html">jQuery Add Elements Dynamically: Performance Tip</a></li>
  <li><a href="http://www.tripwiremagazine.com/2011/10/jquery-countdown-scripts.html">10+ Cool jQuery Countdown Scripts </a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-21-jquery-val-dynamic-msg.aspx">謙卑式jQuery檢核-動態訊息</a></li>
  <li><a href="http://www.developerdrive.com/2011/10/implement-an-image-slideshow-using-a-jquery-plugin/">Implement an Image Slideshow Using a jQuery Plugin</a></li>
  <li><a href="http://bloggerspath.com/10-most-famous-entertaining-jquery-games/">The Most Famous &amp; Entertaining JQuery Games</a></li>
  <li><a href="http://addyosmani.com/blog/jquery-1-7s-callbacks-feature-demystified/">Demystifying jQuery 1.7′s $.Callbacks</a></li>
  <li><a href="http://bloggerspath.com/fresh-and-beautiful-jquery-plugins-year-2011/">Fresh and Beautiful JQuery Plugins of Mid 2011</a></li>
  <li><a href="http://www.9lessons.info/2011/10/jquery-notification-plugin.html">Jquery Notification Plugin.</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-25-jquery-data-attr-notes.aspx">jQuery .data()與.attr()筆記兩則</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-27-iframe-load.aspx">jQuery筆記-IFrame .load()事件</a></li>
  <li><a href="http://www.developerdrive.com/2011/10/new-methods-in-jquery-1-6/">New methods in jQuery 1.6</a></li>
  <li><a href="http://www.script-tutorials.com/jquery-templates-practice-of-using/">Creating jQuery Templates – Usage Practice</a></li>
  <li><a href="http://demo.greweb.fr/flexible-nav/">Flexible Nav jQuery library</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://code.shrapp.nl/google-plus-ui-buttons/demo.html">Google+ Styled UI Buttons, Icon Buttons &amp; Dropdown Menu Buttons</a></li>
  <li><a href="http://www.vanseodesign.com/css/tables/">Are CSS Tables Better Than HTML Tables?</a></li>
  <li><a href="http://www.designdetector.com/demos/a-circle-that-text-flows-round-demo.html">A Circle That Text Flows Round Demo</a></li>
  <li><a href="http://nicolasgallagher.com/an-introduction-to-css-pseudo-element-hacks/">An introduction to CSS pseudo-element hacks</a></li>
  <li><a href="http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/18/css-best-practices-or-traps.aspx">CSS best practices or traps?</a></li>
  <li><a href="http://www.elated.com/articles/responsive-web-design-demystified/">Responsive Web Design Demystified</a></li>
  <li><a href="http://blog.surveymonkey.com/2011/10/working-with-design-patterns/">Working With Design Patterns</a></li>
  <li><a href="http://www.vanseodesign.com/css/display-property/">The CSS Display Property</a></li>
  <li><a href="http://blog.arunace.com/36-css-frameworks-for-designers/">36 CSS Frameworks for Designers</a></li>
  <li><a href="http://www.barelyfitz.com/screencast/html-training/css/positioning/">Learn CSS Positioning in Ten Steps: position static relative absolute float</a></li>
  <li><a href="http://www.tripwiremagazine.com/2011/10/css-menu-and-navigation.html">35 Impressive CSS Menu and Navigation Collection That You Can Use</a></li>
  <li><a href="http://www.tripwiremagazine.com/2011/10/css-layouts.html">465+ Useful CSS Layouts for Download</a></li>
  <li><a href="http://www.hicss.net/separation-of-powers-model-in-css-design-patterns/">CSS設計模式之三權分立模式篇</a></li>
  <li><a href="http://css-tricks.com/14771-a-call-for-nth-everything/">A Call for ::nth-everything</a></li>
  <li><a href="http://css-tricks.com/14745-centering-in-the-unknown/">Centering in the Unknown</a></li>
  <li><a href="http://css.dzone.com/articles/8-css-preprocessors-speed">8 CSS preprocessors to speed up development time</a></li>
  <li><a href="http://www.sitepoint.com/css-extend-full-width-bars/">How to Extend Wrapped Elements to the Full Browser Width Using CSS</a></li>
  <li><a href="http://www.impressivewebs.com/centered-heading-horizontal-line/">Centered Heading Overlaying a Horizontal Line with CSS</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://css.dzone.com/news/amazing-css3-techniques-you">8 CSS3 techniques you should learn now</a></li>
  <li><a href="http://dev.opera.com/articles/view/creating-pseudo-3d-games-with-html-5-can-1/">Creating pseudo 3D games with HTML 5 canvas and raycasting</a></li>
  <li><a href="http://html5doctor.com/dive-into-html5-doctor/">Dive into HTML5… on HTML5 Doctor</a></li>
  <li><a href="http://www.sitepoint.com/offline-browsing-in-html5-with-applicationcache/">Offline Browsing in HTML5 with ApplicationCache</a></li>
  <li><a href="http://www.script-tutorials.com/how-to-do-multi-columns-with-css3/">How to Generate Runtime Multi-columns with CSS3</a></li>
  <li><a href="http://introducinghtml5.com/">Introducing HTML5</a></li>
  <li><a href="http://css.dzone.com/news/mastering-html5-prefetching">Mastering HTML5 Prefetching</a></li>
  <li><a href="http://dstorey.tumblr.com/post/11597158114/webnotifications">Web Notifications</a></li>
  <li><a href="http://shrapp.nl/post/google-plus-ui-buttons">Google+ UI Buttons</a></li>
  <li><a href="https://github.com/kanaka/noVNC">noVNC: HTML5 VNC Client</a></li>
  <li><a href="https://github.com/liftoff/GateOne">liftoff/GateOne - GitHub</a></li>
  <li><a href="http://webdesignledger.com/tutorials/15-useful-html5-tutorials-and-cheat-sheets">15 Useful HTML5 Tutorials and Cheat Sheets</a></li>
  <li><a href="http://net.tutsplus.com/articles/quizzes/nettuts-quiz-6-how-well-do-you-know-html5/">Nettuts+ Quiz #6: How Well do you Know HTML5?</a></li>
  <li><a href="http://css.dzone.com/articles/firefox%e2%80%99s-%e2%80%9cfunny%e2%80%9d-css3-image">Firefox’s “funny” CSS3 Image Scaling Quirk</a></li>
  <li><a href="http://bleedinghtml5.appspot.com/#1">Bleeding Edge HTML5</a></li>
  <li><a href="http://leaverou.github.com/prefixfree/">Prefix free: Break free from CSS vendor prefix hell!</a></li>
  <li><a href="http://www.script-tutorials.com/html5-canvas-image-zoomer/">Creating an Image Zoomer in HTML5 Canvas</a></li>
  <li><a href="http://css.dzone.com/news/walking-developer-animation">Walking Developer Animation in Pure CSS3</a></li>
  <li><a href="http://www.script-tutorials.com/html5-game-development-navigating-your-spaceship-lesson-3/">HTML5 Game Development – Navigating Your Spaceship- Lesson 3</a></li>
  <li><a href="http://spyrestudios.com/22-useful-html5-css3-form-tutorials/">22 Useful HTML5 CSS3 Form Tutorials</a></li>
  <li><a href="http://html5doctor.com/u-element/">The return of the &lt;u&gt; element</a></li>
  <li><a href="http://www.sitepoint.com/using-html5-video-and-audio-in-modern-browsers/">Using HTML5 Video and Audio in Modern Browsers</a></li>
  <li><a href="http://css.dzone.com/articles/magic-gathering-javascript-ant">Magic: The Gathering in JavaScript and HTML5</a></li>
  <li><a href="http://www.vanseodesign.com/css/background-properties/">CSS Background: There’s More To Know Than You Think</a></li>
  <li><a href="http://css.dzone.com/articles/css3-action-framework">CSS3 Action Framework</a></li>
  <li><a href="http://smashinghub.com/10-online-html5-tools-for-designers.htm">10 Best Online HTML5 Tools For Designers</a></li>
  <li><a href="http://css.dzone.com/articles/how-write-brikbloc-game-html5">How to write a BrikBloc game with HTML5 SVG and Canvas</a></li>
  <li><a href="http://www.developerdrive.com/2011/08/10-essential-differences-between-html4-and-html5/">10 Essential Differences Between HTML4 and HTML5</a></li>
  <li><a href="http://mobile.dzone.com/news/overview-html5-support-android">Overview of HTML5 Support in the Android 4.0 Browser</a></li>
  <li><a href="http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html">HTML5 Placeholder Input Fields Fixed with jQuery</a></li>
  <li><a href="http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/">CSS 3D transformations in Firefox Nightly</a></li>
  <li><a href="http://www.script-tutorials.com/how-to-do-pure-css3-photo-gallery/">How to Create a Pure CSS3 Animated Photo Gallery</a></li>
  <li><a href="http://tympanus.net/codrops/2011/10/24/creative-css3-animation-menus/">Creative CSS3 Animation Menus</a></li>
  <li><a href="http://www.dartlang.org/slides/2011/10/senchacon/index.html#1">Modern Web Apps with HTML5 and DART</a></li>
  <li><a href="http://skytechgeek.com/2011/10/10-handy-html5-cheat-sheets-for-geeks/">10 Handy HTML5 Cheat Sheets For Geeks</a></li>
  <li><a href="http://css.dzone.com/articles/formalize-css">Formalize CSS</a></li>
  <li><a href="http://www.sitepoint.com/css3-transform-background-image/">How to Apply CSS3 Transformations to Background Images</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-30-html5-canvas-sktechpad.aspx">用100行實現HTML5可存檔塗鴉版</a></li>
  <li><a href="http://www.brucelawson.co.uk/2011/goodbye-html5-time-hello-data/">Goodbye HTML5 &lt;time&gt;, hello &lt;data&gt;!</a></li>
  <li><a href="http://tympanus.net/codrops/2011/10/31/fullscreen-image-3d-effect/">Fullscreen Image 3D Effect with CSS3 and jQuery</a></li>
  <li><a href="http://css.dzone.com/articles/html5-time-element-gone">HTML5 &lt;time&gt; element: gone!</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-11-02-html5-canvas-orgin-clean.aspx">HTML5 Canvas的Origin-Clean安全原則</a></li>
  <li><a href="http://css.dzone.com/articles/making-and-moving-selectable">Making and Moving Selectable Shapes on an HTML5 Canvas: A Simple Example</a></li>
  <li><a href="http://www.kristofdegrave.be/2011/11/indexed-db-transactions.html">Indexed DB: Transactions</a></li>
  <li><a href="http://blog.ring.idv.tw/comment.ser?i=386">淺談Canvas - save/restore</a></li>
  <li><a href="http://www.webdeveloperjuice.com/2011/11/03/10-must-have-html5-tools-to-simplify-web-design/">10 Must Have HTML5 Tools to Simplify Web Design</a></li>
  <li><a href="http://css-tricks.com/14800-columns-and-the-greatest-common-divisor/">Columns and the Greatest Common Divisor</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://www.alistapart.com/articles/organizing-mobile/">Organizing Mobile</a></li>
  <li><a href="http://css.dzone.com/news/safari-ios-5-html5-evolution">Safari on iOS 5, HTML5 evolution for iPhone and iPad</a></li>
  <li><a href="http://www.mobilexweb.com/blog/ios-5-iphone-and-ipad-html5">Safari on iOS 5, HTML5 evolution for iPhone and iPad</a></li>
  <li><a href="http://www.mightydeals.com/freebie/reflection-free-icons.html">200+ &quot;Reflection&quot; Icons for mobile apps and websites</a></li>
  <li><a href="http://www.script-tutorials.com/10-attractive-tutorials-for-developing-iphone-applications/">10 Attractive Tutorials for Developing iPhone Applications</a></li>
  <li><a href="http://skytechgeek.com/2011/11/15-iphone-application-development-tutorials-worth-checking-out/">15 iPhone Application Development Tutorials Worth Checking Out</a></li>
  <li><a href="http://www.raywenderlich.com/tutorials">iPhone Tutorials</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://www.qianduan.net/ios-5-brings-new-features-in-safari.html">iOS 5中safari带来的新特性</a></li>
  <li><a href="http://nimbu.in/fronteers/#intro">The New Developer Workflow</a></li>
  <li><a href="http://cykod.github.com/CoderDeck/">CoderDeck Sample</a></li>
  <li><a href="http://phpmaster.com/understanding-oauth-1/">Understanding OAuth – Tweeting from Scratch, Part 1</a></li>
  <li><a href="http://blogs.bytecode.com.au/glen/2011/10/20/dryer-grails-views-learn-less-css-backbone-js-twitter-bootstrap-and-more.html">DRYer Grails views? Learn less.css, backbone.js, twitter bootstrap and more @ 2GX</a></li>
  <li><a href="http://css-tricks.com/14647-abbrs-for-web-nerd-acronymns/">Abbr&#39;s for Web Nerd Acronymns</a></li>
  <li><a href="https://github.com/rgrove/lazyload/">LazyLoad</a></li>
  <li><a href="http://tutorialzine.com/2011/10/ios-homescreen-coffeescript/">Creating an iOS-like Home Screen with CoffeeScript</a></li>
  <li><a href="http://css-tricks.com/14664-what-we-dont-know/">What We Don&#39;t Know</a></li>
  <li><a href="http://foundation.zurb.com/">Foundation: Rapid Prototyping and Building Framework from ZURB</a></li>
  <li><a href="http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/automated-web-testing-with-selenium">Automated Web Testing with Selenium IDE</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-27-p3p-header-and-iframe-session.aspx">使用P3P Header解決跨網域IFrame Session遺失問題</a></li>
  <li><a href="http://orizens.com/wp/topics/javascript-ides-yes/">Javascript IDE’s? yes!</a></li>
  <li><a href="http://www.developerdrive.com/2011/10/5-ipad-apps-every-web-developer-must-have/">5 iPad Apps Every Web Developer Must Have</a></li>
  <li><a href="http://www.designzzz.com/converting-web-design-psd-to-html/">Converting a Dark Furniture Web Design from PSD to HTML</a></li>
  <li><a href="http://www.red-team-design.com/simple-and-effective-dropdown-login-box">Simple and effective dropdown login box</a></li>
  <li><a href="http://www.qianduan.net/responsive-web-design.html">響應式網頁設計</a></li>
  <li><a href="http://www.qianduan.net/85-amazing-showcase-of-responsive-web-design.html">85個很讚的響應式網頁設計</a></li>
  <li><a href="http://designfestival.com/an-introduction-to-grids-in-web-design/">An Introduction to Grids in Web Design</a></li>
  <li><a href="http://css.dzone.com/articles/cris-coyiers-best-practices">Improve Your CSS Kung-Fu: Chris Coyier&#39;s Best Practices for HTML and CSS</a></li>
  <li><a href="http://sixrevisions.com/tools/firebug-guide-web-designers/">Firebug Guide for Web Designers</a></li>
  <li><a href="http://webdesignerwall.com/tutorials/playing-with-svg-design">Playing with SVG Design</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/">Introduction To URL Rewriting</a></li>
  <li><a href="http://tutorialzine.com/2011/11/chained-ajax-selects-jquery/">Chained AJAX Selects</a></li>
  <li><a href="http://www.456bereastreet.com/lab/custom-select/">Accessible, keyboard friendly custom select menu – demo page</a></li>
  <li><a href="http://www.admixweb.com/2011/11/01/23-tools-and-resources-for-great-wireframes/">23 Tools and Resources for Great Wireframes</a></li>
  <li><a href="http://www.sitepoint.com/building-web-pages-with-local-storage/">Building Web Pages with Local Storage</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://feedmyconstraint.wordpress.com/2011/10/24/is-mvc-the-best-we-can-do-on-the-web/">Is MVC the best we can do on the web?</a></li>
  <li><a href="http://blog.arunace.com/12-ruby-on-rails-content-management-systems-cms/">12 Ruby-on-Rails Content Management Systems (CMS)</a></li>
</ul>


<h2>Browser</h2>


<ul>
  <li><a href="http://smashinghub.com/firefox-extensions-that-explore-page-source-code.htm">7 Best FireFox Extensions That Explore Page Source Code</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://blog.ulf-wendel.de/2011/uh-uh-sql-injection-for-auto-explain/">Uh, uh… SQL injection for auto EXPLAIN</a></li>
  <li><a href="http://www.cloudcomputingdevelopment.net/mongodb-vs-rdbms-schema-design/">MongoDB vs. RDBMS Schema Design</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="http://blog.tagged.com/2011/10/node-js-memcached-library/">Compression in the Node.js Memcached Library</a></li>
  <li><a href="http://blog.ksetyadi.com/2011/10/nodejs-and-mongodb-a-beginners-approach/">Nodejs and MongoDB, A Beginner&#39;s Approach</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://but.tw/2008/10/programmers_rule/">程式設計師的格言</a></li>
  <li><a href="http://net.tutsplus.com/articles/general/are-textmate-and-coda-yesterdays-editors/">Are TextMate and Coda Yesterday’s Editors?</a></li>
  <li><a href="http://graphics.stanford.edu/~mdfisher/GameAIs.html">Starcraft 2 Automated Player</a></li>
  <li><a href="http://coolshell.cn/articles/5761.html">深入理解C語言</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://galp.in/blog/2011/10/04/the-ui-guide-part-2-bg-forms-texture/">The UI Guide | Part 2: Backgrounds, Forms, and Texture</a></li>
  <li><a href="http://galp.in/blog/2011/08/02/the-ui-guide-part-1-buttons/">The UI Guide | Part 1: Buttons</a></li>
  <li><a href="http://folyo.me/guides/how_to_pick_a_great_designer">How to Pick a Great Designer</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://johnkary.net/git-1-7-7-changes-affecting-the-everyday-developer/">git 1.7.7 changes affecting the everyday developer</a></li>
  <li><a href="http://blog.wu-boy.com/2011/10/github-improved-subversion-client-support/">Github 支援 SVN Client</a></li>
  <li><a href="http://blogs.wandisco.com/2011/10/24/subversion-best-practices-repository-structure/?=kt_tw">Subversion Best Practices: Repository Structure</a></li>
  <li><a href="http://blog.richliu.com/2011/11/01/1133/">git 筆記: 如何將現有的 Tree 推到 remote</a></li>
  <li><a href="http://blog.hinablue.me/entry/git-note-automatically-deploying-website-from-remote-git-repository">[Git note.] Git 佈署小小小小筆記</a></li>
  <li><a href="http://blog.sd.idv.tw/archives/498">Git 與遠端Server 應用</a></li>
  <li><a href="http://blogs.wandisco.com/2011/10/27/top-ten-reasons-to-switch-to-subversion/?kt_ch">Top Ten Reasons to Switch to Subversion</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://www.catswhocode.com/blog/10-htaccess-snippets-to-optimize-your-website">10+ .htaccess snippets to optimize your website</a></li>
</ul>


<h2>Security</h2>


<ul>
  <li><a href="http://www.80sec.com/%E6%B7%B1%E6%8E%98xss%E6%BC%8F%E6%B4%9E%E5%9C%BA%E6%99%AF%E4%B9%8Bxss-rootkit-%E4%BF%AE%E8%AE%A2.html">深掘XSS漏洞场景之XSS Rootkit</a></li>
</ul>


<h2>Other</h2>


<ul>
  <li><a href="http://tutorialblog.org/free-and-cheap-images-for-your-blog/">5 Places to Download Free and Cheap Images to Use on Your Blog</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/1971" />
    <updated>2011-10-15T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1971</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://phpmaster.com/monitoring-file-integrity/">Monitoring File Integrity</a></li>
  <li><a href="http://phpmaster.com/from-zero-to-cloud-1/">From Zero to Cloud: Setting up an EC2 Sandbox, Part 1</a></li>
  <li><a href="http://www.laruence.com/2011/09/30/2179.html">PHP正则之递归匹配</a></li>
  <li><a href="http://phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/">Why You Should Use Bcrypt to Hash Stored Passwords</a></li>
  <li><a href="http://phpmaster.com/from-zero-to-cloud-2/">From Zero to Cloud: Setting up an EC2 Sandbox, Part 2</a></li>
  <li><a href="http://css.dzone.com/news/new-spl-features-php-53">New SPL Features in PHP 5.3</a></li>
  <li><a href="http://phpmaster.com/preventing-cross-site-request-forgeries/">Preventing Cross-Site Request Forgeries</a></li>
  <li><a href="http://css.dzone.com/articles/how-use-memcache-php">How to use Memcache in PHP</a></li>
  <li><a href="http://www.laruence.com/2011/10/05/2192.html">mysqlnd插件mysqlnd_ms的介紹</a></li>
  <li><a href="http://blog.arunace.com/best-php-frameworks-mvc/">Best PHP frameworks – MVC and more</a></li>
  <li><a href="http://code.google.com/p/pasc2at/wiki/SimplifiedChinese">高級PHP應用程序漏洞審核技術</a></li>
  <li><a href="http://www.laruence.com/2011/10/10/2204.html">JsonSerializable接口</a></li>
  <li><a href="http://www.slideshare.net/elblinkin/are-your-tests-really-helping-you">Are Your Tests Really Helping You?</a></li>
  <li><a href="http://ceaude.twoticketsplease.de/articles/ruby-and-the-principle-of-unwelcome-surprise.html">Ruby and The Principle of Unwelcome Surprise</a></li>
  <li><a href="http://css.dzone.com/news/10-super-useful-php-snippets">10 super useful PHP snippets</a></li>
  <li><a href="http://phpmaster.com/array-handling-functions/">Array Handling Functions</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/the-ins-and-outs-of-php-exceptions/">The Ins and Outs of PHP Exceptions</a></li>
  <li><a href="http://www.phpclasses.org/blog/package/6734/post/1-Google-URL-Shortener-PHP-Class.html">Google URL Shortener PHP Class</a></li>
  <li><a href="http://elblinkin.info/2011/10/phpunit-coding-standard-naming/">PHPUnit Coding Standard: Naming</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/the-best-way-to-learn-php/">The Best Way to Learn PHP</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://blog.astrumfutura.com/2011/10/zend-framework-2-0-dependency-injection-part-1/">Zend Framework 2.0: Dependency Injection (Part 1)</a></li>
  <li><a href="http://till.klampaeckel.de/blog/archives/166-Iterating-over-a-table-with-Zend_Db_Table-and-Zend_Paginator.html">Iterating over a table (with Zend_Db_Table and Zend_Paginator)</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://scriptstoprograms.wordpress.com/2011/09/27/javascript-shared-state/">JavaScript: a concurrent language with shared mutable state</a></li>
  <li><a href="http://lifesinger.wordpress.com/2011/09/30/simplify-indexof-using-bitwise-not/">利用位反操作来简化 indexOf 判断</a></li>
  <li><a href="http://visionmedia.github.com/jspec/">JSpec - JavaScript Testing Framework</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/10/04/quick-look-math-animations-javascript/">A Quick Look Into The Math Of Animations With JavaScript</a></li>
  <li><a href="http://www.olegkikin.com/audio/audio.html">透過公式來產生音樂！</a></li>
  <li><a href="http://www.impressivewebs.com/javascript-resources/">Some JavaScript Resources Worth Checking Out</a></li>
  <li><a href="http://addyosmani.com/futureproofjs/">Future-proofing Your JavaScript Applications For Improved Scalability</a></li>
  <li><a href="http://www.kendoui.com/blogs/teamblog/posts/11-10-04/using_cors_with_all_modern_browsers.aspx">Using CORS with All (Modern) Browsers</a></li>
  <li><a href="http://quickleft.com/blog/leveraging-deferreds-in-backbonejs">Leveraging Deferreds in Backbone.js</a></li>
  <li><a href="http://macwright.org/2011/11/06/javascript.html">Writing Javascript for Size</a></li>
  <li><a href="https://github.com/tcorral/Design-Patterns-in-Javascript">Design Patterns in Javascript</a></li>
  <li><a href="http://beautifuljs.net/?utm_source=javascriptweekly&amp;utm_medium=email">Beautiful JS</a></li>
  <li><a href="http://www.webmaisterpro.com/kaloyan-banev/videos/video/39-javascript-the-good-parts.html">JavaScript: The Good Parts</a></li>
  <li><a href="http://keithcirkel.co.uk/jwerty/">jwerty - Awesome handling of keyboard events</a></li>
  <li><a href="https://github.com/marquete/kibo">Kibo</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://www.queness.com/community-news/9357/13-jquery-visual-effects-tutorials-that-can-help-you-more-effectively">13 jQuery Visual Effects Tutorials That Can Help You More Effectively</a></li>
  <li><a href="http://blog.jquery.com/2011/09/28/jquery-1-7-beta-1-released/">jQuery 1.7 Beta 1 Released</a></li>
  <li><a href="http://addyosmani.com/blog/jquery-17-preview/">jQuery 1.7 Beta Release Preview</a></li>
  <li><a href="http://pixeltango.com/resources/web-development/jquery-bullseye-viewport-detection-events/">jQuery Bullseye – Viewport Detection Events</a></li>
  <li><a href="http://cashrevelations.com/magazine/2011/09/10-fresh-new-jquery-techniques/">10 fresh &amp; New jQuery techniques</a></li>
  <li><a href="http://webtablab.com/design/best-jquery-plugins/">Top 10 Useful jQuery Plugins Of September 2011 You Would Love To Use</a></li>
  <li><a href="http://www.designchemical.com/lab/jquery-plugin-social-share-buttons/getting-started/">jQuery Plugin – Social Media Share Buttons – Getting Started</a></li>
  <li><a href="http://css.dzone.com/news/how-easily-create-charts-using">How to easily create charts using jQuery and HTML5</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/what-you-should-be-excited-about-in-jquery-ui-1-9/">What you Should be Excited About in jQuery UI 1.9</a></li>
  <li><a href="http://designmodo.com/jquery-image-sliders/">Useful jQuery Image Sliders and Galleries Tutorials</a></li>
  <li><a href="https://github.com/addyosmani/jquery-plugin-patterns">jQuery Plugin Patterns</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-jquery-newbs-stop-jumping-in-the-pool/">Quick Tip – jQuery Newbs: Stop Jumping in the Pool</a></li>
  <li><a href="http://blog.fedecarg.com/2011/10/09/javascript-retrieve-and-paginate-json-encoded-data/">JavaScript: Retrieve and paginate JSON-encoded data</a></li>
  <li><a href="http://djpate.com/2011/01/14/jtag-a-jquery-plugin-to-tag-pictures-more/">jTag : A jQuery plugin to tag pictures &amp; more !</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/10/11/essential-jquery-plugin-patterns/">Essential jQuery Plugin Patterns</a></li>
  <li><a href="http://verens.com/2011/10/12/separating-buttons-in-jquery-ui-dialog/">separating buttons in jquery-ui dialog</a></li>
  <li><a href="http://bloggerspath.com/beautiful-jquery-photo-plugins-developers/">7 Beautiful JQuery Photo Plugins for Developers</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-10-14-delegate-vs-live.aspx">jQuery .delegate() vs .live()</a></li>
  <li><a href="http://www.bennadel.com/blog/2270-Creating-A-Timer-Timeout-Using-jQuery-Deferred-Objects.htm">Creating A Timer (Timeout) Using jQuery Deferred Objects</a></li>
  <li><a href="http://www.codeproject.com/KB/aspnet/GridviewFix.aspx">GridviewFix jQuery plugin</a></li>
  <li><a href="http://www.jqwidgets.com/">jQuery UI Widgets - Rich JavaScript &amp; HTML5 UI framework</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://smacss.com/book/">Scalable and Modular Architecture for CSS</a></li>
  <li><a href="http://www.brothercake.com/site/resources/scripts/cssutilities/">CSSUtilities</a></li>
  <li><a href="http://blog.nerdstogeeks.com/2011/10/4-css-tricks-that-you-should-know.html">4 CSS Tricks That You Should Know</a></li>
  <li><a href="http://www.456bereastreet.com/archive/201110/styling_button_elements_to_look_like_links/">Styling button elements to look like links</a></li>
  <li><a href="http://www.qianduan.net/css-selectors-naming-2.html">Css選擇器命名規則</a></li>
  <li><a href="http://www.layerstyles.org/">Layer Styles</a></li>
  <li><a href="http://www.blog.mpcreation.pl/how-to-use-cookies-in-jquery/">How to use cookies in jQuery</a></li>
  <li><a href="http://css-tricks.com/14475-building-a-starburst-with-css/">Building a Starburst with CSS</a></li>
  <li><a href="http://snook.ca/archives/conferences/css-takes-over-the-world">Presentation: CSS Takes Over the World</a></li>
  <li><a href="http://dstorey.tumblr.com/post/11059109286/cssshaders">What are CSS Shaders?</a></li>
  <li><a href="http://www.dotvoid.com/2011/10/background-color-for-inline-text/">Background color for inline text</a></li>
  <li><a href="http://www.thecssninja.com/css/css-tree-menu">Pure CSS collapsible tree menu</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://www.sitepoint.com/html5-file-drag-and-drop/">How to Use HTML5 File Drag &amp; Drop</a></li>
  <li><a href="http://blogs.msdn.com/b/ie/archive/2011/09/29/css3-text-shadow-in-ie10.aspx">CSS3 text-shadow in </a></li>
  <li><a href="http://css-tricks.com/7323-box-sizing/">Box Sizing</a></li>
  <li><a href="http://www.script-tutorials.com/css3-metal-menu-with-icons/">Creating a Multilevel CSS3 Metal Navigation with icons</a></li>
  <li><a href="http://tutslist.com/50-excellent-html5-website-design-inspiration/">50 Excellent HTML5 Website Design Inspiration</a></li>
  <li><a href="http://css.dzone.com/news/postmessage-html5-send">postMessage in HTML5 to send messages between windows and iframes</a></li>
  <li><a href="http://www.queness.com/post/9375/tips-tricks-and-tools-you-will-need-to-start-using-html5-today">Tips, Tricks and Tools You Will Need to Start Using HTML5 Today</a></li>
  <li><a href="http://webdesignledger.com/tools/10-online-html5-tools-for-web-designers">10 Online HTML5 Tools For Web Designers</a></li>
  <li><a href="http://alteredqualia.com/three/examples/webgl_cars.html">three.js webgl - materials - dynamic cube reflection</a></li>
  <li><a href="http://www.red-team-design.com/practical-css3-tables-with-rounded-corners">Practical CSS3 tables with rounded corners</a></li>
  <li><a href="http://css.dzone.com/articles/creating-multilevel-css3-metal">Creating a Multilevel CSS3 Metal Navigation with icons</a></li>
  <li><a href="http://www.script-tutorials.com/html5-game-development-lesson-2/">HTML5 Game Development – Lesson 2</a></li>
  <li><a href="http://www.sitepoint.com/css3-calc-function/">CSS3 Gems: The calc() Function</a></li>
  <li><a href="http://www.webmaisterpro.com/42-super-user/videos/video/40-html5-multiplayer-game-development.html">HTML5 Multiplayer Game Development</a></li>
  <li><a href="http://skytechgeek.com/2011/09/css-magic-achieving-javascript-effects-using-only-css-css3/">CSS Magic | Achieving Javascript Effects Using Only CSS &amp; CSS3</a></li>
  <li><a href="http://www.red-team-design.com/cool-css3-navigation-menu">Cool CSS3 navigation menu</a></li>
  <li><a href="http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app/">Create a Drawing App with HTML5 Canvas and JavaScript</a></li>
  <li><a href="http://type.method.ac/#">Kern Type, the kerning game</a></li>
  <li><a href="https://github.com/dreamdust/sticky">Sticky</a></li>
  <li><a href="http://endtwist.github.com/kerning.js/">Kerning.js</a></li>
  <li><a href="http://www.lostdecadegames.com/audia-is-a-library-for-simplifying-the-web-audio-api/">Audia is a library for simplifying the Web Audio API</a></li>
  <li><a href="http://www.effectgames.com/effect/article.psp.html/joe/Old_School_Color_Cycling_with_HTML5">Old School Color Cycling with HTML5</a></li>
  <li><a href="http://www.netmagazine.com/tutorials/masterclass-css-animations">A masterclass in CSS animations</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/10/12/prefixfree-break-free-from-css-prefix-hell/">PrefixFree: Break Free From CSS Prefix Hell</a></li>
  <li><a href="http://davidwalsh.name/html5-boilerplate">7 CSS Snippets to Borrow from HTML5 Boilerplate</a></li>
  <li><a href="http://www.developerdrive.com/2011/10/wrapping-your-head-around-html5-canvas-part-2/">Wrapping Your Head Around HTML5 Canvas: Part 2</a></li>
  <li><a href="http://www.script-tutorials.com/most-impressing-html5-with-webgl-demonstrations/">Most impressing HTML5 with WebGL demonstrations</a></li>
  <li><a href="http://daneden.me/animate/">Animate.css - a bunch of plug-and-play CSS animations</a></li>
  <li><a href="http://www.devcurry.com/2011/10/css3-code-generation-tools-that-save.html">CSS3 Code Generation Tools That Save Time</a></li>
  <li><a href="http://www.script-tutorials.com/css3-onclick-vertical-metal-menu/">Creating an Accordian like CSS3 Onclick Vertical Navigation</a></li>
  <li><a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">CSS shaders: Cinematic effects for the web</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://blog.darkthread.net/post-2011-10-02-html5-mutli-touch.aspx">為網頁加入多點觸控功能</a></li>
  <li><a href="http://www.html5rocks.com/en/mobile/optimization-and-performance.html">HTML5 Techniques for Optimizing Mobile Performance</a></li>
  <li><a href="http://buildmobile.com/roll-your-own-framework-with-backbone-js/">Roll Your Own Framework With Backbone.js</a></li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://www.webdeveloperjuice.com/2011/09/28/7-beautiful-web-based-timeline-using-javascript-and-css/">7 Beautiful Web Based Timeline Using Javascript and CSS</a></li>
  <li><a href="http://blog.miniasp.com/post/2011/09/28/Building-Website-is-not-that-easy-the-SOP.aspx">網站建置不是件簡單的事 @ 打造網站的步驟</a></li>
  <li><a href="http://net.tutsplus.com/articles/news/recently-in-web-development-september-edition/">Recently in Web Development (September Edition)</a></li>
  <li><a href="http://schlueters.de/blog/archives/150-MySQL-Query-Analyzer-and-PHP.html">MySQL Query Analyzer and PHP</a></li>
  <li><a href="http://www.developerdrive.com/2011/09/seo-techniques-web-developers-need-to-learn-part-1/">SEO Techniques Web Developers Need to Learn Part 1</a></li>
  <li><a href="http://smashinghub.com/web-usability-testing-tools.htm">Web Usability Testing Tools For Your User Experience</a></li>
  <li><a href="http://quirktools.com/screenfly/">Screenfly by QuirkTools — Test Your Website at Different Screen Resolutions</a></li>
  <li><a href="http://www.script-tutorials.com/how-to-create-own-voting-system/">How to Create Your Own 5 Stars Voting System</a></li>
  <li><a href="http://www.gradientapp.com/">Gradient App for OS X | The Missing Link between Web Designers and Colors</a></li>
  <li><a href="http://www.primaryobjects.com/CMS/Article134.aspx">Creating a Simple Paint App with HTML5 Canvas and Javascript</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/design-and-code-an-integrated-facebook-app/">How to Create a Facebook App</a></li>
  <li><a href="http://www.designzzz.com/how-convert-corporate-psd-web-layout-html-css/">How to Convert a Corporate PSD Web Layout into HTML CSS</a></li>
  <li><a href="http://designmodo.com/design-body-language-web/">Why is Design the Body Language of the Web?</a></li>
  <li><a href="http://css-tricks.com/14492-writing-better-html-css-slides-from-fowa-london/">Writing Better HTML &amp; CSS</a></li>
  <li><a href="http://www.queness.com/post/9503/create-a-tab-interface-with-browser-history-and-url-support">Create a TAB Interface with Browser History and URL support</a></li>
  <li><a href="http://lmatteis.github.com/apejs/">Ape.JS - A tiny JavaScript web framework targeted for Google App Engine</a></li>
  <li><a href="http://tutorialzine.com/2011/10/for-developers-when-to-choose-a-vps/">For Developers: When to Choose a VPS</a></li>
  <li><a href="http://css-tricks.com/14497-making-sublimevideo-fluid-width/">Making SublimeVideo Fluid Width</a></li>
  <li><a href="http://www.sitepoint.com/javascript-media-queries/">How to use Media Queries in JavaScript</a></li>
  <li><a href="http://sixrevisions.com/tools/sandbox-testing-code-snippets/">10 Web-based Sandbox Tools for Testing Your Code Snippets</a></li>
  <li><a href="http://coolshell.cn/articles/5224.html">一些文章和各种资源</a></li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://morethanseven.net/2011/10/10/Javascript-in-your-ruby-mongoid-map-reduce.html">Javascript In Your Ruby: Mongoid Map Reduce</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/the-intro-to-rails-screencast-i-wish-i-had/">Introduction to Rails Screencast</a></li>
</ul>


<h2>Browser</h2>


<ul>
  <li><a href="http://www.thegeekstuff.com/2011/10/google-chrome-commands/">12 Most Useful Google Chrome Browser chrome:// Commands</a></li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2011/10/mysql-safe-update/">MySQL Safe Update Mode Explained</a></li>
  <li><a href="http://www.mysqlperformanceblog.com/2011/10/10/infinite-replication-loop/">Infinite Replication Loop</a></li>
  <li><a href="http://www.mysqlperformanceblog.com/2011/10/13/when-explain-estimates-can-go-wrong/">When EXPLAIN estimates can go wrong!</a></li>
  <li><a href="http://blog.nosqlfan.com/html/287.html">从MySQL到MongoDB</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="https://github.com/koush/node/wiki/%22async%22-support-in-node.js">&quot;async&quot; support in node.js</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://www.aqee.net/do-you-like-watching-other-people-code/">你喜欢观看别人是如何编程的吗？</a></li>
  <li><a href="http://citizen428.net/blog/2010/08/12/30-free-programming-ebooks/">30 free programming eBooks</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="https://picasaweb.google.com/101963862059071342094/lcvVtK#5656935777411769106">不需要美感的配色講座-顏色是可以用理論說明的</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://blog.hinablue.me/entry/Ubuntu-note-nginx-php5-fpm-apc-note">[Ubuntu note.] Nginx+PHP5-FPM+APC 筆記</a></li>
</ul>


<h2>Software</h2>


<ul>
  <li><a href="http://pank.org/blog/2011/09/convmv.html">convmv</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/1966" />
    <updated>2011-09-28T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1966</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://blog.fedecarg.com/2011/09/11/building-a-restful-web-api-with-php-and-apify/">Building a RESTful Web API with PHP and Apify</a> </li>
  <li><a href="http://www.laruence.com/2011/09/13/2139.html">关于做PHP扩展开发的一些资源</a> </li>
  <li><a href="http://schlueters.de/blog/archives/159-mysqlnd-plugins-and-json.html">mysqlnd plugins and json</a> </li>
  <li><a href="http://www.prodevtips.com/2011/09/14/mysql-replication-in-php-on-the-same-machine/">MySQL replication in PHP - on the same machine</a> </li>
  <li><a href="http://css.dzone.com/news/dropbox-client-library-php">Dropbox client library for PHP</a> </li>
  <li><a href="http://www.script-tutorials.com/how-to-use-apc-caching-with-php/">How to Use APC Caching with PHP</a> </li>
  <li><a href="http://lars-tesmer.com/blog/2011/09/08/what-my-co---workers-and-i-learned-when-trying-to-write-unit-tests-for-phpunit/">What My Co-Workers and I Learned When Trying to Write Unit Tests for PHPUnit</a> </li>
  <li><a href="http://www.xpertdeveloper.com/2011/09/php-debugging-tools/">PHP Debugging Tools</a> </li>
  <li><a href="http://css.dzone.com/news/renaming-domnode-php">Renaming a DOMNode in PHP</a> </li>
  <li><a href="http://ralphschindler.com/2011/09/19/autoloading-revisited">Autoloading (Revisited)</a> </li>
  <li><a href="http://pooteeweet.org/blog/0/1987#m1987">My PHP framework winner predictions</a> </li>
  <li><a href="http://www.xpertdeveloper.com/2011/09/is_file-and-file_exists-in-php/">is_file() and file_exists() in PHP</a> </li>
  <li><a href="http://www.devshed.com/c/a/PHP/MongoDB-Inserting-Updating-and-Deleting-Documents/">MongoDB: Inserting, Updating and Deleting Documents</a> </li>
  <li><a href="http://css.dzone.com/articles/phar-php-libraries-single-file">Phar: PHP libraries included with a single file</a> </li>
  <li><a href="http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/">Non alphanumeric code in PHP</a> </li>
  <li><a href="http://www.laruence.com/2011/09/23/2171.html">我对PHP5.4的一个改进</a> </li>
  <li><a href="http://blog.roodo.com/rocksaying/archives/16920627.html">schema-database - 查詢結果與 PDO::FETCH_CLASS</a> </li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://www.archive.org/details/GrumpyProgrammersGuideToZendFramework">Grumpy Programmer&#39;s Guide To Zend Framework</a> </li>
  <li><a href="http://www.littlehart.net/atthekeyboard/blog/2011/05/02/testing-web-services/">Testing Web Services in Zend Framework 1.x</a> </li>
  <li><a href="http://weierophinney.net/matthew/archives/266-Using-the-ZF2-EventManager.html">Using the ZF2 EventManager</a> </li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://www.elated.com/articles/5-javascript-libraries-youll-love/">5 JavaScript Libraries You&#39;ll Love</a> </li>
  <li><a href="http://webdesign14.com/70-best-ajax-tutorials/">70 Best AJAX Tutorials</a> </li>
  <li><a href="http://css.dzone.com/articles/backbonejs-mvc-javascript">Backbone.js: MVC in JavaScript</a> </li>
  <li><a href="http://css.dzone.com/news/douglas-crockford-answers">Douglas Crockford Answers DZone&#39;s Questions on JavaScript</a> </li>
  <li><a href="http://fitvidsjs.com/">FitVids.JS - A lightweight, easy-to-use jQuery plugin for fluid width video embeds.</a> </li>
  <li><a href="http://css.dzone.com/articles/jshint-%e2%80%93-javascript-code">JSHint – a JavaScript code quality checker</a> </li>
  <li><a href="http://blog.sematext.com/2011/09/19/top-javascript-dynamic-table-libraries/">Top JavaScript Dynamic Table Libraries</a> </li>
  <li><a href="https://docs.google.com/document/d/12SimAfBVcl8Fd-lr_SSBkM5B_PyEhDRfhgu1Lzvfpfw/edit?hl=en_US">Universal Binary JSON Specification</a> </li>
  <li><a href="http://www.gotoandlearn.com/play.php?id=150">JavaScript Animation Basics</a> </li>
  <li><a href="http://net.tutsplus.com/articles/web-roundups/20-javascript-frameworks-worth-checking-out/">20 JavaScript Frameworks Worth Checking Out</a> </li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/into-the-ring-with-knockout-js-the-title-fight/">Into the Ring with Knockout.js: The Title Fight</a> </li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/27/searchable-dynamic-content-with-ajax-crawling/">Searchable Dynamic Content With AJAX Crawling</a> </li>
  <li><a href="http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/Javascript/getting-started-with-javascript-unit">Getting Started with JavaScript Unit Testing</a> </li>
  <li><a href="http://www.nublue.co.uk/blog/javascript-canvas-frameworks/">Javascript Canvas Frameworks</a> </li>
  <li><a href="http://www.softwaretestingmagazine.com/videos/javascript-testing-at-google/">Javascript Testing at Google</a> </li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://james.padolsey.com/javascript/subclassing-jquery/">Subclassing jQuery</a> </li>
  <li><a href="http://tutorialzine.com/2011/09/jquery-pointpoint-plugin/">jQuery PointPoint – A Plugin For Pointing To Things</a> </li>
  <li><a href="http://webtablab.com/development/best-jquery-tutorials-2011/">20 Powerful And Useful jQuery Tutorials Of Year 2011</a> </li>
  <li><a href="http://www.script-tutorials.com/10-fresh-ajax-related-jquery-plugins/">10 fresh Ajax related jQuery plugins</a> </li>
  <li><a href="http://slodive.com/web-development/jquery-content-slider/">10 Awesome jQuery Content Slider Resources</a> </li>
  <li><a href="http://www.devcurry.com/2011/09/jquery-event-delegation-improves.html">jQuery Event Delegation Improves Performance</a> </li>
  <li><a href="http://webdesignledger.com/tools/10-jquery-plugins-to-enhance-your-user-interfaces">10 jQuery Plugins to Enhance your User Interfaces</a> </li>
  <li><a href="http://blog.darkthread.net/post-2011-09-22-ajax-goback.aspx">讓AJAX動態內容支援瀏覽器回上頁功能</a> </li>
  <li><a href="http://www.sitepoint.com/css3-3d-text-jquery-plugin/">How to Create a CSS3 3D Text Plugin for jQuery</a> </li>
  <li><a href="http://simianstudios.com/portamento/">Portamento - easy sliding/floating panels in jQuery</a> </li>
  <li><a href="http://dotnetaid.com/2011/09/22/disable-right-click-on-web-page-using-jquery/">Disable Right Click on Web Page using jQuery</a> </li>
  <li><a href="http://webinsightlab.com/design/beautiful-inspirational-jquery-websites/">10 Beautiful Inspirational jQuery Websites</a> </li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/23/create-an-animated-bar-graph-with-html-css-and-jquery/">Create An Animated Bar Graph With HTML, CSS And jQuery</a> </li>
  <li><a href="http://transformjs.strobeapp.com/">TransformJS - 3D and 2D Transforms for jQuery</a> </li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://buhrmi.tumblr.com/post/5371876452/how-coffeescript-makes-jquery-more-fun-than-ever">How CoffeeScript makes jQuery more fun than ever</a> </li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://www.admixweb.com/2011/09/07/css-resources-for-developers-and-designers/">CSS Resources for Developers and Designers</a> </li>
  <li><a href="http://www.qianduan.net/an-introduction-to-less-and-comparison-to-sass.html">LESS介紹及其與Sass的差異</a> </li>
  <li><a href="http://www.vanseodesign.com/css/attribute-selectors/">Do You Use These 7 Attribute Selectors In Your CSS?</a> </li>
  <li><a href="http://jacky.seezone.net/2011/09/15/3567/">sass &amp; less</a> </li>
  <li><a href="http://jas9.blogspot.com/2011/09/pxemrem.html#more">網頁設計該用哪種字級單位：px、em或rem？</a> </li>
  <li><a href="http://smacss.com/book/">Scalable and Modular Architecture for CSS</a> </li>
  <li><a href="http://php.refulz.com/201109/detecting-unused-css-selectors-part-1/">Detecting Unused CSS Selectors – Part 1</a> </li>
  <li><a href="http://css-tricks.com/14415-better-linkable-tabs/">Better Linkable Tabs</a> </li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://css.dzone.com/articles/click-action-multi-level-css3">Click action Multi-level CSS3 Dropdown Menu</a> </li>
  <li><a href="http://www.script-tutorials.com/html5-image-effects-app-adding-noise-and-invert/">HTML5 Image Effects App – Adding Noise and Invert</a> </li>
  <li><a href="http://webexpedition18.com/articles/css3-text-shadow-property/">Fun with CSS3 Text Shadow Property</a> </li>
  <li><a href="http://www.catswhocode.com/blog/mastering-html5-prefetching">Mastering HTML5 Prefetching</a> </li>
  <li><a href="http://www.script-tutorials.com/making-3d-webgl-demonstration/">Creating an Animated 3D WebGL Demonstration</a> </li>
  <li><a href="http://mobilehtml5.org/">Mobile HTML5 - compatibility tables for iPhone, Android, BlackBerry, Symbian, iPad and other mobile devices</a> </li>
  <li><a href="http://jejacks0n.github.com/mercury/">Mercury Editor</a> </li>
  <li><a href="http://www.sitepoint.com/how-to-embed-video-using-html5/">How to Embed Video Using HTML5</a> </li>
  <li><a href="http://www.qianduan.net/ie10-will-enhance-support-for-html5-and-css3.html">IE10将增强对HTML5和CSS3的支持</a> </li>
  <li><a href="http://coderbay.com/awesome-css3-buttons/">Awesome CSS3 Buttons</a> </li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/14/the-guide-to-css-animation-principles-and-examples/">The Guide To CSS Animation: Principles and Examples</a> </li>
  <li><a href="http://www.sitepoint.com/7-best-css3-utilities/">7 of the Best CSS3 Utilities</a> </li>
  <li><a href="http://www.sitepoint.com/css3-3d-text/">How to Create 3D Text With CSS3</a> </li>
  <li><a href="http://www.slideshare.net/timdream/html5-9263792">HTML5 應用程式開發簡介</a> </li>
  <li><a href="http://www.script-tutorials.com/creating-new-html5css3-single-page-layout-mono/">Creating ‘Mono’ HTML5 CSS3 Single Page Layout</a> </li>
  <li><a href="http://www.script-tutorials.com/click-action-css3-dropdown-menu-with-jquery/">Creating a Click-action CSS3 Dropdown Menu with jQuery</a> </li>
  <li><a href="http://www.developerdrive.com/2011/09/css3-media-queries-part-1/">CSS3 Media Queries: Part 1</a> </li>
  <li><a href="http://heartcode.robertpataki.com/canvasloader/">Heartcode CanvasLoader Creator</a> </li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/19/css3-flexible-box-layout-explained/">CSS3 Flexible Box Layout Explained</a> </li>
  <li><a href="http://www.sitepoint.com/tag/html5-dev-center/">HTML5 Dev Center</a> </li>
  <li><a href="http://www.queness.com/community-news/9268/31-must-see-html5-experiments">31 Must See HTML5 Experiments</a> </li>
  <li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/create-a-document-icon-with-css3/">How to Create a Beautiful Icon with CSS3</a> </li>
  <li><a href="http://www.red-team-design.com/slick-login-form-with-html5-css3">Slick login form with HTML5 &amp; CSS3</a> </li>
  <li><a href="http://webdesignerwall.com/tutorials/css3-image-styles">CSS3 Image Styles</a> </li>
  <li><a href="http://skytechgeek.com/2011/09/12-html5-css-frameworks-for-easy-webdevelopment/">12 HTML5-CSS FrameWorks For Easy WebDevelopment</a> </li>
  <li><a href="http://blog.darkthread.net/post-2011-09-23-ajax-history-in-html5.aspx">AJAX動態內容支援回上頁-HTML5篇</a> </li>
  <li><a href="http://www.sitepoint.com/unleash-the-power-of-hardware-accelerated-html5-canvas/">Unleash the Power of Hardware-Accelerated HTML5 Canvas</a> </li>
  <li><a href="http://www.script-tutorials.com/html5-game-development-lesson-1/">Developing Your First HTML5 Game – Lesson 1</a> </li>
  <li><a href="http://www.qianduan.net/css3-image-styles.html">一些上流的CSS3图片样式</a> </li>
  <li><a href="http://www.qianduan.net/before-and-before-the-difference-between.html">:before和::before的區別</a> </li>
  <li><a href="http://snook.ca/archives/html_and_css/yellow-fade-technique-css-animations">Yellow Fade Technique with CSS Animations</a> </li>
  <li><a href="http://webdesignerwall.com/tutorials/the-basics-of-css3">The Basics of CSS3</a> </li>
  <li><a href="http://tutorialzine.com/2011/09/html5-file-upload-jquery-php/">HTML5 File Uploads with jQuery</a> </li>
  <li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-an-html5-microdata-powered-resume/">How to Create an HTML5 Microdata Powered Resume</a> </li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://demos.kendoui.com/">Kendo UI</a> </li>
  <li><a href="http://iosboilerplate.com/">iOS Boilerplate - A base template for iOS apps</a> </li>
  <li><a href="http://www.script-tutorials.com/10-attractive-android-tutorials-for-developers/">10 Attractive android tutorials for developers</a> </li>
  <li><a href="http://smashinghub.com/iphone-apps-for-designers-and-developers.htm">20 Best iPhone Apps For Designers and Developers</a> </li>
  <li><a href="http://skytechgeek.com/2011/09/10-mobile-application-frameworks-for-easy-development/">10 Mobile Application Frameworks For Easy Development</a> </li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://www.codeforest.net/6-cool-php-jquery-scripts-to-juice-up-your-web">6 cool PHP, jQuery scripts to juice up your web</a> </li>
  <li><a href="http://net.tutsplus.com/articles/web-roundups/the-top-50-stock-web-development-items/">The Top 50 Stock Web Development Items</a> </li>
  <li><a href="http://www.hicss.net/how-to-save-you-my-table/">拿什麼來拯救你，我的table</a> </li>
  <li><a href="http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html">Official Google Webmaster Central Blog: Pagination with rel=“next” and rel=“prev”</a> </li>
  <li><a href="http://jsdo.it/">jsdo.it - Share JavaScript, HTML5 and CSS</a> </li>
  <li><a href="http://css-tricks.com/14353-poll-results-favorite-page-title-structure/">Poll Results: Favorite Page Title Structure</a> </li>
  <li><a href="http://designmodo.com/web-development-frameworks/">30+ Most Useful Web Development Frameworks</a> </li>
  <li><a href="http://www.catswhocode.com/blog/7-new-techniques-every-web-developer-should-know">7 new techniques every web developer should know</a> </li>
  <li><a href="http://css-tricks.com/14402-radio-buttons-with-2-way-exclusivity/">Radio Buttons with 2-Way Exclusivity</a> </li>
  <li><a href="http://www.queness.com/post/9294/21-free-web-forms-psd-layouts">21 FREE Web Forms PSD Layouts</a> </li>
  <li><a href="http://lifesinger.wordpress.com/2011/09/22/empty-src-is-dangerous/">空路徑對頁面性能的影響</a> </li>
  <li><a href="http://www.sitepoint.com/7-reasons-to-use-a-cdn/">7 Reasons to use a Content Delivery Network</a> </li>
  <li><a href="http://sixrevisions.com/project-management/ways-more-productive-web-developer/">10 Ways to Be a More Productive Web Developer</a> </li>
  <li><a href="http://kyleschaeffer.com/best-practices/10-things-a-website-should-never-ever-do/">10 Things a Website Should Never, Ever Do</a> </li>
  <li><a href="http://clonn.blogspot.com/2011/09/livereload-livereload-project-analysis.html">[分享] livereload 設定及原理分析, livereload project analysis</a> </li>
  <li><a href="http://lifesinger.wordpress.com/2011/09/26/fed-infrastructure/">也谈前端基础设施建设</a> </li>
  <li><a href="http://www.sitepoint.com/developing-with-browser-and-feature-detection/">Developing with Browser- and Feature-Detection</a> </li>
  <li><a href="http://line25.com/articles/youre-doing-it-wrong-common-html-tag-misuse">You’re Doing it Wrong: Common HTML Tag Misuses</a> </li>
  <li><a href="http://blog.carbonfive.com/2011/09/27/automating-node-js-deployment-to-ec2-with-chef/">Automating Node.js deployment to EC2 with Chef</a> </li>
  <li><a href="http://zoomzum.com/11-best-google-labs-tools-for-web-developers/">11 Best Google Labs Tools For Web Developers</a> </li>
</ul>


<h2>Ruby &amp; Rails</h2>


<ul>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/the-best-way-to-learn-ruby-on-rails/">The Best Way to Learn Rails</a> </li>
  <li><a href="http://blog.xdite.net/?p=3137">升級到 Rails 3.1，專案所要做的前置準備工作</a> </li>
  <li><a href="http://documentcloud.github.com/jammit/">Jammit: Industrial Strength Asset Packaging for Rails</a> </li>
</ul>


<h2>Database</h2>


<ul>
  <li><a href="http://blog.ulf-wendel.de/?p=316">A mysqlnd replication plugin presentation</a> </li>
  <li><a href="http://www.fromdual.ch/ranking-mysql-results">Ranking in MySQL results</a> </li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="http://www.catonmat.net/blog/browserling-open-sources-90-node-modules/">We open-sourced 90 node.js modules at Browserling!</a> </li>
  <li><a href="http://blog.labin.cc/?page_id=857">node.js實戰聖經</a> </li>
  <li><a href="http://www.debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb">Unit testing with node.js</a> </li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/16/useful-node-js-tools-tutorials-and-resources/">Useful Node.js Tools, Tutorials And Resources</a> </li>
  <li><a href="http://www.benjamincoe.com/post/10326713013/building-your-first-node-js-library">Building Your First Node.js Library</a> </li>
  <li><a href="http://clonn.blogspot.com/2011/09/nodejs-vm-module.html">[筆記] nodeJS VM module使用方法</a></li>
  <li><a target="_blank" href="http://blog.carbonfive.com/2011/09/27/automating-node-js-deployment-to-ec2-with-chef/" rel="nofollow">Automating Node.js deployment to EC2 with Chef</a> </li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://www.mikespook.com/2011/09/%E5%8F%8D%E5%B0%84%E7%9A%84%E8%A7%84%E5%88%99/">[翻译]反射的规则</a> </li>
  <li><a href="http://coolshell.cn/articles/5479.html">给程序员的VIM速查卡</a> </li>
  <li><a href="http://seldo.com/weblog/2011/08/11/orm_is_an_antipattern">ORM is an anti-pattern</a> </li>
  <li><a href="http://coolshell.cn/articles/5224.html">一些文章和各种资源</a> </li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://slodive.com/freebies/ipad-ui/">20 Awesome UI Kits For iPad Development</a> </li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://gitref.org/creating/#init">Git Reference</a> </li>
  <li><a href="http://blog.wu-boy.com/2011/09/introduction-to-git-submodule/">Git Submodule 介紹與使用</a> </li>
  <li><a href="http://huoding.com/2011/09/26/116">Subversion钩子</a> </li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://cha.homeip.net/blog/2011/09/3286.html">三款 Rootkit 檢測工具 for Linux</a> </li>
  <li><a href="http://www.how2centos.com/installing-php-5-3-3-on-centos-5-5-tutorial/">[How2CentOS] Installing PHP 5.3.3 on CentOS 5.5 Tutorial</a> </li>
  <li><a href="http://www.456bereastreet.com/archive/201109/how_to_move_virtualbox_machines_to_another_hard_drive/">How to move VirtualBox machines to another hard drive</a> </li>
</ul>


<h2>Security</h2>


<ul>
  <li><a href="http://www.thespanner.co.uk/2011/09/12/protecting-against-xss/">Protecting against XSS</a> </li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/1960" />
    <updated>2011-09-10T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1960</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
  <li><a href="http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_17.html">Quality Assurance on PHP projects - PHPUnit part 1</a></li>
  <li><a href="http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_23.html">Quality Assurance on PHP projects - PHPUnit part 2</a></li>
  <li><a href="http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_28.html">Quality Assurance on PHP projects - PHPUnit part 3</a></li>
  <li><a href="http://www.dragonbe.com/2011/09/quality-assurance-on-php-projects.html">Quality Assurance on PHP projects - PHPUnit part 4</a></li>
  <li><a href="http://derickrethans.nl/debugging-with-xdebug-and-firewalls.html">Remote Debugging PHP with a Firewall in the Way</a></li>
  <li><a href="http://cweiske.de/tagebuch/php-phar-files.htm">Working with .phar files</a></li>
  <li><a href="http://css.dzone.com/news/building-small-microframework">Building a small microframework with PHP</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/08/compress-css-files-using-php/">Compress CSS Files using PHP</a></li>
  <li><a href="http://www.script-tutorials.com/id3-tags-reader-with-php/">Creating an ID3 Tags Reader with PHP</a></li>
  <li><a href="http://css.dzone.com/news/declaring-static-methods-php">Declaring Static Methods in PHP</a></li>
  <li><a href="http://cakephp-php.blogspot.com/2011/08/php-errors-and-mistakes-tutorial.html">PHP Errors and Mistakes Tutorial</a></li>
  <li><a href="http://cakephp-php.blogspot.com/2011/08/smart-file-type-detection-using-php.html">Smart File Type Detection Using PHP</a></li>
  <li><a href="http://css.dzone.com/articles/building-small-microframework">Building a small microframework with PHP (Part 2). Command line interface</a></li>
  <li><a href="http://epixa.com/2011/08/how-php-is-broken-and-how-it-can-be-fixed">How PHP is Broken and How It Can Be Fixed</a></li>
  <li><a href="http://css.dzone.com/news/10-life-saving-php-snippets">10 Life-Saving PHP Snippets</a></li>
  <li><a href="http://roojs.com/index.php/View/242/Watchout_PHP_537_is_about_and_the_is_a____autoload_mess_.html">Watch-out PHP 5.3.7+ is about.. and the is_a() / __autoload() mess.</a></li>
  <li><a href="http://css.dzone.com/news/php-oauth-provider-access">PHP OAuth Provider: Access Tokens</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/09/05/getting-started-with-the-paypal-api/">Getting Started With The PayPal API</a></li>
  <li><a href="http://php.refulz.com/201109/loadui-open-source-cross-platform-and-free-load-testing-tool/">loadUI – Open Source, Cross Platform and Free Load Testing Tool</a></li>
  <li><a href="http://www.xpertdeveloper.com/2011/09/create-a-zip-file-using-php/">Create a Zip File Using PHP</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/rapid-application-prototyping-in-php-using-a-micro-framework/">Rapid Application Prototyping in PHP Using a Micro Framework</a></li>
  <li><a href="http://giorgiosironi.blogspot.com/2011/09/in-scala-jvm-language-constructor.html">Automatically assign constructor parameters to private properties</a></li>
  <li><a href="http://www.underworldmagazines.com/11-websites-to-learn-php/">11 Websites to Learn PHP</a></li>
  <li><a href="http://huoding.com/2011/09/07/112">玩轉PMan</a></li>
  <li><a href="http://savitasoni.com/how-to-check-for-broken-url-in-php">How to check for broken url in PHP </a></li>
  <li><a href="http://css.dzone.com/news/exploring-rabbitmq-and-php">Exploring RabbitMQ and PHP</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/how-to-upload-files-with-codeigniter-and-ajax/">How to Upload Files with CodeIgniter and AJAX</a></li>
</ul>


<h2>Zend Framework</h2>


<ul>
  <li><a href="http://blog.astrumfutura.com/2011/08/zend-framework-contributors-mailing-list-summary-edition-2-july-2011/">Zend Framework Contributors Mailing-List Summary; Edition #2 (July 2011)</a></li>
  <li><a href="http://php100.wordpress.com/2011/08/28/zf-oauth-provider/">ZF Oauth Provider</a></li>
</ul>


<h2>JavaScript &amp; AJAX</h2>


<ul>
  <li><a href="http://josscrowcroft.github.com/accounting.js/">accounting.js - format money / currency in JavaScript</a></li>
  <li><a href="http://imakewebthings.github.com/deck.js/">Deck JS » Modern HTML Presentations</a></li>
  <li><a href="http://rastajs.errorjs.com/">Rasta.js</a></li>
  <li><a href="http://www.queness.com/post/8961/10-google-map-javascript-resources-to-kick-start-your-mapping-skill">10+ Google Map Javascript Resources to Kick Start Your Mapping Skill</a></li>
  <li><a href="http://kellysutton.tumblr.com/post/9050617589/the-danger-of-in-javascript">The Danger of += in JavaScript</a></li>
  <li><a href="http://clonn.blogspot.com/2011/08/elementfrompoint-google-feedback.html">[分享] elementFromPoint() 模擬 Google feedback 效果</a></li>
  <li><a href="https://github.com/mtrpcic/polljs">PollJS</a></li>
  <li><a href="http://agilityjs.com/">Agility.js Javascript MVC library</a></li>
  <li><a href="http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/">Understanding “Prototypes” in JavaScript</a></li>
  <li><a href="http://zoomzum.com/best-open-source-fisheye-menus/">Best Open Source FishEye Menus</a></li>
  <li><a href="http://sugarjs.com/">Sugar: A Javascript library for working with native objects.</a></li>
  <li><a href="http://clonn.blogspot.com/2011/08/xmlhttprequestajax.html">[分享] XMLHttpRequest執行AJAX 跨網域存取</a></li>
  <li><a href="http://www.ethercalc.org/start">EtherCalc</a></li>
  <li><a href="http://addyosmani.com/largescalejavascript/">Patterns For Large-Scale JavaScript Application Architecture</a></li>
  <li><a href="http://www.sitepoint.com/javascript-generate-lighter-darker-color/">How to Calculate Lighter or Darker Hex Colors in JavaScript</a></li>
  <li><a href="http://www.quirksmode.org/blog/archives/2011/09/responsive_desi.html">Responsive design and JavaScript</a></li>
</ul>


<h2>jQuery</h2>


<ul>
  <li><a href="http://designmodo.com/css-jquery-plugins-coding/">30+ Useful CSS/jQuery Plugins and Coding Techniques</a></li>
  <li><a href="http://webdesign14.com/40-best-jquery-carousel-plugins-tutorials/">40+ Best jQuery Carousel Plugins, Tutorials</a></li>
  <li><a href="http://slodive.com/web-development/jquery-tutorials/">25 Really Useful jQuery Tutorials</a></li>
  <li><a href="http://www.script-tutorials.com/nice-css3-lightbox-gallery-with-jquery/">Nice CSS3 Lightbox Gallery With jQuery</a></li>
  <li><a href="http://www.designyourway.net/blog/resources/55-jquery-form-plugins-to-download-and-use/">55 jQuery Form Plugins To Download And Use</a></li>
  <li><a href="http://www.queness.com/post/8970/7-jquery-plugins-you-might-not-know">7 jQuery Plugins You Might Not Know</a></li>
  <li><a href="http://www.userdot.net/files/jquery/jquery.uslider/demo/">jQuery uSlider plugin</a></li>
  <li><a href="http://verens.com/2011/08/25/jquery-maskimage-plugin/">jQuery maskImage plugin</a></li>
  <li><a href="http://designshack.co.uk/articles/javascript/developing-a-jquery-private-messaging-modal-box/">Developing a jQuery Private Messaging Modal Box</a></li>
  <li><a href="http://webexpedition18.com/articles/fresh-jquery-plugins-from-2011/">20+ Must See Fresh and Useful jQuery Plugins from 2011</a></li>
  <li><a href="http://extreme-java.com/8-cross-browser-jquery-plugins/">8 Cross-Browser Jquery Plugins</a></li>
  <li><a href="http://zoomzum.com/15-useful-jquery-tab-based-interfaces/">15 Useful jQuery Tab-Based Interfaces</a></li>
  <li><a href="http://www.script-tutorials.com/animated-jquery-progressbar/">Animated jQuery Progressbar Plugin</a></li>
  <li><a href="http://www.position-absolute.com/articles/organizing-events-with-jquery/">Organizing events with jQuery</a></li>
  <li><a href="http://www.webmaster-source.com/2011/06/20/pure-javascript-qr-code-generator-with-jquery/">Pure JavaScript QR Code Generator with jQuery</a></li>
  <li><a href="http://webtablab.com/design/jquery-animation-tutorials/">22 Very Detailed jQuery Animation Tutorials For Creative Designers</a></li>
  <li><a href="http://verens.com/2011/08/31/onchange-in-ckeditor/">onchange in ckeditor</a></li>
  <li><a href="http://www.script-tutorials.com/10-interesting-jquery-plugins-august-2011/">10 interesting jQuery plugins (august 2011)</a></li>
  <li><a href="http://blog.darkthread.net/post-2011-09-02-jquery-validate-ubnotrusive-checkbox-required.aspx">謙卑式jQuery檢核: 勾選欄位必填檢查</a></li>
  <li><a href="http://www.designyourway.net/blog/resources/28-useful-jquery-sliders-you-need-to-download/">28 Useful JQuery Sliders You Need To Download</a></li>
  <li><a href="http://tutorialzine.com/2011/09/shuffle-letters-effect-jquery/">Shuffle Letters Effect: a jQuery Plugin</a></li>
  <li><a href="http://www.learningjquery.com/2011/09/using-jquerys-data-apis">Using jQuery’s Data APIs</a></li>
  <li><a href="http://blog.mindedsecurity.com/2011/07/jquery-is-sink.html">jQuery is a Sink!</a></li>
  <li><a href="http://zoomzum.com/jquery-tooltip-plugins/">20 Highly Useful jQuery Tooltip Plugins</a></li>
  <li><a href="http://bloggerspath.com/15-fresh-jquery-plugins-you-love-to-implement-in-your-website/">15 Fresh Jquery Plugins You Love to Implement in Your Website</a></li>
  <li><a href="http://bloggerspath.com/10-beautiful-jquery-websites-for-your-inspiration/">10 Beautiful JQuery Websites for your Inspiration</a></li>
  <li><a href="http://technotab.com/august-2011-10-best-free-jquery-plugins/">August 2011- 10 Best Free jQuery Plugins</a></li>
  <li><a href="http://webdesign14.com/30-jquery-enhanced-css-button-techniques/">30 jQuery Enhanced CSS Button Techniques</a></li>
  <li><a href="http://skytechgeek.com/2011/09/12-impressive-jquery-navigation-menu-tutorials-plugins/">12 Impressive jQuery Navigation Menu Tutorials &amp; Plugins</a></li>
</ul>


<h2>CoffeeScript &amp; Sass</h2>


<ul>
  <li><a href="http://robots.thoughtbot.com/post/9251081564/coffeescript-spartan-javascript">CoffeeScript: Spartan JavaScript</a></li>
  <li><a href="http://sonspring.com/journal/sass-for-designers">Sass for Designers</a></li>
</ul>


<h2>CSS</h2>


<ul>
  <li><a href="http://www.noupe.com/css/100-great-css-menu-tutorials.html">100 Great CSS Menu Tutorials</a></li>
  <li><a href="http://blog.hinablue.me/entry/sass-note-css-reversed-engineering-part-1">[SASS note.] CSS 逆向工程 part 1</a></li>
  <li><a href="http://blog.hinablue.me/entry/sass-note-css-reversed-engineering-part-2">[SASS note.] CSS 逆向工程 part 2</a></li>
  <li><a href="http://blog.hinablue.me/961">[SASS note.] CSS 逆向工程 Part 3</a></li>
  <li><a href="http://www.columnal.com/">Columnal | A responsive CSS grid system helping desktop and mobile browsers play nicely together.</a></li>
  <li><a href="http://nsdev.blogspot.com/2011/08/intuitive-css-layout-technique.html">An Intuitive CSS Layout Technique</a></li>
  <li><a href="http://www.hicss.net/solve-change-line-in-css/">攻略強制換行與強制不換行</a></li>
  <li><a href="http://www.impressivewebs.com/css-in-real-life/">CSS in Real Life</a></li>
  <li><a href="http://net.tutsplus.com/quizzes/nettuts-quiz-5-css-specificity-and-cascading/">Nettuts+ Quiz #5: CSS Specificity and Cascading</a></li>
  <li><a href="http://smashinghub.com/css-accelerating-development-time.htm">10 Excellent CSS Accelerating Development Time</a></li>
</ul>


<h2>HTML5 &amp; CSS3</h2>


<ul>
  <li><a href="http://www.sitepoint.com/html5-file-drag-and-drop/">How to Use HTML5 File Drag &amp; Drop</a></li>
  <li><a href="http://html5doctor.com/storing-data-the-simple-html5-way-and-a-few-tricks-you-might-not-have-known/">Storing Data the Simple HTML5 Way (and a few tricks you might not have known)</a></li>
  <li><a href="http://www.sitepoint.com/html5-javascript-open-dropped-files/">How to Open Dropped Files Using HTML5 and JavaScript</a></li>
  <li><a href="http://www.sitepoint.com/html5-ajax-file-upload/">How to Asynchronously Upload Files Using HTML5 and Ajax</a></li>
  <li><a href="http://www.devcurry.com/2011/07/upside-down-text-with-css3.html">Upside Down Text with CSS3</a></li>
  <li><a href="http://www.sitepoint.com/a-developer%e2%80%99s-guide-to-html5-canvas/">A Developer’s Guide to HTML5 Canvas</a></li>
  <li><a href="http://www.sitepoint.com/html5-javascript-file-upload-progress-bar/">How to Create Graphical File Upload Progress Bars in HTML5 and JavaScript</a></li>
  <li><a href="http://www.sitepoint.com/html5-file-drag-drop-read-analyze-upload-progress-bars/">HTML5 File Drag, Drop, Analyze, Read and Upload</a></li>
  <li><a href="http://www.script-tutorials.com/html5-canvas-image-effects-app-adding-blur/">HTML5 Canvas Image Effects App – Adding Blur</a></li>
  <li><a href="http://hacks.mozilla.org/2011/08/calculated-drop-shadows-in-html5-canvas/">Calculated drop shadows in HTML5 canvas</a></li>
  <li><a href="http://webdesigncrowd.com/animated-navigation-css3-transitions-transforms/">Animated Navigation with CSS3 Transitions and Transforms</a></li>
  <li><a href="http://community.jboss.org/people/wesleyhales/blog/2011/08/28/fixing-ajax-on-mobile-devices">Fixing Ajax on Mobile Devices (with HTML5)</a></li>
  <li><a href="http://coding.smashingmagazine.com/2011/08/30/optimize-images-with-html5-canvas/">Optimize Images With HTML5 Canvas</a></li>
  <li><a href="http://www.webhostingsecretrevealed.com/featured-articles/learn-html5-10-must-read-lessons/">Learn HTML5: 10 Must Read Lessons</a></li>
  <li><a href="http://css-tricks.com/13881-fold-out-popups/">Fold Out Popups</a></li>
  <li><a href="http://www.script-tutorials.com/creating-new-html5css3-single-page-layout-art-theme/">Creating new HTML5/CSS3 single page layout</a></li>
  <li><a href="http://webtablab.com/design/best-html5-tools/">8 Best HTML5 Tools Every Web Designer Should Have</a></li>
  <li><a href="http://www.qianduan.net/html5-differences-in-the-div-section-article.html">HTML5 中 div section article 的區別</a></li>
  <li><a href="http://hacks.mozilla.org/2011/09/dynabyte-event-and-presentations-on-html5-and-css3/">Dynabyte event and presentations on HTML5 and CSS3</a></li>
  <li><a href="http://www.devcurry.com/2011/09/html-5-number-spinner-control.html">HTML 5 Number Spinner Control</a></li>
  <li><a href="http://hacks.mozilla.org/2011/09/detecting-and-generating-css-animations-in-javascript/">Detecting and generating CSS animations in JavaScript</a></li>
  <li><a href="http://www.red-team-design.com/just-another-awesome-css3-buttons">Just some other awesome CSS3 buttons</a></li>
  <li><a href="http://html5doctor.com/your-questions-18/">Your Questions 18</a></li>
  <li><a href="http://www.qianduan.net/css3-pointer-event-description.html">CSS3 pointer-events介绍</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
  <li><a href="http://tutorialzine.com/2011/08/jquery-mobile-mvc-website-part-2/">Building a Website with PHP, MySQL and jQuery Mobile, Part 2</a></li>
  <li><a href="http://pivotallabs.com/users/amilligan/blog/articles/1234-bdd-style-testing-using-objective-c">BDD-style testing using Objective-C</a></li>
  <li><a href="http://blog.gasolin.idv.tw/2011/08/jenkinsandroid.html">使用Jenkins持續集成與發佈Android應用程式</a> <a href="http://www.engineyard.com/blog/2011/mobile-development-with-html5/">Mobile development with HTML5</a></li>
  <li><a href="http://webdesign14.com/30-best-jquery-mobile-tutorials/">30 Best jQuery Mobile Tutorials</a></li>
  <li><a href="http://skytechgeek.com/2011/09/6-useful-applications-for-mobile-development/">6 Useful Applications For </a><a href="http://skytechgeek.com/2011/09/6-useful-applications-for-mobile-development/">Mobile Development</a> </li>
</ul>


<h2>Web Development</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2011/08/http_x_forwarded_for-http_via-and-remote_addr-explained/">HTTP_X_FORWARDED_FOR, HTTP_VIA and REMOTE_ADDR Explained</a></li>
  <li><a href="http://smashinghub.com/excellent-developers-websites.htm">10 Excellent Developers Websites You should Bookmark</a></li>
  <li><a href="http://twitter.github.com/bootstrap/">Bootstrap, from Twitter</a></li>
  <li><a href="http://smashinghub.com/awesome-chrome-web-apps.htm">6 Awesome Chrome Web Apps Worth Checking Out</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/php/how-to-create-an-advanced-twitter-widget/">How to Create an Advanced Twitter Widget</a></li>
  <li><a href="http://techwalls.com/news/set-up-google-page-speed-cdn-service/">How to Set Up Google CDN Service</a></li>
  <li><a href="http://www.victorcisneiros.com/blog/2011/08/17/recreating-the-windows-aero-desktop-in-htmlcss-using-jquery-and-jquery-ui/">Recreating the Windows Aero Desktop in HTML/CSS/JS</a></li>
  <li><a href="http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/">How Browsers Work: Behind the Scenes of Modern Web Browsers</a></li>
  <li><a href="http://www.plupload.com/">Plupload - A tool for uploading files using Flash, Silverlight, Google Gears, HTML5 or Browserplus</a></li>
  <li><a href="http://technotab.com/12-free-online-tools-for-website-testing/">12 Free Online Tools For Website Testing </a></li>
  <li><a href="http://slodive.com/web-development/cross-browser-testing/">12 Best Cross Browser Testing Tools</a></li>
  <li><a href="http://blog.echoenduring.com/2011/09/01/improving-the-login-form-experience/">Improving the Login Form Experience</a></li>
  <li><a href="http://www.ruanyifeng.com/blog/2011/09/curl.html">curl網站開發指南</a></li>
  <li><a href="http://www.wretch.cc/blog/kojenchieh/15591998">Cross Browser Testing Tools 的介紹</a></li>
  <li><a href="http://coolshell.cn/articles/5353.html">你會做Web上的用戶登錄功能嗎？</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
  <li><a href="https://github.com/wearefractal/fusker">fusker</a></li>
  <li><a href="http://batmanjs.org/">batman.js</a></li>
  <li><a href="http://blog.shian.tw/node-js-connection-mysql.html">node.js connection mysql</a></li>
  <li><a href="http://smus.com/multiplayer-html5-games-with-node">Developing Multiplayer HTML5 Games with Node.js</a></li>
  <li><a href="http://ued.taobao.com/blog/2011/09/02/what-is-nod/">[譯]什麼是Node？</a></li>
</ul>


<h2>Programming</h2>


<ul>
  <li><a href="http://javarevisited.blogspot.com/2011/08/code-comments-java-best-practices.html">10 best practices to follow while writing code comments</a></li>
  <li><a href="http://modeling-languages.com/5-great-web-based-modeling-tools/">5 Great Web-based Modeling Tools</a></li>
  <li><a href="http://coolshell.cn/articles/5426.html">簡明 Vim 練級攻略</a></li>
</ul>


<h2>Python</h2>


<ul>
  <li><a href="http://net.tutsplus.com/tutorials/python-tutorials/python-from-scratch-object-oriented-programming/">Python from Scratch: Object Oriented Programming</a></li>
  <li><a href="http://code.activestate.com/recipes/491264-mini-fake-dns-server/">Mini Fake DNS server</a></li>
</ul>


<h2>Ruby</h2>


<ul>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-testing-web-apps-with-capybara-and-cucumber/">Ruby for Newbies: Testing Web Apps with Capybara and Cucumber</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/how-to-integrate-rspec-into-a-sinatra-app/">How to use rspec in a Sinatra Application</a></li>
  <li><a href="http://blog.steveklabnik.com/2011/09/06/the-secret-to-rails-oo-design.html">The Secret to Rails OO Design</a></li>
  <li><a href="http://net.tutsplus.com/tutorials/ruby/how-to-install-ruby-on-a-mac/">How to install Ruby on Mac</a></li>
  <li><a href="http://ihower.tw/blog/archives/6026">RubyKoans: 透過單元測試來學習 Ruby 語法</a></li>
</ul>


<h2>Design</h2>


<ul>
  <li><a href="http://www.queness.com/post/9055/42-outstanding-free-ui-kits-for-web-designers">42 Outstanding FREE UI Kits for Web Designers</a></li>
</ul>


<h2>SCM</h2>


<ul>
  <li><a href="http://www.electrictoolbox.com/subversion-export-changed-files-cli/">Subversion Command Line Script to export changed files</a></li>
  <li><a href="http://josephj.com/entry.php?id=372">分享 Trac 與 Git 的使用心得</a></li>
</ul>


<h2>System</h2>


<ul>
  <li><a href="http://www.xpertdeveloper.com/2011/08/set-expire-headers-using-htaccess/">Set Expire Headers using .htaccess</a></li>
</ul>


<h2>Software</h2>


<ul>
  <li><a href="http://designmodo.com/free-mac-apps-web-designers-developers/">30 Must Have Free Mac Apps for Web Designers and Developers</a></li>
  <li><a href="http://www.noupe.com/tools/25-useful-document-and-file-comparison-tools.html">25+ Useful Document and File Comparison Tools</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[如何將 compass 整合到 Zend Framework 中]]></title>
    <link href="http://www.jaceju.net/blog/archives/1938" />
    <updated>2011-09-07T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1938</id>
    <content type="html"><![CDATA[<p><a href="http://compass-style.org/">compass</a> 是一個很讚的編譯型 CSS Framework ，它可以幫我們把 <a href="http://sass-lang.com/">scss/sass</a> 格式的樣式表轉換成 css ，並且還加入許多好用的 extension ，讓我們能更快開發出非常亮眼的網頁 (當然還是要有一定的美術天份) 。
compass 因為是用 ruby 寫的，所以也可以輕鬆地跟 rails 整合。但 compass 還是可以用在其他語言所開發的 Web 專案上，只是手續稍嫌複雜了些。
這幾天試著把 compass 整合到 Zend Framework 中，以下就是整合的過程。</p>

<!--more-->


<h2>安裝 compass</h2>


<p>這邊假設大家已經已經安裝好了 Ruby 環境，那麼 compass 的安裝就很簡單了，只需要在命令列模式下輸入以下指令即可：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>gem install compass</span></code></pre></td></tr></table></div></figure>


<p>就是這麼簡單。</p>

<p class="note">註： Windows 下的 Ruby 環境安裝請參考：<a href="http://www.jaceju.net/blog/archives/1795">在 Windows 下使用 LiveReload</a> 。</p>


<h2>建立 compass 專案</h2>


<p>接下來我們要先建立一個新的 compass 專案，請輸入以下指令：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>compass create -x sass compass_test</span></code></pre></td></tr></table></div></figure>


<p>compass_test 可以隨意命名，不要跟現有的專案名稱重複即可。上面的命令執行後，會出現以下結果：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>directory compass_test/ 
</span><span class='line'>directory compass_test/sass/ 
</span><span class='line'>directory compass_test/stylesheets/ 
</span><span class='line'>   create compass_test/config.rb 
</span><span class='line'>   create compass_test/sass/screen.sass 
</span><span class='line'>   create compass_test/sass/print.sass 
</span><span class='line'>   create compass_test/sass/ie.sass 
</span><span class='line'>   create compass_test/stylesheets/ie.css 
</span><span class='line'>   create compass_test/stylesheets/print.css 
</span><span class='line'>   create compass_test/stylesheets/screen.css
</span><span class='line'>...
</span><span class='line'>To import your new stylesheets add the following lines of HTML (or equivalent) to your webpage:
</span><span class='line'>&lt;head&gt;
</span><span class='line'>  &lt;link href=&quot;/stylesheets/screen.css&quot; media=&quot;screen, projection&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>  &lt;link href=&quot;/stylesheets/print.css&quot; media=&quot;print&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>  &lt;!--[if IE]&gt;
</span><span class='line'>      &lt;link href=&quot;/stylesheets/ie.css&quot; media=&quot;screen, projection&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>  &lt;![endif]--&gt;
</span><span class='line'>&lt;/head&gt;</span></code></pre></td></tr></table></div></figure>


<p>我們需要的就是那個 config.rb 和 *.sass 檔案囉。</p>

<h2>整合至 Zend Framework 專案中</h2>


<p>其實目前任何架構的 Zend Framework 專案都可以整合 compass ，不過這邊我以 <a href="http://www.jaceju.net/blog/archives/1600">Portable 的 ZF 專案</a> 來解說。
首先我們要把 config.rb 複製到 ZF 專案的根目錄下，假設 ZF 專案的路徑在 /path/to/compass_zf ，請輸入以下指令：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cp /path/to/compass_test/config.rb /path/to/compass_zf</span></code></pre></td></tr></table></div></figure>


<p>然後再把 sass 目錄複製到 ZF 專案的根目錄下：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cp -R /path/to/compass_test/sass /path/to/compass_zf</span></code></pre></td></tr></table></div></figure>


<p>接著修改 /path/to/compass_zf/config.rb ，原來的內容如下：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># Require any additional compass plugins here.
</span><span class='line'># Set this to the root of your project when deployed:
</span><span class='line'>http_path = &quot;/&quot;
</span><span class='line'>css_dir = &quot;stylesheets&quot;
</span><span class='line'>sass_dir = &quot;sass&quot;
</span><span class='line'>images_dir = &quot;images&quot;
</span><span class='line'>javascripts_dir = &quot;javascripts&quot;
</span><span class='line'># You can select your preferred output style here (can be overridden via the command line):
</span><span class='line'># output_style = :expanded or :nested or :compact or :compressed
</span><span class='line'># To enable relative paths to assets via compass helper functions. Uncomment:
</span><span class='line'># relative_assets = true
</span><span class='line'># To disable debugging comments that display the original location of your selectors. Uncomment:
</span><span class='line'># line_comments = false
</span><span class='line'>preferred_syntax = :sass</span></code></pre></td></tr></table></div></figure>


<p>我們要修改的就是第二段的路徑部份，請將它們改成：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>http_path = &quot;/&quot;
</span><span class='line'>css_dir = &quot;public/css&quot;
</span><span class='line'>sass_dir = &quot;sass&quot;
</span><span class='line'>images_dir = &quot;public/img&quot;
</span><span class='line'>javascripts_dir = &quot;public/js&quot;</span></code></pre></td></tr></table></div></figure>


<p>當然也別忘了在 public 下建立好 css 、 img 及 js 等三個目錄。</p>

<p class="note">註：其實只要修改 config.rb 中的路徑，就可以支援各種架構的 Web 專案了，只是要記得把 config.rb 放在專案根目錄。</p>


<p>最後一步，我們要在樣版上加入 CSS 的連結，把剛剛在產生 compass 專案時所建議的 HTML 貼到 ZF 專案的 layout.phtml 的 head 區段中 (或是其他含有 head 標籤的樣版上) ，並將改成：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;link href=&quot;&lt;?php echo $this-&gt;baseUrl(); ?&gt;/css/screen.css&quot; media=&quot;screen, projection&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>&lt;link href=&quot;&lt;?php echo $this-&gt;baseUrl(); ?&gt;/css/print.css&quot; media=&quot;print&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>&lt;!--[if IE]&gt;
</span><span class='line'>    &lt;link href=&quot;&lt;?php echo $this-&gt;baseUrl(); ?&gt;/css/ie.css&quot; media=&quot;screen, projection&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</span><span class='line'>&lt;![endif]--&gt;</span></code></pre></td></tr></table></div></figure>


<p>到這邊就完成啦！可以試著用以下指令來試試看 compass 整合後的成果：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>compass watch /path/to/compass_zf</span></code></pre></td></tr></table></div></figure>


<p>會產生以下結果：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt;&gt;&gt; Change detected to: ie.sass
</span><span class='line'>   create compass_zf/public/css/ie.css 
</span><span class='line'>   create compass_zf/public/css/print.css 
</span><span class='line'>   create compass_zf/public/css/screen.css 
</span><span class='line'>&gt;&gt;&gt; Compass is watching for changes. Press Ctrl-C to Stop.</span></code></pre></td></tr></table></div></figure>


<p>現在只要修改 /path/to/compass_zf/sass 下的檔案， compass 就會自動幫你編譯囉。
當然我們可以再搭配 LiveReload 來監看檔案，並將變化即時反應到瀏覽器上，是不是很讚呢？</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[精進你的程式碼 - 從取得用戶端 IP 的函式談起]]></title>
    <link href="http://www.jaceju.net/blog/archives/1913" />
    <updated>2011-08-29T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1913</id>
    <content type="html"><![CDATA[<p>我想多數從事程式開發的朋友，都曾經在遇到問題時，直接上相關的論壇去詢問前輩，或是想辦法去找尋有沒有人碰過同樣的問題。而幸運的是，通常在網路上也可以找到很多前人所提供的解決方案，甚至有寫好的程式碼供後人參考。
但是很多人都是直接把這些程式碼直接複製過來使用，很少會去探討其中的原理。只要能解決問題，有誰會去在乎程式碼到底是圓是扁呢？然而這就是許多程式開發者無法精進自己能力的主要原因之一。</p>

<!--more-->


<p>當然我本身也是曾經是這種人，在不瞭解原理的狀況下，對於能夠運作的程式碼，也曾經抱持著能不改就別改的心態。但是在技術這條路上，如果一直用這種態度去處理問題，那麼跟沒有思考能力的機器人又有什麼兩樣呢？
來吧！我們就從一個最常見的問題開始，一起來瞭解怎樣才能寫出一個所謂「好」的程式碼。</p>

<h2>如何取得用戶端 IP ？</h2>


<p>大部份從事 Web 開發的朋友，一定都會遇到需要取得用戶端 IP 的狀況。而在 PHP 中，透過 Google 去搜尋的話，也可以找到很多解決方案。
以下的程式碼應該是最常見的解法：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    return $_SERVER[&#39;REMOTE_ADDR&#39;];
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>然而這個方法有個問題，那就是 $<em>SERVER[&#39;REMOTE_ADDR&#39;] 有可能不是真實的用戶端 IP 。
原因是用戶可能是在防火牆之後，也可能是透過 Proxy 上網，而使得 $</em>SERVER[&#39;REMOTE_ADDR&#39;] 的值可能不是用戶真實的 IP ；總而言之，我們並不能完全相信 $_SERVER[&#39;REMOTE_ADDR&#39;] 所回傳的值。
那該怎麼辦呢？網路上又有了這樣的解決方案：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    if ($_SERVER[&#39;HTTP_CLIENT_IP&#39;]) { // check ip from share internet
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_CLIENT_IP&#39;];
</span><span class='line'>    } elseif ($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]) { // to check ip is pass from proxy
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
</span><span class='line'>    } else {
</span><span class='line'>        $ip = $_SERVER[&#39;REMOTE_ADDR&#39;];
</span><span class='line'>    }
</span><span class='line'>    return $ip;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>其中 HTTP_CLIENT_IP 這個 HTTP Header 表示用戶可能是在防火牆之後，或是在透過 IP 分享器來上網；而 HTTP_X_FORWARDED_FOR 則表示用戶可能是透過 Proxy 過來的。這兩個 HTTP Headers 都會將用戶真實的 IP 記錄下來，轉交給 Web Server 處理。
而在這兩個 HTTP Headers 都沒有的狀況下，我們就只好選擇 $_SERVER[&#39;REMOTE_ADDR&#39;] 這個一定會有的值，因為它可能就是用戶真實的 IP 了。</p>

<h2>PHP 嚴格開發模式</h2>


<p>一般在開發時，我們都會把 PHP 設定成嚴格開發模式來讓程式儘可能不要有基本的錯誤發生，像是變數未定義就使用，陣列索引不存在等等，以確保我們的程式在任何設定下都可以順利執行。
設定嚴格開發模式的方法如下：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>error_reporting(E_ALL | E_STRICT);</span></code></pre></td></tr></table></div></figure>


<p>身為一個合格的 PHP 開發人員所開發出來的程式，至少要在這種嚴格的環境中執行，而不會發生基本的錯誤。
然而在打開 PHP 嚴格開發模式後，前面的範例在 PHP 嚴格開發模式下可能會出現 &#8220;Undefined index: HTTP_CLIENT_IP in xxx.php on line xx&#8221; 的警告訊息，這是因為 HTTP_CLIENT_IP 及 HTTP_X_FORWARDED_FOR 這兩個 HTTP Headers 其實是有可能不會設定在 $<em>SERVER 中的。
可是我們不是有判斷這兩個 HTTP Headers 的值是否存在嗎？是的，只是我們是判斷它們的「值」是否存在，而不是判斷它們是否存在於 $</em>SERVER 陣列之中。正確的方法是要以 empty 敘述來判斷這兩個 HTTP Headers 的索引是否存在於 $_SERVER 陣列裡：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;])) { // check ip from share internet
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_CLIENT_IP&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;])) { // to check ip is pass from proxy
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
</span><span class='line'>    } else {
</span><span class='line'>        $ip = $_SERVER[&#39;REMOTE_ADDR&#39;];
</span><span class='line'>    }
</span><span class='line'>    return $ip;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>




<p class="note">註：至於為什麼 $_SERVER 中有可能不會包含 HTTP_CLIENT_IP 及 HTTP_X_FORWARDED_FOR 這兩個 HTTP Headers 呢？這其實跟 Web/Proxy Server 與網路設備的運作方式有關，這裡就不再深入討論。</p>


<h2>其他有用的 HTTP Headers</h2>


<p>事實上，除了 HTTP_CLIENT_IP 與 HTTP_X_FORWARDED_FOR 之外，還有其實可能會是用戶實際 IP 的 HTTP Headers ，分別是：</p>

<ul>
<li><p>HTTP_X_FORWARDED</p></li>
<li><p>HTTP_X_CLUSTER_CLIENT_IP</p></li>
<li><p>HTTP_FORWARDED_FOR</p></li>
<li><p>HTTP_FORWARDED</p></li>
</ul>


<p>因此我們就必須得再多判斷這些 HTTP Headers ：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_CLIENT_IP&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_X_FORWARDED&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_FORWARDED_FOR&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_FORWARDED_FOR&#39;];
</span><span class='line'>    } elseif (!empty($_SERVER[&#39;HTTP_FORWARDED&#39;])) {
</span><span class='line'>        $ip = $_SERVER[&#39;HTTP_FORWARDED&#39;];
</span><span class='line'>    } else {
</span><span class='line'>        $ip = $_SERVER[&#39;REMOTE_ADDR&#39;];
</span><span class='line'>    }
</span><span class='line'>    return $ip;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>但現實上它們的值還是有可能並非用戶實際的 IP ，因此僅供參考用。</p>

<p class="note">註：很可惜的是，我還沒找到這些 HTTP Headers 的完整解釋，只能從字面上去猜測。如果大家有找到它們所代表的意義，還請不吝告知。</p>


<h2>判斷是否為合法的 IP</h2>


<p>基於從用戶端所傳過來的值都是不可信任的原則，我們還是要對上述的這些 IP 做合法性驗證；在 PHP 5.2 之後，我們可以透過 <a href="http://php.net/manual/en/function.filter-var.php">filter_var</a> 方法來處理：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function validate_ip($ip)
</span><span class='line'>{
</span><span class='line'>    return (bool) filter_var($ip, FILTER_VALIDATE_IP,
</span><span class='line'>            FILTER_FLAG_IPV4 |
</span><span class='line'>            FILTER_FLAG_NO_PRIV_RANGE |
</span><span class='line'>            FILTER_FLAG_NO_RES_RANGE
</span><span class='line'>            );
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>其中 FILTER_VALIDATE_IP 表示我們要過濾的是 IP 值，而 FILTER_FLAG_* 的意義可以參考 <a href="http://www.php.net/manual/en/filter.filters.flags.php">Filter flags</a> 。
<a href="http://php.net/manual/en/function.filter-var.php">filter_var</a> 函式會回傳驗證過後的值，如果驗證不過，就回傳 false 。因此我們就可以改寫我們的 get_client_ip 函式：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]) &amp;&amp; validate_ip($_SERVER[&#39;HTTP_CLIENT_IP&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_CLIENT_IP&#39;];
</span><span class='line'>    } 
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]) &amp;&amp; validate_ipSERVER[&#39;HTTP_X_FORWARDED_FOR&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
</span><span class='line'>    }
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_X_FORWARDED&#39;]) &amp;&amp; validate_ip($_SERVER[&#39;HTTP_X_FORWARDED&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_X_FORWARDED&#39;];
</span><span class='line'>    }
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;]) &amp;&amp; validate_ip($_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;];
</span><span class='line'>    }
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_FORWARDED_FOR&#39;]) &amp;&amp; validate_ip($_SERVER[&#39;HTTP_FORWARDED_FOR&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_FORWARDED_FOR&#39;];
</span><span class='line'>    }
</span><span class='line'>    if (!empty($_SERVER[&#39;HTTP_FORWARDED&#39;]) &amp;&amp; validate_ip($_SERVER[&#39;HTTP_FORWARDED&#39;])) {
</span><span class='line'>        return $_SERVER[&#39;HTTP_FORWARDED&#39;];
</span><span class='line'>    }
</span><span class='line'>    return $_SERVER[&#39;REMOTE_ADDR&#39;];
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>這裡另外改寫的部份就是直接把驗證無誤的 IP 值回傳給函式呼叫者，這樣一來我們就不需要再加上一個暫存變數 $ip 了。</p>

<p class="note">註：也許有人會對一個函式中有多個 return 出口感到不舒服，但在這裡確實是個避免後續程式繼續執行的好方法，這在重構中稱為 <a href="http://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html">Guard Clauses</a> 。</p>


<h2>HTTP_X_FORWARDED_FOR 可能的格式</h2>


<p>前面的程式碼看起來很長對吧？沒關係，晚點我們會回頭過來處理它；現在要先來看看一個比較重要的問題。
根據 Wiki 對 <a href="http://en.wikipedia.org/wiki/X-Forwarded-For">X-Forwarded-For</a> 這個 HTTP Header 的描述，它的格式有可能是：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>client1, proxy1, proxy2</span></code></pre></td></tr></table></div></figure>


<p>換句話說，我們必須對它預先以處理才能得到用戶的 IP ，方法是以 <a href="http://php.net/manual/en/function.explode.php">explode</a> 來拆開每組 IP ，程式碼如下：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>// 略
</span><span class='line'>} elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;])) {
</span><span class='line'>    foreach (explode(&#39;,&#39;, $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]) as $ip) {
</span><span class='line'>        $ip = trim($ip); // just to be safe
</span><span class='line'>        if (validate_ip($ip)) {
</span><span class='line'>            return $ip;
</span><span class='line'>        }
</span><span class='line'>    }
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>將上面的片段加到原有的程式碼後，整個函式就更顯得落落長；雖然可以用，但是如果這樣就滿足，那我們真的就只是程式碼轉貼手了。</p>

<h2>精簡的寫法</h2>


<p>接下來我們要想辦法把一長串的 if&#8230;elseif 簡化，也可以避免寫一堆的陣列元素。既然這些值都是在 $_SERVER 中，那麼我們就可以用迴圈來一一將它們代入：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    foreach (array(
</span><span class='line'>                &#39;HTTP_CLIENT_IP&#39;,
</span><span class='line'>                &#39;HTTP_X_FORWARDED_FOR&#39;,
</span><span class='line'>                &#39;HTTP_X_FORWARDED&#39;,
</span><span class='line'>                &#39;HTTP_X_CLUSTER_CLIENT_IP&#39;,
</span><span class='line'>                &#39;HTTP_FORWARDED_FOR&#39;,
</span><span class='line'>                &#39;HTTP_FORWARDED&#39;,
</span><span class='line'>                &#39;REMOTE_ADDR&#39;) as $key) {
</span><span class='line'>        if (array_key_exists($key, $_SERVER)) {
</span><span class='line'>            // 處理 IP
</span><span class='line'>        }
</span><span class='line'>    }
</span><span class='line'>    return null;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>相信這樣的轉換應該不難懂，這樣的程式碼雖然比不上其他程式語言的語法來的漂亮，但已經比我們原來的那段範例好看太多了。
至於怎麼處理 IP 呢？除了 HTTP_X_FORWARDED_FOR 需要以 <a href="http://php.net/manual/en/function.explode.php">explode</a> 函式處理，其他的值應該都不需要處理呀？我們可以把它們放在一起嗎？
其實是可以的，我們可以把非 HTTP_X_FORWARDED_FOR 的其他值也用 <a href="http://php.net/manual/en/function.explode.php">explode</a> 函式過個水，然後會得到只有一個元素的陣列；這樣一來，我們就不需要再用 if&#8230;else 判斷格式上的差異，直接都以陣列來處理即可。
最後完整的程式碼如下：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function get_client_ip()
</span><span class='line'>{
</span><span class='line'>    foreach (array(
</span><span class='line'>                &#39;HTTP_CLIENT_IP&#39;,
</span><span class='line'>                &#39;HTTP_X_FORWARDED_FOR&#39;,
</span><span class='line'>                &#39;HTTP_X_FORWARDED&#39;,
</span><span class='line'>                &#39;HTTP_X_CLUSTER_CLIENT_IP&#39;,
</span><span class='line'>                &#39;HTTP_FORWARDED_FOR&#39;,
</span><span class='line'>                &#39;HTTP_FORWARDED&#39;,
</span><span class='line'>                &#39;REMOTE_ADDR&#39;) as $key) {
</span><span class='line'>        if (array_key_exists($key, $_SERVER)) {
</span><span class='line'>            foreach (explode(&#39;,&#39;, $_SERVER[$key]) as $ip) {
</span><span class='line'>                $ip = trim($ip);
</span><span class='line'>                if ((bool) filter_var($ip, FILTER_VALIDATE_IP,
</span><span class='line'>                                FILTER_FLAG_IPV4 |
</span><span class='line'>                                FILTER_FLAG_NO_PRIV_RANGE |
</span><span class='line'>                                FILTER_FLAG_NO_RES_RANGE)) {
</span><span class='line'>                    return $ip;
</span><span class='line'>                }
</span><span class='line'>            }
</span><span class='line'>        }
</span><span class='line'>    }
</span><span class='line'>    return null;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>跟前面的程式碼比起來，你是否也覺得最後的這段程式碼比較容易瞭解與維護呢？</p>

<p class="note">註：其實最後這段程式碼也是網路上找得到的，而我在這裡只是讓大家瞭解為什麼高手要這樣精簡程式碼。</p>


<h2>心得</h2>


<p>在取得用戶實際 IP 這個很常見的功能中，其實也蘊涵了很重要的網路知識，雖然不見得我們能完全瞭解這些 HTTP Headers 的由來與運作方式，但至少也要知道為什麼要把它們加進來的原因。
而在語法上的重構，也是我們程式精進上一個很重要的技能；它能反映出你是否真正瞭解這門程式語言，並且知道該怎麼善用它們來增加你工作上的效率。
手邊擁有的工具越多，就更應該熟悉它們；這樣才能適其位盡所能，發揮它們真正的價值。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Content Swap 模式]]></title>
    <link href="http://www.jaceju.net/blog/archives/1899" />
    <updated>2011-08-26T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1899</id>
    <content type="html"><![CDATA[<p>不曉得大家有沒有遇過一種狀況：當某些資料的快取失效時，需要重新建立，但建立快取需要花費很長的時間；這時如果程式需要讀取這些快取時，就會有一段空窗期。
那麼要如何解決這種問題呢？我想方法應該有很多種，但我個人認為比較容易實作且有效率的方式就是： Content Swap 。</p>

<!--more-->


<p>簡單來說， Content Swap 就是「當內容準備好後，就切換過去」，不過前提是我們得先有兩個一模一樣的容器。
使用者一開始只會看到其中一個容器的內容，而當第二個容器的內容有改變時，我們就讓使用者切換到第二個容器上頭；而第一個容器就再重新拿來裝填新的內容，以此類推，讓使用者不會感受到我們在改變容器內容時的延遲。
當然 Content Swap 並不是只適用在程式開發的領域裡，它是一種通用的模式；在硬體、軟體，甚至是生活等方面， Content Swap 模式都可以派上用場。
以下整理一些在我個人的程式開發生涯裡，所遇過使用 Content Swap 的場合供大家參考。</p>

<p class="note">註：因為在程式領域混得不專精，所以 Content Swap 這個名詞是我自己胡編的；如果大家有看過類似的技巧而有更好的命名，還請大家不吝指正。</p>


<h2>用於系統升級</h2>


<p>雖然通常我們不太喜歡升級正在上線的系統，但有時候因為安全上的考量卻不得不升級它。
所以一般我們會再準備好另一台機器，先行在上面安裝並設定好新的系統；接著再利用切換 IP 的方式 (或是其他能切換機器的方法) ，來達成系統升級的目的。
把時間拉長來看，這樣的系統升級方式就是一種 Content Swap 了。</p>

<h2>用於遊戲畫面繪製</h2>


<p>以前在我學習開發 DirectX 遊戲時，曾經遇到 Sprite 在畫面上閃爍的問題。這是因為我必須在 Sprite 移動時，重新建立遮罩來將它繪製到新位置上。
後來我學到了一個新的技巧，叫做 <a href="http://gameprogrammingpatterns.com/double-buffer.html">Double Buffer</a> 。它主要的概念是在程式中準備兩個繪圖緩衝區，然後先在第一個緩衝區上面繪製所有的物件並輸出；接著當程式計算完所有物件的互動與位置後，在第二個緩衝區重新繪製所有的物件，然後再把輸出的指標指向第二個緩衝區來呈現畫面。如此一來，用切換緩衝區的方式，就可以得到不閃爍的畫面了。</p>

<h2>用於資料庫排程</h2>


<p>有時候我們會需要取得資料庫中的某些資訊，但這些資訊的處理通常要耗費很多時間，即時取得的話就會拖垮系統效能；因此在這些資訊的即時性不是很重要時，我們通常會透過排程來將處理好的資訊放在一個暫時的快取資料表中。
不過就如文章一開頭所描述的狀況，我們在快取過期後而需要重建時，在這段時間裡會讓系統無法取得快取，導致系統必須即時去取得資訊，徒然耗費許多時間。
解決的方法很簡單，我們可以準備好兩個一模一樣的快取資料表，只有名稱上不同，例如 table_1 及 table_2 。
假設目前系統讀取的是 table_1 中的內容，而快取即將過期時，系統並不是直接清除 table_1 現有的內容，而是把新的快取先建立到 table_2 中 (當然要先清除 table_2 中的內容) ；然後系統再將設定改為讀取 table_2 ，直到下次快取過期時，再對 table_1 重複相同的動作。
而這樣的動作，也不一定只侷限在兩個資料表上，也可以是兩台主機來執行。這樣一來，在前端的使用者就完全無感了。</p>

<h2>小結</h2>


<p>相信大家知道這個概念後，一定會發現自己平常已經有使用這個模式處理問題了；因為我們很希望讓使用者無感於我們在內容切換上的延遲，這也是這個模式最主要的目的。
而這個模式最大的特色就是以空間換取時間，因此在資源有限的場合，可能就沒辦法使用了。
希望以我個人淺薄的心得，能讓大家對這個模式有更多不一樣的想法。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[[Web] 連結分享]]></title>
    <link href="http://www.jaceju.net/blog/archives/1895" />
    <updated>2011-08-22T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1895</id>
    <content type="html"><![CDATA[<!--more-->


<h2>PHP</h2>


<ul>
<li><a href="http://coolshell.cn/articles/5160.html">PHP分页技术的代码和示例</a></li>
<li><a href="http://huoding.com/2011/08/14/106">静态类的原罪</a></li>
<li><a href="http://net.tutsplus.com/tutorials/php/getting-started-with-the-fuel-php-framework/">Getting Started with the Fuel PHP Framework</a></li>
<li><a href="http://ricky.ez2.us/2011/08/15/%E6%92%B0%E5%AF%ABphp%E6%87%89%E8%A9%B2%E9%81%BF%E5%85%8D%E7%9A%84%E5%B9%BE%E4%BB%B6%E4%BA%8B/">撰寫PHP應該避免的幾件事</a></li>
<li><a href="http://www.devshed.com/c/a/PHP/PHP-and-the-Law-of-Demeter-43810/">PHP and the Law of Demeter</a></li>
<li><a href="http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_17.html">Quality Assurance on PHP projects - PHPUnit part 1</a></li>
<li><a href="http://www.phpclasses.org/blog/post/155-Top-10-Wrong-Ideas-About-PHP-That-You-Should-Get-Right.html">Top 10 Wrong Ideas About PHP That You Should Get Right</a></li>
<li><a href="http://www.thespanner.co.uk/2011/08/18/php-cssreg/">PHP CSSReg</a></li>
<li><a href="http://blog.kotowicz.net/2011/06/file-path-injection-in-php-536-file.html">File path injection in PHP ≤ 5.3.6 file upload (CVE 2011-2202)</a></li>
<li><a href="http://www.teachmejoomla.net/code/php/remote-ip-detection-with-php.html">Getting visitor IP address with PHP</a></li>
</ul>


<h2>JavaScript&amp;AJAX</h2>


<ul>
<li><a href="http://www.jointjs.com/demos.html">Joint - JavaScript diagramming library.</a></li>
<li><a href="http://blog.attachments.me/post/8966154806/test-driven-javascript">Test-Driven JavaScript</a></li>
<li><a href="http://smashinghub.com/javascript-tools-for-developers.htm">10 Must Have JavaScript Tools For Developers</a></li>
<li><a href="http://fgnass.github.com/spin.js/">spin.js</a></li>
<li><a href="http://heikezhi.com/2011/05/06/traceur-compiler-next-to-javascript-of-today/">Traceur: 体验下一代Javascript语言</a></li>
<li><a href="http://puppetmaster3.wordpress.com/2011/08/18/better-code-without-anonymous-functions-in-ecmascriptjavascript/">Better code without anonymous functions in ECMAScript/JavaScript</a></li>
<li><a href="http://blogs.bytecode.com.au/glen/2011/04/06/first-experiences-with-qunit.html">First Experiences with QUnit</a></li>
<li><a href="http://odetocode.com/Blogs/scott/archive/2011/08/17/underscore-js.aspx">Underscore.js</a></li>
<li><a href="http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/">Understanding “Prototypes” in JavaScripT</a></li>
<li><a href="http://www.slideshare.net/taobaoued/closure-compilerjavascript">運用Closure Compiler 打造高品質的JavaScript</a></li>
</ul>


<h2>jQuery</h2>


<ul>
<li><a href="http://zoomzum.com/the-10-useful-jquery-google-map-plugins/" last_charset="UTF-8">The 10+ Useful jQuery Google Map Plugins</a></li>
<li><a href="http://yxmhero1989.blog.163.com/blog/static/112157956201171271324240/">Web开发者爱不释手的18款超赞jQuery插件</a></li>
<li><a href="http://www.smashingapps.com/2010/09/28/awesome-jquery-plugins-and-techniques-to-create-visually-excellent-websites.html">Awesome jQuery Plugins And Techniques To Create Visually Excellent Websites</a></li>
<li><a href="http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html">jQuery的deferred對象詳解</a></li>
<li><a href="http://vandelaydesign.com/blog/tools/jquery-tooltip-scripts/">25 Useful jQuery Tooltip Scripts</a></li>
<li><a href="http://blog.darkthread.net/post-2011-08-18-xhr-and-big5.aspx">使用XHR下載BIG5編碼內容</a></li>
<li><a href="http://www.userdot.net/files/jquery/jquery.notty/demo/">jQuery Notty plugin</a></li>
<li><a href="http://www.script-tutorials.com/10-oven-fresh-jquery-plugins-for-ui/">10 Oven Fresh jQuery Plugins for UI</a></li>
<li><a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=751">Creating Your Own jQuery Custom Selector</a></li>
<li><a href="http://lifesinger.wordpress.com/2011/08/19/jquery-introduction-and-plugins-modulization/">jQuery 模块介绍与 jQuery 插件的深度模块化</a></li>
<li><a href="http://webtablab.com/development/best-jquery-plugins-july-2011/">Top 10 Awesome jQuery Plugins of July 2011 You Would Love To Use</a></li>
<li><a href="http://www.queness.com/community-news/8928/23-fresh-and-excellent-jquery-tutorials">23 Fresh And Excellent jQuery Tutorials</a></li>
</ul>


<h2>CSS</h2>


<ul>
<li><a href="http://blog.hinablue.me/entry/sass-note-css-reversed-engineering-part-1">[SASS note.] CSS 逆向工程 part 1</a></li>
<li><a href="http://blog.hinablue.me/entry/sass-note-css-reversed-engineering-part-2">[SASS note.] CSS 逆向工程 part 2</a></li>
<li><a href="http://adactio.com/journal/4780/">Re-tabulate</a></li>
</ul>


<h2>HTML5&amp;CSS3</h2>


<ul>
<li><a href="http://webexpedition18.com/articles/brilliant-and-useful-html5-tutorials-you-must-see/">Brilliant and Useful HTML5 Tutorials You Must See</a></li>
<li><a href="http://www.script-tutorials.com/html5-canvas-image-effects-app/" last_charset="UTF-8">Creating an Unbelievable HTML5 Canvas App for Online Image Enhancements</a></li>
<li><a href="http://www.catswhocode.com/blog/10-online-tools-to-simplify-html5-coding">10 online tools to simplify HTML5 coding</a></li>
<li><a href="http://robertnyman.com/2011/08/16/html5-forms-input-types-attributes-and-new-elements-demos-tips-and-tricks/">HTML5 Forms input types, attributes and new elements – demos, tips and tricks</a></li>
<li><a href="http://designmodo.com/websites-design-html5/">45 Examples of Websites Designed with HTML5</a></li>
<li><a href="http://sixrevisions.com/html/introduction-web-storage/">Introduction to HTML5 Web Storage</a></li>
<li><a href="http://www.kirupa.com/html5/css3_animations_vs_transitions.htm">CSS3: Animations vs. Transitions</a></li>
<li><a href="http://www.script-tutorials.com/creating-an-attractive-presentation-with-html5/">Creating an Attractive Presentation with HTML5</a></li>
<li><a href="http://www.techrepublic.com/blog/webmaster/html5-drawing-images-and-adding-text-to-the-canvas-element/586">HTML5: Drawing images and adding text to the canvas element</a></li>
<li><a href="http://webexpedition18.com/articles/useful-css-tools/">20 Extremely Useful CSS Tools</a></li>
<li><a href="http://snook.ca/archives/html_and_css/vm-vh-units">Sizing with CSS3&#39;s vw and vh units</a></li>
</ul>


<h2>Mobile Development</h2>


<ul>
<li><a href="http://msdn.microsoft.com/en-us/scriptjunkie/hh377172.aspx">Building Mobile JavaScript WebApps With Backbone.js &amp; jQuery: Part I</a></li>
<li><a href="http://spin.atomicobject.com/2011/08/11/getting-started-with-jquery-mobile/">Getting Started with jQuery Mobile</a></li>
<li><a href="http://css.dzone.com/articles/writing-sencha-touch-mvc">Writing a Sencha Touch MVC Application</a></li>
<li><a href="http://miamicoder.com/2011/writing-a-sencha-touch-application-part-1/">Writing a Sencha Touch Application, Part 1</a></li>
<li><a href="http://miamicoder.com/2011/writing-a-sencha-touch-application-part-2/">Writing a Sencha Touch Application, Part 2</a></li>
<li><a href="http://miamicoder.com/2011/writing-a-sencha-touch-application-part-3/">Writing a Sencha Touch Application, Part 3</a></li>
<li><a href="http://blog.lamb-mei.com/2011/08/compile-ios-app-without-developer.html">Compile an iOS App without a Developer License</a></li>
<li><a href="http://zoomzum.com/8-best-jquery-mobile-plugins/" last_charset="UTF-8">8 Best jQuery Mobile Plugins</a></li>
<li><a href="http://tutorialzine.com/2011/08/jquery-mobile-product-website/">Building a Website with PHP, MySQL and jQuery Mobile, Part 1</a></li>
</ul>


<h2>Web Development</h2>


<ul>
<li><a href="http://css-tricks.com/13465-persistent-headers/">Persistent Headers</a></li>
<li><a href="http://yxmhero1989.blog.163.com/blog/static/11215795620117155414125/">10種別具特色的驗證碼生成程序</a></li>
<li><a href="http://www.script-tutorials.com/creating-css3jquery-crossbrowser-dropdown-menu-with-tabs/">Creating CSS3/jQuery crossbrowser Drop-down menu with tabs</a></li>
<li><a href="http://hacks.mozilla.org/2011/08/firefox6/">Firefox 6 is here</a></li>
<li><a href="http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/">How Browsers Work: Behind the Scenes of Modern Web Browsers</a></li>
<li><a href="http://hacks.mozilla.org/2011/08/speak-js-text-to-speech-on-the-web/">speak.js: Text-to-Speech on the Web</a></li>
<li><a href="http://net.tutsplus.com/tutorials/tools-and-tips/how-to-use-the-nettuts-phing-build-script/">How to Use the Nettuts+ Phing Build Script</a></li>
<li><a href="http://technotab.com/top-10-best-free-online-color-tools/">Top 10 Best Free Online Color Tools</a></li>
<li><a href="http://zoomzum.com/22-awesome-admin-panels-for-web-developers/">22 Awesome Admin Panels For Web Developers</a></li>
</ul>


<h2>Database</h2>


<ul>
<li><a href="http://smashinghub.com/10-tutorials-to-take-mysql-database-backup.htm">10 Tutorials To Take MySQL Database Backup</a></li>
<li><a href="http://huoding.com/2011/08/19/107">MongoDB與內存</a></li>
</ul>


<h2>Node.JS</h2>


<ul>
<li><a href="http://blog.xebia.com/2011/08/nodejs-the-what-why-how-and-when/">NodeJS – The what, why, how and when</a></li>
</ul>


<h2>Ruby</h2>


<ul>
<li><a href="http://rubysource.com/php-to-ruby-modules-mixins-and-ducks/">PHP to Ruby: Modules, Mixins and Ducks</a></li>
<li><a href="http://www.igvita.com/2011/08/16/rails-3-asset-pipeline-google-closure/">Rails 3 Asset Pipeline &amp; Google Closure</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[初探 Zend_Search_Lucene]]></title>
    <link href="http://www.jaceju.net/blog/archives/1860" />
    <updated>2011-08-18T00:00:00+08:00</updated>
    <id>http://www.jaceju.net/blog/archives/1860</id>
    <content type="html"><![CDATA[<p>全文檢索一直是內容型網站很重要的功能之一，它讓使用者可以快速透過一些關鍵字來找到網站中符合條件的文章。
在 Zend Framework 裡， Zend_Search_Lucene 就是提供這個功能的套件，它是以 <a href="http://lucene.apache.org/java/docs/index.html">Apache Lucene</a> 專案為參考，而以 PHP 實作。
Zend_Search_Lucene 的說明在<a href="http://framework.zend.com/manual/en/zend.search.lucene.html">官方手冊</a>中已經寫得很詳細，以下我會用較為簡明的方式來介紹重點。</p>

<!--more-->


<h2>基本觀念</h2>


<p>Zend_Search_Lucene 的幾個重點觀念如下：</p>

<ol>
<li><p>建立及檢索索引時，都需要指定文字的 charset ；但套件核心是以 UTF-8 來處理索引。</p></li>
<li><p>建立及檢索索引時，可以自訂分析器來處理中文分詞。</p></li>
<li><p>以檔案方式來存放索引，索引必須先建立才可以使用。</p></li>
<li><p>索引只存放需要被顯示的內容或可以檢索的關鍵字，而不是存放所有內容。</p></li>
<li><p>索引是以 document 為單位，搜索的結果也是以文件集來呈現。</p></li>
<li><p>文件來源可以是文字檔案或資料庫中的內容。</p></li>
<li><p>每個文件可以包含多個 fields ，用以顯示或被檢索。</p></li>
<li><p>必要的 field 有 id 、 score 及 content ，其中 id 與 score 會自動產生。</p></li>
<li><p>可以用特別的 query 語法或是 query API 來找出需要的資訊。</p></li>
<li><p>找出來的資訊稱為 query hit ，可以用來顯示搜尋結果。</p></li>
</ol>


<h2>基本流程</h2>


<h3>建立索引</h3>


<ol>
<li><p>設定分詞分析器 (如果是英文文件則非必要) 。</p></li>
<li><p>初始化索引，這裡是建立索引相關檔案。</p></li>
<li><p>建立索引文件 (document) ，可以從 HTML 內容或檔案來產生索引文件，或是直接建立一個空的索引文件。</p></li>
<li><p>將可以被檢索的資訊一一加到 document 的 field 中，通常也會把連結或路徑等資訊加到 field 中，這樣在輸出時就可以取得。</p></li>
<li><p>提交索引以完成建立的動作。</p></li>
</ol>


<h3>檢索索引</h3>


<ol>
<li><p>設定分詞分析器 (如果是英文文件則非必要) 。</p></li>
<li><p>初始化索引，這裡是打開索引相關檔案。</p></li>
<li><p>解析使用者給定的查詢字串或關鍵字，以產生必要的 query 物件。</p></li>
<li><p>從索引中找出 query 物件所對應的 query hit 資訊；每個 hit 的屬性，就會對應到 document 的 field ，可以用來顯示。</p></li>
<li><p>以迴圈顯示全部的 hit 資訊，就可以讓使用者看到搜尋結果了。</p></li>
</ol>


<h2>範例</h2>


<p>接下來我們來看看一個簡單的範例：「 HTML 檔案檢索系統」，完整的程式碼可以在 <a href="https://github.com/jaceju/zend_search_lucene_test">GitHub</a> 上找到。</p>

<h3>程式架構</h3>


<p>先來看看它的程式架構：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>search
</span><span class='line'>├── html ; 存放 HTML 檔案
</span><span class='line'>├── include
</span><span class='line'>│   └── Phpbean
</span><span class='line'>│       └── Lucene
</span><span class='line'>│           └── Analyzer.php ; Phpbean_Lucene_Analyzer 類別
</span><span class='line'>├── index ; 存放索引檔案
</span><span class='line'>├── init.php ; 程式初始化引用檔
</span><span class='line'>├── build_index.php ; 建立索引
</span><span class='line'>├── find.php ; 搜尋索引
</span><span class='line'>├── index.php ; 主要介面
</span><span class='line'>├── jquery.js ; jQuery
</span><span class='line'>└── lucene.js ; Ajax 程式</span></code></pre></td></tr></table></div></figure>


<p>請在 html 目錄下放置幾個你想搜尋的 HTML 檔案 (可以從 Yahoo 新聞中轉存幾則下來試用) ，然後將 index 目錄設定為 WWW 權限可寫入。</p>

<h3>初始化應用程式</h3>


<p>接著我們需要初始化應用程式，這邊是由 init.php 負責：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?php
</span><span class='line'>// 設定載入路徑
</span><span class='line'>set_include_path(join(PATH_SEPARATOR, array(
</span><span class='line'>    realpath(__DIR__ . &#39;/include&#39;),
</span><span class='line'>    get_include_path(), // 要包含 Zend Framework 的所在路徑
</span><span class='line'>)));
</span><span class='line'>// 設定自動載入
</span><span class='line'>require_once &#39;Zend/Loader/Autoloader.php&#39;;
</span><span class='line'>Zend_Loader_Autoloader::getInstance()-&gt;setFallbackAutoloader(true);
</span><span class='line'>// 設定處理的字元編碼
</span><span class='line'>setlocale(LC_ALL, &#39;zh_TW.UTF-8&#39;);
</span><span class='line'>// 指定路徑
</span><span class='line'>$indexDir = realpath(__DIR__ . &#39;/index&#39;);
</span><span class='line'>$htmlDir = realpath(__DIR__ . &#39;/html&#39;);
</span><span class='line'>// 設定預設的分詞分析器
</span><span class='line'>Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Phpbean_Lucene_Analyzer());</span></code></pre></td></tr></table></div></figure>


<p>這裡有個很重要的部份，就是設定預設的中文分詞分析器，因為它會影響如何在索引中建立正確的中文分詞關鍵字。
在網路上搜尋 Zend_Search_Lucene 加上中文分詞的話，大概都可以找到一個 Phpbean_Lucene_Analyzer 的 PHP 類別，其完整內容請參考 <a href="https://github.com/jaceju/zend_search_lucene_test/blob/master/include/Phpbean/Lucene/Analyzer.php">Phpbean/Lucene/Analyzer.php</a> (內容太長就不直接列出了) 。
它的三個方法說明如下：</p>

<ul>
<li><p>setCnStopWords() - 設定中文詞組斷字，基本上很少會去使用這個方法。</p></li>
<li><p>reset() - 重置被檢索的文件內容，也就是把一些常見的斷字換成空格字元。</p></li>
<li><p>nextToken() - 包含關鍵的中文分詞演算法，告訴檢索程式如何去找到下一個 token 。</p></li>
</ul>


<p>在建立索引前，我們就用以下程式碼來設定預設的分詞分析器：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Phpbean_Lucene_Analyzer());</span></code></pre></td></tr></table></div></figure>




<p class="note">註：詳細的中文分詞原理可以在 Google 上找到很多資料。</p>


<h3>建立索引</h3>


<p>現在我們要撰寫建立索引的程式碼，這裡是由 build_index.php 來負責：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?php
</span><span class='line'>// 初始化
</span><span class='line'>require __DIR__ . &#39;/init.php&#39;;
</span><span class='line'>// 在索引目錄中建立索引相關檔案
</span><span class='line'>$index = Zend_Search_Lucene::create($indexDir);
</span><span class='line'>// 取得要建立索引的 HTML 檔案所在路徑
</span><span class='line'>$iterator = new DirectoryIterator($htmlDir);
</span><span class='line'>// 一一為 HTML 檔案建立索引
</span><span class='line'>foreach ($iterator as $entry) {
</span><span class='line'>    /* @var $entry DirectoryIterator */
</span><span class='line'>    if ($entry-&gt;isFile()) {
</span><span class='line'>        $file = $entry-&gt;getPath() . &#39;/&#39; . $entry-&gt;getFilename();
</span><span class='line'>        echo $file, &quot;\n&quot;;
</span><span class='line'>        // 載入 HTML 檔案，並產生索引文件
</span><span class='line'>        $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($file);
</span><span class='line'>        // 加入檔案名稱欄位，但不加入索引 (僅儲存值)
</span><span class='line'>        $doc-&gt;addField(Zend_Search_Lucene_Field::unIndexed(&#39;filename&#39;, $entry-&gt;getFilename(), &#39;utf-8&#39;));
</span><span class='line'>        // 加入建立時間欄位，但不加入索引 (僅儲存值)
</span><span class='line'>        $doc-&gt;addField(Zend_Search_Lucene_Field::unIndexed(&#39;created&#39;, time(), &#39;utf-8&#39;));
</span><span class='line'>        // 加入更新時間欄位，但不加入索引 (僅儲存值)
</span><span class='line'>        $doc-&gt;addField(Zend_Search_Lucene_Field::unIndexed(&#39;updated&#39;, time(), &#39;utf-8&#39;));
</span><span class='line'>        // 加入內容欄位，但不儲存 (僅加入索引)
</span><span class='line'>        $doc-&gt;addField(Zend_Search_Lucene_Field::unStored(&#39;content&#39;, $doc-&gt;getHtmlBody(), &#39;utf-8&#39;));
</span><span class='line'>        // 將索引文件加入索引檔案中
</span><span class='line'>        $index-&gt;addDocument($doc);
</span><span class='line'>    }
</span><span class='line'>}
</span><span class='line'>// 完成索引的建立
</span><span class='line'>$index-&gt;commit();</span></code></pre></td></tr></table></div></figure>


<p>build_index.php 執行的方式，是在 command line 模式下，輸入以下指令：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>php build.php</span></code></pre></td></tr></table></div></figure>


<p>這樣一來就可以將索引建立好了。
建立索引時有幾點要注意：</p>

<ul>
<li><p>資料來源不見得一定要是 HTML 檔案，也可以直接從資料庫中取得。</p></li>
<li>索引欄位 (field) 有分以下幾種：
<ul>
<li><p>Keyword - 會加入索引並儲存其內容，但不會被分析，而是直接用來做關鍵字。</p></li>
<li><p>UnIndexed - 不加入索引，但會儲存其內容，所以會在搜尋結果中出現。</p></li>
<li><p>Binary - 不加入索引，也不會被分析，但會儲存其內容，所以會在搜尋結果中出現。</p></li>
<li><p>Text - 會加入索引，也會儲存其內容，而且會被分析器分析；一般是用來顯示搜尋的結果，例如摘要。</p></li>
<li><p>UnStored - 會加入索引，也會被分析器分析，但不儲存其內容；通常是用來處理文章主體 (內容較長的部份) 。</p></li>
</ul></li>
<li><p>最後一定要做 commit 動作，讓建立索引的動作能正確結束。</p></li>
</ul>


<h3>搜尋索引</h3>


<p>索引建立完成後，就可以用來搜尋了，這邊是由 find.php 來處理：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?php
</span><span class='line'>// 初始化
</span><span class='line'>require __DIR__ . &#39;/init.php&#39;;
</span><span class='line'>// 打開索引檔案
</span><span class='line'>$index = Zend_Search_Lucene::open($indexDir);
</span><span class='line'>// 取得關鍵字
</span><span class='line'>$keyword = $_GET[&#39;keyword&#39;];
</span><span class='line'>// 從關鍵字中建立 query 物件
</span><span class='line'>$query = Zend_Search_Lucene_Search_QueryParser::parse($keyword, &#39;utf-8&#39;);
</span><span class='line'>// 搜尋索引
</span><span class='line'>$hits = $index-&gt;find($query);
</span><span class='line'>// 如果有找到對應的資訊，就加到結果集中
</span><span class='line'>$result = array();
</span><span class='line'>foreach ($hits as $hit) {
</span><span class='line'>    $result[] = array(
</span><span class='line'>        &#39;id&#39; =&gt; $hit-&gt;id,
</span><span class='line'>        &#39;score&#39; =&gt; $hit-&gt;score,
</span><span class='line'>        &#39;title&#39; =&gt; $hit-&gt;title,
</span><span class='line'>        &#39;filename&#39; =&gt; $hit-&gt;filename,
</span><span class='line'>        &#39;created&#39; =&gt; $hit-&gt;created,
</span><span class='line'>        &#39;updated&#39; =&gt; $hit-&gt;updated,
</span><span class='line'>    );
</span><span class='line'>}
</span><span class='line'>// 以 JSON 格式輸出結果
</span><span class='line'>echo json_encode($result);</span></code></pre></td></tr></table></div></figure>


<p>find.php 在找到我們所需要的資訊後，會將它以 JSON 格式輸出。</p>

<h3>介面</h3>


<p>這裡我用了很簡單的搜尋介面，也就是 index.php ：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;!DOCTYPE html&gt;
</span><span class='line'>&lt;html&gt;
</span><span class='line'>    &lt;head&gt;
</span><span class='line'>        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
</span><span class='line'>        &lt;title&gt;Zend_Search_Lucene Test&lt;/title&gt;
</span><span class='line'>    &lt;/head&gt;
</span><span class='line'>    &lt;body&gt;
</span><span class='line'>        &lt;form action=&quot;find.php&quot; method=&quot;get&quot;&gt;
</span><span class='line'>            &lt;label&gt;關鍵字： &lt;input type=&quot;text&quot; name=&quot;keyword&quot; value=&quot;&quot; /&gt;&lt;/label&gt;
</span><span class='line'>            &lt;input type=&quot;submit&quot; value=&quot;查詢&quot; /&gt;
</span><span class='line'>        &lt;/form&gt;
</span><span class='line'>        &lt;div id=&quot;result&quot;&gt;&lt;/div&gt;
</span><span class='line'>        &lt;script src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
</span><span class='line'>        &lt;script src=&quot;lucene.js&quot;&gt;&lt;/script&gt;
</span><span class='line'>    &lt;/body&gt;
</span><span class='line'>&lt;/html&gt;</span></code></pre></td></tr></table></div></figure>


<p>而 JavaScript 的部份則用上了 jQuery ，處理表單 AJAX 則是由 lucene.js 負責：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>(function ($) {
</span><span class='line'>    $(function () {
</span><span class='line'>        $(&#39;form&#39;).submit(function (e) {
</span><span class='line'>            $result = $(&#39;#result&#39;);
</span><span class='line'>            $result.html(&#39;&#39;);
</span><span class='line'>            $.getJSON(
</span><span class='line'>                &#39;find.php&#39;,
</span><span class='line'>                $(this).serializeArray(),
</span><span class='line'>                function (json) {
</span><span class='line'>                    var html = &#39;&lt;ul&gt;&#39;;
</span><span class='line'>                    for (var i = 0; i &lt; json.length; i ++) {
</span><span class='line'>                        html += &#39;&lt;li&gt;&lt;a href=&quot;html/&#39;;
</span><span class='line'>                        html += json[i].filename + &#39;&quot;&gt;&#39;;
</span><span class='line'>                        html += json[i].id + &#39; - &#39;;
</span><span class='line'>                        html += json[i].score + &#39; - &#39;;
</span><span class='line'>                        html += json[i].title + &#39;&lt;/a&gt;&lt;/li&gt;&#39;;
</span><span class='line'>                    }
</span><span class='line'>                    html += &#39;&lt;/ul&gt;&#39;;
</span><span class='line'>                    $result.html(html);
</span><span class='line'>                }
</span><span class='line'>            );
</span><span class='line'>            e.preventDefault();
</span><span class='line'>        });
</span><span class='line'>    });
</span><span class='line'>})(jQuery);</span></code></pre></td></tr></table></div></figure>


<p>測試時，請直接在畫面上的關鍵字欄位中輸入想要查詢的內容，再按下搜尋即可。
希望這樣的介紹能讓大家大致瞭解全文檢索初步的觀念與實作，詳細的資訊就請參考<a href="http://framework.zend.com/manual/en/zend.search.lucene.html">官方手冊的 Zend_Search_Lucene 的套件介紹</a>。</p>
]]></content>
  </entry>
  
</feed>

