<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-587757890655208839</id><updated>2011-11-10T10:44:05.178-08:00</updated><category term='ui'/><category term='coldfusion'/><category term='java'/><category term='MXUnit'/><category term='top10'/><category term='video'/><category term='design'/><category term='windows'/><category term='coldspring'/><category term='model-glue'/><category term='cf9'/><category term='OO'/><category term='insight'/><title type='text'>Henry Learns to Rock</title><subtitle type='html'>what has Henry been learning these days?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-4696395430407910522</id><published>2011-11-01T19:21:00.000-07:00</published><updated>2011-11-10T10:44:05.196-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Do you want ColdFusion to support HMAC hashing natively?</title><content type='html'>&lt;div&gt;&lt;b&gt;Vote it up!&lt;/b&gt;&amp;nbsp;&lt;a href="http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=86654"&gt;http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=86654&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;What is HMAC?&lt;/b&gt;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/HMAC"&gt;http://en.wikipedia.org/wiki/HMAC&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Where is HMAC needed?&lt;/b&gt;&amp;nbsp;Amazon Web Services, Credit Card Gateways, Twitter, etc...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Which CFer has used HMAC successfully with ColdFusion?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.delbridge.org/post.cfm/tackling-twitter-s-oauth-with-coldfusion"&gt;Dave Delbridge&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bennadel.com/blog/1971-Authenticating-Twilio-Request-Signatures-Using-ColdFusion-And-HMAC-SHA1-Hashing.htm"&gt;Ben Nadel&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;What can we use today?&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.coldfusiondeveloper.com.au/go/note/2008/01/18/hmac-sha1-using-java/"&gt;HMAC_SHA1()&lt;/a&gt;&amp;nbsp;&amp;lt;-- would the author please post to &lt;a href="http://www.cflib.org/"&gt;cflib&lt;/a&gt; or&lt;a href="http://cookbooks.adobe.com/"&gt; adobe cookbooks&lt;/a&gt;?&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-4696395430407910522?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/4696395430407910522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2011/11/do-you-want-coldfusion-to-support-hmac.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4696395430407910522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4696395430407910522'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2011/11/do-you-want-coldfusion-to-support-hmac.html' title='Do you want ColdFusion to support HMAC hashing natively?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6013613106686709920</id><published>2011-10-31T17:53:00.000-07:00</published><updated>2011-11-03T11:42:35.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>"SHA" in hash() is not SHA-1 in CF8/9, it is SHA-0! (according to CFWACK)</title><content type='html'>&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;UPDATE:&lt;/b&gt; I wasn't intend to promote the use of SHA-1 for hashing password, or hashing anything using SHA-1 in general. &amp;nbsp;This post is here to point out the highly used "SHA" param for &lt;i&gt;hash()&lt;/i&gt; is actually SHA-0. &amp;nbsp;For those who intended to compute a valid SHA-1 hash, please use "SHA-1" as the algorithm&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;param.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Do you know "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SHA&lt;/span&gt;" algorithm in ColdFusion is actually the &lt;strike&gt;broken&lt;/strike&gt;&amp;nbsp;flawed&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;"SHA-0"&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://en.wikipedia.org/wiki/Secure_Hash_Algorithm"&gt;wikipedia&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;A&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Retronym" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: none; background-origin: initial; color: #0645ad; font-family: sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;" title="Retronym"&gt;retronym&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&amp;nbsp;applied to the original version of the 160-&lt;/span&gt;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Binary_digit" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: none; background-origin: initial; color: #0645ad; font-family: sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;" title="Binary digit"&gt;bit&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&amp;nbsp;hash function published in 1993 under the name "SHA". It was withdrawn shortly after publication due to an undisclosed "significant flaw" and replaced by the slightly revised version SHA-1.&lt;/span&gt;&lt;/blockquote&gt;And according to&amp;nbsp;&lt;a href="https://www.owasp.org/index.php/Guide_to_Cryptography"&gt;owasp.org&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="background-color: #d5deed; font-family: Verdana, Arial, 'Trebuchet MS'; font-size: 11px; line-height: 16px;"&gt;SHA-0 has been conclusively broken. It should no longer be used for any sensitive applications.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;So please use "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SHA-1&lt;/span&gt;" instead of the flawed "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SHA&lt;/span&gt;" &lt;b&gt;if you want a SHA-1 hash&lt;/b&gt;. &amp;nbsp;It is available in ColdFusion Standard Edition. &amp;nbsp;Somehow it is not in CFBuilder's code assist for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;hash()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I cannot believe how error-ridden&amp;nbsp;is the&amp;nbsp;&lt;a href="http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c52.html"&gt;CF 9's documentation on hash()&lt;/a&gt;. &amp;nbsp;Many errors are carried over from &lt;a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_01.html"&gt;CF 8 documentation&lt;/a&gt;&amp;nbsp;and this is&amp;nbsp;unacceptable. &amp;nbsp;Just read the comments section and you will see that all the returned lengths are stated incorrectly, and many algorithms that are available in Standard Edition are listed under Enterprise Edition only.&lt;br /&gt;&lt;br /&gt;Please use&amp;nbsp;&lt;a href="http://books.google.ca/books?id=rI0OZhmcuc0C&amp;amp;lpg=PT259&amp;amp;ots=ilNlUgAxSs&amp;amp;dq=coldfusion%20hash%20sha%20sha-1&amp;amp;pg=PT259#v=onepage&amp;amp;q&amp;amp;f=false"&gt;Adobe ColdFusion 9 Web Application Construction Kit&lt;/a&gt;&amp;nbsp;(block-quoted&amp;nbsp;below). &amp;nbsp;The list is applicable to CF 8 as well, but I'm not sure about CF7 or earlier. &amp;nbsp;Also, please read the comments of this post.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: verdana, sans-serif; line-height: 22px;"&gt;.... In ColdFusion 9, the&amp;nbsp;&lt;/span&gt;&lt;tt style="background-color: white; color: green; font-family: 'Courier New', Courier, monospace; line-height: 22px; text-align: left;"&gt;Hash()&lt;/tt&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="also leverages" style="background-color: white; font-family: verdana, sans-serif; line-height: 22px; text-align: left;"&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: verdana, sans-serif; line-height: 22px; text-align: left;"&gt;&amp;nbsp;function also leverages the message digests supplied by the SunJCE provider.&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;...&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;h5 class="docSection3Title" id="title-ID0E1DAI" style="background-color: white; color: #7d8298; font-family: verdana, sans-serif; margin-top: 5px; text-align: left;"&gt;&lt;tt style="color: green; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;algorithm&lt;/span&gt;&lt;/tt&gt;&lt;/h5&gt;&lt;div class="docText" style="background-color: white; font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="ColdFusion includes"&gt;&lt;/a&gt;Optional. This is the algorithm used to hash the string. ColdFusion includes a backward-compatible algorithm, as well as the default algorithms supported by the SunJCE provider:&lt;/span&gt;&lt;/div&gt;&lt;ul style="background-color: white; font-family: Verdana, sans-serif; text-align: left;"&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;CFMX_COMPAT (default).&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="versions prior"&gt;&lt;/a&gt;&amp;nbsp;Algorithm used in ColdFusion versions prior to MX 7; this is the least-secure option (same as MD5 algorithm)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;MD2.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="a "&gt;&lt;/a&gt;&amp;nbsp;The MD2 algorithm; generates a 32-byte, hexadecimal string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;MD5 (default).&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="generates a"&gt;&lt;/a&gt;&amp;nbsp;The MD5 algorithm; generates a 32-byte, hexadecimal string (same as CFMX_COMPAT algorithm)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="NIST FIPS"&gt;&lt;/a&gt;&amp;nbsp;The original Secure Hash Standard (SHA-0) algorithm specified by NIST FIPS-180; generates a 40-character string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA-1.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="specified by"&gt;&lt;/a&gt;&amp;nbsp;The SHA-1 algorithm specified by NIST FIPS-180-2; generates a 40-character string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA-256.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="Uses SHA"&gt;&lt;/a&gt;&amp;nbsp;Uses SHA-256 algorithm specified by FIPS-180-2; generates a 64-character string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA-384.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="specified by"&gt;&lt;/a&gt;&amp;nbsp;Uses SHA-256 algorithm specified by FIPS-180-2; generates a 96-character string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA-512.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="algorithm specified"&gt;&lt;/a&gt;&amp;nbsp;Uses SHA-256 algorithm specified by FIPS-180-2; generates a 128-character string&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="docText" style="background-color: white; font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="edition includes"&gt;&lt;/a&gt;ColdFusion 9 Enterprise edition includes the following RSA BSafe Crypto-J library algorithms for use with&amp;nbsp;&lt;tt style="color: green; font-family: 'Courier New', Courier, monospace;"&gt;hash()&lt;/tt&gt;:&lt;/span&gt;&lt;/div&gt;&lt;ul style="background-color: white; font-family: Verdana, sans-serif; text-align: left;"&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;SHA-224.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="FIPS "&gt;&lt;/a&gt;&amp;nbsp;The 224-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-MD5.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="code calculated"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the MD5 hash algorithm&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-RIPEMD160.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="message authentication"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the RACE Integrity Primitives Evaluation Message Digest 160-bit message digest algorithm and cryptographic hash function&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-SHA1.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="hash message"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the 160-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-SHA224.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="secure hash"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the 224-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-SHA256.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="message authentication"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the 256-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-SHA384.&lt;/span&gt;&amp;nbsp;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="iddle1057"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="iddle1537"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="iddle1719"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="The hash"&gt;&lt;/a&gt;The hash message authentication code calculated using the 384-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="docEmphStrong" style="font-weight: bold;"&gt;HMAC-SHA512.&lt;/span&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="message authentication"&gt;&lt;/a&gt;&amp;nbsp;The hash message authentication code calculated using the 512-bit secure hash algorithm defined by FIPS 180-2 and FIPS 198&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="ch52note13" style="background-color: white; font-family: Verdana, sans-serif; text-align: left;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="docNote" style="background-color: white; font-family: Verdana, sans-serif; margin-bottom: 2em; margin-left: 2em; margin-right: 2em; text-align: left;"&gt;&lt;div class="docNoteTitle" style="font-family: verdana, sans-serif; font-weight: bold; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Tip&lt;/span&gt;&lt;/div&gt;&lt;div class="docText" style="font-family: verdana, sans-serif; line-height: 1.2em; margin-bottom: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=587757890655208839" name="an algorithm"&gt;&lt;/a&gt;If an algorithm is in both the Sun JCE and Crypto-J, ColdFusion will use the one provided by Crypto-J.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6013613106686709920?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6013613106686709920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2011/10/do-not-use-sha-in-hash-use-sha-1.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6013613106686709920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6013613106686709920'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2011/10/do-not-use-sha-in-hash-use-sha-1.html' title='&quot;SHA&quot; in hash() is not SHA-1 in CF8/9, it is SHA-0! (according to CFWACK)'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-4403686020831259374</id><published>2010-11-03T19:00:00.000-07:00</published><updated>2010-11-03T19:00:03.663-07:00</updated><title type='text'>jQuery was named jSelect, Yahoo didn't hire John Resig, who'd have known?</title><content type='html'>Don't believe me? &lt;a href="http://thisdeveloperslife.com/post/1475231255/1-0-7-audacity"&gt;&amp;nbsp;Listen to This Developer's Life 1.0.7 here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-4403686020831259374?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4403686020831259374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4403686020831259374'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/11/jquery-was-named-jselect-yahoo-didnt.html' title='jQuery was named jSelect, Yahoo didn&apos;t hire John Resig, who&apos;d have known?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-683321731644278151</id><published>2010-10-29T14:26:00.001-07:00</published><updated>2010-10-29T14:26:46.032-07:00</updated><title type='text'>MAX 2010 SESSIONS on Adobe TV !!!</title><content type='html'>&lt;div&gt;&lt;a href="http://tv.adobe.com/channel/max/max-2010/"&gt;&lt;img border="0" height="222" src="http://thumbnails.tv.adobe.com/2010-09-28/7d5068d7-913d-d983-5df5-31a88af9b484.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://tv.adobe.com/channel/max/max-2010/"&gt;Recorded sessions available here!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm so gonna watch them all this weekend! Hurray!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-683321731644278151?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/683321731644278151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/683321731644278151'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/10/max-2010-sessions-on-adobe-tv.html' title='MAX 2010 SESSIONS on Adobe TV !!!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6038016883854654867</id><published>2010-08-20T12:36:00.000-07:00</published><updated>2010-08-20T14:23:29.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Terrence Ryan taught me why &lt;cfhtmlfoot&gt; is not needed</title><content type='html'>I guess most of you have heard of or used &amp;lt;cfhtmlhead&amp;gt; for injecting things in between &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt; in html, right?&lt;br /&gt;&lt;br /&gt;Today I came across a blog post which talks about frontend performance tips, and one of them is to include script tags in the bottom of the page to avoid blocking (for more tips, see http://code.google.com/speed/articles/ ). &amp;nbsp;I know this tip for a while now, but I found myself hard to implement it with most MVC frameworks I used (i.e. MG2, ColdBox, FW/1). &amp;nbsp;For a second I really wish there's a &amp;lt;cfhtmlfoot&amp;gt; tag. &amp;nbsp;So I asked on the tweeter, and @&lt;a href="http://twitter.com/tpryan/statuses/21687901154"&gt;tpryan replied&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;@henrylearn2rock I use the request scope for this. Inject code into request.footer, then in the closing of my view, check for and publish.&lt;/blockquote&gt;Nice! &amp;nbsp;I guess we don't need &amp;lt;cfhtmlfoot&amp;gt; after all. &amp;nbsp;Thanks Terrence.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;edit:&lt;/strong&gt; gosh blogger, html encode post title and body ALREADY!  And why are URL's not turned into hyperlinks automatically?  You suck!  It's 2010!!!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;update:&lt;/strong&gt; wow!  look at this reply from &lt;a href="http://twitter.com/mach_ii/statuses/21688498462"&gt;@mach_ii&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;@henrylearn2rock M2 supports this on OpenBD. cfhtmlbody: &lt;a href="http://is.gd/esh24"&gt;http://is.gd/esh24&lt;/a&gt; &amp; htmlbody(): &lt;a href="http://is.gd/esh0Z"&gt;http://is.gd/esh0Z&lt;/a&gt; Railo tix: &lt;a href="http://is.gd/esh7x"&gt;http://is.gd/esh7x&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;update:&lt;/strong&gt; oh, my man tpryan also blogged about this: &lt;a href="http://www.terrenceryan.com/blog/post.cfm/injecting-javascript-to-the-foot-of-a-coldfusion-page"&gt;Injecting JavaScript to the foot of a ColdFusion Page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6038016883854654867?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6038016883854654867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6038016883854654867'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/08/terrence-ryan-taught-me-why-is-not.html' title='Terrence Ryan taught me why &amp;lt;cfhtmlfoot&amp;gt; is not needed'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-8324249125673138721</id><published>2010-08-12T22:22:00.000-07:00</published><updated>2010-08-20T12:45:57.789-07:00</updated><title type='text'>How to render Chinese / Japanese correctly with cfdocument / cfreport?</title><content type='html'>In order to have the Chinese or Japanese characters rendered up correctly in PDF using &lt;b&gt;&lt;cfdocument&gt;&lt;/cfdocument&gt;&lt;/b&gt; and &lt;b&gt;&lt;cfreport&gt;&lt;/cfreport&gt;&lt;/b&gt;, you should first check what's your default locale at &lt;b&gt;ColdFusion Administrator -&amp;gt; Setting Summary -&amp;gt; Java Default Locale&lt;/b&gt;. &amp;nbsp;One would have thought CFML will respect custom locale using setLocale(), but it doesn't.&lt;br /&gt;&lt;br /&gt;If it is "en_US", edit &lt;b&gt;/lib/cffont.properties&lt;/b&gt;. &amp;nbsp;Otherwise, create a&amp;nbsp;&lt;b&gt;/lib/cffont.properties.&lt;/b&gt;&lt;b&gt;#locale#&lt;/b&gt;(e.g. /lib/cffont.properties.zh_TW&amp;nbsp;) &amp;nbsp;using&amp;nbsp;cffont.properties as reference.&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Replace the font(s) after '=' with system's Chinese font&amp;nbsp;(e.g. &lt;b&gt;MingLiu&lt;/b&gt;)&amp;nbsp;for &lt;i&gt;Chinese&lt;/i&gt; or&amp;nbsp;system's&amp;nbsp;Japanese font (e.g. &lt;b&gt;MS UI Gothic&lt;/b&gt;) for&lt;i&gt; Japanese&lt;/i&gt; respectively, assuming ColdFusion is installed on Windows, and client has the respective font(s) installed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Restart ColdFusion&lt;/b&gt;, and then the font should show up correctly...&lt;br /&gt;&lt;br /&gt;p.s. In Report Builder&lt;cfreport&gt;, make sure you set &lt;b&gt;Preference -&amp;gt; PDF Encoding&lt;/b&gt; to "&lt;b&gt;Identity-H&lt;/b&gt;".&lt;/cfreport&gt;&lt;br /&gt;&lt;br /&gt;Now with the PDF open, &lt;b&gt;Right-click&lt;/b&gt; -&amp;gt; &lt;b&gt;Document Properties... &lt;/b&gt;, you should see the specified font &amp;nbsp;in the cffont properties file.&lt;br /&gt;&lt;br /&gt;Hmm... now why can't PDF support UTF-8 correctly is beyond me... &amp;nbsp;How to display both Chinese and Japanese and Korean in the same PDF? &amp;nbsp;I don't know.&lt;br /&gt;&lt;br /&gt;If you know which Chinese / Japanese / Korean fonts are installed by Adobe Reader language pack, please let me know here:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/3474221/which-fonts-are-installed-by-adobe-reader-asian-and-extended-language-font-packs"&gt;http://stackoverflow.com/questions/3474221/which-fonts-are-installed-by-adobe-reader-asian-and-extended-language-font-packs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have a better method of getting cfreport / cfdocument render Chinese / Japanese / Korean, please share in Comments! &lt;br /&gt;&lt;br /&gt;Thank you&lt;br /&gt;&lt;br /&gt;&lt;b&gt;update:&lt;/b&gt; if you don't need PDF, format="flashpaper" just works.  Thanks Macromedia!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-8324249125673138721?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8324249125673138721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8324249125673138721'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/08/how-to-render-chinese-japanese.html' title='How to render Chinese / Japanese correctly with cfdocument / cfreport?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7152802942267584836</id><published>2010-06-07T16:06:00.001-07:00</published><updated>2010-06-07T16:32:09.000-07:00</updated><title type='text'>Apache CouchDB is cool</title><content type='html'>&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-9C2x54Of-M&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-9C2x54Of-M&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;2-layers made possible! &amp;nbsp;DB &amp;lt;-&amp;gt; front end, bypass app layer thanks to JSON over HTTP (RESTful)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7152802942267584836?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7152802942267584836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7152802942267584836'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/06/apache-couchdb-is-cool.html' title='Apache CouchDB is cool'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-2121547679163934720</id><published>2010-06-03T18:37:00.000-07:00</published><updated>2010-06-03T19:01:16.496-07:00</updated><title type='text'>Hibernate Indexed Collections works with CF ORM!</title><content type='html'>&lt;p&gt;By default, ColdFusion would use &lt;code&gt;&amp;lt;bag&amp;gt;&lt;/code&gt; when you use &lt;code&gt;type=&amp;quot;array&amp;quot;&lt;/code&gt; to map &amp;quot;one-to-many&amp;quot; fieldtype. &lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;font color="#004080"&gt;/** Parent.cfc */        &lt;br /&gt;component persistent=&amp;quot;true&amp;quot;         &lt;br /&gt;{         &lt;br /&gt;&amp;#160; property name=&amp;quot;id&amp;quot; fieldtype=&amp;quot;id&amp;quot; generator=&amp;quot;native&amp;quot;;         &lt;br /&gt;&amp;#160; property name=&amp;quot;children&amp;quot; type=&amp;quot;array&amp;quot; fieldtype=&amp;quot;one-to-many&amp;quot; inverse=&amp;quot;true&amp;quot; cfc=&amp;quot;child&amp;quot; cascade=&amp;quot;all&amp;quot;;         &lt;br /&gt;}         &lt;br /&gt;&lt;/font&gt;&lt;/code&gt;    &lt;br /&gt;Add this &lt;code&gt;parent.hbxml&lt;/code&gt; below and save it in the same folder as parent.cfc if you want to use &lt;a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html#collections-indexed"&gt;Indexed Collections&lt;/a&gt;.&amp;#160; Hibernate will do all the bookkeeping behind the scene for you to preserve the order of the array by storing the order in the sortOrder column (int).&amp;#160; Cool eh?&lt;/p&gt;  &lt;pre&gt;&lt;font color="#004080"&gt;&amp;lt;!DOCTYPE hibernate-mapping PUBLIC &amp;quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&amp;quot;&lt;br /&gt;                                   &amp;quot;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;hibernate-mapping&amp;gt;&lt;br /&gt;    &amp;lt;class entity-name=&amp;quot;parent&amp;quot; lazy=&amp;quot;true&amp;quot; name=&amp;quot;cfc:com.test.parent&amp;quot; table=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;id name=&amp;quot;id&amp;quot; type=&amp;quot;int&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;column name=&amp;quot;id&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;generator class=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/id&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0080ff"&gt;&lt;strong&gt;&amp;lt;—- rename ‘bag’ to ‘list’ --&amp;gt;&lt;/strong&gt;&lt;br /&gt;&lt;/font&gt;        &lt;font color="#004080"&gt;&amp;lt;list name=&amp;quot;children&amp;quot; cascade=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;key column=&amp;quot;parent_id&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/font&gt;            &lt;font color="#0080ff"&gt;&lt;strong&gt;&amp;lt;—- set base=&amp;quot;1&amp;quot; to match CF array index (optional, default to 0) --&amp;gt;&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#004080"&gt;            &amp;lt;list-index column=&amp;quot;sortOrder&amp;quot; base=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;one-to-many class=&amp;quot;cfc:com.test.child&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/list&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Didn’t know it’s this easy! :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-2121547679163934720?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/2121547679163934720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/06/hibernate-indexed-collections-works.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2121547679163934720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2121547679163934720'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/06/hibernate-indexed-collections-works.html' title='Hibernate Indexed Collections works with CF ORM!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-9007308027716110569</id><published>2010-05-27T11:58:00.000-07:00</published><updated>2010-05-27T11:58:43.320-07:00</updated><title type='text'>NCDEVCON On-line Session Videos</title><content type='html'>Most of &lt;a href="http://ncdevcon.com/"&gt;theNCDevCon&lt;/a&gt; sessions were recorded!&lt;br /&gt;Check them out:  &lt;a href="http://tinyurl.com/ncdevcon2010"&gt;http://tinyurl.com/ncdevcon2010&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-9007308027716110569?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/9007308027716110569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/05/ncdevcon-on-line-session-videos.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/9007308027716110569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/9007308027716110569'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/05/ncdevcon-on-line-session-videos.html' title='NCDEVCON On-line Session Videos'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7459104479127643686</id><published>2010-01-22T17:50:00.000-08:00</published><updated>2010-01-22T18:24:02.322-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>CF9 GetMemento() that works with inheritance</title><content type='html'>&lt;p&gt;Here's my take on getMemento() in CF9... (non-recursive)&lt;/p&gt;  &lt;p&gt;You might&amp;#160; want to return a duplicate() of &lt;code&gt;properties&lt;/code&gt; if you like.     &lt;br /&gt;    &lt;br /&gt;&lt;code&gt;struct &lt;strong&gt;function&lt;/strong&gt; getMemento()       &lt;br /&gt;{       &lt;br /&gt;&amp;#160; var properties = {};       &lt;br /&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; for (local.md = getMetaData(this);&lt;/code&gt;     &lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; structKeyExists(md, &amp;quot;extends&amp;quot;);&lt;/code&gt;     &lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; md = md.extends)      &lt;br /&gt;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (structKeyExists(md, &amp;quot;properties&amp;quot;))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (local.i = 1; &lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i &amp;lt;= arrayLen(md.properties);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i++)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; local.pName = md.properties[i].name;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; local.properties[pName] &lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = structKeyExists(variables, pName) ? &lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; variables[pName] : &amp;quot;&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; return properties;       &lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7459104479127643686?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7459104479127643686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/01/cf9-getmemento-that-works-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7459104479127643686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7459104479127643686'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2010/01/cf9-getmemento-that-works-with.html' title='CF9 GetMemento() that works with inheritance'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-1556082773498773226</id><published>2009-10-04T21:18:00.001-07:00</published><updated>2009-10-04T21:18:10.361-07:00</updated><title type='text'>Adobe ColdFusion 9 released!!!</title><content type='html'>&lt;p&gt;&lt;a title="http://www.adobe.com/products/coldfusion/" href="http://www.adobe.com/products/coldfusion/"&gt;http://www.adobe.com/products/coldfusion/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-1556082773498773226?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/1556082773498773226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/10/adobe-coldfusion-9-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/1556082773498773226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/1556082773498773226'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/10/adobe-coldfusion-9-released.html' title='Adobe ColdFusion 9 released!!!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7681514114839064846</id><published>2009-10-02T12:44:00.001-07:00</published><updated>2009-10-02T12:44:42.276-07:00</updated><title type='text'>Building iPhone Apps with HTML, CSS, and JavaScript</title><content type='html'>&lt;p&gt;&lt;a title="http://building-iphone-apps.labs.oreilly.com/" href="http://building-iphone-apps.labs.oreilly.com/"&gt;http://building-iphone-apps.labs.oreilly.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Awesome, I will read this later.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7681514114839064846?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7681514114839064846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/10/building-iphone-apps-with-html-css-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7681514114839064846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7681514114839064846'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/10/building-iphone-apps-with-html-css-and.html' title='Building iPhone Apps with HTML, CSS, and JavaScript'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7213313455155065803</id><published>2009-09-17T20:46:00.001-07:00</published><updated>2009-09-17T20:46:15.651-07:00</updated><title type='text'>Wanna learn Git?</title><content type='html'>&lt;p&gt;Watch &lt;a href="http://developer.yahoo.com/yui/theater/video.php?v=prestonwerner-github" target="_blank"&gt;&lt;strong&gt;Tom Preston-Werner, Chris Wanstrath and Scott Chacon — Git, GitHub and Social Coding&lt;/strong&gt;&lt;/a&gt; on &lt;a href="http://developer.yahoo.com/" target="_blank"&gt;&lt;em&gt;Yahoo Developer Network&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Sorry, my blog entry is getting shorter and shorter, blame #Twitter!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7213313455155065803?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7213313455155065803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/wanna-learn-git.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7213313455155065803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7213313455155065803'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/wanna-learn-git.html' title='Wanna learn Git?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6052906790117194562</id><published>2009-09-17T19:03:00.001-07:00</published><updated>2009-09-18T14:23:05.844-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>How to use cfinclude in CFScript (CF9)?</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;include &amp;quot;path/andfilename.cfm&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Thanks &lt;a href="http://twitter.com/paulkukiel/statuses/4068958674" target="_blank"&gt;@PaulKukiel&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;update: and Adam's comment below..&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6052906790117194562?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6052906790117194562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/how-to-use-cfinclude-in-cfscript-cf9.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6052906790117194562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6052906790117194562'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/how-to-use-cfinclude-in-cfscript-cf9.html' title='How to use cfinclude in CFScript (CF9)?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6296715687186574347</id><published>2009-09-11T12:19:00.001-07:00</published><updated>2009-09-11T12:20:11.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='MXUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>Workaround for using MXUnit in a CF9 ORM app?</title><content type='html'>&lt;p&gt;If you want to use &lt;a href="http://mxunit.org/" target="_blank"&gt;MXUnit&lt;/a&gt; within a CF9 ORM app, you’ll need to delete &lt;em&gt;application.cfm&lt;/em&gt; in the mxunit folder (don’t worry, it is safe to do so) and move the mxunit folder inside your application folder.&amp;#160; Then you may get the following exception:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Error Occurred While Processing Request        &lt;br /&gt;Context Validation error for tag cffunction         &lt;br /&gt;The end tag &amp;lt;/cffunction&amp;gt; encountered on line 12 at column 11 requires a matching start tag.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you encountered a similar error to the one above, here’s the workaround.&amp;#160; In your own Application.cfc, set:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;this.ormsettings.cfclocation = YOUR_CFC_FOLDER_PATH&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Happy unit-testing. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6296715687186574347?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6296715687186574347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/workaround-for-using-mxunit-in-cf9-orm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6296715687186574347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6296715687186574347'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/workaround-for-using-mxunit-in-cf9-orm.html' title='Workaround for using MXUnit in a CF9 ORM app?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6000074739289564431</id><published>2009-09-09T12:46:00.001-07:00</published><updated>2009-09-09T13:00:26.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>Should CF9 officially introduce the null value?</title><content type='html'>&lt;p&gt;Thank you Adobe for giving us &lt;a href="http://www.bennadel.com/blog/1654-Learning-ColdFusion-9-IsNull-And-Working-With-NULL-Values.htm" target="_blank"&gt;&lt;strong&gt;IsNull() &lt;/strong&gt;function&lt;/a&gt;, and we can finally use that instead of the more verbose &lt;strong&gt;StructKeyExists()&lt;/strong&gt; or the less efficient &lt;strong&gt;IsDefined(),&lt;/strong&gt; but how do I set a variable to null?&lt;/p&gt;  &lt;p&gt;When do we need to set a property to null?&amp;#160; How about a property in a &lt;em&gt;persistent=true &lt;/em&gt;component that represents a nullable column?&amp;#160; &lt;/p&gt;  &lt;p&gt;Let’s say for the Member table, the &lt;em&gt;gender&lt;/em&gt; field is optional, the &lt;em&gt;gender &lt;/em&gt;column is nullable.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;option 1: setGenderNull() method in Member.cfc:&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;public void function setGenderNull() {        &lt;br /&gt;&amp;#160; structDelete(variables, “gender”);         &lt;br /&gt;}&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;option 2: use setGender():&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;m = EntityLoad(“member”, memberID);       &lt;br /&gt;m.setGender(JavaCast(&amp;quot;null&amp;quot;, &amp;quot;&amp;quot;));&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notice that this is totally valid, but this is weird because I’m not really doing anything java, but I’m forced to use JavaCast() function, why?&amp;#160; There’s no ‘null’ value in CF!&lt;/p&gt;  &lt;p&gt;Would you like CF to introduce &lt;strong&gt;NULL&lt;/strong&gt; as a new reserved word?&amp;#160; Then we can finally do:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;m.setGender(null);&amp;#160;&amp;#160; &lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;// CFML becoming more java?&amp;#160; What do you think?&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6000074739289564431?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6000074739289564431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/should-cf9-officially-introduce-null.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6000074739289564431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6000074739289564431'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/09/should-cf9-officially-introduce-null.html' title='Should CF9 officially introduce the null value?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-8243757379207959597</id><published>2009-08-28T13:24:00.001-07:00</published><updated>2009-08-28T13:24:02.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>Do not put required arguments in init() if…</title><content type='html'>&lt;p&gt;… if CFC persistent=”true” (in CF9 beta). &lt;/p&gt;  &lt;p&gt;For instance, when you use ORMExecuteQuery() to return an array of that entity with init(required arg), it will throw an exception.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-8243757379207959597?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/8243757379207959597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/do-not-put-required-arguments-in-init.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8243757379207959597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8243757379207959597'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/do-not-put-required-arguments-in-init.html' title='Do not put required arguments in init() if…'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-242528037062497227</id><published>2009-08-26T00:01:00.001-07:00</published><updated>2009-08-26T00:01:58.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='cf9'/><title type='text'>Should we abandon Instance scope in CF9?</title><content type='html'>&lt;p&gt;&lt;em&gt;INSTANCE&lt;/em&gt; scope is never an official scope, but it has been adapted by many CFer's (including myself) for writing CFC.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;lt;cfset variables.instance = structNew()&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Common usages include: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;dump() private variables for debugging &lt;/li&gt;    &lt;li&gt;getMemento() / setMemento(struct) &lt;/li&gt;    &lt;li&gt;clone()&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;However, CF9 brings lots of much needed &amp;lt;cfproperty&amp;gt; functionality:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;cfdump&amp;gt; will now dump all properties &lt;/li&gt;    &lt;li&gt;implicit getters and setters (can be turn off optionally) &lt;/li&gt;    &lt;li&gt;validation on setter (optional) &lt;/li&gt;    &lt;li&gt;metadata for the almighty ORM with Hibernate&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Unfortunately, all the properties are stored in &lt;em&gt;VARIABLES &lt;/em&gt;scope by default, and it can’t be changed.&amp;#160; However, since &amp;lt;cfproperty&amp;gt; has become so important and powerful in CF9, should we abandon the &lt;em&gt;INSTANCE &lt;/em&gt;scope convention?&amp;#160; &lt;/p&gt;  &lt;p&gt;What do you think?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-242528037062497227?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/242528037062497227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/should-we-abandon-instance-scope-in-cf9.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/242528037062497227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/242528037062497227'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/should-we-abandon-instance-scope-in-cf9.html' title='Should we abandon Instance scope in CF9?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-5808182444883925665</id><published>2009-08-24T17:34:00.000-07:00</published><updated>2009-10-16T17:15:11.463-07:00</updated><title type='text'>CF9 beta: cfinterface does not respect implicit getters/setters</title><content type='html'>I'm excited these days because I get to play with CF9 for a new project. However, I'm disappointed that &lt;code&gt;&amp;lt;cfinterface&amp;gt;&lt;/code&gt; does not respect implicit getters and setters.  &lt;br /&gt;  &lt;br /&gt;I was working on a CreditCard.cfc that implements ICreditCard.cfc in CF8.  &lt;br /&gt;  &lt;br /&gt;&lt;span style="font-weight: bold"&gt;CreditCard.cfc&lt;/span&gt; has holdername, number, expiryMM, and expiryYYYY properties defined using &lt;code&gt;&amp;lt;cfproperty&amp;gt;&lt;/code&gt;.  &lt;br /&gt;  &lt;br /&gt;&lt;span style="font-weight: bold"&gt;ICreditCard.cfc&lt;/span&gt; (interface) has &lt;code&gt;getHolderName(), getNumber(), getExpiryMM(), getExpiryYYYY()&lt;/code&gt;.  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;I then try removing the getters from CreditCard.cfc, but CF9 complains:  &lt;br /&gt;  &lt;blockquote&gt;&amp;quot;The getNumber method is not implemented by the component or it is declared as private.&amp;quot;&lt;/blockquote&gt;  &lt;br /&gt;  &lt;br /&gt;Oh, that sucks. Don't you agree?  &lt;p&gt;&lt;strong&gt;UPDATE: CF9 FINAL will generate the getter and setter methods for you when you specify accessors=true, and they Will respace the interface if the method signatures are the same!&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-5808182444883925665?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/5808182444883925665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/cf9-cfinterface-does-not-respect.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/5808182444883925665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/5808182444883925665'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/08/cf9-cfinterface-does-not-respect.html' title='CF9 beta: cfinterface does not respect implicit getters/setters'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-2218554468321498536</id><published>2009-05-31T14:01:00.001-07:00</published><updated>2009-05-31T14:01:08.445-07:00</updated><title type='text'>Excellent FLEX tutorials PDF</title><content type='html'>&lt;p&gt;Last Thursday, my coworkers and I attended &lt;a href="http://flash.meetup.com/110/calendar/10129317/" target="_blank"&gt;Free Full Day Training for Flex/AIR/Flash!&lt;/a&gt; conference locally at Vancouver &lt;a href="http://www.vancouver.sfu.ca/" target="_blank"&gt;SFU Harbour Centre campus&lt;/a&gt;.&amp;#160; Thank you everyone for making such event happen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www3.telus.net/henryho/pdf/VancouverRIADay.pdf" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_YEbWCxPKDw4/SiLwFND1GWI/AAAAAAAAASk/BOnjNEgOFnc/image%5B3%5D.png?imgmax=800" width="244" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download: &lt;/strong&gt;&lt;a href="http://www3.telus.net/henryho/pdf/VancouverRIADay.pdf" target="_blank"&gt;&lt;strong&gt;VancouverRIADay.pdf&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; here!&amp;#160; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are &lt;strong&gt;26 step by step labs &lt;/strong&gt;in the PDF that will turn you into a Flex developer in a snap! :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-2218554468321498536?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/2218554468321498536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/05/excellent-flex-tutorials-pdf.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2218554468321498536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2218554468321498536'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/05/excellent-flex-tutorials-pdf.html' title='Excellent FLEX tutorials PDF'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_YEbWCxPKDw4/SiLwFND1GWI/AAAAAAAAASk/BOnjNEgOFnc/s72-c/image%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-2516564626367905600</id><published>2009-05-15T11:35:00.001-07:00</published><updated>2009-05-15T13:22:12.253-07:00</updated><title type='text'>Oops, livedoc.Adobe.com forgot about onError()?</title><content type='html'>&lt;p&gt;Today when I tried to access adobe’s livedoc…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_YEbWCxPKDw4/Sg211SO8BdI/AAAAAAAAARs/gITrojq35jo/s1600-h/Capture%5B25%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Capture" border="0" alt="Capture" src="http://lh6.ggpht.com/_YEbWCxPKDw4/Sg2118IpZmI/AAAAAAAAARw/4OEFMSVDpls/Capture_thumb%5B21%5D.png?imgmax=800" width="394" height="311" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yikes?! ;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-2516564626367905600?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/2516564626367905600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/05/oops-adobecom-forgot-about-onerror.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2516564626367905600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2516564626367905600'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/05/oops-adobecom-forgot-about-onerror.html' title='Oops, livedoc.Adobe.com forgot about onError()?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_YEbWCxPKDw4/Sg2118IpZmI/AAAAAAAAARw/4OEFMSVDpls/s72-c/Capture_thumb%5B21%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-2935709391971009223</id><published>2009-04-22T10:31:00.001-07:00</published><updated>2009-04-22T10:31:21.495-07:00</updated><title type='text'>Very First Steps in Flex Refcard</title><content type='html'>&lt;p&gt;Today I found this gem from &lt;a href="http://dzone.com" target="_blank"&gt;dzone.com&lt;/a&gt;…&lt;/p&gt;  &lt;blockquote&gt;   &lt;h5&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 5px 0px; display: inline; border-top: 0px; border-right: 0px" border="0" align="left" src="http://refcardz.dzone.com/sites/all/files/refcardz/thumbs/4518.png" /&gt;&lt;/h5&gt;    &lt;h4&gt;Very First Steps in Flex&lt;/h4&gt;    &lt;p&gt;Rich Internet Applications and Flex are taking off. Many developers need to learn Flex fast. This refcard will help readers get started learning Flex. Firstly, a simple “Hello, World” application which will help familiarize readers with the Flex Builder tool and programming model. Secondly, we'll go into depth about how to connect Flex applications to back-end data through RESTful XML and SOAP. And lastly, “Remoting and Messaging with Java” walks through how to easily connect to a Java back-end with the open source BlazeDS product.&lt;/p&gt;    &lt;p&gt;Features include Hello, World, Web Services, Remoting and Messaging with Java, Hot Tips and more.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://refcardz.dzone.com/assets/request/refcard/4518" target="_blank"&gt;Download it here (PDF)!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I think it is nice.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-2935709391971009223?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/2935709391971009223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/04/very-first-steps-in-flex-refcard.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2935709391971009223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/2935709391971009223'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/04/very-first-steps-in-flex-refcard.html' title='Very First Steps in Flex Refcard'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-4203330648055449652</id><published>2009-04-15T17:25:00.001-07:00</published><updated>2009-04-15T17:25:29.301-07:00</updated><title type='text'>Dear CFDUMP, why don’t you HtmlEditFormat() your output!?</title><content type='html'>&lt;p&gt;Today I finally tried using &lt;a href="#  http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_u-z_4.html" target="_blank"&gt;&amp;lt;cfxml&amp;gt;&lt;/a&gt; for the first time.&amp;#160; However, when I tried using an element from the xml, it always have an empty space in front. Hmm…&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;lt;cfoutput&amp;gt;’#value#’&amp;lt;/cfoutput&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;At first I thought it is some CF quirks, so I tried&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;lt;cfprocessingdirective suppressWhiteSpace=”true”&amp;gt; &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;but the white space is still there somehow…&lt;/p&gt;  &lt;p&gt;Then I tried putting a &lt;code&gt;Trim()&lt;/code&gt; around the value, but the white space still there!!! What!?&lt;/p&gt;  &lt;p&gt;Finally, I highlight the non-removable space, right-click, “view selection source” in Firefox, and THERE IT IS!&lt;/p&gt;  &lt;p&gt;&lt;code&gt;‘&amp;lt;myElement&amp;gt;xxx&amp;lt;/myElement&amp;gt;’&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Lesson learned.&amp;#160; I needed to reference &lt;code&gt;&lt;strong&gt;myElement.XmlText&lt;/strong&gt;&lt;/code&gt; to get &lt;code&gt;‘xxx’&lt;/code&gt;.&lt;/p&gt;  &lt;p&gt;If &lt;code&gt;&lt;a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_d-e_08.html" target="_blank"&gt;&amp;lt;cfdump&amp;gt;&lt;/a&gt;&lt;/code&gt; does a &lt;code&gt;&lt;a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_h-im_04.html" target="_blank"&gt;HtmlEditFormat()&lt;/a&gt;&lt;/code&gt; for the browser output… I guess I’ll have nothing to blog about today.&amp;#160; :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-4203330648055449652?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/4203330648055449652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/04/dear-cfdump-why-dont-you-htmleditformat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4203330648055449652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4203330648055449652'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/04/dear-cfdump-why-dont-you-htmleditformat.html' title='Dear CFDUMP, why don’t you HtmlEditFormat() your output!?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6993593820220233321</id><published>2009-03-25T12:48:00.001-07:00</published><updated>2009-03-25T13:15:36.653-07:00</updated><title type='text'>“學如逆水行舟,不進則退” Keep learning mate!</title><content type='html'>&lt;p&gt;No, my blog is not hacked by a Chinese worm. :)&amp;#160; The title of this entry is a famous Chinese proverb about learning.&amp;#160; It is frequently used to encourage students to keep learning.&lt;/p&gt;  &lt;p&gt;English translation of the proverb: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Learning is like travelling on a little boat against the current.&amp;#160; You either go forward (by working/paddling hard), or you will be pushed backward.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So moving forward, my goal this year is to learn:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;&lt;em&gt;Flex&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://www.adobe.com/products/air/" target="_blank"&gt;&lt;em&gt;AIR&lt;/em&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.coldboxframework.com/" target="_blank"&gt;&lt;em&gt;ColdBox Framework&lt;/em&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://groovy.codehaus.org/Documentation" target="_blank"&gt;&lt;em&gt;Groovy&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://barneyb.com/cfgroovy/" target="_blank"&gt;&lt;em&gt;CFGroovy&lt;/em&gt;&lt;/a&gt;&lt;em&gt; with &lt;/em&gt;&lt;a href="http://www.hibernate.org/" target="_blank"&gt;&lt;em&gt;Hibernate&lt;/em&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Looking back, what have I learned last year?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.adobe.com/products/coldfusion/" target="_blank"&gt;&lt;em&gt;ColdFusion&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.model-glue.com/coldfusion.cfm" target="_blank"&gt;&lt;em&gt;Model-Glue&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.coldspringframework.org/" target="_blank"&gt;&lt;em&gt;ColdSpring&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://jquery.com/" target="_blank"&gt;&lt;em&gt;jQuery&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://jqueryui.com/" target="_blank"&gt;&lt;em&gt;jQuery UI&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;some &lt;/em&gt;&lt;a href="http://www.transfer-orm.com/" target="_blank"&gt;&lt;em&gt;Transfer&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Let’s keep learning everyone! :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6993593820220233321?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6993593820220233321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/blog-post.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6993593820220233321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6993593820220233321'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/blog-post.html' title='“學如逆水行舟,不進則退” Keep learning mate!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-9032068139316700679</id><published>2009-03-23T18:10:00.001-07:00</published><updated>2009-03-23T18:22:35.222-07:00</updated><title type='text'>Book Review: “Career 2.0: Take Control of Your Life”</title><content type='html'>&lt;p&gt;Recently I’ve been asking myself, what step I should take next in my career path.&amp;#160; While I was glancing through the 200+ topics from the feed aggregators on Google Reader, &lt;a href="http://www.pbell.com/index.cfm/2009/3/20/NFJS-Keynote-Career-20--From-Grunt-to-Guru" target="_blank"&gt;this blog entry from Peter Bell&lt;/a&gt; caught my eye.&amp;#160; He highly recommended &lt;a href="http://www.lulu.com/content/5925115" target="_blank"&gt;this book&lt;/a&gt;, which can be purchased as a PDF for US$12.50, so I bought it and gave it read.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lulu.com/content/5925115" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://lh4.ggpht.com/_YEbWCxPKDw4/ScgzFCvnrcI/AAAAAAAAAQ4/oTgZoChZ5No/image%5B10%5D.png?imgmax=800" width="163" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Before I purchased the book, I was hoping that I can get some great insights on my next career move, but I think the book fell short of my expectation.&lt;/p&gt;  &lt;p&gt;The first chapter or two was okay.&amp;#160; It explains what are jellyfish, developers who only learn and use what’re needed in projects at work, and what are sharks, developers who learn technologies outside of work.&amp;#160; It encourages the readers to be more like sharks.&lt;/p&gt;  &lt;p&gt;Then it has a few chapters on improving the writing and public speaking skills, which I did not expect to find on a book about career.&amp;#160; It encourages one to blog and speak at local user group, and then write a book or speak at a conference later.&lt;/p&gt;  &lt;p&gt;I found myself already near the end of the book before I expected.&amp;#160; The book ends with several “been there, done that” software developers talking about how their career lives were formed and things that they have learned.&amp;#160; I think they are quite valuable, but many of them have already been quoted throughout the first few chapters, reading them again seems repetitive.&lt;/p&gt;  &lt;p&gt;Overall, I think it is an easy read, but it was just okay in terms of the quality and quantity of the original content.&amp;#160; Fortunately, it was not expensive.&amp;#160; :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-9032068139316700679?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/9032068139316700679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/book-review-career-20-take-control-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/9032068139316700679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/9032068139316700679'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/book-review-career-20-take-control-of.html' title='Book Review: “Career 2.0: Take Control of Your Life”'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_YEbWCxPKDw4/ScgzFCvnrcI/AAAAAAAAAQ4/oTgZoChZ5No/s72-c/image%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-8301578342140098058</id><published>2009-03-20T17:18:00.001-07:00</published><updated>2009-03-20T17:32:48.563-07:00</updated><title type='text'>How do you get motivated at work?</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_YEbWCxPKDw4/ScQyZF8uGsI/AAAAAAAAAQw/SVrHJv11PKQ/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/_YEbWCxPKDw4/ScQyZa6QiMI/AAAAAAAAAQ0/7sBXnNNTU6Q/image_thumb%5B6%5D.png?imgmax=800" width="240" height="213" /&gt;&lt;/a&gt; Where do you find your motivation?&amp;#160; Are you really passionate about the project you’re working on?&amp;#160; Is your goal to become the best software developer like a Kung Fu Master?&amp;#160; Or… something else?&lt;/p&gt;  &lt;p&gt;I remember back then when I was in college, our team can code up a project full of features and reasonable reliable in just a few weeks.&amp;#160; Yes, the code might not be in the best shape, but I can remember that we used to have the project implemented in a passionate way.&amp;#160; Why?&amp;#160; Maybe it was because there are different teams working on the same project and we wanted to be the best team.&amp;#160; Or maybe we wanted to get good marks so that we can graduate.&amp;#160; Or maybe we were naive and thought the employer would mine what grade I got in course XXX.&lt;/p&gt;  &lt;p&gt;After working at a company for around 2 years now, I’ve noticed that my fellow workers, including myself, feels less passionate about what we do.&amp;#160; What should we do?&amp;#160; What’s wrong with us?&lt;/p&gt;  &lt;p&gt;If you’re working full-time at a company, what drives you to do what you do?&amp;#160; Maybe… stock-option?&amp;#160; bonus?&amp;#160; a share of the revenue?&lt;/p&gt;  &lt;p&gt;If you’re working by contract, what drives you to do what you do?&amp;#160; Use the current contract to get the next big contract?&lt;/p&gt;  &lt;p&gt;Please give me some feedback… I’d really like to know.&amp;#160; :-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-8301578342140098058?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/8301578342140098058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/how-do-you-get-motivated-at-work.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8301578342140098058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/8301578342140098058'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/how-do-you-get-motivated-at-work.html' title='How do you get motivated at work?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_YEbWCxPKDw4/ScQyZa6QiMI/AAAAAAAAAQ0/7sBXnNNTU6Q/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6364767768560008801</id><published>2009-03-13T11:40:00.001-07:00</published><updated>2009-03-13T11:43:19.480-07:00</updated><title type='text'>No Pain, No Gain</title><content type='html'>&lt;p&gt; In an &lt;a href="http://www.reynoldsftw.com/2009/03/questions-with-jquery-ui-creator-paul-bakaus/"&gt;interview with the creator of jQuery UI&lt;/a&gt;, Paul Bakaus explains how jQuery UI was born:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I had a day job, and I estimated I would need to work on it 3-4 hours everyday. After some days of consideration, I finally said ‘yes’, and for a three month period woke up every day at 6am to work for 3 hours on jQuery UI and then go to my day job. Now I can say that it was worth it. :)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_YEbWCxPKDw4/SbqpRs_3UxI/AAAAAAAAAQs/xi3D5kP9x3c/image_thumb%5B2%5D.png?imgmax=800" width="244" height="173" /&gt;&lt;/p&gt;  &lt;p&gt;Reminder to self: “DON’T BE LAZY! YOU &lt;strong&gt;COUCH POTATO&lt;/strong&gt;!”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6364767768560008801?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6364767768560008801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/no-pain-no-gain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6364767768560008801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6364767768560008801'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/no-pain-no-gain.html' title='No Pain, No Gain'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_YEbWCxPKDw4/SbqpRs_3UxI/AAAAAAAAAQs/xi3D5kP9x3c/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7665510208944693301</id><published>2009-03-02T14:28:00.000-08:00</published><updated>2009-03-02T14:33:44.867-08:00</updated><title type='text'>"DAO / Gateway nonsense in CF"</title><content type='html'>I did not say that, &lt;a href="http://corfield.org/"&gt;Sean Corfield&lt;/a&gt; did! (on &lt;a href="http://groups.google.com/group/cfcdev/msg/e37d9a53b5801403"&gt;this CFCDev post&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Since I'm sort of responsible for the separate DAO / Gateway nonsense in CF - due to a recommendation I made in 2003 in the Mach-II Development Guide - I'd really like to see it completely eradicated! (&lt;a href="http://groups.google.com/group/cfcdev/msg/e37d9a53b5801403"&gt;more...&lt;/a&gt;)&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7665510208944693301?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7665510208944693301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/dao-gateway-nonsense-in-cf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7665510208944693301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7665510208944693301'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/03/dao-gateway-nonsense-in-cf.html' title='&quot;DAO / Gateway nonsense in CF&quot;'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7107801208947653173</id><published>2009-01-30T08:14:00.001-08:00</published><updated>2009-01-30T08:20:29.026-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Railo will rock the CFML world!</title><content type='html'>&lt;p&gt;I watched the &lt;a href="http://experts.na3.acrobat.com/p47735834/"&gt;record Railo Open Source presentation&lt;/a&gt; yesterday, and I must say, it is the best thing that has happened in the CFML world!&amp;#160; Don’t you agree?&lt;/p&gt;  &lt;p&gt;It is almost like what Firefox did to MS’s IE6.&amp;#160; Let’s challenge the big guy with something competitive and &lt;em&gt;FREE&lt;/em&gt;!&lt;/p&gt;  &lt;p&gt;It is wonderful to hear from Railo’s mouth that Adobe, Railo and OpenBD do work together to ensure CFML/cfscript consistence and high compatibility.&amp;#160; The last thing we CFML developers want is to remember a long list of what works which CFML engine and what not.&amp;#160; Thumbs up for the guys in that committee.&lt;/p&gt;  &lt;p&gt;I like the direction Railo 3 open source is heading.&amp;#160; Every decisions they have made seem very smart.&amp;#160; I wish jBoss and Railo all the best, especially when it comes to marketing CFML to the JAVA/JSP crowd and beyond.&amp;#160; It’s time to improve the reputation of CFML!&amp;#160; I hope that one day when we tell people that we write CFML for a living, we won’t be looked down by our peers with questions like “Isn’t CF[ML] dead?”&lt;/p&gt;  &lt;p&gt;Lastly, I’m not sure why they’re launching on March 31/April 1st though… would people take it seriously? ;-)&lt;/p&gt;  &lt;p&gt;CF9 vs Railo3!&amp;#160; The fight of 2009!&amp;#160; Oh wait… is CF9 releasing this year?&lt;/p&gt;  &lt;p&gt;The next interesting fight:&amp;#160; CFEclipse vs. Bolt.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7107801208947653173?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7107801208947653173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/railo-will-rock-cfml-world.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7107801208947653173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7107801208947653173'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/railo-will-rock-cfml-world.html' title='Railo will rock the CFML world!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-5477711925083398928</id><published>2009-01-23T15:52:00.001-08:00</published><updated>2009-01-23T17:12:27.274-08:00</updated><title type='text'>Scalable solution for routing dynamically created sub-domain?</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://henrylearnstorock.blogspot.com/2009/01/scalable-solution-for-routing.html';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_title = 'Scalable solution for routing dynamically created sub-domain?';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_blurb = 'It is very common nowadays to have a sub-domain created upon a successful user registration. How to write a web app that does that efficiently and easy to scale?';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;p&gt;It is very common nowadays to have a sub-domain created upon a successful user registration.&amp;#160; How to write a web app that does that efficiently and easy to scale? &lt;/p&gt;  &lt;p&gt;The most common solution is to insert a *.domain.com entry to the DNS server, and make use of mod-rewrite or look at CGI scope at the application level to determine the correct user.&lt;/p&gt;  &lt;p&gt;However, what happen when you have a lot of users, and the single server *.domain.com is pointing to is not enough?&lt;/p&gt;  &lt;p&gt;Someone suggested me to make use of a load balancer, but that will require some sort of clustering, and we all know how expensive that can cost in terms of hardware &amp;amp; software.&amp;#160; Most software requires a more expensive edition to support clustering.&lt;/p&gt;  &lt;p&gt;What if, we borrow the idea of &lt;a href="http://en.wikipedia.org/wiki/Partition_(database)"&gt;Partition&lt;/a&gt; in the DB world, and apply it to the whole stack (Application Server + File Server + SQL Server)?&amp;#160; It sounds like a good idea… but who’s responsible for directing traffic?&lt;/p&gt;  &lt;p&gt;DNS seems to be the most logical place, since it can manage sub-domain easily with A-record’s.&amp;#160; However, inserting a new row into the zone file requires a DNS server restart (at least for BIND, the most common DNS server).&amp;#160; Although there is no hard limit on the file size of a zone file, requiring a restart for every new sub-domain entry seems rather crazy.&amp;#160; The loading of that potentially huge zone file can also introduce latency, and we don’t want our newly registered user to experience site no found, right?&lt;/p&gt;  &lt;p&gt;I &lt;a href="http://stackoverflow.com/questions/474244/1-a-record-for-every-subdomain-10000-any-potential-issues-any-other-solution"&gt;asked the same question on stackoverflow.com&lt;/a&gt;, but so far there’re no one answer that satisfies my needs.&amp;#160; Therefore, I thought of making this blog post and cry for help. :)&lt;/p&gt;  &lt;p&gt;If you have any suggestion and insight, please fill me a comment, or answer &lt;a href="http://stackoverflow.com/questions/474244/1-a-record-for-every-subdomain-10000-any-potential-issues-any-other-solution"&gt;my question at stackoverflow.com&lt;/a&gt;.&amp;#160; Thank you!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-5477711925083398928?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/5477711925083398928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/scalable-solution-for-routing.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/5477711925083398928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/5477711925083398928'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/scalable-solution-for-routing.html' title='Scalable solution for routing dynamically created sub-domain?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-972340204733143718</id><published>2009-01-18T19:37:00.000-08:00</published><updated>2009-01-19T08:05:47.925-08:00</updated><title type='text'>MVP of Head First OOA&amp;D</title><content type='html'>To be honest, the Most Valuable Page (MVP) of all 500+ pages of &lt;a href="http://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678" title="Head First Object-Oriented Analysis and Design"&gt;this book&lt;/a&gt; is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YEbWCxPKDw4/SXP1uULC8FI/AAAAAAAAAQI/fNPwUvHaLKw/s1600-h/Capture.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 396px; height: 400px;" src="http://1.bp.blogspot.com/_YEbWCxPKDw4/SXP1uULC8FI/AAAAAAAAAQI/fNPwUvHaLKw/s400/Capture.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5292844163128291410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This book is very easy to read, but I expected something more advanced.  Any other recommendation that can put me on track to become an OO Guru? :)&lt;br /&gt;&lt;br /&gt;update: if I'm violating any copyright law, please let me know and I will remove the image immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-972340204733143718?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/972340204733143718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/mvp-from-head-first-ooa.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/972340204733143718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/972340204733143718'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/mvp-from-head-first-ooa.html' title='MVP of Head First OOA&amp;D'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YEbWCxPKDw4/SXP1uULC8FI/AAAAAAAAAQI/fNPwUvHaLKw/s72-c/Capture.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-7814448770792813246</id><published>2009-01-16T11:54:00.000-08:00</published><updated>2009-01-16T12:06:50.241-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>"Why is ColdFusion so unpopular?"</title><content type='html'>OK, I'm &lt;span style="font-weight:bold;"&gt;not &lt;/span&gt;on the side of "CF is DEAD", because we know it is not with CF9 coming.  However, I'm very interested to see how people in the industry thinks about ColdFusion in general.  Therefore, I posted the question "Why is ColdFusion so unpopular?" to &lt;a href="http://stackoverflow.com/"&gt;stackover.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Someone tried to change the title to "Why is ColdFusion not as popular as ASP, ASP.NET or PHP?", but I revert back to "Why is ColdFusion so unpopular?" for a broader discussion, rather than just language &amp; feature comparison.&lt;br /&gt;&lt;br /&gt;However, there were only 10 Answers because someone thought it is "subjective and argumentative" and closed the thread.&lt;br /&gt;&lt;br /&gt;Want to know how other thinks about CF outside of the CF community?  &lt;a href="http://stackoverflow.com/questions/449218/why-is-coldfusion-so-unpopular-closed"&gt;Read here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-7814448770792813246?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/7814448770792813246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/why-is-coldfusion-so-unpopular.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7814448770792813246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/7814448770792813246'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2009/01/why-is-coldfusion-so-unpopular.html' title='&quot;Why is ColdFusion so unpopular?&quot;'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-3841160560178176568</id><published>2008-12-12T19:06:00.000-08:00</published><updated>2008-12-12T19:19:39.416-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='insight'/><title type='text'>Fw: Top Java Developers Offer Advice to Students</title><content type='html'>&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;Contents&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Joshua Bloch: Write Lots of Code&lt;br /&gt;Tor Norbye: Learn to Use Your Tools&lt;br /&gt;Chet Haase: Don't Put Your Entire Application in One Method&lt;br /&gt;Ben Galbraith: Interact With an Expert&lt;br /&gt;Masood Mortazavi: Start Simple and Keep Learning&lt;br /&gt;Raghavan Srinivas: Don't Be Overwhelmed&lt;br /&gt;Cay Horstmann: First, Don't Panic&lt;br /&gt;Arun Gupta: Try Different IDEs&lt;br /&gt;Rick Cattell: Good Technology Is Only 10% of Success&lt;br /&gt;Chuk-Munn Lee: Choose an Area of Your Immediate Need&lt;br /&gt;Tom Ball: Programming Is Still a Craft &lt;/blockquote&gt;&lt;br /&gt;&amp;gt; &lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/studentdevs/"&gt;Link to the article here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This piece is really valuable to me.  I hope it is valuable to you too, and that's why I want to share it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-3841160560178176568?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/3841160560178176568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/12/fw-top-java-developers-offer-advice-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/3841160560178176568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/3841160560178176568'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/12/fw-top-java-developers-offer-advice-to.html' title='Fw: Top Java Developers Offer Advice to Students'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-4839773853096750331</id><published>2008-12-01T18:04:00.000-08:00</published><updated>2008-12-02T11:47:34.674-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>7 Principles for Transforming Difficult Tasks into Simple Ones</title><content type='html'>&lt;a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746"&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_YEbWCxPKDw4/STSYwHeicXI/AAAAAAAAAPw/V-axW5E6Ho0/s320/719KFS67JBL._SL500_AA240_.gif.jpg" alt="The Design of Everyday Things" id="BLOGGER_PHOTO_ID_5275009015965970802" border="0" align="left" style="margin:5px"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although this book is already 20 years old, surprisingly the design advices and observations still hold true for software UI today.  I have not finished reading the book, but these seven principles are so useful that I owe it to myself if I don't post it somewhere.&lt;br /&gt;&lt;br /&gt;Have you read any good books on software UI?&lt;br /&gt;&lt;br /&gt;Quote from &lt;a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746"&gt;The Design of Everyday Things&lt;/a&gt; , page 188-189&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use both knowledge in the world and knowledge in the head.&lt;/li&gt;&lt;li&gt;Simplify the structure of tasks&lt;/li&gt;&lt;li&gt;Make things visible: bridge the gulfs of Execution and Evaluation&lt;/li&gt;&lt;li&gt;Get the mappings right&lt;/li&gt;&lt;li&gt;Exploit the power of constraints, both natural and artificial&lt;/li&gt;&lt;li&gt;Design for error&lt;/li&gt;&lt;li&gt;When all else fails, standardize&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;br /&gt;If you don't want to buy the book, look it up from your local library!  I am pretty sure they have it!&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_url = 'http://henrylearnstorock.blogspot.com/2008/12/7-principles-for-transforming-difficult.html';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_title = '7 Principles for Transforming Difficult Tasks into Simple Ones';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_blurb = 'Although this book is already 20 years old, surprisingly the design advices and observations still hold true for software UI today...';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-4839773853096750331?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/4839773853096750331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/12/7-principles-for-transforming-difficult.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4839773853096750331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4839773853096750331'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/12/7-principles-for-transforming-difficult.html' title='7 Principles for Transforming Difficult Tasks into Simple Ones'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YEbWCxPKDw4/STSYwHeicXI/AAAAAAAAAPw/V-axW5E6Ho0/s72-c/719KFS67JBL._SL500_AA240_.gif.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-3947932358187775096</id><published>2008-11-05T16:40:00.001-08:00</published><updated>2008-11-05T17:15:08.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>WinHEC 2008 Coverage: Windows 7 looks very cool!</title><content type='html'>WinHEC 2008 Coverage&lt;br /&gt;&lt;iframe src="http://www.microsoft.com/PressPass/SilverlightApps/videoplayer_3/standalone.aspx?xml=http://wm.istreamplanet.com/customers/ms/750_ms_winhec_081105.asx&amp;amp;r=embed&amp;amp;id=0" scrolling="no" width="350" frameborder="0" height="340"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;Windows 7 seems like a very exciting product!  Even runs on a netbook? you kidding me!&lt;/p&gt;&lt;p&gt;Mac user: sorry you'll need to install &lt;a href="http://www.microsoft.com/Silverlight/resources/install.aspx"&gt;Silverlight Plugin&lt;/a&gt; if you don't have it installed already.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-3947932358187775096?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/3947932358187775096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/11/windows-7-looks-very-cool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/3947932358187775096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/3947932358187775096'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/11/windows-7-looks-very-cool.html' title='WinHEC 2008 Coverage: Windows 7 looks very cool!'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-1689232132600452917</id><published>2008-10-24T16:31:00.001-07:00</published><updated>2008-10-24T16:42:18.479-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Get burnt using underlying java method in CF array</title><content type='html'>&lt;p&gt;Today I received a bug report.&amp;nbsp; When I took a closer look at the bug, I realized that I used x.contains() method where x is a CF array.&amp;nbsp; The code needs to determine if an integer is in the array x, and the java &lt;em&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html#contains(java.lang.Object)"&gt;contains()&lt;/a&gt; &lt;/em&gt;method does exactly what I need. (FYI: CF array == &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html"&gt;java.utils.Vector&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;However, since the array is from JSON, hell breaks loose...&lt;/p&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;cfset a = [0,1,2]&amp;gt;&lt;br&gt;&amp;lt;cfset json = serializeJSON(a)&amp;gt;&lt;br&gt;&amp;lt;cfset b = deserializeJSON(json)&amp;gt;&lt;br&gt;&amp;lt;cfdump var="#a.contains(0)#"&amp;gt; &lt;br&gt;&amp;lt;cfdump var="#b.contains(0)#"&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;You would think both cfdump will give you "YES", but they do NOT!&lt;/p&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;YES NO&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Why? if you try it you'll find that after &lt;em&gt;serialized&lt;/em&gt; and &lt;em&gt;deserialized&lt;/em&gt; to and from JSON, the array actually became [0.0,1.0,2.0] ! You may verify with #d.toString()# if you don't believe me.&lt;/p&gt; &lt;p&gt;So... how do I continue to use contains()?&amp;nbsp; You would think &lt;nobr&gt;&lt;font color="#0000ff"&gt;b.contains(0.0)&lt;/font&gt;&lt;/nobr&gt; would work, but actually this is what you need:&lt;/p&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;b.contains(javacast('double',0))&lt;/font&gt;&lt;/p&gt; &lt;p&gt;...and this finally returns 'YES'.&lt;/p&gt; &lt;p&gt;However, since my code need to work with both [0] and [0.0], I ended up writing the contains function in CFML instead with &amp;lt;cfloop&amp;gt; and &amp;lt;cfif&amp;gt;.&lt;/p&gt; &lt;p&gt;I thought I would save time by calling underlying java method, but I actually ended up spending more time fixing this 'bug'... For those who use underlying java methods in CF, watch out! Especially when you use JSON!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-1689232132600452917?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/1689232132600452917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/10/get-burnt-using-underlying-java-method.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/1689232132600452917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/1689232132600452917'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/10/get-burnt-using-underlying-java-method.html' title='Get burnt using underlying java method in CF array'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-4229355897826454360</id><published>2008-10-01T13:07:00.001-07:00</published><updated>2008-10-01T13:29:55.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Have I used CF8 to its fullness?</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/henryho167/SOPZtxzw3yI/AAAAAAAAAO4/j-6Ufl-bm04/box_coldfusion8_150x150%5B14%5D.jpg"&gt;&lt;img style="margin: 0px 15px 5px 0px" height="100" alt="box_coldfusion8_150x150" src="http://lh4.ggpht.com/henryho167/SOPZuLFoLsI/AAAAAAAAAO8/7hcRVjJQ9ac/box_coldfusion8_150x150_thumb%5B12%5D.jpg" width="100" align="right"&gt;&lt;/a&gt;Our team is starting on a new project, and we will be in the low level design phase soon.&amp;nbsp; One question that popped in my mind over yesterday's meeting: &lt;strong&gt;Have we used CF8 to its fullness?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;CF8 brought a lot of new and improved features to the table.&amp;nbsp; Some of them I don't see us using any day, like .NET integration &amp;amp; Microsoft Exchange Server integration, while some of them we have tried, but then realize that they are not as useful as they seem at first.&lt;/p&gt; &lt;p&gt;Here are some CF8 functionalities that we tried or looked at but didn't get to use:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Ajax tags&lt;/strong&gt; are cool at first, but they turn out to be a big turn-off when...  &lt;ul&gt; &lt;li&gt;we realize how many .js files the client need (&lt;strong&gt;&lt;font color="#ff0000"&gt;20+&lt;/font&gt;&lt;/strong&gt; on average from Ext JS 1.1.1, YUI 2.3.0, &amp;amp; custom CF js from Adobe).  &lt;li&gt;there are only &lt;a href="http://extjs.com/learn/Ext_Extensions#Ext_1.x_Themes"&gt;so many additional theme available for Ext 1.x&lt;/a&gt; (1 to be exact) and &lt;em&gt;none &lt;/em&gt;of the 2.x themes work with Ext 1.x. CF8 comes the following themes in /cfide/scripts/ajax/et/resources/css:  &lt;ul&gt; &lt;li&gt;default (ext-all.css)  &lt;li&gt;aero (xtheme-aero.css)  &lt;li&gt;gray (xtheme-gray.css)  &lt;li&gt;vista (xtheme-vista.css)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;we realize &lt;a href="http://www.danvega.org/blog/index.cfm/extjs"&gt;how many hacks&lt;/a&gt; it takes to add functionalities to CFGRID that Adobe missed (calendar picker for type datefield anyone? context menu?).&amp;nbsp; For all hacks, at least 2 CF tags are needed: &amp;lt;cfsavecontent&amp;gt; and &amp;lt;cfhtmlhead&amp;gt;  &lt;li&gt;the &lt;a href="http://extjs.com/deploy/ext-1.1.1/docs/"&gt;documentation of Ext 1.1.1&lt;/a&gt; is not even linked by the main ExtJS page anymore and took us a while to find.&amp;nbsp; Good luck with the download link of Ext 1.1.1. :)  &lt;li&gt;&amp;lt;cfwindow&amp;gt; doesn't work inside a &amp;lt;cfinclude&amp;gt;, so it becomes a mess when you use any template system provided by your MVC framework.  &lt;li&gt;&amp;lt;cflayout type="border"&amp;gt;cannot be nested, and css inside the &amp;lt;cflayoutarea&amp;gt; can be problematic.  &lt;li&gt;&amp;lt;cflayout type="tab"&amp;gt; looks funny for a split seconds when the JS has not been processed by the browser  &lt;li&gt;&amp;lt;cfsavecontent&amp;gt; fails to save functionality of tags that generate JS scripts to head in order to function (e.g. cftooltip)  &lt;li&gt;&amp;lt;cftooltip&amp;gt; would sometimes show up on the lower left corner of the browser.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Server monitor&lt;/strong&gt;, as cool as they seem, do not work well with our framework of choice (i.e. &lt;a href="http://www.model-glue.com/"&gt;Model-Glue&lt;/a&gt;)  &lt;li&gt;&lt;strong&gt;&amp;lt;cfinterface&amp;gt;&lt;/strong&gt;, anyone use it when one can duck type?  &lt;li&gt;&lt;strong&gt;&amp;lt;cfpresentation&amp;gt; (&lt;a href="http://tutorial12.learncf.com/demo/12"&gt;demo&lt;/a&gt;)&lt;/strong&gt;, anyone uses it on a public site?&amp;nbsp; Somehow I can see it getting obsolete in the same rate of &amp;lt;cfform format="flash"&amp;gt;.&amp;nbsp; It provides only limited customization on the look, and therefore very hard to incorporate it into a site.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Then after a while, we come to the conclusion that we only like CF8's native JSON support, easier to cfloop an array, and the improvement in performance...&lt;/p&gt; &lt;p&gt;What is your answer to the question: &lt;strong&gt;&lt;em&gt;Have you used CF8 to its fullness?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-4229355897826454360?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/4229355897826454360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/10/have-i-used-cf8-to-its-fullness.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4229355897826454360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/4229355897826454360'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/10/have-i-used-cf8-to-its-fullness.html' title='Have I used CF8 to its fullness?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/henryho167/SOPZuLFoLsI/AAAAAAAAAO8/7hcRVjJQ9ac/s72-c/box_coldfusion8_150x150_thumb%5B12%5D.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-6861703004530687461</id><published>2008-09-15T15:11:00.000-07:00</published><updated>2008-09-15T18:06:48.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='model-glue'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='coldspring'/><title type='text'>Fat bean vs Fat service?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YEbWCxPKDw4/SM7nJpkzw7I/AAAAAAAAAOo/WygdNEJm5Mk/s1600-h/beans.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_YEbWCxPKDw4/SM7nJpkzw7I/AAAAAAAAAOo/WygdNEJm5Mk/s200/beans.jpg" alt="" id="BLOGGER_PHOTO_ID_5246384768898286514" border="0" /&gt;&lt;/a&gt;I recently started a thread on &lt;a href="http://groups.google.com/group/cfcdev"&gt;CFCDev&lt;/a&gt;, a google group for CFer's like you and me.&lt;br /&gt;&lt;br /&gt;Fat bean vs Fat service?&lt;br /&gt;&lt;a href="http://groups.google.com/group/cfcdev/browse_thread/thread/fd27e0332043278a"&gt;http://groups.google.com/group/cfcdev/browse_thread/thread/fd27e0332043278a&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;'Bean' was introduced to me when I was learning &lt;a href="http://www.model-glue.com/"&gt;Model-Glue&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While I did blindly use bean as instructed by MG and other tutorials on MG, I found that:&lt;br /&gt;&lt;br /&gt;1.) Some thinks bean is nothing more than using CFC as a struct to hold fields of forms.&lt;br /&gt;2.) Some thinks bean is nothing more than representing a table in SQL (data-centric extreme)&lt;br /&gt;3.) Some thinks bean is an object that handles everything internally and (talks to database)&lt;br /&gt;4.) Some thinks bean is an object that handles everything othan than talking to database (with external XXXDao.cfc)&lt;br /&gt;&lt;br /&gt;I have used a code generator to generate all the getters and setters. With code folding support by &lt;a href="http://www.cfeclipse.org/"&gt;CFEclipse&lt;/a&gt;, I don't mind them too much.  Using MG together with &lt;a href="http://www.coldspringframework.org/"&gt;ColdSpring&lt;/a&gt;, it seems the preferred way is to code most logic in the Service layer because they will be kept alive throughout the lifetime of the application through use of Singleton. However, doesn't that lean towards... procedural programming?&lt;br /&gt;&lt;br /&gt;I like the idea of having a "fat bean", and with that I can rely much less on getters and setters.  However, as the object grow larger with number of methods, wouldn't initializing the object be too expensive on CF8?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;What's your take?  Please continue the discussion at the &lt;a href="http://groups.google.com/group/cfcdev/browse_thread/thread/fd27e0332043278a"&gt;thread&lt;/a&gt;, or leave a comment here whatever is easier for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-6861703004530687461?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/6861703004530687461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/09/fat-bean-vs-fat-service.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6861703004530687461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/6861703004530687461'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/09/fat-bean-vs-fat-service.html' title='Fat bean vs Fat service?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YEbWCxPKDw4/SM7nJpkzw7I/AAAAAAAAAOo/WygdNEJm5Mk/s72-c/beans.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-451085195467267746</id><published>2008-08-22T03:50:00.000-07:00</published><updated>2008-08-22T04:37:39.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='top10'/><title type='text'>10 things I learned from my first job as web dev</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.dzone.com/"&gt;dzone&lt;/a&gt; is better than &lt;a href="http://www.digg.com/"&gt;digg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;there are frameworks that accelerate or &lt;span style="font-weight: bold;"&gt;decelerate &lt;/span&gt;your progress&lt;/li&gt;&lt;li&gt;how not to mess with code not in any version control&lt;br /&gt;&lt;/li&gt;&lt;li&gt;to &lt;span style="font-weight: bold;"&gt;love &lt;/span&gt;firefox &amp;amp; firebug &amp;amp; to &lt;span style="font-weight: bold;"&gt;hate &lt;/span&gt;IE6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;to be thankful there are tutorials blogged for newbies&lt;/li&gt;&lt;li&gt;not everyone uses OOP, and OOP is not for everything&lt;/li&gt;&lt;li&gt;interface is almost useless when you can duck type&lt;/li&gt;&lt;li&gt;taking a nap after lunch can gain productivity and weight&lt;br /&gt;&lt;/li&gt;&lt;li&gt;primary goal: keep the boss happy&lt;br /&gt;&lt;/li&gt;&lt;li&gt;coworker who looks Chinese might be Korean&lt;/li&gt;&lt;/ol&gt;What's your 10?  Do you still remember your first job??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-451085195467267746?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/451085195467267746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/08/10-random-things-i-learned-on-my-first.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/451085195467267746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/451085195467267746'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/08/10-random-things-i-learned-on-my-first.html' title='10 things I learned from my first job as web dev'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-587757890655208839.post-767611222653826083</id><published>2008-08-22T02:55:00.000-07:00</published><updated>2008-08-22T18:14:24.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>A year as a ColdFusion developer... now what?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YEbWCxPKDw4/SK6kfEKCp0I/AAAAAAAAAJc/rAjuL4iXfH4/s1600-h/coldfusion.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_YEbWCxPKDw4/SK6kfEKCp0I/AAAAAAAAAJc/rAjuL4iXfH4/s200/coldfusion.jpg" alt="" id="BLOGGER_PHOTO_ID_5237304270277224258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I don't know where my future is headed, and I need some direction.&lt;br /&gt;&lt;br /&gt;Graduated from some university with a CS bachelor degree, I landed myself a job writing CF web app about a year ago.  I took the time on the job to learn CF8 inside out, and to understand &lt;a href="http://www.model-glue.com/"&gt;ModelGlue&lt;/a&gt;, &lt;a href="http://www.coldspringframework.org/"&gt;Coldspring&lt;/a&gt;, &lt;a href="http://www.transfer-orm.com/"&gt;Transfer&lt;/a&gt;, and common design patterns.  I successfully got them all working together while my coworkers were still writing CFM and some basic CFC with no idea why should they care for var scooping.  After working there for a year, I quit because I have delivered a decent application, and I found nothing new and exciting to learn.  And I want to be surround myself with experts and learn from them, instead of the other way around.&lt;br /&gt;&lt;br /&gt;And now I'm unemployed, or in between jobs, that sounds better.  I'm excited to learn about Flex/AIR, as it seems it is the most logical path to follow now that I have experience with web development and they work so well with CF and &lt;a href="http://www.adobe.com/products/livecycle/dataservices/faq.html"&gt;LCDS Express&lt;/a&gt;.  However, as I being to search for my next job, reality kicks it, CF is just not that popular. Don't you think it is sad to just see feed occasionally titled "1 CF dev needed in XX state", or "2 Flex dev needed in YY state"?&lt;br /&gt;&lt;br /&gt;I love Adobe, and ColdFusion.  In fact, I should hate them for spoiling me 'cause they make things so easy (most of the time).  I guess if I stay with doing web app, and if my future project happen to be not in CF, I will miss CF very much... and start learning other frameworks, in other languages, all over again.. which is normal.. I guess.&lt;br /&gt;&lt;br /&gt;I actually not sure if I should continue doing web app, since I've seen so many useful/useless app and service popping up everyday on &lt;a href="http://www.makeuseof.com/"&gt;makeuseof.com&lt;/a&gt;, but I wonder if they will actually keep getting users and traffic once the hype dies down.  Many of them has no business model behind them, yet they offer service for free which keeps me puzzling.  Oh well, last time I check YouTube is still losing Google's money... so I don't know anymore.&lt;br /&gt;&lt;br /&gt;There should be another world out there outside of web apps, but... where to begin?  I feel so lost... Help...&lt;br /&gt;&lt;br /&gt;To all experts in this field, please forgive my ignorance and guide me to a better place in my career path.  It would be very helpful to share what you have been through, or any advice to people who are in similar situation like me.&lt;br /&gt;&lt;br /&gt;Thank you Thank you Thank you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/587757890655208839-767611222653826083?l=henrylearnstorock.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henrylearnstorock.blogspot.com/feeds/767611222653826083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/08/life-as-new-coldfusion-developer.html#comment-form' title='28 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/767611222653826083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/587757890655208839/posts/default/767611222653826083'/><link rel='alternate' type='text/html' href='http://henrylearnstorock.blogspot.com/2008/08/life-as-new-coldfusion-developer.html' title='A year as a ColdFusion developer... now what?'/><author><name>Henry Ho</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YEbWCxPKDw4/SK6kfEKCp0I/AAAAAAAAAJc/rAjuL4iXfH4/s72-c/coldfusion.jpg' height='72' width='72'/><thr:total>28</thr:total></entry></feed>
