<?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>Trungvv&#039;s Blog</title>
	<atom:link href="http://trungvv.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://trungvv.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Fri, 22 Oct 2010 02:12:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='trungvv.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Trungvv&#039;s Blog</title>
		<link>http://trungvv.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://trungvv.wordpress.com/osd.xml" title="Trungvv&#039;s Blog" />
	<atom:link rel='hub' href='http://trungvv.wordpress.com/?pushpress=hub'/>
		<item>
		<title>SharePoint 2010 Note</title>
		<link>http://trungvv.wordpress.com/2010/10/22/sharepoint-2010-note/</link>
		<comments>http://trungvv.wordpress.com/2010/10/22/sharepoint-2010-note/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 02:12:11 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=42</guid>
		<description><![CDATA[Link Documents: tinyurl.com/sp2010vn (Trinh Minh Cuong&#8217;s Docs). Key words: freeCSStemplates.org, Caching sharepoint (don&#8217;t load direct data from DB), tip-tricks in Visual Studio, ADO.Net Entity Frame Work 4 (EF4), chạy SPMetal trước khi dùng LinQ, Hive14<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=42&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Link Documents: tinyurl.com/sp2010vn (Trinh Minh Cuong&#8217;s Docs).<br />
Key words:<br />
freeCSStemplates.org, Caching sharepoint (don&#8217;t load direct data from DB), tip-tricks in Visual Studio, ADO.Net Entity Frame Work 4 (EF4), chạy SPMetal trước khi dùng LinQ, Hive14</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=42&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/10/22/sharepoint-2010-note/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
		<item>
		<title>Internet sẽ khiến con người mất khả năng tư duy sâu</title>
		<link>http://trungvv.wordpress.com/2010/09/20/internet-s%e1%ba%bd-khi%e1%ba%bfn-con-ng%c6%b0%e1%bb%9di-m%e1%ba%a5t-kh%e1%ba%a3-nang-t%c6%b0-duy-sau/</link>
		<comments>http://trungvv.wordpress.com/2010/09/20/internet-s%e1%ba%bd-khi%e1%ba%bfn-con-ng%c6%b0%e1%bb%9di-m%e1%ba%a5t-kh%e1%ba%a3-nang-t%c6%b0-duy-sau/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 01:16:36 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=37</guid>
		<description><![CDATA[Google Instant mới đây đã công bố một phát triển mới của họ cho công cụ tìm kiếm, nhờ đó có thể đoán ra những gì người dùng đang cần tìm kiếm, dù họ mới chỉ gõ một từ. Không hề nghi ngờ rằng đây là một cải tiến trong công nghệ. Nhưng bạn có [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=37&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>Google Instant mới đây đã công bố một phát triển mới của họ cho  công cụ tìm kiếm, nhờ đó có thể đoán ra những gì người dùng đang cần tìm  kiếm, dù họ mới chỉ gõ một từ. Không hề nghi ngờ rằng đây là một cải  tiến trong công nghệ. Nhưng bạn có thấy điều đó khiến tư duy con người  trở nên lười nhác hơn nữa?</div>
<div id="ar-content-html">
<table cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td><img src="http://www.pcworld.com.vn/files/articles/2010/1220979/internet-2.jpg" alt="" /></td>
</tr>
<tr>
<td>Internet đang &#8220;làm cạn&#8221; trí tuệ con người?</td>
</tr>
</tbody>
</table>
<p>&#8220;Giống  như rất nhiều người, tôi dành nhiều thời gian cho Internet và các công  nghệ kỹ thuật số khác trong vòng 10 -15 năm qua. Và tôi rất thích thú  với những tiện ích mà các công nghệ này mang lại”, Nicholas Carr – tác  giả của cuốn sách <em>&#8216;The Shallows: What the Internet is Doing to our Brains</em>” (Sự nông cạn: Đó là những gì Internet mang lại cho trí tuệ của chúng ta) – cho biết.</p>
<div>“Nhưng  tôi cũng nhận ra rằng, hình như tôi đang đánh mất dần khả năng tập  trung sâu vào một thứ gì đó trong một thời gian dài. Chẳng hạn như khi  ngồi xuống đọc một cuốn sách, tôi chỉ có thể căng ra và đọc một vài  trang. Đầu óc tôi bắt đầu nghĩ đến những thứ khác và tôi đánh mất sự tập  trung. Đó là lý do tại sao mà tôi chỉ muốn nhấp chuột liên tục, chuyển  từ sang web này sang trang khác, kiểm tra email và làm vô số những thứ  linh tinh khác. Thói quen trên Internet khiến cho đầu óc bị ảnh hưởng và  muốn thực hiện những việc khác theo thói quen đó”, Carr viết.</div>
<div>Trong  khi đó, Baroness Greenfield, một nhà nghiên cứu tại trường ĐH Oxford  University, cựu trưởng Viện nghiên cứu hoàng gia nước Anh, cũng đã tiến  hành thử nghiệm về những tác động lên trí não bởi các trò chơi trên máy  tính, Internet và các mạng xã hội. Greenfield gọi những tác động của  việc dành quá nhiều thời gian trước màn hình máy tính là “thay đổi về  trí tuệ”: &#8220;Internet khiến cho các kỹ năng về thần kinh làm việc nhanh  hơn với nhiều nguồn thông tin. Tuy nhiên, nó hạn chế khả năng tập trung  suy nghĩ sâu, dần dần làm mất khả năng xây dựng tư duy kiến thức, khái  niệm và ngẫm nghĩ. Vì thế mà, với các công nghệ trí tuệ thời kỳ đầu có  thể làm tăng chức năng nhận thức, nhưng lâu dần nó lại bào mòn khả năng  tư duy của con người, do bộ não của chúng ta đã quá quen với những thay  đổi trong tế bào não”.</div>
<div>Không ít người cho rằng đây  là một cảnh báo thái quá, cũng như trước kia người ta đã từng có lúc đề  cập đến tác hại của việc xem tivi quá nhiều giờ trong ngày. Tuy nhiên,  Carr cho rằng, tác hại của Internet sẽ không chỉ dừng lại ở đó. Cùng với  các phương tiện đa chức năng như smartphones, netbooks, và các dịch vụ  của mạng xã hội đang ứng dụng rộng rãi trong đời sống của từng cá nhân,  người ta đang trở nên phụ thuộc nhiều hơn nữa vào Internet. &#8220;Đối với trẻ  con, việc phát triển tư duy cực kỳ quan trọng. Nếu tiếp xúc với  Internet từ quá sớm, nhiều khả năng rằng trí tuệ của chúng sẽ dừng phát  triển ở mức rất thấp. Vì thế, cha mẹ nên khuyến khích trẻ ra ngoài và  tiếp xúc với các ấn phẩm in, thay vì ngồi lì trước màn hình máy tính”,  Greenfield khuyến cáo. “Điều này cũng như những biến đổi khí hậu vậy. Nó  không đe dọa đến sự tồn tại của hành tinh này ngay lập tức. Nhưng nó  ảnh hưởng đến chất lượng và tương lai sau này của con người”, Greenfield  nói.</div>
</div>
<div>Từ khóa: <a href="http://www.pcworld.com.vn/tim-kiem/?kw=Internet&amp;section=*">Internet</a></div>
<div><strong>Nguồn: </strong>CNN.Tech</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=37&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/09/20/internet-s%e1%ba%bd-khi%e1%ba%bfn-con-ng%c6%b0%e1%bb%9di-m%e1%ba%a5t-kh%e1%ba%a3-nang-t%c6%b0-duy-sau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>

		<media:content url="http://www.pcworld.com.vn/files/articles/2010/1220979/internet-2.jpg" medium="image" />
	</item>
		<item>
		<title>7 tips on writing clean code</title>
		<link>http://trungvv.wordpress.com/2010/09/07/7-tips-on-writing-clean-code/</link>
		<comments>http://trungvv.wordpress.com/2010/09/07/7-tips-on-writing-clean-code/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 08:44:41 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=34</guid>
		<description><![CDATA[7 tips on writing clean code Previous Next Posted in Technology on 2007-05-03 13:34 My job has required me to read quite a bit of code written by other people, and over the years I&#8217;ve found that there are some problems that tend to recur again and again. The idea with this blog entry is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=34&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<table width="100%">
<tbody>
<tr>
<td>
<h1>7 tips on writing clean code</h1>
</td>
<td><a href="http://www.garshol.priv.no/blog/103.html">Previous</a><br />
<a href="http://www.garshol.priv.no/blog/104.html">Next</a></td>
</tr>
</tbody>
</table>
<p>Posted in <a href="http://www.garshol.priv.no/blog/technology/">Technology</a> on 2007-05-03 13:34</p>
<div>
<p>My job has required me to read quite a bit of code written by other people, and over the years I&#8217;ve found that there are some problems that tend to recur again and again. The idea with this blog entry is to write up some tips on this once and for all, in the hope that it can help people out there who struggle to write clean code.</p>
<p>The main goal with these tips is readability. This is important because usually your code has to be changed or reviewed by other people, and writing readably makes these people&#8217;s jobs a lot easier. That may be obvious. What&#8217;s less obvious is that it also makes your own job easier, because working on simple code is a lot easier than working on complex code, even while you are writing it, and the more readable code is always simpler.</p>
<p>An important part of making your code readable is to always work to communicate your intent. The basic idea is that it&#8217;s usually not difficult to see what a single line of code does. The tricky thing is to see <em>why</em> it&#8217;s doing what it does. So the more you can make your code communicate the thinking behind the code, the better it is. You&#8217;ll see this point recurring repeatedly below.</p>
<p>I should add that most people seem to be aware of most of these rules, in a general kind of way. The main point of this posting is really to convince people that these rules are <em>important</em>. So important, in fact, that you should try to always follow them, and that you should have a really bad conscience about any code that breaks them. So bad that you just never write any such code. Some of these rules require you to write a little extra code, but I think I can claim that none of them cause you to actually lose time, on any project.</p>
<h2>1. Always know why you are catching an exception</h2>
<p>This has to be the most common mistake I see people make, and it seems to me that exceptions is a feature many people haven&#8217;t really learned how to use yet. One of the reasons for this is probably that before the advent of Java the languages people used at university did not have exceptions, and so no rules were taught about this. It&#8217;s not a trivial feature to use, so it&#8217;s hardly surprising that people struggle.</p>
<p>Anyway, the cardinal rule is: if you catch an exception you need to have a good reason. Reporting an expected error condition to the user in a more friendly way is a good reason. Handling an expected, but unusual, condition is another. But very often people just swallow the exceptions with an empty <tt>catch</tt> block (this is a real nono), or they do like this:</p>
<pre>  private static List readLines(String fileName) {
    String line;
    ArrayList file = new ArrayList();
    try {
      BufferedReader in = new BufferedReader(new FileReader(fileName));
      while ((line = in.readLine()) != null)
        file.add(line);
      in.close();
    } catch (Exception e){
      System.out.println(e);
      return null;
    }
    return file;
  }
</pre>
<p>The <tt>catch</tt> block here does nothing useful. In fact, it hides useful information if the program were to crash. If you don&#8217;t catch the exception, you get a traceback. If you do catch it you get much less. Plus, it takes up 5 lines, and it makes the method almost twice as big as it needs to be. Doing without is just a lot better.</p>
<p>That would give us this:</p>
<pre>  private static ArrayList readLines(String fileName) throws IOException {
    String line;
    ArrayList file = new ArrayList();

    BufferedReader in = new BufferedReader(new FileReader(fileName));
    while ((line = in.readLine()) != null)
      file.add(line);
    in.close();

    return file;
  }
</pre>
<h2>2. Never declare implementation types</h2>
<p>This is another thing I see very often: parameters, variables, or even return types that are really implementation types. You can see this in the code above, where <tt>ArrayList</tt> is used where <tt>List</tt> would do. There are several problems with this: <tt>ArrayList</tt> is longer, and you have to do a lot of work if you want to change what list implementation you are using.</p>
<p>The main thing, however, is that just using <tt>List</tt> communicates your intent that this be a list much more clearly. It says &#8220;I thought about this, and I really intend this collection to be a List, and not just any sort of collection&#8221;. In other words: it tells the reader that you care about the order in this collection.</p>
<p>Another round of simplification brings us this:</p>
<pre>  private static List readLines(String fileName) throws IOException {
    String line;
    List file = new ArrayList();

    BufferedReader in = new BufferedReader(new FileReader(fileName));
    while ((line = in.readLine()) != null)
      file.add(line);
    in.close();

    return file;
  }
</pre>
<h2>3. Use descriptive variable names</h2>
<p>This is a rule that can be hard to follow, but in general variables should be named so that they make it clear what a variable contains. Sometimes this is blindingly obvious, and in these cases short names like <tt>i</tt> for loop indexes, <tt>in</tt> for files is perfectly OK. But if you use a longer name, try to make it meaningful.</p>
<p>In the case of the method above, what does <tt>file</tt> really contain? Yes, it does contain the file, but what it really is is a list of all the lines in the file. So why not call it <tt>lines</tt>? That would give us:</p>
<pre>  private static List readLines(String fileName) throws IOException {
    String line;
    List lines = new ArrayList();

    BufferedReader in = new BufferedReader(new FileReader(fileName));
    while ((line = in.readLine()) != null)
      lines.add(line);
    in.close();

    return lines;
  }
</pre>
<p>Still not perfect, but arguably a lot more readable than the original.</p>
<h2>4. Cut-and-paste code</h2>
<p>One simple approach that&#8217;s suggested quite often as a way to improve people&#8217;s code is to disable the paste function on every developer machine. While the idea may be a little over the top, the basic thought is sound. If you have a snippet of, say, 7 lines of code that do one thing, and you want to do it again to a different set of variables, don&#8217;t copy and paste the code. Instead, make a function (or a method, if you&#8217;re stuck with Java).</p>
<p>There are several reasons for this. One is simple brevity. Another is that it makes your code much easier to read, since you would effectively be replacing 14 lines of code with just 2. This would obviously be at the expense of an additional function/method, but since these stand alone and isolated from the rest of the code, their impact on readability is very low. The main reason, however, is that by doing this you make life much easier for yourself. Even if this is a one-time script, you are still going to change the code around. This is easier if it&#8217;s broken up into parts, like functions/methods.</p>
<h2>5. Variables and communication</h2>
<p>One of the hardest things to pick up when reading code is to understand the flow of values through the variables in the code. (This is one reason why functional programming is popular.) This has several implications for how the code should be written.</p>
<p>For one thing, this means that you should try to declare variables as close to where they are used as possible. Let&#8217;s say you write the following:</p>
<pre>String tmp = null;
// 50 lines that don't touch tmp
tmp = whatever;
// ...
</pre>
<p>This means the reader has to scan 50 lines to see if <tt>tmp</tt> is used anywhere in there. Merging the assignment and the declaration would remove this problem completely, and would lose you nothing.</p>
<p>Another thing this means is that if a variable is only used inside a block (if statement, while loop, or whatever), then it really should be declared in there. Imagine you write this:</p>
<pre>int tmp;
for (...) {
  // code that uses tmp
}
// no more mentions of tmp below this point
</pre>
<p>In this case, you could have declared <tt>tmp</tt> inside the <tt>for</tt> loop. Not doing it sends the signal that &#8220;I&#8217;m going to keep using this variable&#8221; and forces the reader to try to figure out what happens with it later. Moving the declaration inside the loop means that you <em>can&#8217;t</em> use the variable after the loop, which makes the code much easier to read.</p>
<p>A third consequence is that you should really work hard to keep your functions/methods short. If you have a function/method that&#8217;s, say, 400 lines long it becomes almost impossible to track the data flow through it. There will just be too many variables and too many assignments to keep track of. So this is a real no-no. Just don&#8217;t do it. And as usual with these rules, this is a rule that will also help you get the code right the first time, so this is worth doing even if you will just write the code and then discard it.</p>
<p>In fact, if you really do keep your methods short, a lot of the other rules here become less important, because the impact of breaking them will be lessened. The reason is of course that it&#8217;s very hard for a short method to be really difficult to read. There&#8217;s so little code in a short method that you can almost always digest it quite easily. So you could think of this as being the most important rule.</p>
<h2>6. Don&#8217;t preserve return values you don&#8217;t use</h2>
<p>This is also related to making it easier to track data flow. Let&#8217;s say you write something like this:</p>
<pre>boolean present = myCollection.remove(object);
</pre>
<p>You <em>could</em> have written it like this, however:</p>
<pre>myCollection.remove(object);
</pre>
<p>You can safely assume that any reader of your code will know this, and therefore using the first form is a signal that &#8220;I care about this return value, and I&#8217;m going to use it for something&#8221;. If you don&#8217;t, you&#8217;ll be confusing the reader, because they are assuming that they now need to figure out what you&#8217;re going to do with this variable.</p>
<p>Of course, leaving it out saves space, too, so there&#8217;s really no reason not to drop these variables.</p>
<h2>7. Omit needless code!</h2>
<p>It&#8217;s quite common to find code that&#8217;s commented out, but still hanging around. This is mainly bad because it bloats the code unnecessarily. People seem to do this because they want to have the possibility to bring the code back, either because they are writing an alternative they are not sure about, or (and this seems quite common) because they don&#8217;t dare to delete it. However, in nearly all cases there is no real reason to keep such code around. You should be using version control, and that means you could always find any deleted code again.</p>
<p>Also, since this code is no longer compiled or executed there is no real difference between commenting it out or deleting it. You&#8217;ve still made the change. The difference is that now it&#8217;s quite likely that this code will slowly move out of sync with the code around it, so that by the time you find you want it again it will no longer work. That actually makes the code dangerous, because it tempts you to include code without understanding what it does. (If you really understood it you could retype it quite quickly even if it was deleted.)</p>
<p>Of course, commenting out code while you are working on the code is fine. I do that a lot. However, I never check in code that is commented out, and whenever I find such code I delete it, without asking anyone or telling them. If they wanted the code they shouldn&#8217;t have commented it out. And it will be in the version history, anyway.</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=34&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/09/07/7-tips-on-writing-clean-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
		<item>
		<title>Insert Column at Position 0</title>
		<link>http://trungvv.wordpress.com/2010/08/04/insert-column-at-position-0/</link>
		<comments>http://trungvv.wordpress.com/2010/08/04/insert-column-at-position-0/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 08:21:51 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=32</guid>
		<description><![CDATA[    DataTable datatable = new DataTable(); DataColumn Col   = datatable.Columns.Add("Column Name", System.Type.GetType("System.Boolean"));     Col.SetOrdinal(0);// to put the column in position 0;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=32&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre><code>    DataTable datatable = new DataTable();
    DataColumn Col   = datatable.Columns.Add("Column Name", System.Type.GetType("System.Boolean"));
    Col.SetOrdinal(0);// to put the column in position 0;
</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=32&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/08/04/insert-column-at-position-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
		<item>
		<title>Guidance Automation Toolkit</title>
		<link>http://trungvv.wordpress.com/2010/07/22/guidance-automation-toolkit/</link>
		<comments>http://trungvv.wordpress.com/2010/07/22/guidance-automation-toolkit/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 08:11:03 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=28</guid>
		<description><![CDATA[Hi all, Hum nay bận quá. h mới online để viet về Guidance Automation Toolkit Đầu tiên là làm sao để máy mình có được cái này: các bạn phải tìm và down những pakage sau - Enterprise Library May 2007.msi - GuidanceAutomationExtensions.msi - GuidanceAutomationToolkit.msi - Smart Client Software Factory &#8211; May 2007.msi - Web [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=28&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hi all,<br />
Hum nay bận quá. h mới online để viet về Guidance Automation  Toolkit</p>
<p>Đầu tiên là làm sao để máy mình có được cái này: các bạn  phải tìm và down những pakage sau<br />
- Enterprise Library May 2007.msi<br />
-  GuidanceAutomationExtensions.msi<br />
- GuidanceAutomationToolkit.msi<br />
-  Smart Client Software Factory &#8211; May 2007.msi<br />
- Web Client Software  Factory &#8211; June 2007.msi<br />
- Web Service Software Factory &#8211; December  2006 (refresh).msi<br />
- NM31_Release_x86.msi</p>
<p>Sau đó là cài đặt.</p>
<p>Sau  khi cài xong. Chạy VS 2005, Vào New -&gt; Project -&gt; sẽ thấy  Guidance Automation Solution nằm ở 1 mục riêng với nhiều project  template.Chú ý thì các bạn sẽ thấy cái Application Block template  project.</p>
<p>Ok, vay là cũng khá là đủ. dễ quá phải không.phần còn  lại các bạn xem thêm example hoặc document đi kèm khi cài đặt sẽ hiểu rõ  hơn.</p>
<p>Vấn đề mình đề cập sau đây là 1 project mình dùng Guidance  Automation Toolkit.</p>
<p>Chắc các bạn cũng biết mô hình ba lớp đúng  không? OK. Vấn đề là generate code cho Business Entities Layer và Data  Layer.<br />
Các bước như sau:<br />
- tạo 1 solution bao gồm 3 project, đặt  tên sao cho dễ hiểu. ví dụ BL (business Layer), DL (Data Layer), UI  (User Interface). Mình sẽ quan tâm đến 2 project BL và DL.<br />
- vào menu  Tools -&gt; Guidance Pakage manager -&gt; hộp thoại hiện ra &#8211; &gt; chọn  Enable/Disabled Package.. -&gt; hộp thoại hiện ra, các bạn sẽ thấy các  package mà Guidance hỗ trợ.<br />
- Với yêu cầu trên, cái bạn chỉ cần chọn 3  gói : Application Block Software Factory, Guidance Package Development,  Web Service Software Factory ( Data Access)<br />
- Khi check chọn xong,  các bạn OK, sau đó close.<br />
- Bây h là điểm thú vị. (hihi). Các bạn thử  click chuột phải lên 1 project, ví dụ : BL xem có gì lạ.hihi<br />
- Nó  xuất hiện 1 menu mới tên là Service Factory (Data Access), rê chuột vào  các bạn sẽ thấy các function đi kèm.<br />
- Đầu tiên, chúng ta chú ý đến  function trên menu có tên là : Specify project responsibility ( mình tạm  dịch là chỉ định trách nhiệm cho project)<br />
- khi chọn nó thì sẽ xuất  hiện hộp thoại với 3 checkbox : Business Entities Project, Data Access  Project, Host Project<br />
- Đến đây là hơn nửa đường rùi đóa.:D. vì mình  đặt cái tên project là BL nên sẽ cho nó trách nhiệm là Business Entities  Project. Các bạn là tương tự cho DL và UI nha.<br />
- Khi gán trách nhiệm  xong, thì các bạn thử click chuột phải lên BL thử xem. trong menu  Service Factory lại xuất hiện các function mới tương ứng với trách nhiệm  mà project đảm nhiệm.<br />
- Vì BL đảm nhiệm Business Entities nên sẽ có  function create Business Entites from database<br />
-OK,vay là sắp xong  rồi đó. Chú ý, sau khi gán trách nhiệm, bước đầu tiên hết các bạn phải  click chuột phải lên UI chọn add database connection để tạo 1  connection.Có thì BL mới create Business Entities from database được  chứ, phải không hén. Connection được lưu trong app.setting.</p>
<p>Hướng  dẫn đến đây thì với 1 lập trình viên, các bạn có thể tiếp tục develop  dc rùi hén. Các bạn cứ làm rùi sẽ thấy nó hay đến đâu.</p>
<p>Thanks.</p>
<p><strong>mrnqbao@gmail.com</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=28&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/07/22/guidance-automation-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
		<item>
		<title>Data Format String</title>
		<link>http://trungvv.wordpress.com/2010/07/21/data-format-string/</link>
		<comments>http://trungvv.wordpress.com/2010/07/21/data-format-string/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 04:05:48 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=25</guid>
		<description><![CDATA[BoundField.DataFormatString Property Gets or sets the string that specifies the display format for the value of the field. Namespace: System.Web.UI.WebControls Assembly: System.Web (in System.Web.dll) Syntax VB C# C++ F# JScript Copy public virtual string DataFormatString { get; set; } Property Value Type: System.String A formatting string that specifies the display format for the value of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=25&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>BoundField.DataFormatString  Property</div>
<div>
<div>
<p>Gets or sets the string that specifies the display  format for the value of the field.</p>
</div>
</div>
<p><strong>Namespace:</strong> <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.aspx">System.Web.UI.WebControls</a><br />
<strong>Assembly:</strong> System.Web (in System.Web.dll)</p>
<div>
<div>Syntax</p>
<div>
<hr /></div>
</div>
<div><a name="CodeSpippet0"></a></p>
<div>
<div><a href="%20CodeSnippet_SetLanguage('Visual%20Basic');">VB</a></div>
<div><a>C#</a></div>
<div><a href="%20CodeSnippet_SetLanguage('Visual%20C++');">C++</a></div>
<div><a href="%20CodeSnippet_SetLanguage('F#');">F#</a></div>
<div><a href="%20CodeSnippet_SetLanguage('JScript');">JScript</a></div>
</div>
<div>
<div>
<div><a title="Copy to clipboard." href="CodeSnippet_CopyCode('CodeSnippetContainerCode0');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode0">
<div>
<pre>public virtual string DataFormatString { get; set; }
</pre>
</div>
</div>
</div>
</div>
<div id="returns">
<h4>Property  Value</h4>
<p>Type: <a href="http://msdn.microsoft.com/en-us/library/system.string.aspx">System.String</a><br />
A formatting string that  specifies the display format for the value of the field. The default is  an empty string (&#8220;&#8221;), which indicates that no special formatting is  applied to the field value.</div>
</div>
<div>
<div>Remarks</p>
<div>
<hr /></div>
</div>
<p>Use the DataFormatString property to specify a  custom display format for the values that are displayed in the <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.aspx">BoundField</a> object. If the DataFormatString  property is not set, the field&#8217;s value is displayed without any special  formatting.</p>
<div>
<table>
<tbody>
<tr>
<th><img title="Note" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" alt="Note" /><strong>Note</strong></th>
</tr>
<tr>
<td>In  versions of ASP.NET earlier than 3.5, you must set the <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.htmlencode.aspx">HtmlEncode</a> property to false in order to  format fields that are not string data types. Otherwise, the field value  is converted to a string by the default conversion method before the  format string that is stored in the DataFormatString  property is applied.</td>
</tr>
</tbody>
</table>
</div>
<p>By default, the formatting string  is applied to the field value only when the data-bound control that  contains the <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.aspx">BoundField</a> object is in read-only mode. To apply the formatting string to field  values while in edit mode, set the <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.applyformatineditmode.aspx">ApplyFormatInEditMode</a> property to true.</p>
<p>The formatting string can be any  literal string and usually includes a placeholder for the field&#8217;s value.  For example, in the formatting string Item  Value: {0}, the field&#8217;s value is substituted for the {0}  placeholder when the string is displayed in the <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.aspx">BoundField</a> object. The rest of the formatting string is displayed as literal text.</p>
<p>If the formatting string  does not include a placeholder, only the formatting string itself is  included in the final display text (the field&#8217;s value from the data  source is not included). If the placeholder is a 0 (zero) enclosed in  curly braces as shown in the preceding example, the field value is  converted to a string by the default method. You can append to the zero a  string that specifies how the field value should be formatted. For  example, the placeholder {0:C} for a numeric  field specifies that value of the field should be converted to a  currency format.</p>
<p>Formatting  is applied by using the <a href="http://msdn.microsoft.com/en-us/library/system.string.format.aspx">Format</a> method. The number that follows the left curly brace is part of the  syntax used by that method and indicates which one of a series of values  the placeholder should use. Because there is only one field value in  each cell, the number that follows the left curly brace can only be set  to 0.</p>
<p>The following table  lists the standard format characters for numeric fields. These format  characters are not case-sensitive, except for X,  which displays hexadecimal characters in the case that is specified.  You can append a number to most format characters in order to specify  how many significant digits or decimal places you want to display.</p>
<div>
<table>
<tbody>
<tr>
<th><img title="Note" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" alt="Note" /><strong>Note</strong></th>
</tr>
<tr>
<td>In  most cases, formatting depends on the server&#8217;s culture setting. The  examples are for a culture setting of en-US.</td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<th>Format  character</th>
<th>Description</th>
<th>Example</th>
</tr>
<tr>
<td>C or c</td>
<td>Displays  numeric values in currency format. You can specify the number of  decimal places.</td>
<td>Format: {0:C}</p>
<p>123.456  -&gt; $123.46</p>
<p>Format: {0:C3}</p>
<p>123.456   -&gt; $123.456</td>
</tr>
<tr>
<td>D  or d</td>
<td>Displays  integer values in decimal format. You can specify the number of digits.  (Although the type is referred to as &#8220;decimal&#8221;, the numbers are  formatted as integers.)</td>
<td>Format: {0:D}</p>
<p>1234  -&gt; 1234</p>
<p>Format: {0:D6}</p>
<p>1234   -&gt; 001234</td>
</tr>
<tr>
<td>E  or e</td>
<td>Displays  numeric values in scientific (exponential) format. You can specify the  number of decimal places.</td>
<td>Format: {0:E}</p>
<p>1052.0329112756  -&gt; 1.052033E+003</p>
<p>Format: {0:E2}</p>
<p>-1052.0329112756  -&gt; -1.05e+003</td>
</tr>
<tr>
<td>F  or f</td>
<td>Displays  numeric values in fixed format. You can specify the number of decimal  places.</td>
<td>Format: {0:F}</p>
<p>1234.567  -&gt; 1234.57</p>
<p>Format: {0:F3}</p>
<p>1234.567  -&gt; 1234.567</td>
</tr>
<tr>
<td>G  or g</td>
<td>Displays  numeric values in general format (the most compact of either fixed-point  or scientific notation). You can specify the number of significant  digits.</td>
<td>Format: {0:G}</p>
<p>-123.456  -&gt; -123.456</p>
<p>Format: {0:G2}</p>
<p>-123.456  -&gt; -120</td>
</tr>
<tr>
<td>N  or n</td>
<td>Displays  numeric values in number format (including group separators and optional  negative sign). You can specify the number of decimal places.</td>
<td>Format:  {0:N}</p>
<p>1234.567 -&gt; 1,234.57</p>
<p>Format:  {0:N4}</p>
<p>1234.567 -&gt; 1,234.5670</td>
</tr>
<tr>
<td>P or p</td>
<td>Displays  numeric values in percent format. You can specify the number of decimal  places.</td>
<td>Format: {0:P}</p>
<p>1  -&gt; 100.00%</p>
<p>Format: {0:P1}</p>
<p>.5  -&gt; 50.0%</td>
</tr>
<tr>
<td>R  or r</td>
<td>Displays <a href="http://msdn.microsoft.com/en-us/library/system.single.aspx">Single</a>,  <a href="http://msdn.microsoft.com/en-us/library/system.double.aspx">Double</a>,  or BigInteger values in round-trip format.</td>
<td>Format: {0:R}</p>
<p>123456789.12345678 -&gt;  123456789.12345678</td>
</tr>
<tr>
<td>X  or x</td>
<td>Displays  integer values in hexadecimal format. You can specify the number of  digits.</td>
<td>Format: {0:X}</p>
<p>255  -&gt; FF</p>
<p>Format: {0:x4}</p>
<p>255   -&gt; 00ff</td>
</tr>
</tbody>
</table>
</div>
<p>For more information and for  examples that show formatting for other culture values, see <a href="http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx">Standard  Numeric Format Strings</a>. You can also create custom numeric  format strings. For more information, see <a href="http://msdn.microsoft.com/en-us/library/0c899ak8.aspx">Custom  Numeric Format Strings</a>.</p>
<p>The following table lists format  characters for <a href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx">DateTime</a> fields. Most of these formatting specifications result in a different  output depending on culture settings. The examples are for a <a href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx">DateTime</a> value of 6/15/2009 1:45:30 PM with a culture setting of en-US.</p>
<div>
<table>
<tbody>
<tr>
<th>Format  character</th>
<th>Description</th>
<th>Example</th>
</tr>
<tr>
<td>d</td>
<td>Short date pattern.</td>
<td>Format:  {0:d}</p>
<p>6/15/2009 1:45:30 PM -&gt;  6/15/2009</td>
</tr>
<tr>
<td>D</td>
<td>Long  date pattern.</td>
<td>Format: {0:D}</p>
<p>6/15/2009  1:45:30 PM -&gt;Monday, June 15, 2009</td>
</tr>
<tr>
<td>f</td>
<td>Full date/time pattern  (short time).</td>
<td>Format: {0:f}</p>
<p>6/15/2009  1:45:30 PM -&gt; Monday, June 15, 2009 1:45 PM</td>
</tr>
<tr>
<td>F</td>
<td>Full date/time pattern  (long time).</td>
<td>Format: {0:F}</p>
<p>6/15/2009  1:45:30 PM -&gt; Monday, June 15, 2009 1:45:30 PM</td>
</tr>
<tr>
<td>g</td>
<td>General date/time pattern  (short time).</td>
<td>Format: {0:g}</p>
<p>6/15/2009  1:45:30 PM -&gt; 6/15/2009 1:45 PM</td>
</tr>
<tr>
<td>G</td>
<td>General date/time pattern  (long time).</td>
<td>Format: {0:G}</p>
<p>6/15/2009  1:45:30 PM -&gt; 6/15/2009 1:45:30 PM</td>
</tr>
<tr>
<td>M or m</td>
<td>Month/day  pattern.</td>
<td>Format: {0:M}</p>
<p>6/15/2009  1:45:30 PM -&gt; June 15</td>
</tr>
<tr>
<td>O or o</td>
<td>Round-trip  date/time pattern.</td>
<td>Format: {0:o}</p>
<p>6/15/2009  1:45:30 PM -&gt; 2009-06-15T13:45:30.0900000</td>
</tr>
<tr>
<td>R or r</td>
<td>RFC1123  pattern (for information, see <a href="http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.rfc1123pattern.aspx">DateTimeFormatInfo.RFC1123Pattern</a>).</td>
<td>Format: {0:R}</p>
<p>6/15/2009 1:45:30 PM -&gt; Mon, 15 Jun  2009 20:45:30 GMT</td>
</tr>
<tr>
<td>s</td>
<td>Sortable  date/time pattern.</td>
<td>Format: {0:s}</p>
<p>6/15/2009  1:45:30 PM -&gt; 2009-06-15T13:45:30</td>
</tr>
<tr>
<td>t</td>
<td>Short time pattern.</td>
<td>Format:  {0:t}</p>
<p>6/15/2009 1:45:30 PM -&gt; 1:45  PM</td>
</tr>
<tr>
<td>T</td>
<td>Long  time pattern.</td>
<td>Format: {0:T}</p>
<p>6/15/2009  1:45:30 PM -&gt; 1:45:30 PM</td>
</tr>
<tr>
<td>u</td>
<td>Universal sortable  date/time pattern.</td>
<td>Format: {0:u}</p>
<p>6/15/2009  1:45:30 PM -&gt; 2009-06-15 20:45:30Z</td>
</tr>
<tr>
<td>U</td>
<td>Universal full date/time  pattern.</td>
<td>Format: {0:U}</p>
<p>6/15/2009  1:45:30 PM -&gt; Monday, June 15, 2009 8:45:30 PM</td>
</tr>
<tr>
<td>Y or y</td>
<td>Year  month pattern.</td>
<td>Format: {0:Y}</p>
<p>6/15/2009  1:45:30 PM -&gt; June, 2009</td>
</tr>
</tbody>
</table>
</div>
<p>For more information and for  examples that show formatting for other culture values, see <a href="http://msdn.microsoft.com/en-us/library/az4se3k1.aspx">Standard  Date and Time Format Strings</a>. You can also create custom date  and time format strings. For more information, see <a href="http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx">Custom Date  and Time Format Strings</a>.</p>
</div>
<div>
<div>Examples</p>
<div>
<hr /></div>
</div>
<p>A Visual Studio Web site project  with source code is available to accompany this topic: <a href="http://go.microsoft.com/fwlink/?LinkId=191889">Download</a>.</p>
<p>The following example shows how to  use the DataFormatString  property to specify a custom display format for the values of a field.</p>
<div id="snippetGroup">
<div><a name="CodeSpippet1"></a></p>
<div>
<div>
<div><a title="Copy to clipboard." href="CodeSnippet_CopyCode('CodeSnippetContainerCode1');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode1">
<div>
<pre>&lt;%@ Page Language="C#" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head runat="server"&gt;
    &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form id="form1" runat="server"&gt;
    &lt;div&gt;
        &lt;asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="&lt;%$ ConnectionStrings:AWLTConnectionString %&gt;"
            SelectCommand="SELECT ProductID, Name, ProductNumber,
                ListPrice, Weight, ModifiedDate FROM SalesLT.Product"&gt;
        &lt;/asp:SqlDataSource&gt;
        &lt;asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False"
            DataKeyNames="ProductID" DataSourceID="SqlDataSource1"&gt;
            &lt;Columns&gt;
                &lt;asp:BoundField DataField="ProductID"
                    HeaderText="ProductID"
                    InsertVisible="False" ReadOnly="True"
                    SortExpression="ProductID"
                    DataFormatString="{0:D6}" /&gt;
                &lt;asp:BoundField DataField="Name"
                    HeaderText="Name"
                    SortExpression="Name"
                    DataFormatString="{0}" /&gt;
                &lt;asp:BoundField DataField="ProductNumber"
                    HeaderText="ProductNumber"
                    SortExpression="ProductNumber"
                    DataFormatString= "#{0}" /&gt;
                &lt;asp:BoundField DataField="ListPrice"
                    HeaderText="ListPrice"
                    SortExpression="ListPrice"
                    DataFormatString="{0:C}" /&gt;
                &lt;asp:BoundField DataField="Weight"
                    HeaderText="Weight"
                    SortExpression="Weight"
                    DataFormatString="{0:F3}" /&gt;
                &lt;asp:BoundField DataField="ModifiedDate"
                    HeaderText="ModifiedDate"
                    SortExpression="ModifiedDate"
                    DataFormatString="{0:d}" /&gt;
            &lt;/Columns&gt;
        &lt;/asp:GridView&gt;
    &lt;/div&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
</div>
</div>
</div>
</div>
</div>
<p>The following example shows one row  of the output that is produced by this example.</p>
<div>
<table>
<tbody>
<tr>
<th>ProductID</th>
<th>Name</th>
<th>ProductNumber</th>
<th>ListPrice</th>
<th>Weight</th>
<th>ModifiedDate</th>
</tr>
<tr>
<td>000680</td>
<td>HL Road  Frame &#8211; Black, 58</td>
<td>#FR-R92B-58</td>
<td>$1,431.50</td>
<td>1016.040</td>
<td>3/11/2004</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>Platforms</p>
<div>
<hr /></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=25&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/07/21/data-format-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>

		<media:content url="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" medium="image">
			<media:title type="html">Note</media:title>
		</media:content>

		<media:content url="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" medium="image">
			<media:title type="html">Note</media:title>
		</media:content>
	</item>
		<item>
		<title>Editable DropDownlist</title>
		<link>http://trungvv.wordpress.com/2010/07/21/editable-dropdownlist/</link>
		<comments>http://trungvv.wordpress.com/2010/07/21/editable-dropdownlist/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 03:59:50 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=20</guid>
		<description><![CDATA[Editable DropDownlist By muralikannan_t &#124; 11 Nov 2008 &#124; Unedited contribution How to create and use editable dropdownlist in asp.net Download Editabledropdownlist &#8211; 1.85 KB Introduction In ASP.Net Dropdownlist control cannot be editable by default. We can easily overcome this problem. This article is used to overcome this issue. Using the code Create one blank [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=20&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1 id="ctl00_TitleArea_ArticleTitle">Editable DropDownlist</h1>
<div>By <strong><a href="http://www.codeproject.com/script/Membership/View.aspx?mid=3251114">muralikannan_t</a></strong> | 11 Nov 2008   | <a id="ctl00_TitleArea_ArticleInfoLink" href="http://www.codeproject.com/script/Articles/Unedited.aspx">Unedited  contribution</a></div>
<div>How to  create and use editable dropdownlist in asp.net</div>
<div></div>
<p><!-- Main Page Contents Start --></p>
<div id="contentdiv"><!-- Article Starts --></p>
<ul>
<li><a href="http://www.codeproject.com/KB/aspnet/EditableDropdown_aspx/Editabledropdownlist.zip">Download  Editabledropdownlist &#8211; 1.85 KB</a></li>
</ul>
<h2>Introduction</h2>
<p>In ASP.Net Dropdownlist control cannot be editable by default. We can  easily overcome this problem. This article is used to overcome this  issue.</p>
<h2>Using the code</h2>
<p>Create one blank asp.net web page(Default.aspx) and include one  textbox and dropdownlist control. see the following code.</p>
<div id="premain0"><img src="http://www.codeproject.com/images/minus.gif" alt="" width="9" height="9" /> Collapse</div>
<pre>&lt;asp:TextBox ID="txtDisplay" runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;asp:DropDownList ID="ddSelect" runat="server"&gt;

    &lt;asp:ListItem Value="test1" &gt;test1&lt;/asp:ListItem&gt;

    &lt;asp:ListItem Value="test2"&gt;test2&lt;/asp:ListItem&gt;

&lt;/asp:DropDownList&gt;
</pre>
<p>After inserted this controls into web page we need to set the  following style into textbox control.</p>
<div id="premain1"><img src="http://www.codeproject.com/images/minus.gif" alt="" width="9" height="9" /> Collapse</div>
<pre>style="position:absolute"</pre>
<p>The position property places an element in a static, relative,  absolute or fixed position. There are four types of position like  static, relative, absolute and fixed.</p>
<table border="1" cellspacing="0" cellpadding="3" width="100%">
<tbody>
<tr>
<th align="left" valign="top">Value</th>
<th align="left" valign="top">Description</th>
</tr>
<tr>
<td valign="top">static</td>
<td valign="top">Default. An element with position: static always has  the position the normal flow of the page gives it (a static element  ignores any top, bottom, left, or right declarations)</td>
</tr>
<tr>
<td valign="top">relative</td>
<td valign="top">An element with position: relative moves an element  relative to its normal position, so &#8220;left:20&#8243; adds 20 pixels to the  element&#8217;s LEFT position</td>
</tr>
<tr>
<td valign="top">absolute</td>
<td valign="top">An element with position: absolute is positioned at the  specified coordinates relative to its containing block. The element&#8217;s  position is specified with the &#8220;left&#8221;, &#8220;top&#8221;, &#8220;right&#8221;, and &#8220;bottom&#8221;  properties</td>
</tr>
<tr>
<td valign="top">fixed</td>
<td valign="top">An element with position: fixed is positioned at the  specified coordinates relative to the browser window. The element&#8217;s  position is specified with the &#8220;left&#8221;, &#8220;top&#8221;, &#8220;right&#8221;, and &#8220;bottom&#8221;  properties. The element remains at that position regardless of  scrolling. Works in IE7 (strict mode)</td>
</tr>
</tbody>
</table>
<div id="premain2"><img src="http://www.codeproject.com/images/minus.gif" alt="" width="9" height="9" /> Collapse</div>
<pre>&lt;asp:TextBox style="position:absolute" ID="txtDisplay" runat="server"&gt;&lt;/asp:TextBox&gt;</pre>
<p>After adding the position style we need to set the equal width  for both textbox and dropdownlist control.</p>
<div id="premain3"><img src="http://www.codeproject.com/images/minus.gif" alt="" width="9" height="9" /> Collapse</div>
<pre>&lt;asp:TextBox style="width:120px;position:absolute" ID="txtDisplay" runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;asp:DropDownList ID="ddSelect" style="width:140px" runat="server"&gt;

&lt;asp:ListItem Value="test1" &gt;test1&lt;/asp:ListItem&gt;

&lt;asp:ListItem Value="test2"&gt;test2&lt;/asp:ListItem&gt;

&lt;/asp:DropDownList&gt;

After adding the Styles we need to create javascript function. This function is used to display the selected dropdwon
text into textbox control.

&lt;script language="javascript" type="text/javascript"&gt;

function DisplayText()
{
    document.getElementById("txtDisplay").value = document.getElementById("ddSelect").value;
    document.getElementById("txtDisplay").focus();
}
&lt;/script&gt;
After adding the javascript function. use this function for Dropdown change event fires.
Add the following code into Default.aspx.cs file.

protected void Page_Load(object sender, EventArgs e)
{
	ddSelect.Attributes.Add("onChange", "DisplayText();");
}
</pre>
<p>Conclusion:</p>
<p>So we can easily create a editable dropdownlist.</p>
</div>
<p><!-- Main Page Contents End --></p>
<h2>License</h2>
<div id="ctl00_LicenseTerms">
<p>This article, along with any  associated source code and files, is licensed under <a href="http://www.codeproject.com/info/cpol10.aspx">The Code Project Open  License (CPOL)</a></p>
</div>
<h2 id="ctl00_AboutHeading">About the Author</h2>
<div></div>
<table border="0" cellspacing="5" cellpadding="0">
<tbody>
<tr valign="top">
<td valign="top"><strong><a id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberProfileLink" href="http://www.codeproject.com/Members/muralikannan_t">muralikannan_t</a></strong></p>
<p><img src="http://www.codeproject.com/script/Membership/ProfileImages/%7B21d24f26-6f82-44b7-a070-25a4553a58a4%7D.gif" alt="" /></p>
<p><img src="http://www.codeproject.com/script/Geo/Images/IN.gif" alt="India" width="16px" height="11px" /> India</p>
<p>Member</td>
<td></td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=20&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/07/21/editable-dropdownlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>

		<media:content url="http://www.codeproject.com/images/minus.gif" medium="image" />

		<media:content url="http://www.codeproject.com/images/minus.gif" medium="image" />

		<media:content url="http://www.codeproject.com/images/minus.gif" medium="image" />

		<media:content url="http://www.codeproject.com/images/minus.gif" medium="image" />

		<media:content url="http://www.codeproject.com/script/Membership/ProfileImages/%7B21d24f26-6f82-44b7-a070-25a4553a58a4%7D.gif" medium="image" />

		<media:content url="http://www.codeproject.com/script/Geo/Images/IN.gif" medium="image">
			<media:title type="html">India</media:title>
		</media:content>
	</item>
		<item>
		<title>Lỗi bảo mật SQL Injection &#8211; tác hại và cách phòng tránh</title>
		<link>http://trungvv.wordpress.com/2010/06/28/l%e1%bb%97i-b%e1%ba%a3o-m%e1%ba%adt-sql-injection-tac-h%e1%ba%a1i-va-cach-phong-tranh/</link>
		<comments>http://trungvv.wordpress.com/2010/06/28/l%e1%bb%97i-b%e1%ba%a3o-m%e1%ba%adt-sql-injection-tac-h%e1%ba%a1i-va-cach-phong-tranh/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 04:44:18 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=17</guid>
		<description><![CDATA[Lỗi bảo mật SQL Injection &#8211; tác hại và cách phòng tránh Friday, 8. June 2007, 11:20:19 Lập trình Việc thiết kế và đưa vào hoạt động một website luôn đòi hỏi các nhà phát triển phải quan tâm đến các vấn đề về an toàn, bảo mật nhằm giảm thiểu tối đa khả năng [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=17&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Lỗi bảo mật SQL Injection &#8211; tác hại và cách phòng tránh</h2>
<p>Friday, 8. June 2007, 11:20:19</p>
<p><a rel="tag" href="http://my.opera.com/lequangtrung/blog/index.dml/tag/L%E1%BA%ADp%20tr%C3%ACnh">Lập trình</a></p>
<div id="excerpt"><img src="http://files.myopera.com/lequangtrung/blog/sqlinjection.jpg" alt="" />Việc thiết kế và đưa vào hoạt động một website luôn đòi hỏi các nhà phát triển phải quan tâm đến các vấn đề về an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc. Tuy nhiên, thông thường các nhà phát triển đa số tập trung vào các vấn đề an toàn trong việc chọn hệ điều hành, hệ quản trị CSDL, webserver sẽ chạy ứng dụng, &#8230;</div>
<p>Ví dụ, người ta thường quan tâm nhiều đến các lỗ hổng về an toàn trên IIS hơn là quan tâm đến các đoạn mã của ứng dụng có tiềm ẩn các lỗ hổng nghiêm trọng hay không. Một trong số các lỗ hổng này đó là SQL injection attack. SQL injection là một kĩ thuật cho phép những kẻ tấn công thi hành các câu lệnh truy vấn SQL bất hợp pháp (không được người phát triển lường trước) bằng cách lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web. Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng. Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị CSDL như SQL Server, Oracle, DB2,Sysbase.</p>
<p>Bây giờ tôi sẽ trình bày cho các bạn một ví dụ dễ hiểu sau : Thông thường để cho phép người dùng truy cập vào các trang web được bảo mật,hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Trong trường hợp này, người ta có thể dùng 2 trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía người dùng như sau :</p>
<pre>Login.htm
&lt;form action="ExecLogin.asp" method="post"&gt;
Username: &lt;input type="text" name="txtUsername"&gt;&lt;br&gt;
Password: &lt;input type="password" name="txtPassword"&gt;&lt;br&gt;
&lt;input type="submit"&gt;
&lt;/form&gt;</pre>
<pre>ExecLogin.asp
&lt;%
Dim p_strUsername, p_strPassword, objRS, strSQL
p_strUsername = Request.Form("txtUsername")
p_strPassword = Request.Form("txtPassword")
strSQL = "SELECT * FROM tblUsers " &amp; _
"WHERE Username='" &amp; p_strUsername &amp; _
"' and Password='" &amp; p_strPassword &amp; "'"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " &amp; objRS("Username")
End If
Set objRS = Nothing
%&gt;</pre>
<p>Thoạt nhìn, đoạn mã trong trang ExecLogin.asp dường như không chứa bất cứ một lỗ hổng về an toàn nào. Người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một SQL injection attack. Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh truy vấn SQL. Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện.<br />
Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang Login.htm :&#8221; or &#8220;&#8221; = &#8221; . Lúc này, câu truy vấn sẽ được gọi thực hiện là :</p>
<pre>SELECT * FROM tblUsers WHERE Username=" or "=" and Password = " or "="</pre>
<p>Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của tblUsers và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ. Một ví dụ khác của SQL injection attack nữa là khi các trang web sử dụng dữ liệu nhập vào theo dạng querystring ( bằng cách gõ cặp tham số và giá trị trực tiếp trên thanh địa chỉ hoặc dùng form với thuộc tính ACTION là GET). Ví dụ sau minh họa một trang ASP nhận dữ liệu cho biến ID thông qua querystring và phát sinh nội dung của trang đó dựa trên ID :</p>
<pre>&lt;%
Dim p_lngID, objRS, strSQL
p_lngID = Request("ID")
strSQL = "SELECT * FROM tblArticles WHERE ID=" &amp; p_lngID
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (Not objRS.EOF) Then Response.Write objRS("ArticleContent")
Set objRS = Nothing
%&gt;</pre>
<p>Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của article có ID trùng với ID được chuyển đến cho nó dưới dạng querystring. Ví dụ, trang này có thể được gọi như sau : <a href="http://www.example.com/Article.asp?ID=1055" target="_blank">http://www.example.com/Article.asp?ID=1055</a> , để hiển thị nội dung của article có ID là 1055.</p>
<p>Giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một SQL injection attack. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, để thực hiện một lệnh SQL bất hợp pháp, ví dụ như: 0 or 1=1 (nghĩa là, <a href="http://www.example.com/Article.asp?ID=0" target="_blank">http://www.example.com/Article.asp?ID=0</a> or 1=1). Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh :</p>
<pre>SELECT * FROM tblArticles WHERE ID=0 or 1=1</pre>
<p>Tất nhiên ví dụ này dường như không có gì nguy hiểm, nhưng hãy thử tưởng tượng kẻ tấn công có thể xoá toàn bộ CSDL bằng cách chèn vào các đoạn lệnh nguy hiểm như lệnh DELETE. Tất cả chỉ là đơn giản thay đổi chuỗi gán dữ liệu cho ID, ví dụ như : <a href="http://www.example.com/Article.asp?ID=1055;" target="_blank">http://www.example.com/Article.asp?ID=1055;</a> DELETE FROM tblArticles.</p>
<p><strong>TÁC HẠI VÀ CÁCH PHÒNG TRÁNH : </strong>Tác hại từ SQL Injection attack tùy thuộc vào môi trường và cách cấu hình hệ thống. Nếu ứng dụng sử dụng quyền dbo (quyền của người sở hữu CSDL &#8211; owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới,&#8230; Nếu ứng dụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn.</p>
<p>Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu truy vấn SQL là bằng cách kiểm soát chặtchẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request, Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariables).</p>
<p>Trong trường hợp dữ liệu nhập vào là chuỗi, như trong ví dụ 1, lỗi xuất phát từ việc có dấu nháy đơn trong dữ liệu. Để tránh điều này, thay thế các dấu nháy đơn bằng hàm Replace để thay thế bằng 2 dấu nháy đơn :</p>
<pre>p_strUsername = Replace(Request.Form("txtUsername"), "'", "''")
p_strPassword = Replace(Request.Form("txtPassword"), "'", "''")</pre>
<p>Trong trường hợp dữ liệu nhập vào là số, như trong ví dụ 2, lỗi xuất phát từ việc thay thế một giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay không :</p>
<pre>p_lngID = CLng(Request("ID"))</pre>
<p>Như vậy, nếu người dùng truyền vào một chuỗi, hàm này sẽ trả về lỗi ngay lập tức. Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.</p>
<p>Cuối cùng, để giới hạn mức độ của SQL Injection attack, nên kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài khoản người dùng mà ứng dụng web đang sử dụng. Các ứng dụng thông thường nên tránh dùng đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít.</p>
<p><strong>TÀI LIỆU THAM KHẢO : </strong></p>
<p>SQL Injection FAQ : <a href="http://www.sqlsecurity.com/DesktopDefault.aspx?tabindex=2&amp;tabid=3" target="_blank">http://www.sqlsecurity.com/DesktopDefault.aspx?tabindex=2&amp;tabid=3</a><br />
Advanced SQL Injection : <a href="http://www.nextgenss.com/papers/advanced_sql_injection.pdf" target="_blank">http://www.nextgenss.com/papers/advanced_sql_injection.pdf</a><br />
Preventing SQL Injection : <a href="http://www.owasp.org/asac/input_validation/sql.shtml" target="_blank">http://www.owasp.org/asac/input_validation/sql.shtml</a><br />
Biên dịch từ : <a href="http://www.4guysfromrolla.com/webtech/061902-1.shtml" target="_blank">http://www.4guysfromrolla.com/webtech/061902-1.shtml</a></p>
<p>﻿</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=17&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/06/28/l%e1%bb%97i-b%e1%ba%a3o-m%e1%ba%adt-sql-injection-tac-h%e1%ba%a1i-va-cach-phong-tranh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>

		<media:content url="http://files.myopera.com/lequangtrung/blog/sqlinjection.jpg" medium="image" />
	</item>
		<item>
		<title>Trương Gia Bình</title>
		<link>http://trungvv.wordpress.com/2010/06/11/tr%c6%b0%c6%a1ng-gia-binh/</link>
		<comments>http://trungvv.wordpress.com/2010/06/11/tr%c6%b0%c6%a1ng-gia-binh/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 04:01:20 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=14</guid>
		<description><![CDATA[Một số người nói với chúng tôi rằng, Trương Gia Bình – Chủ tịch HĐQT Cty FPT là một Nhân Vật Có Nhiều Ý Tưởng. Chúng tôi chưa bao giờ có dịp gặp gỡ ông Bình, một nhà khoa học được đào tạo trong môi trường Xô Viết trở thành doanh nhân, để trao đổi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=14&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div></div>
<div>
<div>
<p><em>Một số người nói với chúng tôi rằng, Trương Gia Bình – Chủ tịch HĐQT Cty FPT là một Nhân Vật Có Nhiều Ý Tưởng. Chúng tôi chưa bao giờ có dịp gặp gỡ ông Bình, một nhà khoa học được đào tạo trong môi trường Xô Viết trở thành doanh nhân, để trao đổi về điều đã làm cho ông trở nên khác biệt.</em></p>
<p>Hôm nay Trương Gia Bình ngồi trước mặt chúng tôi đây. Ông Bình đang chuẩn bị cho một buổi nói chuyện về các bí quyết thành công vào ngày hôm sau, mà nếu gạch đầu dòng ngắn gọn thì chúng bao gồm: <em>khát vọng + nhìn được các điểm nút chiến lược + tập hợp được những người có năng lực để cùng vượt qua những khó khăn</em>. Cao 1m73, nặng 88kg, cuốn sách đang đọc dở dang là “Cuộc đời tôi” (My Life) của Bill Clinton; ăn mặc theo lối càng ít thứ đeo khoác trên người càng tốt và thoải mái, có thể nhận xét sơ bộ rằng, ông Bình thuộc kiểu người cởi mở. Giọng nói của ông Bình khi phát âm chữ “R”, lưỡi vẫn rung nhẹ. Đó là “di sản” của nhiều năm học tiếng Nga và của quê hương miền Trung, cho dù ông ra Hà Nội sống từ năm 2 tuổi.</p>
<p><strong>1.</strong> TS Bùi Quang Ngọc – bạn học cùng từ năm lớp 2 (năm học 1964-1965) tại trường Phương Đông – Hà Nội, người được coi là khá hiểu ông Bình. Theo ông Quang Ngọc, ngày ấy họ cùng ở phố Thợ Nhuộm. Nhà Quang Ngọc số 91, nhà Gia Bình ở số 86, chính là trụ sở của Sở Y tế Hà Nội (bố ông Bình là Trương Gia Thọ – một vị bác sỹ nổi tiếng thời bấy giờ). Trò chơi ấu thơ của họ thường cho cá vào lọ để cùng ngắm chúng chọi nhau cho đến khi ngã ngũ. Hai người học với nhau cả 3 năm cấp 3 ở trường chuyên toán Chu Văn An, cùng ngồi ở chiếc bàn cuối lớp. “Gia Bình học toàn diện. Dân chuyên Toán thường ít chú ý đến môn Văn cũng như các môn xã hội. Gia Bình lại là cánh ham mê môn Văn. Mỗi bài luận Bình bỏ rất nhiều thời gian nghiên cứu hàng đống sách chuyên đề rồi mới bắt tay vào viết. Tôi và nhiều bạn thường sử dụng các tư liệu mà Bình đã mất công tìm kiếm, thậm chí bắt trước cả cách phân tích, bình luận của Bình. Các bài Văn của Bình thường được được tham khảo mẫu khi trả bài. Bình hay nói về Triết học, trình bày các vấn đề dưới góc độ hoặc bằng ngôn ngữ Triết. Hồi đấy tôi chỉ thấy hay hay vì nó khác với những suy nghĩ tư duy thuần Toán, không biết đâu rằng đó chính là biểu hiện của những phẩm chất lãnh đạo mà sau này Bình mới thể hiện rõ. Năm 1974, khi sang Liên Xô, mỗi đứa một nơi, Gia Bình học khoa Cơ học trường Tổng hợp Matxcơva, còn tôi học Toán ở Kisinhốp. 1979, Bình được chọn làm chuyển tiếp nghiên cứu sinh, còn tôi về dạy Toán ở ĐHBK Hà Nội. Năm 1985, Bình về nước lập nhóm “Nhiệt và chất” ở Viện Cơ, bắt đầu làm kinh tế. Một tối đầu mùa hè năm 1988, Bình đến nhà tôi chơi. Trên cái sân gác tầng 2 thoáng mát ở phố Khâm Thiên, Bình say sưa nói về máy tính cá nhân và thuyết phục tôi tham gia nhóm của Bình để chuyển máy tính sang Liên Xô. Ngoài sự thân quen rất nhiều năm, Bình nhìn nhận tôi như một chuyên gia Tin học khi đó. Chính Bình đã biến tôi từ một giáo viên, một nhà khoa học thành một nhà kinh doanh công nghệ và quản lý doanh nghiệp như hôm nay” – TS Quang Ngọc nhớ lại. Khi ấy họ mới 32 tuổi. Và sau đó mấy tháng, FPT chào đời.</p>
<p>Tại sao một nhóm các nhà khoa học lại rủ nhau bỏ đi làm kinh tế? Ông Bình kể, thế hệ ông được hưởng thụ sự giáo dục về niềm tự hào dân tộc, sinh ra là người Việt Nam đã là điều hạnh phúc. Chúng ta là lương tâm của thời đại, và tin tưởng sâu sắc vào điều đó. Tuy nhiên khi đi ra thế giới, gặp phải một sự thật phũ phàng là không phải ai cũng tôn trọng chúng ta. Điều ấy là một nỗi đau từ khi bước chân ra khỏi nước. Ông Bình nhớ, những năm 1980, khi đang là CTV Viện Hàn lâm Xô Viết, hôm ra sân bay tiễn một bạn về nước, cảnh sát đã cầm cái hộ chiếu của cô gái này vứt toẹt xuống đất. Lúc đó mới thấm thía nghèo là hèn, hèn là nhục; cũng tóc đen da vàng nhưng cầm giấy tờ Nhật Bản thì người ta được kính trọng. Thứ nữa là khi về nước, một người bạn than thở, Bình ơi đói quá không nuôi nổi vợ con, mình phải làm cái gì đi chứ? Vượt lên nghèo khó vốn là một suy nghĩ chất chứa trong đầu từ lâu, và lần này thì nhóm những nhà khoa học này nhất quyết làm kinh tế.</p>
<p><strong>2. </strong>Ông Bình cho rằng, câu chuyện lớn nhất của cuộc đời mình là FPT. Buổi ban đầu cái tên FPT gắn với công nghệ thực phẩm. Việt Nam là một nước nông nghiệp, ông Bình hy vọng vào các dự án viện trợ quốc tế trong lĩnh vực này, nó cũng là điểm xuất phát làm các đồ sấy khô của nhóm “Nhiệt và chất”. Nhưng doanh vụ lớn đầu tiên của FPT là đổi máy tính Olivetti lấy các loại hàng của Liên Xô vốn rất quen thuộc với Việt Nam thời bao cấp. Có thể nói giai đoạn 1988-1991 là giai đoạn đổi hàng Liên Xô. Giai đoạn 1991-1994 là giai đoạn tham gia thanh toán với Liên Xô (Nga) cho các công trình thủy điện, đồng thời Tin học đã là một hướng kinh doanh độc lập. Từ 1995, kinh doanh Tin học trở thành chủ đạo, các trung tâm định hướng kinh doanh ra đời trong FPT. 1998, sau 10 năm thành lập, FPT khẳng định vị trí số một trên thị trường Tin học của các ngành kinh doanh này và cũng là nhà ISP đầu tiên của Việt Nam . Trong quãng thời gian trên, ông Bình học hỏi rất nhiều mô hình tổ chức và quản lý của các Cty công nghệ hàng đầu, áp dụng những điểm phù hợp vào FPT. Nổi bật là việc lập và bảo vệ kinh doanh, check point nhân viên và xây dựng một hệ thông tin bảo đảm kiểm soát hiệu quả kinh doanh (Balance và FIFA). Lễ kỷ niệm 10 năm thành lập và đón nhận Huân chương Lao động hạng hai của FPT là một sự kiện gây nhiều dư luận đến mức, hàng tháng sau dân Hà Nội vẫn còn bàn tán. Thông thường sau những thành công như thế thì người ta bắt đầu hưởng thụ. Nhưng Trương Gia Bình “không phải là người thường” (đánh giá của ông Hoàng Minh Châu, một nhân vật trong FPT). Ông chưa có ý định hưởng thụ và đã thuyết phục được hầu hết các cộng sự của mình có chung ý chí đó. Năm 1999, FPT chuyển sang toàn cầu hóa với việc tham gia xuất khẩu phần mềm. Đầu năm 2000, FPT là Cty Tin học đầu tiên đạt chứng chỉ ISO-9001. Năm 2000, triển khai thành công hệ kế toán Solomon theo chuẩn ERP quốc tế, hệ FIFA/MIS của FPT trở thành hệ thông tin doanh nghiệp tốt nhất tại Việt Nam . Năm 2002 doanh số FPT vượt 100 triệu USD; năm 2003 vươn lên trở thành nhà cung cấp điện thoại di động lớn nhất tại Việt Nam. Năm 2002, FPT trở thành Cty cổ phần, rồi tập đoàn hóa. Hiện FPT có khoảng 10 ngàn nhân viên và doanh số đã vượt ngưỡng 1 tỷ USD.</p>
<p>Thời điểm đầu những năm 2000, ông Bình tung ra <em>lý thuyết Fractal</em> (tính bất biến của cấu trúc) và <em>Leadership Building</em> (kỹ năng lãnh đạo), đồng thời phát động phong trào học tập các lý thuyết này trong FPT. “Không nhiều cán bộ FPT hiểu được các lý thuyết này, cũng như vận dụng chúng có kết quả. Là người lãnh đạo FPT trong những năm qua, Gia Bình có niềm tin vững chắc vào những giá trị mà FPT đã tích lũy được theo thời gian. Những giá trị đó rất nhiều cái xuất phát từ những ý tưởng của Bình. Nếu không hiểu FPT, hiểu những chặng đường FPT đã trải qua, thì cũng khó hiểu được những ý tưởng này. Bình là một nhà tư tưởng”  – TS Bùi Quang Ngọc nhận xét – “Bình nhìn nhận FPT  phải có đối ngoại, đối nội, có thông tin báo chí, có văn hóa, có kinh tế, có tinh thần, có đoàn thanh niên, có phụ nữ, có thiếu niên nhi đồng (FPT Small). Bình học ở quân đội ở <em>cấu trúc Fractal</em>, và thường xuyên tham khảo tư vấn các vị tướng quân đội, trong đó có Bác Văn. Thậm chí Bình học hỏi cách dùng người của Bác Hồ. Những nguyên lý của âm dương ngũ hành cũng được Bình áp dụng. Bên cạnh đó có nhiều tư tưởng của Bình được minh chứng qua thực tế, ví dụ như <em>bản đồ gene Cty</em>. Bình tự mình hì hụi phác thảo các chuỗi phân tử đầu tiên của bộ gene này”.</p>
<p><strong>3. </strong>Để triển khai kinh nghiệm sống còn “con người là cốt lõi của thành công”, ông Bình đã từng phát động một chiến dịch cầu hiền tài. “<em>Chiếu cầu hiền tài</em>” của ông đăng trên tạp chí nội san và được nhiều báo khác đăng tải lại, đã gây xúc động mạnh trong giới trẻ. Hai câu lạc bộ tài năng trẻ FPT ra đời, quy tụ hầu hết những học sinh – sinh viên giỏi nhất nước, trong đó có nhiều em vừa đoạt các giải cao trong các kỳ thi toán học, tin học quốc tế. Một trong các nỗ lực cầu hiền tài đã đưa về FPT một ngôi sao sáng trong làng phần mềm Việt Nam lúc đó là Henry Hùng. Tinh thần “chiến tranh” được ông Bình phát động, để cho dễ nhớ, ông đã gói gọn mục tiêu của Cty vào 3 chữ số: <em>528</em>. Số 5 chỉ 5000 lập trình viên chuyên nghiệp của FPT vào năm 2005, số 2 chỉ 200 triệu doanh số phần mềm xuất khẩu cũng vào năm đó, số 8 chỉ giá trị của Cty tại thị trường chứng khoán Nasdaq là 8 tỷ USD. Toàn thể nhân viên FPT hừng hực khí thế. Trở thành Cty bạc tỷ trong vòng mấy năm là một chuyện phi thường và ông Bình thổi vào bộ máy FPT quyết tâm làm chuyện phi thường.</p>
<p>Khẩu hiệu “công nghiệp hoá, hiện đại hoá” sẽ vẫn tiếp tục chỉ là khẩu hiệu trong nhiều năm cho đến khi xuất hiện một tư duy mới: <em>công nghiệp phần mềm là lối thoát duy nhất</em> của Việt Nam . Từ vấn đề kinh tế, xuất khẩu phần mềm phải trở thành vấn đề chính trị, vì nó không chỉ mang về cho đất nước một ít ngoại tệ mà là mở ra cho đất nước một cơ hội phát triển. Ngày 5/6/2000, Chính phủ đã ban hành nghị quyết về xây dựng và phát triển công nghiệp phần mềm giai đoạn 2000-2005 với mục tiêu: 50 ngàn lập trình viên, 500 triệu USD phần mềm xuất khẩu vào năm 2005. Ngày 17/10/2000, Bộ Chính trị – Ban Chấp hành Trung ương Đảng khoá 8 đã ra chỉ thị 58-CT/TƯ, trong đó nhấn mạnh vai trò của công nghệ thông tin đối với sự phát triển đất nước. Tiếp theo hai văn kiện quan trọng này là việc triển khai hàng loạt các chính sách ưu đãi: miễn thuế 4 năm cho các Cty phần mềm kể từ khi có thu nhập chịu thuế, không áp dụng VAT với các sản phẩm phần mềm, thuế xuất nhập khẩu bằng không… đặc biệt các lập trình viên Việt Nam được tôn vinh, khi mức lương bắt đầu phải nộp thuế thu nhập nâng từ hai triệu lên tám triệu đồng. Các Cty phần mềm được sử dụng internet với tất cả các cổng dịch vụ không bị kiểm soát qua firewall, Nhà nước đầu tư vào các khu công viên phần mềm như Quang Trung, Hoà Lạc… “Những người làm phần mềm hân hoan thụ hưởng các chính sách mới này, nhưng không phải tất cả trong số họ đều biết đến công lao của ông Bình trong nỗ lực tác động hình thành chính sách” – ông Hoàng Minh Châu nhận xét.</p>
<p><strong>4. </strong>Khi cần suy nghĩ, ông Bình cũng đốt thuốc, vẻ sôi nổi biến mất và thoáng rơi vào trầm tư. Ông Bình nhìn nhận, có ba ý tưởng quan trọng nhất trong cuộc đời mình.</p>
<p>Ý tưởng thứ nhất: <em>Đưa chiến tranh nhân dân vào thương trường</em>. Lịch sử Việt Nam là lịch sử chiến tranh vệ quốc và chiến thắng mọi kẻ thù hùng mạnh. Tại sao người Việt Nam sẵn lòng hy sinh, đổ máu cho quê hương, mà làm kinh tế lại có nhiều điều không ổn? Ông Bình để tâm học hỏi trực tiếp từ những vị tướng quân đội và sau này tự tổng kết trong bài “chiến tranh nhân dân ứng dụng vào quản trị kinh doanh”. Điều này ông đã dạy cho nhân viên FPT, đồng thời cũng chia sẻ với các doanh nghiệp trong khuôn khổ khoa Quản trị kinh doanh – ĐHQG Hà Nội, và ông cho rằng sức mạnh đó là riêng có của người Việt Nam, quốc gia khác, nền văn hóa khác khó lòng học được.</p>
<p>Ý tưởng thứ hai: <em>Genetic</em>. Khi nhìn ra thế giới xem có doanh nghiệp nào tồn tại lâu dài, tìm hiểu bí quyết tồn tại của nó, ông Bình nhận thấy thương hiệu Sumitomo – Nhật Bản đã có 400 năm tuổi, nhưng lại có một Cty Thụy Điển đã tồn tại tới 7 thế kỷ. Ông Bình phát hiện ra rằng, bất cứ một cái gì trường tồn phải có một cấu trúc hết sức đặc biệt và có thể đặt tên nó là genetic. Để thiết kế được một hệ thống gen trong Cty, ông Bình không biết phải bắt đầu như thế nào, cho dù hết sức ước mong và dù đã xem xét cả mã gien của người lẫn ruồi giấm. Khi FPT mới chỉ có 350 người, ông Bình tự so sánh với một dân tộc thiểu số Việt Nam cũng có 350 người. Một dân tộc đã tồn tại độc lập qua cả ngàn năm đến tận bây giờ, vì sao họ làm được điều đó? Ông Bình sửa soạn đi tìm dân tộc này nhằm quan sát cách thức họ sống, ăn nói, trồng cấy, sinh hoạt bên đống lửa… để tìm cấu trúc. Đang chuẩn bị đi thì lại vớ được một cuốn hương ước, và cho rằng hương ước hay hơn, nên thu thập rất nhiều về đọc. Ông Bình đã mơ hồ đoán được cấu trúc genetic nhưng vẫn không thiết kế nổi. Lúc này FPT xuất khẩu phần mềm sang Ấn Độ, ông Bình bắt đầu nghiên cứu các quan điểm ISO và nhận thấy sự minh bạch của bộ lệnh này, đồng thời nó là quy trình chung cho toàn bộ tập đoàn. Như là lá, bạn sẽ quang hợp, là hoa bạn sẽ di truyền vậy. Đồng thời tiêu chuẩn ISO có cả biến dị, bởi có cả giai đoạn  check, tức là sau một vòng tuần hoàn phải kiểm tra xem có cải tiến được nó không? Thế là bản thiết kế bộ gien của ông Bình đã hoàn tất.</p>
<p>Rất nhiều người trong FPT phản đối mạnh mẽ, làm gì có cái khái niệm đó tồn tại trên đời, nhưng sau khi ông Bình bắt đầu triển khai làm thì điều này bắt đầu xuất hiện trong một số cuốn sách. Thật may có một người bạn thân của ông Bình hiểu. Để ép mọi người sử dụng, ông Bình gần như phải dùng tới “bạo lực, cưỡng chế”, bởi có thể cách ông Bình giải thích khó hiểu, hoặc cũng có thể mọi người không thích thay đổi. Genetic không chỉ là nhận thức sâu sắc về một tập đoàn, mà muốn vận hành nó sẽ phải chấp nhận trả giá bằng 30% thời gian của toàn bộ bộ máy nhân sự trong khoảng từ 1 – 2 năm. Vừa đúng dịp có cuộc xuất khẩu phần mềm, ông Bình đặt ra khẩu hiệu “Xuất khẩu hay là chết”, đồng thời cho vận hành genetic. Ông Bình đánh giá, đến nay bộ lệnh của FPT vẫn là bộ lệnh khác biệt so với các tập đoàn khác, bởi lẽ ông đã tìm mọi cách viết một bộ lệnh đầy đủ để duy trì sự trường tồn của lệnh này, cũng như cây cỏ trường tồn từ thế hệ này sang thế hệ khác. Đó là tìm cách bắt chước thiên nhiên. Ông Bình không biết FPT sẽ tồn tại được bao lâu, nhưng theo đúng như thiết kế thì cần phải liên tục hoàn thiện, khi đạt đến đẳng cấp thiên nhiên thì đương nhiên sự tồn tại sẽ được chấp nhận. Gen đòi hỏi mỗi tế bào phải thuộc bài, phải có hệ thống đào tạo nội bộ. Tại FPT lãnh đạo hành xử giống nhau, 10 người cũng như 10 nghìn người, phương thức giống nhau dù quy mô khác nhau, đều theo quân sự lệnh. Ý tưởng genetic có trong đầu ông Bình từ năm 1996, đến lúc xuất hiện tại FPT đã là năm 2003. Một quá trình đeo đẳng.</p>
<p>Ý tưởng thứ ba: <em>Thác số</em>. Ông Bình dự báo rằng sớm muộn gì cũng có một cuộc lật đổ, thay đổi vị trí các quốc gia trong tương lai. Ý tưởng này về sau người ta viết thành những cuốn sách rất nổi tiếng như “Thế giới phẳng”, còn ông Bình gọi nó là thác số. Bởi khi chưa có internet thì công việc nước nào nước ấy làm, nhưng khi internet ra đời sẽ có một dòng thông tin chảy từ chỗ có nhiều tin đến ít tin, từ chỗ nhiều tri thức đến chỗ ít tri thức, đồng thời sẽ có dòng công việc chảy theo dòng thông tin đó. Tương tự như việc phải chọn độ cao, ngăn đập để làm thủy điện. Trong thác số, nước là kỹ năng, một số lượng các kỹ năng, cụ thể trong công nghiệp phần mềm là tiếng Anh và lập trình. Ông Bình đẩy tiếp một bước nữa là “tạo nước” bằng việc mở trường Đại học, hiện nay FPT có khoảng 10 nghìn sinh viên, ngoài ra cũng đào tạo cho khoảng 50 ngàn sinh viên trong các hệ thống khác. Khi tích đủ lượng nước rồi thì ông Bình ngồi xoa tay xem các tổ máy phát điện vận hành. Các nước phát triển không ai đi viết lập trình cả, học thì khổ chết cha chết mẹ, ra đời lương lại không cao, họ thường làm các việc khác. Vì thế ông Bình cho rằng, trong tương lai các nước phát triển sẽ lười biếng, người ta vẫn giàu có nhưng đến một ngưỡng nào đó sẽ phải chấp nhận sự lật đổ. Thác số chính là cơ hội của đất nước, trong cái nghèo lại ẩn chứa một sức mạnh riêng.</p>
<p><strong>5. </strong>Những năm 1980 khi đất nước đang rất khó khăn, ông Bình đã được mời sang Tây Đức làm việc. Sự lựa cuộc sống ở nước ngoài tương đối dễ dàng, nhưng ông nghĩ rằng không có nơi nào tốt hơn Việt Nam, mà ở Việt Nam thì phải ở Hà Nội, nơi ông đã lớn lên, nơi văn hóa, trí tuệ tinh túy của đất nước tụ hội, nơi ông cảm thấy “happy” hơn cả. Ông Bình kể với chúng tôi rằng, ông đã quan sát kỹ mặt trống đồng để cố gắng hiểu mật mã của quá khứ, và gọi nó là “một bộ gen được ghi nhận đơn giản về văn hóa người Việt, về triết lí sống người Việt. Ví dụ câu hỏi lớn nhất “hạnh phúc là gì?” Tôi thấy trên trống đồng vẽ một nhà mái cong, một người đàn ông, một người đàn bà, một đứa trẻ, một đấu gạo, trên nóc nhà có một con chim. Có thể thấy người Việt cổ quan niệm rằng, chúng ta là người hành phúc khi có một nơi để ở, có một gia để sống và có gạo để ăn. Kiểm nghiệm lại tôi thấy mình vô cùng hạnh phúc, đời tôi đã có một nơi ở, một gia đình và có gạo. Bất kể chuyện gì xảy ra đi chăng nữa, tôi thấy tự tin vô cùng để có thể mạo hiểm. Làm kinh doanh phải chấp nhận mạo hiểm. Nhưng dù mạo hiểm đến đâu đi chăng nữa tôi vẫn đã có một gia đình, có người yêu thương mình”.</p>
<p>Ông Bình tự thiết kế cho mình một ngôi nhà bên Hồ Tây, sau khi đọc chán các sách về âm dương ngũ hành, phong thủy, và tìm hiểu một thứ là “bộ lệnh hài hòa”. “Ngôi nhà tôi là nơi đã bày trận đánh lớn: làm sao để Intel đầu tư vào Việt Nam , để TGĐ Intel đến nhìn thấy là choáng, họ<strong> </strong>thấy văn hóa Việt Nam mình hay quá. Đấy là một địa điểm chuyên dùng để kêu gọi xuất khẩu, kêu gọi đầu tư công nghệ cao, ông nào mà hoành tráng nhất thì tôi đón về nhà” – ông Bình không dấu được vẻ khoan khoái.</p>
<p>Kết thúc, ông Bình nói với chúng tôi: Có hai loại kiến thức, một loại có thể viết ra được thành lời, người ta gọi là kiến thức tường minh; một loại kiến thức không viết ra được mà chỉ có thể ngộ được. Đó là kiến thức ẩn, nó không thể tổng kết được mà là hệ quả của một quá trình quan sát, bắt chước và giác ngộ. Có lẽ ông Bình có chút lo lắng mơ hồ rằng, dân ngoại đạo chúng tôi vẫn còn chưa hết cảm thấy xa lạ chăng, với những ý tưởng ông vừa mới trình bày.</p>
<p>Trương Gia Bình nói điều đó với một điếu thuốc mới bắt đầu cháy trên tay.</p>
<p>source: HuyMinh&#8217;s blog</p>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=14&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/06/11/tr%c6%b0%c6%a1ng-gia-binh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
		<item>
		<title>Lập trình đạo</title>
		<link>http://trungvv.wordpress.com/2010/06/04/l%e1%ba%adp-trinh-d%e1%ba%a1o/</link>
		<comments>http://trungvv.wordpress.com/2010/06/04/l%e1%ba%adp-trinh-d%e1%ba%a1o/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 08:38:02 +0000</pubDate>
		<dc:creator>trungvv</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://trungvv.wordpress.com/?p=12</guid>
		<description><![CDATA[Lập trình Đạo Lập trình đạo – bạn đang đứng ở đâu Phần 1: Cõi hư vô Lập trình sư nói: “Khi ngươi học được cách lấy mã lỗi từ trong đoạn code bắt lỗi, ngươi có thể xuống núi“ 1.1 Hình thành một cách thần bí, sinh ra từ hư vô. Đơn độc và [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=12&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Lập trình Đạo</strong><br />
Lập trình đạo – bạn đang đứng ở đâu</p>
<p><strong>Phần 1</strong>: Cõi hư vô<br />
Lập trình sư nói:<br />
“Khi ngươi học được cách lấy mã lỗi từ trong đoạn code bắt lỗi, ngươi có thể xuống núi“<br />
<strong>1.1</strong><br />
Hình thành một cách thần bí, sinh ra từ hư vô. Đơn độc và bất động nhưng không ngừng vận động. Là nguồn gốc của mọi chương trình. Ta không biết tên nó là gì nên ta gọi nó là Đạo.<br />
Đạo mà hay thì hệ điều hành sẽ hay. Hệ điều hành mà hay thì trình biên dịch sẽ hay. Trình biên dịch mà hay thì chương trình ắt sẽ hay. Chương trình hay thì bá tính an cư lạc nghiệp, vũ trụ thuận hòa.<br />
Đạo bao trùm vạn vật, lan toả thiên hà. Tựa như cơn gió mát giữa mùa viêm nhiệt, như cơn mưa rào giữa tiết hanh khô.</p>
<p><strong>1.2</strong><br />
Đạo sinh máy ngữ, máy ngữ sinh hợp ngữ, hợp ngữ sinh trình dịch, trình dịch sinh ngôn ngữ ngôn ngữ biến hóa vô cùng .<br />
Nay vạn ngữ đã hình thành. Một ngữ dù thấp kém đến đâu vẫn có mục đích của nó. Mỗi ngữ đều thể hiện tính âm dương của phần mềm. Mỗi ngữ đều có một vị trí trong Đạo.<br />
Tuy nhiên nếu được lựa chọn, các ngươi không nên chọn ngữ COBOL để lập trình.</p>
<p>Chú giải<br />
Ngữ: Ngôn ngữ (lập trình)<br />
Máy ngữ: ngôn ngữ máy – machine language<br />
Hợp ngữ: assembly<br />
Trình dịch: compiler</p>
<p><strong>1.3</strong><br />
Khởi thủy từ Đạo. Đạo sinh thời gian và tài nguyên. Nên thời gian và tài nguyên chính là khía cạnh âm dương của Đạo vậy.<br />
Người lĩnh hội được Đạo luôn có đủ thời gian và tài nguyên để đạt được mục đích của mình. Kẻ không lĩnh hội được Đạo thì luôn thiếu. Không thể khác được.</p>
<p>Chú giải<br />
Thời gian và tài nguyên: Resource &amp; Time, hai yếu tố tính size của phần mềm</p>
<p><strong>1.4</strong><br />
Kẻ <span style="text-decoration:underline;">khôn ngoan khi nghe về Đạo thì làm theo</span>. Kẻ bình thường khi nghe về Đạo thì nghiên cứu. Kẻ ngu dốt khi nghe về Đạo thì cười nhạo.<br />
Nếu không có kẻ cười nhạo chắc hẳn đã không thành Đạo.</p>
<p>—————–</p>
<p><strong>Phần 2:</strong> Lập trình sư tiền bối</p>
<p>Lập Trình Sư nói:<br />
“Sau ba ngày không lập trình, cuộc sống trở nên vô nghĩa.”</p>
<p><strong>2.1</strong><br />
Bậc Lập Trình Sư tiền bối rất bí ẩn và uyên thâm. Chúng ta không thể hiểu suy nghĩ của họ. Thế nên ta chỉ mô tả đặc điểm của họ.<br />
Họ cẩn thận như loài hồ ly trên mặt nước. Họ cảnh giác như vị tướng giữa trận tiền. Họ tốt bụng như chủ nhà tiếp bậc khách quý. Họ giản dị như gỗ đá. Họ bí ẩn như hồ đen trong hang tối.<br />
Ai có thể biết bí mật trong con tim khối óc của họ.<br />
Câu trả lời nằm trong Đạo.</p>
<p><strong>2.2</strong><br />
Đại sư Turing một đêm nằm mơ thấy mình hóa máy. Khi thức dậy ông thốt lên:<br />
“Không biết ta là Turing nằm mơ hóa máy hay ta là máy đang nằm mơ hóa Turing đây“</p>
<p><strong>2.3<br />
</strong>Một lập trình phu từ một đại công ty máy tính sau khi tham dự đại hội phần mềm trở về trình báo với chủ nhân: “Không hiểu lũ lập trình phu công ty khác là loại gì. Chúng cư xử rất thô lỗ và chẳng quan tâm gì đến vẻ bề ngoài. Đầu tóc chúng dài và bù xù, quần áo thì nhăn nhúm và cũ kỹ. Chúng nhảy xổ vào hội trường và gây huyên náo cả buổi.”<br />
Chủ nhân đáp “Đáng lẽ ta không nên đưa ngươi đến đó. Những người ngươi gặp sống ngoài thế giới thực. Họ coi cuộc sống là ngớ ngẩn, tất cả chẳng qua chỉ là một sự trùng hợp tình cờ. Họ đến và đi mà không hề biết đến giới hạn. Họ không quan tâm đến thứ gì khác ngoài chương trình của họ. Vậy thì họ còn bận tâm đến các vấn đề xã hội làm gì?”<br />
“Họ đang sống trong Đạo”</p>
<p><strong>2.4</strong><br />
Đồ đệ hỏi Lập Trình Sư: “Một lập trình phu không bao giờ thiết kế, thảo tài liệu, hay thử nghiệm chương trình. Vậy mà tất cả mọi người biết anh ta đều coi anh ta anh ta là thiên hạ đệ nhất phu. Tại sao vậy?”<br />
Lập Trình Sư trả lời “Kẻ đó đã lĩnh hội được Đạo. Hắn đã thoát khỏi giới hạn của thiết kế, khi hệ thống trục trặc hắn không hề bối rối và tiếp nhận mọi thứ một cách bình thản. Hắn đã thoát khỏi giới hạn của thảo tài liệu, hắn không bao giờ e ngại khi có người khác review code của mình. Hắn đã thoát khỏi giới hạn của thử nghiệm. Mỗi đoạn code hắn viết đều đã sáng sủa, hoàn hảo và đẹp đẽ còn ý nghĩa của chúng đã hiển nhiên như cuộc sống.<br />
Hắn đã đạt đến ngưỡng thần bí của Đạo.”<br />
—————–<br />
<strong>Phần 3:</strong> Thiết kế</p>
<p>Lập Trình Sư nói:<br />
“Khi chương trình đang được test đó là thời điểm quá muộn để thay đổi thiết kế.“</p>
<p><strong>3.1<br />
</strong>Một nam nhân tham dự triển lãm tin học. Mỗi ngày khi vào cửa, gã nói với người cảnh vệ:<br />
“Ta là một đại đạo, nổi danh với nghề trộm cắp như thần. Nói trước với ngươi là ta sẽ không rời triển lãm khi chưa chôm được thứ gì”.<br />
Lời nam nhân khiến người cảnh vệ rất đỗi hoang mang, bởi số thiết bị trong triển lãm trị giá đến trăm vạn lượng vàng. Thế nên người cảnh vệ luôn bám sát theo dõi nhất cử nhất động của gã đại đạo. Tuy nhiên gã đại đạo chỉ đi thơ thẩn giữa các gian hàng. Thỉnh thoảng gã cười mỉm một cách khó hiểu.<br />
Khi đại đạo ra khỏi cửa người cảnh vệ liền lôi gã lại để lục soát nhưn chẳng tìm thấy gì.<br />
Hôm sau đại đạo lại đến. Khi đi qua cửa gã thì thầm với cảnh vệ:<br />
“Hôm qua ta đã thoát ra với một đống chiến lợi phẩm, hôm nay có thể sẽ còn nhiều hơn”.<br />
Người cảnh vệ lo sốt vó càng theo sát gã đại đạo, nhưng như hôm trước người cảnh vệ chẳng phát hiện được gì.<br />
Ngày cuối cùng, cảnh vệ không kiềm chế được sự tò mò:<br />
“Thưa ngài đạo chích” cảnh vệ nói “Tôi đã hoang mang đến mất ngủ. Hai khai sáng cho tôi, thứ mà ngài lấy trộm là gì vậy?”<br />
Đại đạo mỉm cười, “<span style="text-decoration:underline;">Ta trộm ý tưởng</span>” hắn nói.</p>
<p><strong>3.2</strong></p>
<p>Một Lập Trình Sư viết chương trình không <span style="text-decoration:underline;">có cấu trúc</span>. Một lập trình phu học theo cũng viết một chương trình không có cấu trúc. Khi đánh giá kết quả, Lập Trình Sư đã chửi mắng lập trình phu vì viết code không có cấu trúc, ông nói “Tuyệt học của đại cao thủ đâu phải để cho kẻ tầm thường? Ngươi cần phải lĩnh hội được Đạo rồi ngươi mới được phép bỏ qua cấu trúc chương trình“.</p>
<p><strong>3.3<br />
</strong>Một lập trình phu làm môn khách tại phủ Ngô Vương. Ngô Vương hỏi phu: “Hệ điều hành và phần mềm kế toán, thứ nào dễ thiết kế hơn?“<br />
“Hệ điều hành”, phu đáp.<br />
Ngô Vương ngạc nhiên “Rõ ràng một phần mềm kế toán đơn giản hơn nhiều hơn so với một hệ điều hành”, ông nói đầy vẻ nghi ngờ.<br />
“Không đúng lắm”, phu nói, “khi thiết kế phần mềm kế toán, lập trình phu phải đáp ứng yêu cầu của nhiều người khác nhau: phần mềm phải hoạt động ra sao, báo cáo lên như thế nào, đáp ứng điều kiện gì của luật tô thuế. Ngược lại, hệ điều hành không bị hạn chế vì những ý kiến bên ngoài. Lập trình phu chỉ tìm cách đơn giản nhất để máy thực hiện bài toán. Đó là lý do vì sao hệ điều hành dễ thiết kế”.<br />
Ngô Vương mỉm cười gật đầu “Đúng lắm, thế thứ nào dễ debug hơn?”<br />
Phu không đáp.</p>
<p><strong>3.4</strong><br />
Chủ trại lập trình đến gặp Lập Trình Sư và đưa cho ông tài liệu yêu cầu của một phần mềm mới.<br />
Trại chủ hỏi Lập Trình Sư “Việc thiết kế hệ thống sẽ mất bao lâu nếu ta để <span style="text-decoration:underline;">năm lập trình phu</span> làm?”<br />
“Mất <span style="text-decoration:underline;">một năm</span>”, Lập Trình Sư trả lời ngay.<br />
“Nhưng ta cần hệ thống này hoàn thành càng sớm càng tốt. Sẽ mất bao lâu nếu ta cho <span style="text-decoration:underline;">mười phu</span> tham gia thiết kế?”<br />
Lập trình sư cau mày “Trường hợp này, ngài sẽ cần <span style="text-decoration:underline;">hai năm</span>”.<br />
“Thế nếu ta đáp <span style="text-decoration:underline;">100 phu </span>vào thì sao?”<br />
Lập Trình Sư nhún vai “Sẽ <span style="text-decoration:underline;">chẳng bao giờ xong</span>” ông nói.<br />
————-<br />
<strong>Phần 4:</strong> Lập trình</p>
<p>Lập Trình Sư nói:<br />
“Chương trình tốt tự tạo ra thiên đường cho mình, chương trình tồi tự tạo ra địa ngục giam mình“</p>
<p><strong>4.1</strong><br />
Chương trình cần hết sức <span style="text-decoration:underline;">gọn nhẹ</span>, nên được <span style="text-decoration:underline;">cấu tạo từ nhiều hàm</span> liên kết như chuỗi ngọc vậy. <span style="text-decoration:underline;">Tư tưởng và mục đích </span>của chương trình phải <span style="text-decoration:underline;">liền mạch</span>, không ngắt quãng. Mạch này không nên quá dài, không nên quá ngắn, <span style="text-decoration:underline;">không nên có biến thừa</span>, không nên có <span style="text-decoration:underline;">vòng lặp có thể giản lược</span>, không nên thiếu <span style="text-decoration:underline;">cấu trúc</span>, không nên quá cứng nhắc.<br />
Chương trình cần tuân theo “<span style="text-decoration:underline;">Luật hạn chế shock</span>”. Luật đó là gì? Đơn giản là khi trả lời người sử dụng, chương trình cần hạn chế tối đa việc gây bất ngờ cho họ.<br />
Một chương trình dù phức tạp đến đâu cũng nên <span style="text-decoration:underline;">hoạt động như một đơn vị độc lập</span>. Chương trình nên chú trọng đến logic bên trong hơn là giao diện bên ngoài.</p>
<p>* * *</p>
<p>Một chương trình không đáp ứng được những yêu cầu trên sẽ vô cùng lộn xộn. Cách duy nhất để sửa chữa là viết lại chương trình.</p>
<p><strong>4.2</strong><br />
Lập trình phu hỏi Lập Trình Sư: “Thưa, chương trình con viết lúc chạy lúc không mặc dù con đã tuân theo quy tắc lập trình. Con cảm thấy vô cùng bế tắc. Đâu là nguyên nhân thảm cảnh này?”<br />
Lập Trình Sư đáp: “Ngươi bối rối vì ngươi chưa ngộ Đạo. Chỉ có kẻ ngốc mới luôn đòi hỏi một hành động dựa trên lý trí từ phía con người. Vậy thì tại sao ngươi lại đòi hỏi điều đó từ thứ mà con người tạo ra? Máy móc chỉ là máy móc, Đạo mới là hoàn hảo. Quy tắc lập trình chỉ là nhất thời, Đạo mới là mãi mãi. Thế nên để được khai sáng, ngươi phải suy ngẫm về Đạo.”<br />
“Vậy làm sao để con nhận ra là mình đã được khai sáng?”, lập trình phu hỏi.<br />
“Chương trình của ngươi khi đó sẽ <span style="text-decoration:underline;">chạy trơn tru</span>”, Lập Trình Sư đáp.</p>
<p><strong>4.3</strong><br />
Một Lập Trình Sư giảng về bản chất của Đạo cho một đồ đệ. “Đạo nằm trong tất cả các phần mềm dù phần mềm đó thấp kém đến đâu”, Lập Trình Sư nói.<br />
“Trong máy tính cầm tay có Đạo chứ?”, đồ đệ hỏi.<br />
“Có”, Lập Trình Sư đáp.<br />
“Trong trò chơi điện tử có Đạo chứ?”, đồ đệ tiếp.<br />
“Tất nhiên, kể cả trong trò chơi điện tử cũng có Đạo”, Lập Trình Sư đáp.<br />
“Cả trong hệ điều hành DOS cho máy tính cá nhân nữa chứ?”<br />
Lập trình sư ho một tiếng, người ông khẽ rung lên “Bài giảng hôm nay kết thúc” ông nói.</p>
<p><strong>4.4</strong><br />
Lập trình phu của thái tử viết một phần mềm, ngón tay phu như nhảy múa trên bàn phím. Chương trình khi dịch không có một lỗi và chạy mượt như cơn gió nhẹ.<br />
“Kinh khủng quá” thái tử thốt lên, “Kỹ năng của túc hạ thật hoàn hảo!”<br />
“Kỹ năng ư?”, phu rời mắt khỏi màn hình, “Thứ tại hạ tuân theo là Đạo – vượt trên mọi kỹ năng! Khi tại hạ bắt đầu lập trình, tại hạ thấy toàn bộ bài toán trong một khối hỗn độn. Ba năm sau tại hạ không còn thấy khối hỗn độn nữa. Thay vào đó là<span style="text-decoration:underline;"> những hàm con</span>. Nhưng bây giờ tai không còn thấy gì nữa. Toàn bộ bài toán hoàn toàn không tồn tại trong code. Tri thức của tại hạ trở nên nhàn nhã. Tư tưởng của tại hạ không cần kế hoạch, tự do hoạt động theo bản năng. Tóm lại, chương trình của tại hạ có thể tự lập trình. Thực sự thỉnh thoảng nó cũng gặp một số lỗi lớn. Thấy lỗi xuất hiện, tại hạ chậm rãi, lặng lẽ theo dõi. Rồi tại hạ sửa một dòng code và lỗi lớn vừa xuất hiện đã tan biến như làn khói mỏng. Sau đó tại hạ dịch lại chương trình, ngồi yên tận hưởng cảm giác hân hoan chảy trong cơ thể. Tại hạ nhắm mắt một lúc rồi log off”.<br />
“Giá như lập trình phu của ta ai cũng khôn ngoan như thế!” thái tử nói.<br />
—————<br />
<strong>Phần 5:</strong> <span style="text-decoration:underline;">Cài tiến</span></p>
<p>Lập Trình Sư nói<br />
“Một chương trình, dù chỉ có 3 dòng code, một ngày nào đó vẫn cần phải được cải tiến“</p>
<p><strong>5.1</strong><br />
Cửa giả dùng hay chẳng phí dầu (không cần phải tra dầu vào bản lề nếu dùng cẩn thận)<br />
Suối nguồn chảy xiết há thành ao (suối chảy xiết thì không thể đọng nước như ao tù)<br />
Lời hay khó lọt kẻ cứng đầu ( chỗ này khó dịch thành thơ quá)<br />
Phần mềm mục nát nếu không launch (phần mềm nếu không chạy (launch) thì sớm muộn gì cũng mục nát thôi)</p>
<p>Đó là những bí mật tuyệt vời.</p>
<p><strong>5.2</strong><br />
Quản đốc hỏi một lập trình phu xem anh ta cần bao lâu để hoàn thành chương trình đang viết. “Sẽ xong trong ngày mai” phu đáp.<br />
“Ta cho rằng điều đó là không thể” quản đốc nói, “Thực sự là ngươi cần bao lâu?”<br />
Phu nghĩ một lúc. Rồi anh ta trả lời: “Tại hạ có một số chức năng muốn viết thêm. Những chức năng này sẽ mất ít nhất hai tuần để hoàn thành”.<br />
“Như vậy vẫn là quá ngắn so với dự tính” quản đốc nói “Thôi, chỉ cần ngươi thông báo cho ta khi chương trình hoàn tất là ta mãn nguyện rồi.”<br />
Lập trình phu đồng ý.<br />
Vài năm sau quản đốc rửa tay gác phím, trên đường đến dự tiệc chia tay, quản đốc thấy lập trình phu ngủ gục trên bàn phím. Phu đã lập trình cả đêm.</p>
<p><strong>5.3</strong><br />
Lập trình phu một lần được giao viết một chương trình quản lý tài chính nhỏ.<br />
Lập trình phu làm việc như điên trong nhiều ngày. Khi lập trình sư xem kết quả ông nhận thấy phu đã lập trình cả một chương trình soạn thảo, một đống hàm đồ họa tổng quát, một giao diện trí tuệ nhân tạo nhưng chẳng có dòng code nào về tài chính.<br />
Lập trình sư lập tức chất vấn và phê phán, “Đừng nôn nóng” lập trình phu bực mình “tại hạ sẽ lập trình chương trình tài chính sau cùng” gã nói.</p>
<p><strong>5.4<br />
</strong>Đời nào dân tốt bỏ mùa?<br />
Đời nào thầy tốt bỏ qua trò nghèo?<br />
Cha tốt con chẳng đói meo<br />
Phu tốt code chẳng mòn theo tháng ngày<br />
—————-</p>
<p><strong>Phần 6:</strong> Quản đốc</p>
<p>Lập trình sư nói:<br />
“Lập trình phu nhiều và các quản đốc ít thì môn phái sẽ hưng thịnh”</p>
<p><strong>6.1</strong><br />
Các quản đốc chỉ biết họp bàn, lập trình phu ngồi chỉ biết ngồi chơi. Thì khi tổng quản báo cáo về tình hình thu chi, ngân quĩ sẽ bị sụt giảm. Khi quản đốc chỉ biết nói trăng sao, chung chung, tất cả sẽ bị mây mù bao phủ.<br />
Đấy không phải là đạo lập trình.<br />
Các quản đốc theo sát tình hình lập trình phu không thể ngồi chơi. Thì tổng quản lên kế hoạch, cân đối và mọi thứ đi vào trật tự. Khi mà các quản đốc nắm rõ vấn đề, thì vấn đề sẽ sớm được giải quyết.<br />
Đấy chính là đạo lập trình</p>
<p><strong>6.2<br />
</strong>Tại sao lập trình phu kém năng động?<br />
Bởi vì hầu hết thời gian họ dành cho hội họp.<br />
Tại sao lập trình phu nổi loạn.<br />
Bởi vì các quản đốc cản trở họ quá nhiều<br />
Tại sao lập trình phu lần lượt ra đi?<br />
Bởi vì đã đến lúc để họ ra đi.<br />
Đừng việc cho những quản đốc ít quyền lực, họ không có giá trị trong bang.</p>
<p><strong>6.3</strong><br />
Khi quản đốc gặp khó khăn, lập trình phu làm việc cho ông ta có sáng kiến mới để tạo ra chương trình ưa chuộng và bán chạy. Kết quả, ông ta giữ vững thế lực của mình.<br />
Quản đốc tặng thưởng nhưng lập trình phu từ chối nó. Anh ta nói : “Tôi viết chương trình bởi vì tôi đam mê, tôi không trông chờ một phần thưởng”.<br />
Quản đốc đưa ra lập luận: “Đây là lập trình phu, anh ta giữ một vị trí khá quan trọng, anh ta hoàn thành tốt mọi việc. Cần phải thăng cấp cho anh ta thành cố vấn của quản đốc”.<br />
Khi nói về vấn đề này, lập trình phu phủ nhận ý kiến này, anh ta nói: “Tôi tồn tại khi tôi lập trình. Nếu tôi được thăng chức tôi sẽ không biết làm gì. Tôi có thể đi đâu? Tôi có một chương trình và tôi làm việc trên nó.”<br />
<strong>6.4<br />
</strong>Quản đốc đi đến chỗ các lập trình phu và nói với họ: “Các bạn thân mến,giờ làm việc của các bạn đang bắt đầu làm việc từ 9 giờ sáng và kết thúc lúc 5 giờ chiều”. Việc này, gây ra một chút bực bội và gò bó cho các bạn.<br />
Quản đốc lại nói: “Thật ra, trong một vài trường hợp các bạn có thể quyết định giờ làm của mình. Dài hay ngắn ko quan trọng, miễn là các bạn có thể kết thúc dự án đúng như lịch định.” Lập trình phu cảm thấy hài lòng, anh ta bắt đầu công việc vào buổi trưa và kết thúc lúc gần sáng.</p>
<p><strong>Phần 7</strong>: Sự thông thái hợp nhất</p>
<p>Lập trình sư nói:<br />
“Ngươi có thể giải thích một chương trình (cho ai), nhưng ngươi không thể tặng hắn ta máy tính biết đọc viết”</p>
<p><strong>7.1<br />
</strong>Đồ đệ hỏi lập trình sư: “phương đông có đại cây cấu trúc người đời thường gọi ‘Cơ Quan Đầu Não Liên Hợp’. Nó bành trướng hình thể với phó chủ tịch (vice president) và kế toán phu (accountant). Nó có vô số ghi chú, đại thể tựa như ‘Cút đi!” hay “Lại đây này!”, thiên hạ chẳng ai hiểu nó nói gì. Hằng niên các tên mới được đặt vào nhánh, nhưng vô nghĩa. Thử hỏi thứ vô lý (unnatural entity) như vậy tồn tại để làm chi ?”</p>
<p>Lập trình sư nói: “ngươi nhận biết một đại cấu trúc và bối rối vì nó không có mục đích hợp lý. Dám hỏi ngươi có thể hứng thú với sự xoay chuyển không ngừng của nó ? Sao ngươi không tận hưởng sự nhàn nhã lập trình bên dưới các nhánh cây ấy ? Sao ngươi bị phiền bởi sự vô dụng của nó ?”</p>
<p><strong>7.2<br />
</strong>Phương đông có loài cá kình to lớn. Nó hóa thành loài hạc mà cánh bao trùm cả bầu trời. Khi nó bay qua đất liền, nó mang thông điệp từ “Cơ Quan Đầu Não Liên Hợp”, rơi đúng chỗ các lập trình phu, giống như hải cẩu vạch dấu trên bãi biển. Rồi nó men theo gió, quay về cố hương.</p>
<p>‘Lập trình phu mới’ dõi theo cánh chim mà trong lòng ngập tràn nghi vấn. ‘Lập trình phu trung’ kinh hãi, khiếp sợ thông điệp. ‘Lập trình sư’ bình thản, tiếp tục công việc.</p>
<p><strong>7.3</strong><br />
Lão pháp sư từ Tháp Ngà mang đến lập trình sư món đồ cuối cùng để kiểm tra. Pháp sư đẩy cái hộp đen lớn vào văn phòng. Lập trình sư chờ đợi.</p>
<p>“Đây là trạm làm việc tích hợp, phân tán, đa dụng, thiết kế với hệ điều hành độc quyền, 6 đời ngôn ngữ, đa giao diện. Tạo ra nó mất vài trăm năm làm việc. Các hạ có thấy ngạc nhiên không ?” Pháp sư nói.<br />
Lập trình sư trả lời: “Thật quá đỗi kinh ngạc.”</p>
<p>“Cơ Quan Đầu Não Liên Hợp đã ra lệnh rằng hãy sử dụng nó như nền cho các chương trình mới, Ngài có đồng ý không ?” Pháp sư hỏi.<br />
Lập trình sư đáp: “tất nhiên, ta sẽ chuyển nó đến trung tâm dữ liệu ngay!”</p>
<p>Vài ngày sau, 1 đồ đệ thơ thẩn đến văn phòng lập trình sư nói: “Con không tìm thấy danh sách cho chương trình mới, sư phụ biết nó ở đâu không ?”<br />
“Nó xếp thành chồng trên nền của trung tâm dữ liệu”</p>
<p><strong>7.4</strong><br />
Lập trình sư đi từ chương trình này đến chương trình khác không chút lo sợ. Không sự thay đổi trong quản lý nào làm hại y. Y vĩnh viễn không bị sa thảy, ngay cả dự án nếu bị hủy. Tại sao thế ? Y ngập tràn bởi Đạo !</p>
<p><strong>Phần 8:</strong> Phần cứng và phần mềm</p>
<p>Lập trình sư nói: “Không có gió, cỏ cây bất động. Không có nhu liệu, phần cứng vô dụng”</p>
<p><strong>8.1<br />
</strong>Đồ đệ hỏi: “Thưa ! con biết 1 công ty máy tính vĩ đại hơn tất cả công ty còn lại, ví như gã khổng lồ với bầy lùn, mỗi phần nhỏ có thể sánh với thương nghiệp hoàn chỉnh. Sao lại như thế ?”<br />
Lập trình sư nói: “Đừng hỏi ta vớ vẫn thế. Công ty lớn vì nó lớn. Nếu nó chỉ bán<span style="text-decoration:underline;"> phần cứng</span>, không ai mua nó. Nếu nó chỉ bán <span style="text-decoration:underline;">nhu liệu</span>, vô nhân dụng đến. Nếu nó chỉ là <span style="text-decoration:underline;">hệ thống bảo trì</span>, thiên hạ xem như bậc nô tỳ. Vì nó kết hợp tất cả, <span style="text-decoration:underline;">thiên hạ tin đó là trời</span> !</p>
<p><strong>8.2</strong><br />
Hôm nọ lập trình sư đến chỗ lập trình phu. Y đang bận tâm vào trò chơi điện tử cầm tay. Lập trình sư nói: ”Này, ta có thể thử nó được không ?” Lập trình phu (vẻ bất ngờ) trao nó cho lập trình sư.</p>
<p>“Ta thấy thiết bị yêu cầu 3 mức độ: dễ, trung bình, khó. Ngay cả mỗi thiết bị có mức độ chơi khác, khi thiết bị không chế ngự được con người, hay không được con người chế ngự.”</p>
<p>“Thưa ! Con cầu xin đại sư. Làm sao tìm được cách cài đặt thần bí kia” Lập trình phu hỏi, vẻ náo nức</p>
<p>Lập trình sư quăng thiết bị xuống sân, lấy chân nghiền nát. Ngay lúc đó, lập trình phu đạt đại ngộ !</p>
<p><strong>8.3</strong><br />
Lần nọ, một lập trình phu làm việc trên bộ vi xử lý:<br />
“Hãy nhìn tôi đi. Thật là sảng khoái. Tôi có hệ điều hành của chính tôi và thiết bị lưu trữ. Tôi không chia sẻ tài nguyên với bất cứ kẻ nào. Nhu liệu của tôi trước sau như một, sử dụng nhẹ tựa lông hồng. Sao bằng hữu không bỏ thứ đó và tham gia với tôi ?”</p>
<p>Lập trình phu trên máy tính lớn nói:<br />
“Một máy tính lớn trông giống bậc hiền nhân đang tọa thiền giữa trung tâm dữ liệu. Đĩa cứng xếp chồng bất tận ví như đại dương bao la. Nhu liệu của nó như các góc cạnh của viên kim cương. Các chương trình, lần lượt, đi qua như dòng thiên hà chảy xiết. Đó là vì sao tại hạ cảm thấy hoan hỷ trong hiện tại”</p>
<p>Lập trình phu nọ nghe xong, im lặng. Nhưng cả hai đã trở thành bằng hữu cho đến cuối đời.</p>
<p><strong>8.4</strong><br />
Phần cứng gặp phần mềm trên đường đến đỉnh Changtse. Mềm nói: “Các hạ là Âm, còn tôi là Dương. Nếu ta đi cùng nhau sẽ được nổi tiếng, kiếm được nhiều tiền” Và cả hai lên đường, mưu tính đại sự.</p>
<p>Rồi họ gặp Phần Dẻo (Firmware), ăn mặc rách rưới, tay chống cây gậy bước tới: “Đạo tồn tại giữa Âm và Dương. Đạo tĩnh lặng tựa mặt hồ không chút gợn sóng. Đạo không cần tên tuổi, bởi vậy không ai biết sự hiện diện của Đạo. Đạo không cần tiền bạc, Đạo đã hoàn mỹ trong Đạo. Đạo tồn tại trên Thời gian và Tài nguyên !”</p>
<p>Phần cứng, Phần mềm, cảm thấy hổ thẹn, bèn quay về nhà.</p>
<p><strong>Phần 9</strong> – Lời kết</p>
<p>Lập trình sư nói: “Giờ ngươi có thể xuống núi”</p>
<p><strong>HẾT</strong></p>
<p>(sưu tầm)<br />
Bản tiếng  Anh (<a href="http://www.caulacbovb.com/forum/download/file.php?id=1558">topic6html.rar</a> -232 KB)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/trungvv.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/trungvv.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/trungvv.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trungvv.wordpress.com&amp;blog=10183791&amp;post=12&amp;subd=trungvv&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trungvv.wordpress.com/2010/06/04/l%e1%ba%adp-trinh-d%e1%ba%a1o/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b9cd08f4d3ad806cbe5b1f923dc3c1a8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trungvv</media:title>
		</media:content>
	</item>
	</channel>
</rss>
