<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Lam Do&#039;s Weblog</title>
	<atom:link href="http://dothanhlam.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dothanhlam.wordpress.com</link>
	<description>... willing code for food</description>
	<lastBuildDate>Fri, 20 Jan 2012 06:19:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dothanhlam.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/d14e0578ddfd813d0c88153880dfade6?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Lam Do&#039;s Weblog</title>
		<link>http://dothanhlam.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dothanhlam.wordpress.com/osd.xml" title="Lam Do&#039;s Weblog" />
	<atom:link rel='hub' href='http://dothanhlam.wordpress.com/?pushpress=hub'/>
		<item>
		<title>[Flex] ClassFactory và ItemRenderer</title>
		<link>http://dothanhlam.wordpress.com/2011/03/17/flex-classfactory-va-itemrenderer/</link>
		<comments>http://dothanhlam.wordpress.com/2011/03/17/flex-classfactory-va-itemrenderer/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 04:25:27 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[custom components]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Factory]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flash develop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[actionscript 3.0]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=416</guid>
		<description><![CDATA[Trước khi trình bày về ClassFactory và ItemRenderer, chúng ta nên điểm qua về mẫu thiết kế (design pattern) Factory. Mẫu thiết kế Factory được dùng để giải quyết vấn đề tạo ra một đối tượng mà không thể xác định trước chính xác loại (class type) đối tượng cụ thể. Bằng cách định nghĩa <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=416&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Trước khi trình bày về ClassFactory và ItemRenderer, chúng ta nên điểm qua về mẫu thiết kế (design pattern) Factory. Mẫu thiết kế Factory được dùng để giải quyết vấn đề tạo ra một đối tượng mà không thể xác định trước chính xác loại (class type) đối tượng cụ thể. Bằng cách định nghĩa một phương thức cho việc tạo đối tượng, và các lớp con thừa kế có thể nạp chồng (override ?)  để chỉ rõ đối tượng nào sẽ được tạo.</p>
<p><img class="aligncenter" src="http://www.as3dp.com/wp-content/uploads/2009/01/abfactory66.png" alt="" width="513" height="256" /></p>
<p>Một ví dụ thực tế của Factory chính là trình duyệt ảnh như ACDSee chẳng hạn. Bạn có 1 list các hình ảnh, tuy nhiên mỗi hình ảnh có thể là 1 đối tượng của JPEGRenderer hoặc PNGRenderer, nghĩa là thuôc các lớp hoàn toàn khác nhau. Và khi render list các hình ảnh này thì ACDSee cần phải xác định lớp nào &#8211; JPEGRenderer hoặc PNGRenderer sẽ được chọn.  Một FactoryClass sẽ đóng vai trò chọn ra class instance thich hợp.</p>
<p>Bài viết này chi gói gọn trong phạm vi trình bày cách sử dụng ClassFactory và ItemRenderer hơn là đi sâu vào phân tích tính chất của mẫu thiết kế Factory. Hơn nữa mẫu thiết kế này được phân tích rất chi tiết trong tài liệu ActionScript 3.0 Design Patterns.</p>
<h2>ClassFactory</h2>
<p>Flex ClassFactory cho phép tạo ra một instance của lớp bất kỳ với các thuộc tính giống nhau. Để khởi tạo một đối tượng của FactoryClass thì điều đầu tiên là bạn phải chỉ rõ đối tượng lớp nào cần được khởi tạo bằng cách truyền class vào hàm dựng của ClassFactory</p>
<pre>var animalHasTailRenderer:ClassFactory = new ClassFactory(<strong>AnimalRenderer</strong>);
animalHasTailRenderer.<strong>properties</strong> = { hasTail: true };</pre>
<p>Trong đoạn mã trên,  để tạo ra một class instance của animalHasTailRenderer thì Flex sẽ gọi phương thức newInstance() của đối tượng factory và thiết lập thuộc tính hasTail = true thông qua việc gán setter properties.</p>
<h2>ItemRenderers</h2>
<p>Khi tiếp cận với DataGrid, List &#8230; bạn sẽ va chạm rất nhiều với ItemRenderer . Người tiền nhiệm của ItemRenderer chính là cellRenderer AS2 &#8211; nếu bạn đã có kinh nghiệm sử dụng các component của Flash.</p>
<p>Ngữ cảnh sử dụng ItemRenderer thường được dùng với DataGrid &#8211; bạn cần đặt các checkbox hay combobox vào từng dòng của DataGrid chẳng hạn, hay mỗi dòng sẽ là một component khác nhau.  Bạn có thể xem một ví dụ điển hình của việc sử dụng itemRenderer như đoạn mã mxml dưới đây</p>
<pre>&lt;mx:DataGrid id="myGrid" dataProvider="{customerXMLList}"&gt;
     &lt;mx:columns&gt;
          &lt;mx:DataGridColumn dataField="Company" itemRenderer="org.catapult.renderers.CompanyRenderer"/&gt;
          &lt;mx:DataGridColumn dataField="Contact" itemRenderer="org.catapult.renderers.ContactRenderer"/&gt;
     &lt;/mx:columns&gt;
&lt;/mx:DataGrid&gt;</pre>
<p>Một ItemRenderer có thể được tao từ mã ActionScript thuần túy hay mã MXML, tuy nhiên phải được implement từ IFactory. Lý do là bạn phải cài đặt phương thức newInstance để ClassFactory có thể gọi được.</p>
<p><strong>ActionScript </strong></p>
<pre>package org.catapult.renderers {
     import mx.containers.VBox;
     import mx.core.IFactory;

     public class CompanyRenderer extends VBox implements IFactory {       
           public function newInstance():* {
                return new CompanyRenderer();
           }
     }
}</pre>
<p><strong>MXML</strong></p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" implements="mx.core.IFactory"&gt;
     &lt;mx:Script&gt;
           &lt;![CDATA[
                public function newInstance():* {
                       return new CompanyRenderer();
                }
            ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:VBox&gt;</pre>
<p>Bản chất của việc gán itemRenderer trong đoạn mã trên là việc tạo ra một class instance kiểu object factory.</p>
<p>Tham khảo:</p>
<p><a title="« Take a Design Pattern to Work Part IV: Establishing a Design Pattern Foundation Where’s the Real World?: Design Pattern Examples in ActionScript 3.0 » ActionScript 3.0 Abstract Factory Design Pattern: Multiple Products and Factories " href="http://www.as3dp.com/2009/01/25/actionscript-30-abstract-factory-design-pattern-multiple-products-and-factories/" target="_blank">1. ActionScript 3.0 Abstract Factory Design Pattern: Multiple Products and Factories</a></p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/action-script-30/'>Action Script 3.0</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/custom-components/'>custom components</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/factory/'>Factory</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-builder/'>Flash Builder</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-develop/'>Flash develop</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/actionscript-30/'>actionscript 3.0</a>, <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/tag/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=416&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2011/03/17/flex-classfactory-va-itemrenderer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>

		<media:content url="http://www.as3dp.com/wp-content/uploads/2009/01/abfactory66.png" medium="image" />
	</item>
		<item>
		<title>[Flex] Parsley, Inversion of Control (IoC) và Dependency Injection (DI)</title>
		<link>http://dothanhlam.wordpress.com/2010/10/15/flex-parsley-inversion-of-control-ioc-va-dependency-injection-di/</link>
		<comments>http://dothanhlam.wordpress.com/2010/10/15/flex-parsley-inversion-of-control-ioc-va-dependency-injection-di/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 04:13:55 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flash Player 10.x]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mate]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Parsley]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[Swiz]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[flex3 to flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[IoC]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=391</guid>
		<description><![CDATA[Quan điểm của tôi là trước khi tìm hiều về Parsley thì cần phải hiểu về IoC (Inversion of Control) và DI (Dependency Injection). 2 khái niệm này không xa lạ với những lập trình viên server side, nhất là những ai sử dụng Java mà tiêu biểu là Spring. Tuy nhiên nếu chi đi <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=391&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quan điểm của tôi là trước khi tìm hiều về Parsley thì cần phải hiểu về IoC (Inversion of Control) và DI (Dependency Injection). 2 khái niệm này không xa lạ với những lập trình viên server side, nhất là những ai sử dụng Java mà tiêu biểu là Spring. Tuy nhiên nếu chi đi từ việc phát triển UI/Client side như tôi thì 2 khái niệm này là khá mới mẻ &#8230;</p>
<p>Trong bài viết này, tôi giữ nguyên tên gọi IoC và DI mà không cố gắng tìm bản tiếng Việt vì quả thật là rất khó để có thể tìm một danh từ tiếng Việt cho IoC cũng như DI. Bạn hãy hiểu thông qua định nghĩa của chúng hơn là tìm một cái tên thuần Việt cho chúng.</p>
<h2>IoC &#8211; Inversion of Control là gì ?</h2>
<p>Về bản chất thì IoC có thể hiểu như việc khi bạn thiết kế 1 class thì class đó nên phụ thuộc vào một abstract class hay  interface chứ không phu thuộc (hoặc được dẫn xuất) từ một lớp cụ thể. IoC gắn liền với các ý tưởng thiết kế trong OOP, vì lập trình hướng thủ tục (POP &#8211; Procedure Oriented Programming), các module cấp phía trẹn lại phụ thuộc vào các module cấp dưới, và vấn đề là nếu các module cấp dưới có sự thay đổi thì phải  thay đổi cả các module cấp phía trên. Bạn có thể hiểu như là control của cấp trên phụ thuộc vào cấp dưới. Với OOP thì lập trình viên sẽ đi theo hướng thiết kế các lớp cấp cao phụ thuộc vào 1 abstract class hay interface, hơn là phụ thuộc (hay dẫn xuất) từ môt lớp cấp dưới, và khi đó tất cả sự thay đổi của các lớp cấp dưới đều không ảnh hưởng đến cấp phía trên &#8230; Như vây sự phụ thuộc được đảo ngược lại &#8211; khái niệm IoC có thể diễn gỉải theo cách này.</p>
<p>Với một framework thì các phương thức mà lập trình viên kế thừa từ framework sẽ được gọi bởi chính framework hơn là từ mã chương trình của lập trình viên viết. Việc điều phối, sắp xếp hoạt động của các luồng trong ứng dụng cũng do framework quản lý, và IoC cho phép một framework hoạt động như một hệ điều khiển mở rộng hơn là đóng vai trò chính điều khiển ứng dụng.</p>
<p>Với Cairngorm, PureMVC thì IoC được tiếp cận theo hướng mở rộng các lớp của framework và framework sẽ được định hướng cho biết các interface nào thích hợp để truy cập và thao tác các ứng dụng các đối tượng cụ thể. Parsley, Swiz cung cấp metadata annotation để móc nối với hoạt động của framwork.</p>
<h2>DI &#8211; Dependency Injection là gì ?</h2>
<p>Thường thì bạn sẽ định nghĩa các đối tượng trong ứng dụng một cách cụ thể trong chính mã nguồn. Với DI, đó là một cơ chế bên ngoài &#8220;tiêm&#8221; một biến định nghĩa instance của một đối tượng. DI thường được áp dụng trong Unitest, cho phép bạn tạo ra các đối tượng có quan hệ lỏng lẻo với nhau và dễ dàng thay thế các đối tượng &#8220;demo&#8221; mà bạn phải hardcode sẵn trong mã nguồn. Quá trình test sẽ kiểm định các đối tượng một cách độc lập chứ không quan tâm đến mối quan hệ giữa các đối tượng khác nhau.</p>
<p>Ngoài ra, việc áp dụng DI cũng tăng khả năng tái sử dụng mã nguồn, vì khi việc phụ thuộc giữa các đối tượng không còn được hard code trực tiếp trong mã nguồn nữa thì quá trình tái sử dụng có thể dễ dàng hơn, vì đơn giản là thay đổi các đối tượng được &#8220;tiêm&#8221; từ bên ngoài vào mà thôi &#8230;</p>
<h2>Các tính năng của Parsley</h2>
<p>Để minh họa cho việc cài đặt IoC và DI, trong bài tiếp theo tôi sẽ nói về framework Parsley với một ứng dụng nhỏ để minh họa. Có thể điểm qua các chức năng của Parsley như sau:</p>
<ul>
<li><strong>Flexible IOC Container</strong>: Hỗ trợ cấu hình với AS3 Metadata, MXML, XML , ActionScript</li>
<li><strong>Dependency Injection</strong>: &#8220;tiêm&#8221; theo kiểu hoặc id cho cả hàm dựng (constructor), phương thức, thuộc tính &#8230;</li>
<li><strong>Decoupled Bindings</strong>: Thông qua cơ chế đăng ký, Parsley cho phép binding dữ liệu khi nguồn dữ liệu và đối tượng đích tách biệt nhau.</li>
<li><strong>Messaging Framework</strong>: đối tượng gửi và nhận hoàn toàn tách rời, có thể làm cơ sở cho kiến trúc MVC</li>
<li><strong>Dynamic View Wiring</strong>:  Tạo kết giữa các  component Flex cho các đối tượng khai báo trong container</li>
<li><strong>Advanced container features</strong>: Bất đồng bộ khởi tạo các đối tượng, vòng đời đối tượng, ngữ cảnh  cấu hình mô-đun</li>
<li><strong>Integration with Flex Modules</strong>: Cho phép cấu hình được nạp và giải phóng cùng với module Flex</li>
<li><strong>Localization</strong>: Tích hợp với Flex ResourceManager cho các ứng dụng Flex, ngoài ra còn có Framework dành riêng cho việc localization (bản địa hóa) cho các ứng dụng Flash.</li>
<li><strong>Extensibility</strong>: Dễ dàng tạo ra các thẻ cấu hình do chính lập trình viên định nghĩa và có thể được sử dụng như AS3 Metadata, MXML hoặc tag XML.</li>
</ul>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/action-script-30/'>Action Script 3.0</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-builder/'>Flash Builder</a>, <a href='http://dothanhlam.wordpress.com/category/flash-player-10-x/'>Flash Player 10.x</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/mate/'>Mate</a>, <a href='http://dothanhlam.wordpress.com/category/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/parsley/'>Parsley</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/puremvc/'>PureMVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/swiz/'>Swiz</a>, <a href='http://dothanhlam.wordpress.com/category/uncategorized/'>Uncategorized</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/tag/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/tag/di/'>DI</a>, <a href='http://dothanhlam.wordpress.com/tag/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/flex3-to-flex-4/'>flex3 to flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/ioc/'>IoC</a>, <a href='http://dothanhlam.wordpress.com/tag/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/tag/parsley/'>Parsley</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/391/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=391&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/10/15/flex-parsley-inversion-of-control-ioc-va-dependency-injection-di/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Flex] Một số nhận xét về Cairngorm 3</title>
		<link>http://dothanhlam.wordpress.com/2010/10/12/flex-m%e1%bb%99t-s%e1%bb%91-nh%e1%ba%adn-xet-v%e1%bb%81-cairngorm-3/</link>
		<comments>http://dothanhlam.wordpress.com/2010/10/12/flex-m%e1%bb%99t-s%e1%bb%91-nh%e1%ba%adn-xet-v%e1%bb%81-cairngorm-3/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 04:19:00 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flash develop]]></category>
		<category><![CDATA[Flash Player 10.x]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mate]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Parsley]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[Swiz]]></category>
		<category><![CDATA[tiếng Việt]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[actionscript 3.0]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[chém gió]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[flex3 to flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=380</guid>
		<description><![CDATA[Adobe đã phát hành phiên bản cairngorm 3 từ ngày 21/5 năm nay, và tính đến thời điểm tôi viết bài viết này là được gần nửa năm. Tôi vẫn chưa tìm được nhiều thông tin về việc triển khai Cairngorm 3 trong thời gian vừa qua, ít nhất là trong phạm vi Việt Nam. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=380&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Adobe đã phát hành phiên bản cairngorm 3 từ ngày 21/5 năm nay, và tính đến thời điểm tôi viết bài viết này là được gần nửa năm. Tôi vẫn chưa tìm được nhiều thông tin về việc triển khai Cairngorm 3 trong thời gian vừa qua, ít nhất là trong phạm vi Việt Nam. Có vẻ Cairngorm 2.x vẫn còn đáp ứng tốt các yêu cầu triển khai các ứng dụng RIA (Flex) chăng ? Thực tế là tôi vẫn chưa có ý định sẽ triển khai Cairngorm 3 (thậm chí là sẽ chuyển hẳn sang Flex 4) cho các ứng dụng của công ty. Lý do ? Vì Cainrgorm 2.x và Flex 3.x vẫn đáp ứng tốt các yêu cầu hiện tại.<br />
Tuy nhiên tôi vẫn dành thời gian để tìm hiểu qua Cairngorm 3 để tìm xem sự khác biệt của nó so với phiên bản 2.x. Tôi cũng tìm được 1 tài liệu khá hay &#8211; một slide tóm tắt về Cairngorm 3 của tác giả Glenn Goodrich, Enspiria Solutions-  ggoodrich@enspiria.com, <a href="http://slideshare.net/ruprict/scaling-caringorms" target="_blank">download tại đây</a>. Ngoài ra, các quan điểm của <a href="http://www.herrodius.com/blog/216" target="_blank">Christophe Herreman</a>, <a href="http://flexblog.faratasystems.com/2009/11/17/i%E2%80%99m-cairngorm" target="_blank">Yakov Fain</a> cũng giúp tôi rất nhiều trong quá trình tìm hiểu về Cairngorm 3. Bài viết này cũng không nằm ngoài các suy nghĩ của các tác giả nên trên, thực chất là một bài tổng hợp các quan điểm, nhận định mang tính cá nhân về Cairngorm 3.<br />
Một người bạn của tôi đang làm việc tại digital XPress Vietnam &#8211; Mr. Huy Thái, người đã bảo vệ quan điểm Cairngorm 2.x là một framework chứ không phải là một ngôn ngữ lập trình mới nếu so với ActionScript 3.0. Và tôi cũng đồng ý với quan điểm này. Trường hợp của Cairngorm 2.x cũng như MFC (Microsoft Foundation Classes) mà thôi, khi MFC đóng vai trò là framework hỗ trỡ cho lập trình viên Windows. Tuy nhiên với Cairngorm 3, việc xem nó là framework có thể không mang tính đúng đắn. Bản thân Cairngorm 3 không hoạt động độc lập, vì một số thành phần trong các thư viện của Cairngorm là một sự mở rộng từ một số framework khác, trong đó có Parsley. Nếu như Cairngorm 2.x tuân theo mô hình MVC triệt để thì với Cairngorm 3, MVC không còn là trọng tâm nữa. Adobe giới thiệu Cairngom 3, ngoài việc giữ nguyên mô hình MVC của cairngorm 2.x &#8211; nghĩa là không có một sự cải tiến nào với kiến trúc MVC từ phiên bản 2.2 cuối cùng mà thay vào đó là giới thiệu đến tính năng IoC (Inversion of Control) vốn đã hiện diện trong Parsley, Mate, Swiz &#8230; Chính vì không phải là một bản cải tiến của Cairngorm 2.x, Cairngorm 3 không đặt trọng tâm khắc phục các lỗi, vấn đề mà Cairngorm 2.x đang gặp phải, mà thay vào đó là cung cấp nhiều hướng tiếp cận khác nhau để giải quyết các vấn đề trong quá trình phái triển ứng dụng RIA thông qua các framework khác. Bản thân Parsley, PureMVC, Mate, Swiz &#8230; và cả Spring ActionScript nữa, mỗi một framework đều có những lợi thế khác nhau để giải quyết những vấn đề khác nhau. Nếu như lập trình viên kết hợp các framework với nhau thì có thể tận dụng được ưu thế của từng framework. Cairngrom 3 đi theo quan điểm này, và bản chất của<em><strong> Cairngorm 3 như là các giải pháp tổng thể để giải quyết các vấn đề trong qua trình phát triển ứng dụng hơn là một framework cụ thể</strong></em>.</p>
<p>Nhiều người sẽ thắc mắc, tại sao Adobe quyết định dùng Parsley thay vì dùng SpringActionScript, Mate &#8230; Thực sự vẫn chưa tìm được một tài liệu nào về việc này. Quan điểm chống MVC hay ủng hộ MVC vốn tồn tại từ lâu trong giới phát triển phần mềm, và từ những quan điểm trái ngược này mà nhiều giải pháp, framework được xây dựng. Adobe đã có một quyết định đúng đắn, là đưa ra Cairngorm 3 như một giải pháp tổng thể kết hợp các quan điểm trên. Tuy mất đi tính độc lập nhưng điều đó mang lại lợi ích cho lập trình viên.  Kiến trúc phần mềm thực sự phức tạp để quản lý và ứng dụng vào thực tế. Có nhiều mô hình cơ bản và hướng dẫn có thể giúp các nhà phát triển phầm mềm khi triển khai, và đôi khi tính đúng đắn không tồn tại mà thay đó là khả năng đáp ứng thực tế được quan tâm nhiều hơn.</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/action-script-30/'>Action Script 3.0</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-builder/'>Flash Builder</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-develop/'>Flash develop</a>, <a href='http://dothanhlam.wordpress.com/category/flash-player-10-x/'>Flash Player 10.x</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/mate/'>Mate</a>, <a href='http://dothanhlam.wordpress.com/category/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/parsley/'>Parsley</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/puremvc/'>PureMVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/swiz/'>Swiz</a>, <a href='http://dothanhlam.wordpress.com/category/ti%e1%ba%bfng-vi%e1%bb%87t/'>tiếng Việt</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/actionscript-30/'>actionscript 3.0</a>, <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/tag/chem-gio/'>chém gió</a>, <a href='http://dothanhlam.wordpress.com/tag/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/tag/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/flex3-to-flex-4/'>flex3 to flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/tutorial/'>tutorial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/380/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=380&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/10/12/flex-m%e1%bb%99t-s%e1%bb%91-nh%e1%ba%adn-xet-v%e1%bb%81-cairngorm-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Python] Một số tính năng của mod_python</title>
		<link>http://dothanhlam.wordpress.com/2010/08/31/python-m%e1%bb%99t-s%e1%bb%91-tinh-nang-c%e1%bb%a7a-mod_python/</link>
		<comments>http://dothanhlam.wordpress.com/2010/08/31/python-m%e1%bb%99t-s%e1%bb%91-tinh-nang-c%e1%bb%a7a-mod_python/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 02:55:29 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[mod_python]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=370</guid>
		<description><![CDATA[mod_python là gì ? Khi bắt đầu tìm hiểu về mod_python, tôi đã nghĩ rằng mod_python đóng vai trò là một handler độc lập để phục vụ một ứng dụng dựa trên Python thông qua Apache.Trên thực tế thì mod_python là một module mở rộng Apache tích hợp sẵn trình  thông dịch Python. Điều này <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=370&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>mod_python là gì ?</h2>
<div dir="ltr">Khi bắt đầu tìm hiểu về mod_python, tôi đã nghĩ rằng mod_python đóng vai trò là một handler độc lập để phục vụ một ứng dụng dựa trên Python thông qua Apache.Trên thực tế thì <strong>mod_python là một module mở rộng Apache tích hợp sẵn trình  thông dịch Python</strong>. Điều này có nghĩa là ngoài việc bạn có thể sử dụng mod_python để phục vụ các ứng dụng python chạy nhanh hơn so với sử dụng CGI truyền thống mà hơn nữa có thể tận dụng các Apache API để viết thêm các module Apache bằng ngôn ngữ python. mod_python cũng bao gồm một số công cụ hữu ích như quản lý Session, truy cập các APIs của Apache, PSP (python server page)  &#8230; Phiên bản hiện tại của mod_python là 3.3.1 và bạn có thể tải từ trang chủ của mod_python.</div>
<h2>Một số tính năng của mod_python</h2>
<h2><span style="font-weight:normal;font-size:13px;">Một số tính năng của mod_python, bao gồm:</span></h2>
<div dir="ltr">
<ul>
<li>mod_python handlers</li>
<li>Quản lý session</li>
<li>PSP (Python Server Page)</li>
<li>Authentication &#8211; đăng nhập</li>
</ul>
</div>
<p>Trong phần này, tôi trình bày về mod_python handler và quản lý session. PSP và Authentication sẽ được trình bày ở loạt bài sau.</p>
<h3>mod_python handlers<span style="font-weight:normal;font-size:13px;"> </span></h3>
<p>Bạn có thể chỉ định cho Apache xử lý các request bằng các module viết bằng python thông qua mod_python. Ví dụ, bạn cần tận dụng tính năng authentication có sẵn của Python để kiểm tra quá trình đăng nhập của User, bạn có thể sử dụng PythonAuthenHandler. Để báo cho Apache phần nào sẽ do mod_python xử lý, bạn cần khai báo các handler tương ứng trong tập tin httpd.conf . Xét một ví dụ sau trích từ file httpd.conf trên Apache 2.x</p>
<pre>&lt;Directory "/Users/lamdo/Documents/workspace/PythonWebApp/src"&gt;
    SetHandler mod_python
    <strong>PythonHandler base_http_handler</strong>
    <strong>PythonAuthenHandler base_authentication_handler</strong>
    PythonDebug on
    Order allow,deny
   Allow from all
&lt;/Directory&gt;</pre>
<p>Trong thiết trên, tất cả các request đến các script python trong /Users/lamdo/Documents/workspace/PythonWebApp/src đều được xử lý qua base_htpp_handler &#8211; vốn là 1 file python để nhận và xử lý các http_request. Bạn cũng thấy là tôi sử dụng PythonAuthenHandler và chuyển các request này cho 1 file python la base_authentication_handler.</p>
<h3>Quản lý Session</h3>
<p>Quản lý session là tính năng không thể thiếu của các web-server. Tất nhiên mod_python cũng phải có tính năng này. Không chỉ cung cấp các chức năng quản lý session có sẵn từ Apache mà còn cho phép bạn viết các API để tự quản lý session, tất nhiên là bằng ngôn ngữ python &#8230; Dưới đây là một ví dụ cụ thể về chức năng quản lý session của mod_python. Đoạn script này tôi trích từ file base_http_handler.py, file tôi dùng để quản lý các request.</p>
<pre>from mod_python import apache, Session

def handler(request):
    session = Session.Session(request)
    if session.is_new():
       visit_token = 'application started'
    else:
       visit_token = 'application started already'
    session.save()
    echo(request, 'Token status %s' % visit_token, type='text/plain')
    return apache.OK

def echo(req, content, type='text/html'):
    req.content_type = '%s; charset=UTF8' % type
    req.write(content, 0)</pre>
<p>Trong ví dụ trên, khi lần đầu bạn gửi request đến server, bạn sẽ thấy base_http_handler trả về application started, và nếu refresh lại sẽ thấy application_started_already.</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/python/'>python</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/apache/'>apache</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/mod_python/'>mod_python</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/python/'>python</a>, <a href='http://dothanhlam.wordpress.com/tag/tutorial/'>tutorial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/370/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/370/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/370/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=370&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/08/31/python-m%e1%bb%99t-s%e1%bb%91-tinh-nang-c%e1%bb%a7a-mod_python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Tạp bút chém gió] Nghề viết Flash AS &#8230;</title>
		<link>http://dothanhlam.wordpress.com/2010/08/20/t%e1%ba%a1p-but-chem-gio-ngh%e1%bb%81-vi%e1%ba%bft-flash-as/</link>
		<comments>http://dothanhlam.wordpress.com/2010/08/20/t%e1%ba%a1p-but-chem-gio-ngh%e1%bb%81-vi%e1%ba%bft-flash-as/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 11:41:13 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[chém gió]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[flex3 to flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tào]]></category>
		<category><![CDATA[tạp bút]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=363</guid>
		<description><![CDATA[Cách đây khoảng 2 &#8211; 3 tháng,  khi bác Steve Jobs &#8211; trùm của Apple có các tuyên bố hùng hồn về sự ưu ái của bác dành cho HTML5 cũng như  sản phẩm đình đám của bác &#8220;cóc thèm&#8221; hỗ trợ Flash &#8211; vốn là một định dạng rich media content phổ biến nhất <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=363&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cách đây khoảng 2 &#8211; 3 tháng,  khi bác Steve Jobs &#8211; trùm của Apple có các tuyên bố hùng hồn về sự ưu ái của bác dành cho HTML5 cũng như  sản phẩm đình đám của bác &#8220;cóc thèm&#8221; hỗ trợ Flash &#8211; vốn là một định dạng rich media content phổ biến nhất thế giới web hiện nay &#8211; đã tạo nên một cuộc hỗn chiến không cân sức giữa một bên là những người ủng hộ Flash và một bên là những người &#8220;ghét&#8221; Flash.</p>
<p>Hai phe này, họ là ai ?</p>
<p>Những người ủng hộ Flash &#8211; lực lương xung phong đầu tiên có thể nói là các lâp trình viên và các thiết kế viên Flash (trong đó có cả tôi).  Với họ thì Flash chính là nồi cơm nuôi sống bản thân, gia đình của họ. Làm người thì phải có chính kiến của mình nên thái độ ủng hộ Flash của họ là hoàn toàn rõ ràng, dù đứng ở góc độ chuyên môn thì những vấn đề mà Flash đang bị như memory leak, memory over consuming họ đều biết cả chứ  :D Trong số các lập trình viên Flash hay chuyên viên thiết kế Flash thì cũng có những người có &#8220;số má&#8221;, và có vẻ họ đều có những phương pháp cũng như kinh nghiệm để né tránh những vấn đề này. Chính vì thế họ vẫn trung thành và ra sức bảo vệ cho công nghệ họ đã chọn lựa.</p>
<p>Những người &#8220;chống&#8221; Flash &#8211; họ có thể là các tín đồ của M$ mà một thời đã từng hy vọng vào Silverlight và đến giờ vẫn &#8230; hy vọng tiếp (sorry các bác silverlight <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). Ngoài ra còn kể đến những người ghét quảng cáo và bị hàng tá &#8220;banner flash&#8221; làm cho nhức mắt. Tôi từng gặp những người này &#8211; khi cài một browser mới thì việc đầu tiên anh ta làm là  tắt plugin flash để khỏi thấy Flash . Số lượng lớn nhất phải nói đến là các iFan (ai &#8211; phang) với  khẩu hiệu &#8220;Flash will die&#8221;, &#8220;HTML5 &#8211; Flash Killer&#8221; xuất hiện khắp nơi. Sự ồn ào của phe này tưởng như  giới công nghệ sắp chuẩn bị cho tang lễ của Flash vậy. Một số bài viết bắt đầu đưa ra các tiên đoán về số phận những người làm việc với công nghệ Flash &#8211; họ sẽ đi về đâu một khi công nghệ Flash về với cát bụi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Ngay cả khi tôi được yêu cầu chuyển sang làm Python thì các bạn tôi lại quả quyết rằng tôi đang chuẩn bị &#8220;hậu sự&#8221; cho công việc Flash Developer  &#8230;</p>
<p>Lao đông là vinh quang, cho dù làm bất cứ nghề gì ta đều có quyền tự hào và yêu quý nó. Ngay cả lúc nó sa cơ lỡ vận hoặc mai một dần khiến ta không còn kế sinh nhai &#8230; mặc dù tôi là người có cái nhìn lạc quan về Flash và luôn tin tưởng vào Adobe, vào Flash  &#8230; nhưng trước những biến động như vậy, tự mình không thể không &#8230; ưu tư. Tuy nhiên tôi lại ưu tư về nghề nghiệp hơn là về công nghệ Flash.</p>
<h2>Làm Flash có lên &#8220;sếp&#8221; được không ?</h2>
<p>
Tính ra thì tôi cũng làm Flash được 4 năm rồi. Từ một người hoàn toàn không biết gì về Flash, tôi bắt đầu làm việc cho một công ty out sourcing có số má trong lĩnh vực Flash là Pyramid Consulting. Tất nhiên ở một vị trí starter thì tôi chỉ cắm đầu vào làm việc cho công ty và không biết gì khác hơn ngoài công ty. Rồi cũng mon men lên vị trí senior theo số năm, mà thực ra tôi nghĩ mình chỉ thuộc diện &#8220;sống lâu lên lão làng&#8221; mà thôi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Mà quả thực đến bây giờ tôi cũng chẳng là sếp hay là gì cả <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Tôi cũng không dám vơ đũa cả nắm mà tuyên bố rằng làm Flash ở Việt Nam là không có đường tiến, hay bi quan hơn là không có tương lai gì &#8230; Bằng chứng là khối bạn bè tôi vẫn sống trong vinh quang và no đủ khi làm flash đó thôi. Như Đăng Hải giờ đang &#8220;sếp xòng&#8221; ở Vinagame Sài Gòn, hay Trọng Thanh đang kéo cả đoàn tàu Flash của Pyramid Consulting Vietnam. Lãng tử như Hai Lúa Vũ Anh giờ cũng là người có số má ở PlaySoft . Mà nổi nhất vẫn là Lưu Xuân Việt, thằng bạn thời nối khố mới  làm Flash hơn 1 năm giờ đã bắt đầu &#8220;khạc ra lửa&#8221; ở VON. Nhưng thực tế là họ không làm đơn thuần Flash mà còn biết thêm các công nghệ server side như PHP, .NET &#8230; Điều đó chứng tỏ rằng để tồn tại  và phát triển trong lĩnh vực này, bạn cũng cần phải có kiến thức ở các lĩnh vực khác &#8230; nói chung là biết càng nhiều càng tốt.</p>
<h2>Làm Flash có &#8220;giàu&#8221; không ?</h2>
<p>
Nếu tính đến thời điểm cuối cùng mà tôi vẫn còn làm &#8220;thuần&#8221; Flash &#8211; nghĩa là không làm gì khác ngoài Flash &#8211; khoảng hơn 1 năm trước thì mức lương của tôi cũng làng nhàng khoảng 10 triệu. Mặc dù con số đó không nhỏ nhưng cũng hết sức bình thường với vị trí và công việc của tôi mà thôi. Cách duy nhất để kiếm thêm đó là đi code dạo &#8211; hay nhận thêm dự án bên ngoài để làm thêm ở nhà. Tất nhiên bạn có thể kiếm được kha khá hơn chút &#8230; Nếu giỏi thì bạn có thể có thu nhập nhiều hơn công việc chính. Và nhất là khi bạn đã có được mối quan hệ tốt và nhận được rất nhiều dự án, bạn phải tìm kiếm thêm người để chia sẻ. Một số người bạn của tôi đã mạnh dạn bỏ luôn công việc chính và chuyển sang làm free &#8211; lancer đúng nghĩa và họ nhanh chóng trở thành đại gia có máu mặt trong lĩnh vực này &#8230;</p>
<p>Quay về chuyện đi code dạo của tôi &#8211; một thằng lờ khờ ít quen biết và chủ yếu nhận yêu cầu từ người quen cho nên số tiền tôi kiếm được cũng rất khiêm tốn. May mắn thì có một số đại gia số má trả tiền thơm, hơn nữa họ đều là những người có kỹ thuật tốt nên việc đưa các project phù hợp với khả năng của mình cũng như điều tiết được yêu cầu của khác hàng nên làm việc với họ là khá thoải mái. Phần còn lại thì &#8230; có nhiều điều để đáng nói đây <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Cách đây khoảng 2 năm, có một người giới thiệu cho tôi một project làm flash site cho 1 cửa hàng uốn tóc. Tiền chưa biết trả đến đâu nhưng yêu cầu thì khá hoành tráng &#8230; Sau khi tôi làm demo và mang lên cho họ, còn nhận được một đống yêu cầu hoành tráng khác như , hình ảnh động và cả 1 tá yêu cầu về back office. Tưởng được khách hàng đại gia thì họ đề cập cái giá là 2 triệu đồng cho toàn bộ &#8230; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  thế là đành ngậm ngùi bỏ của chạy lấy người mà thôi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Như vậy để kiếm nhiều $ từ nghề này chắc hẳn việc đầu tiên là bạn phải có nhiều mối quan hệ tốt, nếu không chuyện &#8220;gặm xương&#8221; là không thể tránh khỏi &#8230;</p>
<h2>Làm Flash có &#8230; cực không ?</h2>
<p>
Bỏ qua những vấn đề vể mặt công nghệ của Flash, tôi muốn nói đến chuyện làm Flash hơn &#8230; Lao động tất nhiên là cực khổ rồi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Đâu có công việc nào nhẹ nhàng mà kiếm được nhiều tiền đâu. Bạn đừng tin quảng cáo tào lao kiếm 1 tháng 120 triệu mà chỉ ngồi làm survey. NHẢM.</p>
<p>Về bản chất Flash thường gắn liền với các campaign &#8211; chiến dịch mạrketing &#8211; quảng cáo nên đến khi 1 ý tưởng thành hình và trở thành 1 layout flash hoàn chỉnh thì bạn chẳng còn mấy thời gian để code. Điều đó nghĩa là bạn phải đua với thời gian. Đó là lý do ngày xưa tôi hay phải overtime vì đa số các project gắn liền với cái chiến dịch quảng cáo đã có deadline rõ ràng. Tất nhiên là thời gian để cài đặt tỉ lệ nghịch với số bug &#8211; nếu bạn càng ít thời gian để test, debug thì số bug sẽ nhiều. Điều an ủi duy nhất là các project này khi lên live site thường chỉ tồn tại trong thời gian ngắn và bạn hoàn toàn có thể &#8220;rũ bỏ trách nhiệm&#8221; bảo trì &#8230;  :D <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   Nếu bạn làm production thì cũng không đến nỗi, tuy nhiên cực hay không cực theo tôi lại đến từ tần suất thay đổi yêu cầu của khách hàng hơn là chuyện deadline. Bạn sẽ cảm thấy nản nếu khách hàng cứ bắt đập đi làm lại liên tục  :D <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h2>Kết luận</h2>
<p>
Cho dù bạn đã làm Flash, đang làm và sẽ làm Flash thì tôi khẳng định với bạn rằng bạn hoàn toàn có thể sống khỏe với công nghệ này. Mặc dù ưu tư thì vẫn là ưu tư nhưng tôi vẫn hoàn toàn tin tưởng vào Flash. Chuyện HTML5 thì cứ chờ đó. Hết Silverlight rồi đến Java FX, rồi Ajax &#8211; tất cả đều đã từng mạnh miệng là Flash Will Die nhưng rốt cuộc đã làm được gì đâu <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   Mà quan điểm của tôi: Flash là RICH MEDIA CONTENT  chứ không phải là WEB STANDARD nên việc cứ so với HTML5 thì thực là nực cười <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/uncategorized/'>Uncategorized</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/tag/chem-gio/'>chém gió</a>, <a href='http://dothanhlam.wordpress.com/tag/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/flex3-to-flex-4/'>flex3 to flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/life/'>life</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/tao/'>tào</a>, <a href='http://dothanhlam.wordpress.com/tag/t%e1%ba%a1p-but/'>tạp bút</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/363/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=363&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/08/20/t%e1%ba%a1p-but-chem-gio-ngh%e1%bb%81-vi%e1%ba%bft-flash-as/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Python] Kí sự cài đặt mod_python 3.3.1 trên MAC os X 10.6.4</title>
		<link>http://dothanhlam.wordpress.com/2010/08/01/python-ki-s%e1%bb%b1-cai-d%e1%ba%b7t-mod_python-3-3-1-tren-mac-os-x-10-6-4/</link>
		<comments>http://dothanhlam.wordpress.com/2010/08/01/python-ki-s%e1%bb%b1-cai-d%e1%ba%b7t-mod_python-3-3-1-tren-mac-os-x-10-6-4/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 06:37:09 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[MAC OS X]]></category>
		<category><![CDATA[tiếng Việt]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[MAC os X]]></category>
		<category><![CDATA[mod_python 3.3.1]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python 2.6]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web programming]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=355</guid>
		<description><![CDATA[Hoàn cảnh ký sự &#8230; Do yêu cầu của công việc nên tôi bắt đầu làm việc với Python. Có thể nói đây là lần đầu tiên tôi làm việc với một môi trường hoàn toàn xa lạ với mình &#8211; MAC OS X, Debian, Python, Apache &#8230; khi mà tôi đã quen thuộc từ <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=355&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Hoàn cảnh ký sự &#8230;</h2>
<p>Do yêu cầu của công việc nên tôi bắt đầu làm việc với Python. Có thể nói đây là lần đầu tiên tôi làm việc với một môi trường hoàn toàn xa lạ với mình &#8211; MAC OS X, Debian, Python, Apache &#8230; khi mà tôi đã quen thuộc từ lâu với Windows, .NET và IIS &#8230; Vạn sự khởi đầu nan, và sau 1 tuần mò mẫm thì cuối cùng cũng thấy ánh sáng cuối đường hầm <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Tất nhiên để lập trình web thì ta phải có máy chủ phục vụ web (web server). Tôi cũng biết rằng MAC os X phiên bản 10.6.4 này đã có sẵn Apache 2.2, và hoàn toàn có thể hỗ trợ tốt python, và hơn nữa Python 2.6 cũng được tích hợp sẵn trong hệ điều hành này. Việc còn lại là tôi cần cài đặt mod_python &#8211; vốn là module nhúng trình thông dịch python vào máy chủ Apache theo mô hình CGI.Như vậy tôi chỉ cần tải về mod_python và cài đặt là xong ? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Cuộc sống không đơn giản như thế <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h2>Vạn sự khởi đầu nan &#8230;</h2>
<p>mod_python có thể download dễ dàng từ <a href="http://www.modpython.org/" target="_blank">trang chủ của mod_python</a>. Thực ra đây chỉ là source code của mod_python, trước khi cài đặt bạn phải compile và tất nhiên trong máy của bạn phải có GCC &#8211; GNU Complier Collection, nói nôm na là trình biên dịch C/C++. Nếu bạn sử dụng Linux, Unix thì sẽ chẳng bận tâm đến GCC vì nó đã được tích hợp sẵn. Tuy nhiên phiên bản MAC os X 10.6.4 không tích hợp sẵn trình biên dịch này&#8230; và cách &#8220;chuối bưởi&#8221; nhất đó là cài đặt thêm XCode 3 -bộ SDK của Apple, mặc dù có rất nhiều cách nhanh và gọn hơn để cài GCC. Tôi mất thêm hơn 2GB và gần 1 tiếng để download bộ XCode từ trang developer của Apple.</p>
<p>Sau khi download và cài đặt xong XCode, tôi liền mở terminal và thử luôn việc cài đặt mod_python bằng các lệnh sau:</p>
<pre><strong>$ tar xvzf mod_python-3.3.1.tar
$ cd mod_python-3.3.1
$ ./configure --with-apxs=/usr/sbin/apxs
$ make
$ sudo make install</strong></pre>
<p><strong> </strong><br />
Một loạt các lệnh được thực thi, tuy nhiên kết quả cuối cùng tôi nhận được là một thông báo lỗi</p>
<pre><strong>connobject.c:142: error: request for member 'next' in something not a structure or union apxs:Error: Command failed with rc=65536</strong></pre>
<p>Bó tay thật &#8230; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<h2>Gian nan nhưng chưa &#8230; chán</h2>
<p>Tôi lại tiếp tục mò mẫm tìm xem nguyên nhân và cuối cùng thì tôi tìm ra được đây là lỗi của mod_python khi compile trên Snow Leopard &#8211; tức là cái hệ điều hành MAC os X 10.6.4 này  :| , và bug cũng được mô tả kèm theo bản vá <a href="https://bugzilla.redhat.com/show_bug.cgi?id=465246" target="_blank">(patch) tại đây</a>. Tôi tải bản vá này vào chính folder source của mod_python 3.3.1, sau đó cài đặt nó bằng các lệnh sau:</p>
<pre><strong>$ cd mod_python-3.3.1
$ patch -p1 &lt; mod_python-3.3.1-apr.patch </strong></pre>
<p>Sau khi thực thi, hệ thống gửi lại cho tôi một thông báo để biết rằng quá trình patch đã &#8230; thành công <img src='http://s0.wp.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<pre><strong>patching file src/connobject.c</strong></pre>
<p>và bây giờ, tôi thực hiện lệnh compile, sau khi đã vượt qua hàng tá thứ để cài đặt &#8230; bằng lệnh:</p>
<pre><strong>$ ./configure --with-apxs=/usr/sbin/apxs</strong></pre>
<pre><strong>$ make
$ sudo make install</strong></pre>
<p>Như vậy là tôi đã cài đặt thành công mod_python lên server apache, và thao tác còn lại là restart apache server lại bằng lệnh  &#8230;</p>
<pre><strong>$ sudo /usr/sbin/apachectl restart</strong></pre>
<h2>Ánh sáng cuối đường hầm</h2>
<p>Sau một vài thao tác sửa file httpd.conf của Apache và viết một module python xử lý các HTTP Request thì cuối cùng tôi cũng build được cái project của mình chạy local. Mặc dù tốn hết một tuần nhảm nhí nhưng tôi cũng rút ra được khá nhiều bài học khi làm việc với open source và bỗng dưng biết sử dụng thêm &#8230; linux (debian) và hiểu rõ hơn về cơ chế hoạt động của MAC os X <img src='http://s0.wp.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  &#8230; Tôi đã lún quá sâu với Windows và Microsoft, có lẽ đây là lúc thích hợp để tìm đường thoát khỏi chăng <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/mac-os-x/'>MAC OS X</a>, <a href='http://dothanhlam.wordpress.com/category/ti%e1%ba%bfng-vi%e1%bb%87t/'>tiếng Việt</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/mac-os-x-2/'>MAC os X</a>, <a href='http://dothanhlam.wordpress.com/tag/mod_python-3-3-1/'>mod_python 3.3.1</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/python-2-6/'>python 2.6</a>, <a href='http://dothanhlam.wordpress.com/tag/review/'>review</a>, <a href='http://dothanhlam.wordpress.com/tag/tutorial/'>tutorial</a>, <a href='http://dothanhlam.wordpress.com/tag/web-programming/'>web programming</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/355/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=355&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/08/01/python-ki-s%e1%bb%b1-cai-d%e1%ba%b7t-mod_python-3-3-1-tren-mac-os-x-10-6-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Android 2.1] Khắc phục lỗi không đồng bộ được với Google Picasa</title>
		<link>http://dothanhlam.wordpress.com/2010/07/30/android-2-1-kh%e1%ba%afc-ph%e1%bb%a5c-l%e1%bb%97i-khong-d%e1%bb%93ng-b%e1%bb%99-d%c6%b0%e1%bb%a3c-v%e1%bb%9bi-google-picasa/</link>
		<comments>http://dothanhlam.wordpress.com/2010/07/30/android-2-1-kh%e1%ba%afc-ph%e1%bb%a5c-l%e1%bb%97i-khong-d%e1%bb%93ng-b%e1%bb%99-d%c6%b0%e1%bb%a3c-v%e1%bb%9bi-google-picasa/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 07:51:57 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclair 2.1]]></category>
		<category><![CDATA[Motorola Milestone]]></category>
		<category><![CDATA[Android 2.1]]></category>
		<category><![CDATA[multi-touch screen]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=352</guid>
		<description><![CDATA[Một số smartphone sử dụng Android 2.1 (Éclair) không tìm thấy chức năng đồng bộ với Google Picasa Albums. Khi vào Settings/Accounts &#38; sync &#8211; chọn tài khoản Google hiện tại thì trong danh sách sync chỉ có Contacts, Gmail, Calendar &#8230; chức năng Sync Picasa Web Albums thì không thấy. Vấn đề này có <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=352&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Một số smartphone sử dụng Android 2.1 (Éclair) không tìm thấy chức năng đồng bộ với Google Picasa Albums. Khi vào Settings/Accounts &amp; sync &#8211; chọn tài khoản Google hiện tại thì trong danh sách sync chỉ có Contacts, Gmail, Calendar &#8230; chức năng Sync Picasa Web Albums thì không thấy.</p>
<p>Vấn đề này có thể giải quyết bằng cách cài đặt Gallery 3D của Google, thay thế cho Media Gallery hiện tại. Link <a href="http://sites.google.com/site/droidlife62/home/Gallery3DMT.apk?attredirects=0" target="_blank">download tại đây</a>. Bạn có thể tải về rồi chép vào thẻ nhớ và cài đặt thông qua Astro File Manager, hoặc download trực tiếp từ trình duyệt của Android.</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/android/'>Android</a>, <a href='http://dothanhlam.wordpress.com/category/android/eclair-2-1/'>Eclair 2.1</a>, <a href='http://dothanhlam.wordpress.com/category/smartphones/motorola-milestone/'>Motorola Milestone</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/android-2-1/'>Android 2.1</a>, <a href='http://dothanhlam.wordpress.com/tag/motorola-milestone/'>Motorola Milestone</a>, <a href='http://dothanhlam.wordpress.com/tag/multi-touch-screen/'>multi-touch screen</a>, <a href='http://dothanhlam.wordpress.com/tag/smartphone/'>smartphone</a>, <a href='http://dothanhlam.wordpress.com/tag/tutorial/'>tutorial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/352/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=352&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/07/30/android-2-1-kh%e1%ba%afc-ph%e1%bb%a5c-l%e1%bb%97i-khong-d%e1%bb%93ng-b%e1%bb%99-d%c6%b0%e1%bb%a3c-v%e1%bb%9bi-google-picasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Sưu tầm] Lối thoát nào cho lập trình viên Việt Nam?</title>
		<link>http://dothanhlam.wordpress.com/2010/07/30/s%c6%b0u-t%e1%ba%a7m-l%e1%bb%91i-thoat-nao-cho-l%e1%ba%adp-trinh-vien-vi%e1%bb%87t-nam/</link>
		<comments>http://dothanhlam.wordpress.com/2010/07/30/s%c6%b0u-t%e1%ba%a7m-l%e1%bb%91i-thoat-nao-cho-l%e1%ba%adp-trinh-vien-vi%e1%bb%87t-nam/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 03:49:09 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[tiếng Việt]]></category>
		<category><![CDATA[bi quan]]></category>
		<category><![CDATA[chán đời]]></category>
		<category><![CDATA[chém gió]]></category>
		<category><![CDATA[code dạo]]></category>
		<category><![CDATA[lập trình viên]]></category>
		<category><![CDATA[than thân trách phận]]></category>
		<category><![CDATA[than vãn]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=348</guid>
		<description><![CDATA[Bài viết của chú Ngôn, đồng nghiệp cũ Có thể cách suy nghĩ cũng bi quan, hơi tiêu cực nhưng dù sao nó cũng phản ánh chính xác về cuộc sống, sự nghiệp của các lập trình viên Việt Nam (cá nhân tôi nghĩ thế :d) Tuần rồi có gặp lại mấy người bạn cũ, <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=348&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bài viết của chú Ngôn, đồng nghiệp cũ <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Có thể cách suy nghĩ cũng bi quan, hơi tiêu cực nhưng dù sao nó cũng phản ánh chính xác về cuộc sống, sự nghiệp của các lập trình viên Việt Nam (cá nhân tôi nghĩ thế :d)</p>
<p>Tuần rồi có gặp lại mấy người bạn cũ, nghe họ than thở sao đi làm lập trình viên áp lực và đòi hỏi suy nghĩ nhiều vậy mà lương lại không tăng được bao nhiêu. Nghe vậy tôi cũng không biết nói sao, chỉ cười thầm trong bụng &#8220;Ôi, làm ngành này mà không &#8230;nhảy công ty thì bao giờ lương mới lên nhanh <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )&#8221;</p>
<p>Biết lập trình là cái nghiệp mình đã trót theo vì niềm đam mê hay một lý do nào khác, nhưng liệu nó có thực sự triển vọng để mình có thể gắn bó lâu dài?</p>
<p>Với tôi thì đây quả thật là một vấn đề cần tính đến bởi có lẽ hiếm có nghề nào lại &#8230;.&#8221;bạc bẽo&#8221; như lập trình viên. Nếu các ngành khác như giáo viên, bác sĩ, bán hàng&#8230; càng làm lâu càng có quan hệ và kinh nghiệm thì ngược lại khả năng tư duy của các lập trình viên sẽ ngày một chậm đi do tuổi tác. Đứng ở tư cách một chủ doanh nghiệp, rõ ràng bạn sẽ thích thuê những lập trình viên trẻ trung, vừa nhanh nhẹn, chi phí phải chăng hơn là thuê các lão tướng lương cao mà lại ngày một chậm chạp hơn.</p>
<p>Và rõ ràng trước tình hình như thế, người lập trình viên cần tính cho mình một lối thoát trước khi chạm đến ngưỡng không còn khả năng lập trình được nữa <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>1. Thăng tiến theo con đường lập trình</strong><br />
Với một lập trình viên thuộc loại khá, hiện nay sau khi ra trường sẽ được trả mức lương trung bình vào khoảng 400-500$ (Theo số liệu các công ty gia công ở TPHCM, ở Hà Nội có thể thấp hơn). Sau khoảng 2 năm con số này sẽ tăng lên khoảng 1000$, và 2-3 năm nữa có thể lên đến 2000$. Tuy nhiên đến đây có thể xem là đã chạm ngưỡng. Sở dĩ nói vậy vì theo tôi được biết một số công ty nước ngoài trả tiền gia công cho các công ty Việt Nam theo đầu người khoảng 2000$/người, trừ đi các chi phí điện nước, thuế má&#8230; thì có lẽ mức lương trung bình cho mỗi người sẽ chỉ có thể khoảng 1000-1500$ mà thôi, trả cho tôi 2000$ tức là phải bù lỗ từ các lập trình viên trung bình khác. Tất nhiên con số này có thể sẽ cao hơn ở những công ty gia công tầm cao không trả theo đầu người, tuy nhiên chỉ là thiểu số.</p>
<p>Để có thể leo đến mức này thì không chỉ đòi hỏi tôi phải có năng lực thật tốt mà còn phải khéo léo trong việc đàm phán, cũng như phải chọn đúng những công ty đủ triển vọng có hầu bao tốt sẵn sàng chi trả mức trên. Và đến khi đạt được, tất nhiên tôi cũng sẽ nhận được những áp lực cho &#8220;tương xứng&#8221; với mức lương đó cũng như sẽ là mục tiêu sa thải đầu tiên trong các thời kì kinh tế khó khăn. Một khi bị sa thải, sẽ rất khó để có thể tìm được công việc mới với mức lương như cũ.</p>
<p>Tuy nhiên nếu leo lên tới được mức ở trên thì theo tôi cũng đã đủ sống ở Việt Nam. Với giá một căn hộ dành cho người thu nhập trung bình vào khoảng 600 triệu hiện nay, thì tôi nhẩm tính với mức lương 1000$ mỗi tháng để dành 10 triệu là chỉ cần 5 năm là có thể trả hết. Với mức lương 2000$ thì chỉ cần 2.5 năm. Như vậy thì tôi cũng có thể tập trung vào công nghệ, từng bước trau dồi để leo lên các vị trí quản lý công nghệ cao hơn.</p>
<p>Tuy nhiên phần lớn số lượng lập trình viên Việt Nam sẽ không nằm trong tốp này, cũng như các công việc gia công ở Việt Nam chỉ quanh quẩn ở tầm thấp nên đến một lúc nào đó những người có năng lực cũng sẽ từng bước tách ra tìm cho mình một con đường triển vọng hơn.</p>
<p><strong>2. Tìm một nghề mới triển vọng hơn</strong><br />
Vậy nếu không làm lập trình viên thì sẽ làm gì? Nhìn vào số lượng những người bạn xung quanh, tôi thấy phổ biến nhất là chọn một ngành triển vọng hơn nhưng có liên quan đến IT</p>
<p>- Làm IT trong các ngân hàng, công ty chứng khoán: Các công ty này cũng cần rất nhiều đến IT, đôi lúc cả những công việc lập trình. Làm trong những công ty này có thể dễ dàng tiếp cận được với những nguồn thông tin khá tốt, cộng với khả năng xử lý thông tin thế mạnh của các lập trình viên thì có lẽ sớm muộn cũng tìm được một hướng đi triển vọng như một nghề tay trái bên cạnh nghề lập trình hiện tại. Tôi còn biết có vài đại ca ngành này làm một hồi còn chuẩn bị có ý định tách ra lập ngân hàng nữa chứ <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>- Đi Sale IT: Với một thị trường khá tiềm năng thì Việt Nam đang là đích đến của rất nhiều công ty sales như Microsoft, IBM, Cisco, Oracle, HP&#8230; Làm nghề này thì đòi hỏi khả năng giao tiếp cũng nhiều mối quan hệ. Với mức lương khá cao cũng như hưởng huê hồng theo doanh số thì đến một lúc nào đó hoàn toàn có thể bứt xa so với mức lương lập trình viên ở trên. Ngoài ra làm nghề này được thêm cái dễ nhảy, không làm cho Microsoft thì sang làm cho IBM, Cisco&#8230; Nói chung với một thị trường đông dân và còn tăng trưởng cao như Việt Nam hiện nay thì không thiếu cơ hội.</p>
<p>- Đi buôn Bất Động Sản: Đi buôn BĐS cũng vui, chỉ có điều là nó không liên quan tới IT lắm và đòi hỏi vốn cũng phải kha khá. Nhưng nếu quyết tâm theo đuổi trong thời gian dài thì sớm hay muộn cũng sẽ đạt được những thành tựu, thậm chí là rất lớn. Nhìn quanh quẩn thấy đa phần tầng lớp giàu có ở Việt Nam đều giàu lên từ ngành này (Theo thống kê không chính thức là 50%). Do đó với khả năng của suy luận của lập trình viên cộng thêm giao tiếp khéo léo và từng bước mở rộng quan hệ, thì đây cũng là một hướng đi triển vọng có thể cân nhắc</p>
<p>- Đi làm nhà giáo: Suy nghĩ này có vẻ hơi &#8220;điên&#8221; bởi đa phần mọi người nghĩ lương nhà giáo ba cọc ba đồng, làm sao mà sống. Tôi cũng nghĩ vậy cho đến khi nghe một anh bạn nói trung bình mỗi buổi anh đó đi dạy được 1 triệu, Sau vài giây tính toán, tôi nhẩm tính như vậy là một tháng anh cũng kiếm được 30-40 triệu, với những người có tiếng tăm có lẽ còn cao hơn nữa. Ngoài ra làm ngành này được thêm lợi thế là xã hội trọng vọng, cũng như tích lũy được rất nhiều mối quan hệ để làm vô số điều khác sau này. Có lẽ đây là một trong những lối thoát rất tốt và tôi sẽ còn đề cập trong một bài viết khác <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<p><strong>3. Lập công ty tự xây dựng sự nghiệp cho mình</strong><br />
Bên cạnh hướng tìm một nghề triển vọng hơn ở trên, với những người với cá tính mạnh thì họ lại muốn tự lập công ty để khẳng định mình. Nhưng nếu làm một công ty IT thì nên đi hướng nào?</p>
<p>- Gia công: Đây là một trong những hướng mà tôi thấy khá nhiều các công ty phía Nam ưa chuộng. Xuất phát từ một số hợp đồng có được, họ tuyển nhân công vào làm rồi cứ thế từng bước mở rộng. Tuy nhiên làm nghề này có cái bấp bênh là nhân sự không ổn định, bởi rõ ràng với hướng này thì chỉ có thể mở rộng theo quy mô số lượng nhân viên mà thôi. Điều này thì buộc công ty phải luôn tìm kiếm những hợp đồng mới và việc này hoàn toàn không đơn giản bởi đòi hỏi những doanh nhân trẻ phải có nhiều mối quan hệ quốc tế. Ngoài ra, đến một lúc nào đó quy mô lớn thì chỉ cần không có hợp đồng trong vài tháng thì công ty cũng đi luôn. Nhiều công ty ở gia công ở VN đã rơi vào tình trạng như vậy.</p>
<p>- Làm giải pháp cho thị trường trong nước: Các công ty theo hướng này thi đa phần tôi nhận thấy họ thường có một khách hàng ban đầu với nhu cầu về một sản phẩm nào đó. Và họ từng bước làm sản phẩm để đáp ứng nhu cầu của khách hàng này rồi kì vọng sẽ bán được cho các khách hàng tiếp theo. Tuy nhiên phần lớn các công ty theo lĩnh vực này không ổn định và doanh số bấp bênh. Câu hỏi đặt ra là liệu thị trường sản phẩm họ đang làm có đủ để nuôi họ, cũng như việc các hợp đồng có quy mô ở Việt Nam đa phần đều dựa trên quan hệ. Việc họ có được hợp đồng ban đầu không chắc là họ sẽ kiếm được những hợp đồng tiếp theo. Có lẽ các công ty dù thành công trong lĩnh vực này cũng đều hiểu đây không phải là hướng đi lâu dài, họ cần phải có những sản phẩm chủ lực và bền vững hơn.</p>
<p>- Làm các dịch vụ dot-com: Có lẽ đây là một trong những lối thoát tốt nhất cho các công ty CNTT. Một sản phẩm thành công và doanh số ổn định sẽ là một nguồn đảm bảo rất lớn cho sự phát triển của công ty trong tương lai. Nhiều quỹ đầu tư lớn như IDG, DFJ Vinacapital&#8230; cũng đã vào Việt Nam để hỗ trợ cho những sản phẩm như vậy. Tuy nhiên thị trường này đang chịu một sức ì rất lớn, ngoài những sản phẩm đánh trúng mục tiêu vào thị trường game online, SMS&#8230; thì hầu hết các công ty còn lại đều đăng nằm trong tình trạng chờ thời và nỗ lực tìm kiếm đầu ra. Nhưng dẫu sao theo tôi đây vẫn là một hướng đi triển vọng, đặc biệt trong trường hợp sản phẩm mang một số yếu tố mới thì khi thành công ở Việt Nam sẽ có thể từng bước vươn ra thị trường bên ngoài, có thể chỉ dưới dạng gia công như ở trên nhưng sẽ ở một cấp độ cao hơn và đem lại giá trị gia tăng hơn rất nhiều.</p>
<p>Tổng kết lại thì trên đây là một số hướng đi theo quan điểm của riêng tôi mà những lập trình viên có thể cân nhắc cho sự nghiệp tương lai của mình. Khó có một cá nhân nào có thể gắn bó với nghề lập trình mãi mãi. Tất nhiên việc chọn hướng đi nào sẽ phụ thuộc vào tính cách của từng người khác nhau. Với riêng bản thân, thì tôi vẫn đang trên đường tự đào tạo để trở thành một trong những &#8220;nhân vật chủ chốt&#8221; góp phần xây dựng một công ty IT hùng mạnh của Việt Nam trong tương lai và từng bước vươn ra bên ngoài. Có thể bạn sẽ cho tôi là người &#8220;mơ mộng&#8221; nhưng đôi lúc tôi nghĩ nếu cả cuộc đời mình có thể sống với những lý tưởng cá nhân thì không phải tôi đã là một người rất hạnh phúc à, dẫu cho những lý tưởng đó là &#8230;không tưởng <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). Tất nhiên cũng có thể đến một lúc nào đó tôi nhận ra sự thật phũ phàng đó, nếu vậy thì thôi đành an phận làm một leader bình thường hướng dẫn thế hệ đàn em đi sau hay chuyển sang nghề nhà giáo, nếu được như ở trên thì cũng triển vọng phết nhỉ ^_^. Vậy còn với bạn, nếu bạn là lập trình viên thì bạn sẽ tính sao?</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/life/'>life</a>, <a href='http://dothanhlam.wordpress.com/category/ti%e1%ba%bfng-vi%e1%bb%87t/'>tiếng Việt</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/bi-quan/'>bi quan</a>, <a href='http://dothanhlam.wordpress.com/tag/chan-d%e1%bb%9di/'>chán đời</a>, <a href='http://dothanhlam.wordpress.com/tag/chem-gio/'>chém gió</a>, <a href='http://dothanhlam.wordpress.com/tag/code-d%e1%ba%a1o/'>code dạo</a>, <a href='http://dothanhlam.wordpress.com/tag/l%e1%ba%adp-trinh-vien/'>lập trình viên</a>, <a href='http://dothanhlam.wordpress.com/tag/life/'>life</a>, <a href='http://dothanhlam.wordpress.com/tag/than-than-trach-ph%e1%ba%adn/'>than thân trách phận</a>, <a href='http://dothanhlam.wordpress.com/tag/than-van/'>than vãn</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/348/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=348&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/07/30/s%c6%b0u-t%e1%ba%a7m-l%e1%bb%91i-thoat-nao-cho-l%e1%ba%adp-trinh-vien-vi%e1%bb%87t-nam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Flex] Hãy dùng Parsley trước khi đến với Cairngorm 3 &#8230;</title>
		<link>http://dothanhlam.wordpress.com/2010/07/29/flex-hay-dung-parsley-tr%c6%b0%e1%bb%9bc-khi-d%e1%ba%bfn-v%e1%bb%9bi-cairngorm-3/</link>
		<comments>http://dothanhlam.wordpress.com/2010/07/29/flex-hay-dung-parsley-tr%c6%b0%e1%bb%9bc-khi-d%e1%ba%bfn-v%e1%bb%9bi-cairngorm-3/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 07:11:42 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Parsley]]></category>
		<category><![CDATA[tiếng Việt]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Cairngorm 3.x]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[flex3 to flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Singleton]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=344</guid>
		<description><![CDATA[Đến thời điểm hiện tại, Flex 3.x và Cairngorm 2.2 vẫn là những gì tôi sử dụng hàng ngày để làm việc. Ngoài ra còn có một số project dựa trên PureMVC vẫn còn giai đoạn bảo trì &#8230; Có thể nói là tôi đã trở thành một tín đồ của MVC đúng nghĩa và <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=344&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Đến thời điểm hiện tại, Flex 3.x và Cairngorm 2.2 vẫn là những gì tôi sử dụng hàng ngày để làm việc. Ngoài ra còn có một số project dựa trên PureMVC vẫn còn giai đoạn bảo trì &#8230; Có thể nói là tôi đã trở thành một tín đồ của MVC đúng nghĩa và mỗi khi bắt đầu 1 project, hoặc PureMVC, hoặc Cairngorm vẫn là những lựa chọn duy nhất . Mọi việc bắt đầu thay đổi khi Adobe cho ra đời phiên bản Cairngorm 3 &#8211; mà theo những gì tôi review thì Cairngorm 3 không phải là MVC. Điều đáng nói là Cairngorm 3 dường như không phải là 1 framework hoạt động độc lập. Nó được thiết kế để sử dụng chung với Parsley, SpringActionScript &#8230; vốn là những framework theo mô hình IoC (Inversion of Control).</p>
<p>Tôi không bàn đến IoC nhiều, hơn nữa nó cũng không mới &#8211; nhất là đối với những người làm Java. Có vẻ Flex đang càng này tiệm cận với Java nhiều hơn khi có quá nhiều thứ của Java lần lượt xuất hiện ở Flex &#8211; như Flex Unit Test chẳng hạn.</p>
<p>Parsley là gì ?</p>
<p>Parsley là một framework dành cho các ứng dụng Flash/Flex/RIA . Có thể nói hệ thống <a href="http://www.spicefactory.org/parsley/" target="_blank">document</a> của Parsley là rất tốt và đầy đủ. Có lẽ tôi sẽ thử ứng dụng framework Parley này cho ứng dụng tiếp theo &#8230;</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/action-script-30/'>Action Script 3.0</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-builder/'>Flash Builder</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/category/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/parsley/'>Parsley</a>, <a href='http://dothanhlam.wordpress.com/category/ti%e1%ba%bfng-vi%e1%bb%87t/'>tiếng Việt</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm-3-x/'>Cairngorm 3.x</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/flex3-to-flex-4/'>flex3 to flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/singleton/'>Singleton</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/344/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=344&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/07/29/flex-hay-dung-parsley-tr%c6%b0%e1%bb%9bc-khi-d%e1%ba%bfn-v%e1%bb%9bi-cairngorm-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
		<item>
		<title>[Flex] Hướng dẫn cài đặt framework Cairngorm. P4</title>
		<link>http://dothanhlam.wordpress.com/2010/06/23/flex-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-cai-d%e1%ba%b7t-framework-cairngorm-p4/</link>
		<comments>http://dothanhlam.wordpress.com/2010/06/23/flex-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-cai-d%e1%ba%b7t-framework-cairngorm-p4/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 10:46:07 +0000</pubDate>
		<dc:creator>Do Thanh Lam</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flash develop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[tiếng Việt]]></category>
		<category><![CDATA[Web & AIR]]></category>
		<category><![CDATA[actionscript 3.0]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[hướng dẫn]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dothanhlam.wordpress.com/?p=335</guid>
		<description><![CDATA[ViewHelper Nhiều ý kiến cho rằng ViewHelpers như một cách để xác định vị trí, theo dõi và đơn giản hóa việc sử dụng các View. Một ứng dụng lớn sẽ gồm cả trăm lớp View và việc quản lý các View này sẽ trở nên rất khó khăn. Chính vì thế khái niệm ViewLocator, <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=335&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>ViewHelper</h2>
<p>Nhiều ý kiến cho rằng ViewHelpers như một cách để xác định vị trí, theo dõi và đơn giản hóa việc sử dụng các View. Một ứng dụng lớn sẽ gồm cả trăm lớp View và việc quản lý các View này sẽ trở nên rất khó khăn. Chính vì thế khái niệm ViewLocator, cũng như ServiceLocator và ModelLocator được tạo ra nhằm quản lý các view thông qua các chuỗi định danh và giao tiếp với các View thông qua các phương thức có phạm vi public.</p>
<p>Như vậy, ViewHelper có thể được định nghĩa như sau:</p>
<blockquote><address><strong>Một ViewHelper là một lớp triệu gọi các phương thức trên tất cả các View mà nó quản lý. ViewLocator là một Singleton chứa tất cả các ViewHelper và quản lý các ViewHelper thông qua chuỗi định danh.</strong></address>
</blockquote>
<h2>Khi nào cần cài đặt ViewHelper ?</h2>
<h3><span style="font-weight:normal;font-size:13px;">Như tôi đã nhấn mạnh trong các phần trước thì một Command sau khi thực hiện một tác vụ từ web service sẽ cập nhật thay đổi vào Model (ModelLocator), từ đó sẽ update lên view thông qua cơ chế  binding. Tất nhiên, việc sử dụng ViewHelper sẽ tránh cho việc đặt quá nhiều dữ liệu vào ModelLocator. Trong trường hơp này, Command sẽ liên lạc với ViewLocator để tìm view tương ứng, sau đó gọi các phương thức public của view để cập nhật trực tiếp sự thay đổi.</span></h3>
<p>Trong lớp LoginView (LoginView.mxml), bạn cần khai báo</p>
<pre>&lt;view:LoginViewHelper id="viewHelper" /&gt;</pre>
<p>Nội dung của LoginViewHelper thì có sẽ giống như sau</p>
<pre>package org.catapult.eslide.view {
        public class LoginViewHelper extends ViewHelper {
             public function LoginViewHelper() {
                    super();
        }

        public function itemClickHandler(e:ListEvent):void {
               LoginView(this.view).updateTitle(e.itemRenderer.name);
        }
     }
}</pre>
<p>Như vậy từ LoginViewHelper, bạn hoàn toàn có thể truy cập các thành phần trong LoginView. Như vậy trong Command, thông qua ViewLocator, bạn có thể truy cập vào các ViewHelper. ViewLocator được khai báo và định nghĩa như ServiceLocator. Đó là 1 file MXML có hàng loạt các tag của các ViewHelper và id tương ứng mà qua đó các Command có thể truy xuất được.</p>
<h2>Cairngorm 3.0 và Flex 4</h2>
<p>Trong khi tôi đang thực hiện loạt bài về Cairgorm &#8211; phiên bản Cairngorm 2.2 &#8211; thì Adobe đã phát hành phiên bản tiếp theo là Cairngorm 3.0. Tất nhiên là tôi sẽ tiếp tục sử dụng Cairngorm 2.2 cho các project Flex 3 trước khi chuyển hoàn toàn sang Flex 4 với Cairngorm 3.0, mặc dù phiên bản Flex 3 hay 4 đều không ảnh hưởng đến việc dùng Cairngorm 2.2 hay 3.0. Vấn đề chính là &#8220;design &#8211; in &#8211; mind&#8221; &#8211; slogan mới của Adobe trong quy trình phát triển ứng dụng với Flex 4 và Cairngorm 3.0</p>
<br />Filed under: <a href='http://dothanhlam.wordpress.com/category/web-air/action-script-30/'>Action Script 3.0</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-builder/'>Flash Builder</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flash-develop/'>Flash develop</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/category/mvc/'>MVC</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/puremvc/'>PureMVC</a>, <a href='http://dothanhlam.wordpress.com/category/design-pattern/singleton/'>Singleton</a>, <a href='http://dothanhlam.wordpress.com/category/ti%e1%ba%bfng-vi%e1%bb%87t/'>tiếng Việt</a>, <a href='http://dothanhlam.wordpress.com/category/web-air/'>Web &amp; AIR</a> Tagged: <a href='http://dothanhlam.wordpress.com/tag/actionscript-30/'>actionscript 3.0</a>, <a href='http://dothanhlam.wordpress.com/tag/adobe/'>adobe</a>, <a href='http://dothanhlam.wordpress.com/tag/air/'>AIR</a>, <a href='http://dothanhlam.wordpress.com/tag/cairngorm/'>Cairngorm</a>, <a href='http://dothanhlam.wordpress.com/tag/design-pattern/'>Design Pattern</a>, <a href='http://dothanhlam.wordpress.com/tag/flex/'>Flex</a>, <a href='http://dothanhlam.wordpress.com/tag/flex-4/'>Flex 4</a>, <a href='http://dothanhlam.wordpress.com/tag/framework/'>Framework</a>, <a href='http://dothanhlam.wordpress.com/tag/h%c6%b0%e1%bb%9bng-d%e1%ba%abn/'>hướng dẫn</a>, <a href='http://dothanhlam.wordpress.com/tag/programming/'>programming</a>, <a href='http://dothanhlam.wordpress.com/tag/singleton/'>Singleton</a>, <a href='http://dothanhlam.wordpress.com/tag/tutorial/'>tutorial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dothanhlam.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dothanhlam.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dothanhlam.wordpress.com/335/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dothanhlam.wordpress.com&amp;blog=3567644&amp;post=335&amp;subd=dothanhlam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dothanhlam.wordpress.com/2010/06/23/flex-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-cai-d%e1%ba%b7t-framework-cairngorm-p4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>10.818982 106.677766</georss:point>
		<geo:lat>10.818982</geo:lat>
		<geo:long>106.677766</geo:long>
		<media:content url="http://0.gravatar.com/avatar/a8c9086afbd1cbcc334bbb0bec96bca2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dothanhlam</media:title>
		</media:content>
	</item>
	</channel>
</rss>
