tag:blogger.com,1999:blog-75870532683175971012024-03-05T20:36:01.260+08:00kikicodefxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-7587053268317597101.post-10374011245001605312018-12-08T22:44:00.004+08:002022-04-02T17:46:57.990+08:00Double-click FBX files to import to Blender in Windows<div>
How do you open FBX files in Blender? I used to click File -> Import -> FBX then select a file. I got lazy and found a way to import through command line. And here's how to import FBX files to Blender by double-clicking them in Windows File Explorer.</div>
<div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<ol>
<li>Run regedit. Please do not proceed if you don't know how to work with Registry Editor. I'm not responsible for the harm you made to your machines :)</li>
<li>Go to <span style="font-family: "courier new" , "courier" , monospace;">Computer\HKEY_CLASSES_ROOT\.FBX</span></li>
<li>Identify the ProgId. In my case, it is "<span style="font-family: "courier new" , "courier" , monospace;">fbx_auto_file</span>".</li>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu-kr0Q9hUM5Da9AuuEDQP1CoCNHc0UpX4lCJ7scVhy9m7Z5ztdlWDBJZWyq9674x8ku9vJTzs8S8wi9h0TuDmHWF9SKJB0zd28BaousKdXVxLMcADFfFL_x4oplvfupIX369xYU3xZjY/s1600/RegistryEditor-Blender-FBX-FindId.png" imageanchor="1" style="clear: left; display: inline; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;"><img border="0" data-original-height="127" data-original-width="431" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu-kr0Q9hUM5Da9AuuEDQP1CoCNHc0UpX4lCJ7scVhy9m7Z5ztdlWDBJZWyq9674x8ku9vJTzs8S8wi9h0TuDmHWF9SKJB0zd28BaousKdXVxLMcADFfFL_x4oplvfupIX369xYU3xZjY/s1600/RegistryEditor-Blender-FBX-FindId.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<li>Go to the ProgId. In my case, it is <span style="font-family: "courier new" , "courier" , monospace;">Computer\HKEY_CLASSES_ROOT\fbx_auto_file</span></li>
<li>Create the following keys under this ProgId: shell, Blender and command.</li>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWIhxlpSbBTy0dziW-IdyTZ6xdPO9AFgqfeBmK99gkk4FRJWiu9cU0b9sPbWGhqiJY5OlHBL5MI7ctb_uWNrrRbHpZYFwitaxD7_NfYSXEK6ORaNmq04p6VY1KVOCzCzwKTxxPa8pBwac/s1600/Blender-FBX-Create-Keys.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="143" data-original-width="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWIhxlpSbBTy0dziW-IdyTZ6xdPO9AFgqfeBmK99gkk4FRJWiu9cU0b9sPbWGhqiJY5OlHBL5MI7ctb_uWNrrRbHpZYFwitaxD7_NfYSXEK6ORaNmq04p6VY1KVOCzCzwKTxxPa8pBwac/s1600/Blender-FBX-Create-Keys.png" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;"><br /></td></tr>
</tbody></table>
<li>Double-click (Default) and paste the following command as value. Please modify the path to match your Blender installation path: <span style="font-family: "courier new" , "courier" , monospace;">"C:\Program Files\Blender Foundation\Blender\blender.exe" --python-expr "import bpy; bpy.context.user_preferences.view.show_splash=False; bpy.ops.import_scene.fbx(filepath=r'%1');"</span><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3eMVgNJs-Qyy7w8a_AoAcVuahHY-S3Q7W_K5tCdmdWIQmVh-OvZjRo0entNDUu_APSwCBjI_jWB40E8UWxQ8Etdb-1pLHAslIdcEOhMglQi_ljPg-nPPLLuuw_t7k6H5UptNRkxAKN5U/s1600/RegistryEditor-Blender-FBX.png" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: center;"><img border="0" data-original-height="148" data-original-width="892" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3eMVgNJs-Qyy7w8a_AoAcVuahHY-S3Q7W_K5tCdmdWIQmVh-OvZjRo0entNDUu_APSwCBjI_jWB40E8UWxQ8Etdb-1pLHAslIdcEOhMglQi_ljPg-nPPLLuuw_t7k6H5UptNRkxAKN5U/s1600/RegistryEditor-Blender-FBX.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
</li>
</ol>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
Now right-click a FBX file, you should see Blender in the menu. Click it and Blender should run and import the file.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCmYcn5leWquaRl5JB7mEtHl6LxMcNvNbc65JArGFB1h_Qf8AsV5Z49NTrSc8mxbrZvXS36VtVVwUwCJKGX0V2asTLzV6YqiaJU7Fkm6iJSfP8q6G608auMr4jVOfpS9QD5lY0Fb3nyVY/s1600/Blender-FBX-Right-click.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCmYcn5leWquaRl5JB7mEtHl6LxMcNvNbc65JArGFB1h_Qf8AsV5Z49NTrSc8mxbrZvXS36VtVVwUwCJKGX0V2asTLzV6YqiaJU7Fkm6iJSfP8q6G608auMr4jVOfpS9QD5lY0Fb3nyVY/s1600/Blender-FBX-Right-click.png" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br />
<br />
<h3>
How does the command line work?</h3>
Let's dissect the command line: <span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">"C:\Program Files\Blender Foundation\Blender\blender.exe" --python-expr "import bpy; bpy.context.user_preferences.view.show_splash=False; bpy.ops.import_scene.fbx(filepath=r'%1');"</span></div>
<div>
<br />
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html#python-options" target="_blank">--python-expr</a></span>: Ask Blender to run the given expression as a Python script. In this case, the expression is <span style="font-family: "courier new" , "courier" , monospace;">"import bpy; bpy.context.user_preferences.view.show_splash=False; bpy.ops.import_scene.fbx(filepath=r'%1');"</span></li>
</ul>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
<span style="font-family: inherit;">The expression has three statements:</span></div>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;">import bpy</span>: imports the bpy module so that we can call the fbx function.</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">bpy.context.user_preferences.view.show_splash=False</span>: disables Blender splash screen.</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">bpy.ops.import_scene.fbx()</span>: call the FBX import method. Windows will replace %1 with the file path you double-click. The "r" before '%1' means to treat the string as "raw". It causes backslashes in the string to be interpreted as actual backslashes rather than special characters.</li>
</ul>
<br />
<h3>
How did I know I should call <span style="font-family: "courier new" , "courier" , monospace;">bpy.ops.import_scene.fbx()</span>? </h3>
Well, when you hover your mouse over the FBX menu item in Blender, there's a tooltip that indicates the Python function. Right-click this menu item and click <b>Copy Python Command</b> to copy the function.<br />
<br />
If your tooltips do not show Python functions, you can turn it on at File -> User Preferences. Go to Interface tab and tick "Python Tooltips".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFC9-biPY97A7Ldwehybgu_8EnrOr5urWE_4n5mvAwaP7Wp-KfLSF3Pk1MfCJ_zajbMPqHQA2gSaceSwPmCa000JPaejUQr19il8H6-ITRs8iJv1rfR-FP5-gQaaRsmOzYYYE7SdeWuUo/s1600/Blender-FBX-Python-Function.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="560" data-original-width="572" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFC9-biPY97A7Ldwehybgu_8EnrOr5urWE_4n5mvAwaP7Wp-KfLSF3Pk1MfCJ_zajbMPqHQA2gSaceSwPmCa000JPaejUQr19il8H6-ITRs8iJv1rfR-FP5-gQaaRsmOzYYYE7SdeWuUo/s1600/Blender-FBX-Python-Function.png" /></a></div>
<br />
<br />
<h3>
How to tell what arguments are available for the Python function?</h3>
Open Python Console in Blender and type <span style="font-family: "courier new" , "courier" , monospace;">bpy.ops.import_scene.fbx. </span><span style="font-family: inherit;">The console will show available arguments.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisKtcAqBRBIB81f5JHyIJOKy8C6D9Unxb0Gi0W8XaZYhuHfngKJd_fMiaBpr09VwzDp26HNcN0BGKsP8ttBNyuAiv8mge4A533eHc754_nhnlOpNzkEvpr1PhyKAeEGaotFCpf_tj8XUE/s1600/Blender-FBX-Python-Console.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="309" data-original-width="671" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisKtcAqBRBIB81f5JHyIJOKy8C6D9Unxb0Gi0W8XaZYhuHfngKJd_fMiaBpr09VwzDp26HNcN0BGKsP8ttBNyuAiv8mge4A533eHc754_nhnlOpNzkEvpr1PhyKAeEGaotFCpf_tj8XUE/s1600/Blender-FBX-Python-Console.png" /></a></div>
<br />
<br />
<br />
<br /></div>
fxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-40742351070424245382013-11-22T22:59:00.002+08:002013-11-22T22:59:45.196+08:00移除Windows 8的默認輸入法 Remove Default Input Method in Windows 8在Windows 8裡,當你安裝慣用的輸入法后,就會自動出現難以移除的默認輸入法。<br />
So in Windows 8, after you installed your beloved input methods, there will be default input methods that are automatically added, and refusing to be removed.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3SVRL0-kiRNeIVJMi3XprSFgB05HM3eVsGbgmT0ZQumK4TB102J893ux4HNvb4OqssCFMiT_h79FaceaPLD9d8pWTZ3okjX5ED5a1j8cWfyEBTDuRbxgGTfMdQ5SPBROmqf8BdXfG_c/s1600/CannotRemoveMicrosoftPinyin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3SVRL0-kiRNeIVJMi3XprSFgB05HM3eVsGbgmT0ZQumK4TB102J893ux4HNvb4OqssCFMiT_h79FaceaPLD9d8pWTZ3okjX5ED5a1j8cWfyEBTDuRbxgGTfMdQ5SPBROmqf8BdXfG_c/s400/CannotRemoveMicrosoftPinyin.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
若你不懂得使用Registry Editor,請另請高明代勞,免得把系統搞亂。</div>
<div class="separator" style="clear: both; text-align: left;">
A word of precaution: if you don't know how to operate Registry Editor, find someone to do it for you to avoid system malfunction. Here's how to remove it.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<ol>
<li>按<b>Win+R</b>打開<b>Run</b>窗口。輸入<b>regedit</b>,按<b>OK</b>。<br />Press <b>Win+R</b> to open the Run dialog. Type <b>regedit</b> and click <b>OK</b>.<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTn14ot9xY2JHXsT8ee9msFIstlYvR9N6SMFaW1AVl2NSoDDzzRHC_taA_unCVMWb0H6HAypY2CaIiE-WSARhfLr-zTg6qqbroKt6rFjJ6tnQvy4f7MqOuKtaFCQvUEY6c1WMi7v2_ibE/s1600/regedit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTn14ot9xY2JHXsT8ee9msFIstlYvR9N6SMFaW1AVl2NSoDDzzRHC_taA_unCVMWb0H6HAypY2CaIiE-WSARhfLr-zTg6qqbroKt6rFjJ6tnQvy4f7MqOuKtaFCQvUEY6c1WMi7v2_ibE/s320/regedit.png" width="320" /></a><br /></li>
<li>展開到這里:<b>HKEY_CURRENT_USER\Software\Microsoft\CTF\TIP</b><br />Expand this key: <b>HKEY_CURRENT_USER\Software\Microsoft\CTF\TIP</b></li>
<li>這時你必須展開你要移除的輸入法。如果你安裝了幾個語言的輸入法,你可能需要試幾下來找到正確的輸入法。<br />At this point, you have to expand the Input Method that you want to remove. If you use multiple languages and have a few default input methods, you may have to experiment a bit to find the correct one.<br /><div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGsOwq9-AO-QNg2zkMAOOEJRVXYPyweSvWxsSSs86eMHRnSg9xeStUQC2z3nEEE9FfwGQq76Rv5Fz5zZbcgZH7EGWlsBRNHp9uj075dSFCiZB6NNqNCcFbevpLdAeeexRVHm-Zp8Dqrc/s1600/registry1.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGsOwq9-AO-QNg2zkMAOOEJRVXYPyweSvWxsSSs86eMHRnSg9xeStUQC2z3nEEE9FfwGQq76Rv5Fz5zZbcgZH7EGWlsBRNHp9uj075dSFCiZB6NNqNCcFbevpLdAeeexRVHm-Zp8Dqrc/s640/registry1.png" width="640" /></a><br /></div>
</li>
<li><div style="text-align: left;">
雙點<b>Enable</b>。在出現的窗口中輸入<b>0</b>,然后按<b>OK</b>。<br />Double-click <b>Enable</b>. A dialog will appear. Enter <b>0</b> and click <b>OK</b>.<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB9NcslrQ-bmYQk4hVG6dMKhxTs1K2pxCcbzQiwvVvbsRKDO8E8SQjO97RC3vj2Vf5TERIL75PL3a88z_Le0q72RYPZptLwmxZXdtYbgHN3SpkSJ3gVQWS7j1MmLzraIJzPoYy8H2QGmQ/s1600/registry2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB9NcslrQ-bmYQk4hVG6dMKhxTs1K2pxCcbzQiwvVvbsRKDO8E8SQjO97RC3vj2Vf5TERIL75PL3a88z_Le0q72RYPZptLwmxZXdtYbgHN3SpkSJ3gVQWS7j1MmLzraIJzPoYy8H2QGmQ/s640/registry2.png" width="640" /></a><br /></div>
</li>
<li><div style="text-align: left;">
現在按<b>Win+Space</b>,討厭的輸入法不見了!<br />Press <b>Win+Space</b> now, the silly input method is no longer there!</div>
</li>
</ol>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div>
<br /></div>
<div>
<br /></div>
fxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-26167848941941182842013-11-04T11:33:00.000+08:002013-11-18T21:30:06.548+08:00要買馬車嗎?來看檳城新報<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTgRii0-A8IhiYiAtBVXHvYah7MmCscF7IoJPeXtzG_z5xM5BA1sjN9wq3acGT2GgXmkoIxeAmiUouaPeX-swciEggXz5evke-wwXK2geU-292Au5A7MiS8_apvX334wJkneSCJFRcz0/s1600/1895-08-10+%E6%AA%B3%E5%9F%8E%E6%96%B0%E5%A0%B1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="614" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTgRii0-A8IhiYiAtBVXHvYah7MmCscF7IoJPeXtzG_z5xM5BA1sjN9wq3acGT2GgXmkoIxeAmiUouaPeX-swciEggXz5evke-wwXK2geU-292Au5A7MiS8_apvX334wJkneSCJFRcz0/s640/1895-08-10+%E6%AA%B3%E5%9F%8E%E6%96%B0%E5%A0%B1.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpr3LXw1zcNB9WM5Crtv8S9rC0FsHZU3zCnwP_y8Da9mUyTAmNeI1ycie4AVXPh4wAKtHjW25Hmp1jq82VdFhcHyTTCb6va48Xl9nf6SIiQU9uZ7o9BSFirGd5T8oEMzzO1A5H6SvG9Wk/s1600/1895-08-10+%25E9%25A6%25AC%25E8%25BB%258A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpr3LXw1zcNB9WM5Crtv8S9rC0FsHZU3zCnwP_y8Da9mUyTAmNeI1ycie4AVXPh4wAKtHjW25Hmp1jq82VdFhcHyTTCb6va48Xl9nf6SIiQU9uZ7o9BSFirGd5T8oEMzzO1A5H6SvG9Wk/s320/1895-08-10+%25E9%25A6%25AC%25E8%25BB%258A.png" width="320" /></a></div>
<br />
算我孤陋寡聞,一直誤以為光華是檳城最早的報紙,其實應該是1895年8月8日創刊的《檳城新報》(Penang Sin Poe)。據說檳城新報在新馬淪陷前夕停刊,應該是1941年12月7日吧?<br />
<br />
最棒的是,我們還可以看到當年的報紙,且是從1895年8月10日到1941年9月30日,就在新加坡國立大學圖書館。但不必跑去新加坡,直接就可以<a href="http://libapps2.nus.edu.sg/sea_chinese/documents/Penang%20sin%20poe/Penang%20sin%20poe.html">下載</a>!上面的馬車就是1895年8月10日的廣告之一。<br />
<br />
報頭上有清朝年號:大清光緒廿一年 乙未六月二十日。地址是“中街第二百三十號二百三十二號門牌”。就在Beach Street,但為什么叫“中街”?原來Beach Street不同路段有不同的中文名,總共有六個。早期的報紙連標點符號都沒呢!<br />
<br />
1919年12月29日,“夢中孽緣”小說連載。這時清朝已經完蛋,進入民國了。報頭還有孔子紀年,就是孔子誕生開始算起的年份,由公元前551年開始。1919年就是551+1919=2470。標點符號也出現了!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuEVXXeRgGtL7LFT0UHPTny5ESDmo1xinRYkbeHZTU_BDk413y63le2vYLjGD-2EoH1XRfzdYln1H7Ln_SM4qBGgLBK1YsN98H-teF5dyiu-8lymfOj4IO4Vv8-dP1at82obtRnQHqEBM/s1600/1919-12-29+%25E5%25B0%258F%25E8%25AA%25AA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuEVXXeRgGtL7LFT0UHPTny5ESDmo1xinRYkbeHZTU_BDk413y63le2vYLjGD-2EoH1XRfzdYln1H7Ln_SM4qBGgLBK1YsN98H-teF5dyiu-8lymfOj4IO4Vv8-dP1at82obtRnQHqEBM/s640/1919-12-29+%25E5%25B0%258F%25E8%25AA%25AA.png" width="640" /></a></div>
<br />
<br />
<br />
1930年2月7日某頁有則啟事:“關仔角副刊今天出版,刊在第十頁,望閱者注意! ”。旁邊還有個“異禽發現”!還有“檳”字不知怎么却變成“梹”了。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJHUSdjPDDCuBAmHfzL_CWq-GdVOTb72Bvy4G27QkPItRSqSqoF7zxmGqSbTLi9PpWOzEcnX8kxELKwUN3zowdllB-eqAYniY8sdEZyGb3EC7DOvzStz1OkVMduhuGpItavTqgMvoq4GU/s1600/1930-02-07a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJHUSdjPDDCuBAmHfzL_CWq-GdVOTb72Bvy4G27QkPItRSqSqoF7zxmGqSbTLi9PpWOzEcnX8kxELKwUN3zowdllB-eqAYniY8sdEZyGb3EC7DOvzStz1OkVMduhuGpItavTqgMvoq4GU/s640/1930-02-07a.png" width="640" /></a></div>
但這“異禽”到底是什么東東?我來試著還原:<br />
<div style="text-align: center;">
異禽發現</div>
<div style="text-align: center;">
身長六十尺 翅寬二丈</div>
<div style="text-align: center;">
飛如閃電 聲若雷鳴</div>
據x日居民陳洪報告云。xx該處上空。恒有怪鳥飛旋。時高時低。身長度幾六十尺。飛如閃電。聲若雷鳴。動物家李君聞訊。特於前日上午駕輪抵陳家坐候。未幾。忽聞軋軋聲自遠飛來。陳x呼曰。“異禽至矣”。李急仰視。則飛機也。李知陳之錯誤。實由視官不良。乃出其眼鏡令戴而視之。則與圖畫中之飛機。無稍差異。因笑x李曰。“x習聞其聲而弗察其形。竟誤以為怪鳥,今而x知眼鏡之不可少x”。乃急往檳城新街亞東眼鏡公司配制一具云。<br />
<br />
哈哈,這根本就是亞東的廣告帖!<br />
<br />
<br />
<br />
這就是第十頁啦!看到“我們的關仔角”嗎?還是你在注意“双桃煙”啊?<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDkDFesXJuIBsWydJCPUVmAz8lNBXlXRkKu4-u2CNV2KMz96uwj9sBmc-FBrwBxoJcKtimKhA_bx0DggDmNkT9mDXG6-vxpc70tYvK3DjuPJACr8yYu1Wwiq0JrqOdS3X9cExEuuGxmVw/s1600/1930-02-07b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDkDFesXJuIBsWydJCPUVmAz8lNBXlXRkKu4-u2CNV2KMz96uwj9sBmc-FBrwBxoJcKtimKhA_bx0DggDmNkT9mDXG6-vxpc70tYvK3DjuPJACr8yYu1Wwiq0JrqOdS3X9cExEuuGxmVw/s640/1930-02-07b.png" width="456" /></a></div>
<br />
<br />
<br />
這是圖書館保存的最后一份檳城新報:1941年9月30日,離新馬淪陷和停刊還有兩個月。報頭上寫著:報費 梹城報合光華報每月【一元九角】。我也不知道兩份報紙是什么關系,不過謝詩堅先生說“<a href="http://seekiancheah.blogspot.com/2004/09/blog-post_147.html">及后《檳城新報》承入《光華日報》</a>”。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjijGcRQiCDiSB1EUj7bwcVwTX77tYOTMUwvUTvlyy5hryQh70JfhkJxDR1SDw5CQNDAmSW-EWC-eZFghTn8OlHIr89zWcJucUiDGy_CtYJlDURVxeTqy6Msx6IxOm75W9KtU3kiOJm3yg/s1600/1941-09-30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjijGcRQiCDiSB1EUj7bwcVwTX77tYOTMUwvUTvlyy5hryQh70JfhkJxDR1SDw5CQNDAmSW-EWC-eZFghTn8OlHIr89zWcJucUiDGy_CtYJlDURVxeTqy6Msx6IxOm75W9KtU3kiOJm3yg/s400/1941-09-30.png" width="400" /></a></div>
<br />
<br />
大家没事就去下載讀讀當年檳城舊聞吧!<br />
<br />
<br />
P/S: 本篇文章也帖在<a href="http://cforum.cari.com.my/forum.php?mod=viewthread&tid=3242812&extra=page%3D1">佳禮</a><br />
<br />fxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-43373357244760708822013-10-17T21:11:00.001+08:002013-10-17T21:18:31.812+08:00Installing Android ADB driver in Windows 8.1 64-bit when all else failsFor some reason I just couldn't get my machine to recognize Xperia J in Windows 8.1 64-bit. Even after installing latest Sony PC Companion (2.10.174). Device Manager kept showing yellow exclamation mark to an 'Android'.<br />
<br />
Here's the solution, but I don't promise it will work on your device!<br />
<br />
<h3>
1. Find out your device's VID and PID</h3>
<div>
<ol>
<li>Open <b>Device Manager</b>, right-click that Android with yellow exclamation mark and click <b>Properties</b>.</li>
<li>Go to <b>Details</b> tab.</li>
<li>In <b>Property</b>, select <b>Hardware Ids</b>.</li>
<li>Right-click the value and click <b>Copy</b>.</li>
<li>Paste the value somewhere.</li>
</ol>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhimd5bh4F8Q6CXmMxTWkcU4k6I1DFubivuFKVkU3cWHO3Js02YghaaWg3IqUp7HVRGD0Z8NWmVmfAxc9-2nXt3pNSLWsy1CoCiqOuxDEut-nUER2GdOsNKqhb6XoBF-0ozhrEQXP0aYRY/s1600/find-vid-pid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhimd5bh4F8Q6CXmMxTWkcU4k6I1DFubivuFKVkU3cWHO3Js02YghaaWg3IqUp7HVRGD0Z8NWmVmfAxc9-2nXt3pNSLWsy1CoCiqOuxDEut-nUER2GdOsNKqhb6XoBF-0ozhrEQXP0aYRY/s400/find-vid-pid.png" width="360" /></a></div>
<div>
<br />
<br /></div>
<h3>
2. Download Android USB Driver</h3>
<ol>
<li>Run <b>Android SDK Manager</b>.</li>
<li>Expand <b>Extras</b>, tick <b>Google USB Driver</b>, click <b>Install packages</b>.<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl38qI0e4I6MMbuXu_GfHnPMgMoovxw88j5yUmrFkX_MPIHMp1FsK3KbkGq7ZDGh_BKcUiMgRHUNO51ppjgU0zNOcIGEYqBEhAN_i9AYDBGjAaSmDohP3eLQ8lrYeRtmOgCT2DB7SQTAg/s1600/install-google-usb-driver.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl38qI0e4I6MMbuXu_GfHnPMgMoovxw88j5yUmrFkX_MPIHMp1FsK3KbkGq7ZDGh_BKcUiMgRHUNO51ppjgU0zNOcIGEYqBEhAN_i9AYDBGjAaSmDohP3eLQ8lrYeRtmOgCT2DB7SQTAg/s400/install-google-usb-driver.png" width="400" /></a></li>
<li>After installation, look for the driver location by hovering mouse over Google USB Driver. The location will appear in the tooltip.<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGYgmHBIvvvSZV-P4BYzmmecXtNJNjg5fSX82SmplrOsR49Xq_vqHQvWYvvvfgmVd-ub_FNT0RdpTgIcJizhv6XZBpgs9d5GH4EJQxM2ZHBQkQeR5VoQzqKPVm14bM8g1w_vEaNpLy9r4/s1600/google-usb-driver-location.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGYgmHBIvvvSZV-P4BYzmmecXtNJNjg5fSX82SmplrOsR49Xq_vqHQvWYvvvfgmVd-ub_FNT0RdpTgIcJizhv6XZBpgs9d5GH4EJQxM2ZHBQkQeR5VoQzqKPVm14bM8g1w_vEaNpLy9r4/s640/google-usb-driver-location.png" width="640" /></a></li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<h3>
3. Modify android_winusb.inf</h3>
<ol>
<li>Go to the usb driver location, for example in the above picture it is c:\Android\android-studio\sdk\extras\google\usb_driver</li>
<li>Make a backup copy of <span style="color: blue;"><b>android_winusb.inf</b></span></li>
<li>Open <b style="color: blue;">android_winusb.inf </b>with a text editor. Notepad is fine but Notepad++ is better, it will syntax highlight the inf file!</li>
<li>Look for <b>[Google.NTx86]</b>, and insert a line with your device's hardware ID that you copied above, for example</li>
<pre>[Google.NTx86]
</pre>
<pre></pre>
<pre>; ... other existing lines
</pre>
<pre></pre>
<pre>;SONY Sony Xperia J
%CompositeAdbInterface% = USB_Install, USB\VID_0FCE&PID_6188&MI_01
</pre>
<li>Look for <b>[Google.NTamd86]</b>, and insert the same lines, for example:</li>
<pre>[Google.NTamd64]
</pre>
<pre></pre>
<pre>; ... other existing lines
</pre>
<pre></pre>
<pre>;SONY Sony Xperia J
%CompositeAdbInterface% = USB_Install, USB\VID_0FCE&PID_6188&MI_01
</pre>
<li>Save the file.</li>
</ol>
<div>
<br /></div>
<h3>
4. Disable driver signing</h3>
<ol>
<li>Run Command Prompt as an administrator</li>
<li>Paste and run the following commands:<br />
<pre>bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING ON
</pre>
<pre></pre>
<pre></pre>
</li>
<li>Restart Windows.</li>
</ol>
<h3>
</h3>
<h3>
</h3>
<h3>
5. Install driver</h3>
<ol>
<li>Open <b>Device Manager</b>, right-click that Android with yellow exclamation mark and click <b>Update Driver Software</b>.</li>
<li>Click <b>Browse my computer for driver software</b>.</li>
<li>Enter or browse to the folder containing <b style="color: blue;">android_winusb.inf</b>, eg: C:\Android\android-studio\sdk\extras\google\usb_driver</li>
<li>Click <b>Next</b>.</li>
<li>The driver will install.</li>
<li>Run <b>adb devices </b>to confirm your device is working fine.</li>
</ol>
<div>
<h3>
</h3>
<h3>
</h3>
<h3>
6. Re-enable driver signing</h3>
</div>
<ol>
<li>Run Command Prompt as an administrator</li>
<li>Paste and run the following commands:<br />
<pre>bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING OFF
</pre>
<pre></pre>
</li>
<li>Restart Windows.</li>
<li>Run <b>adb devices </b>to reconfirm!</li>
</ol>
<br />fxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.com25tag:blogger.com,1999:blog-7587053268317597101.post-36760847518254631682013-09-22T01:26:00.001+08:002013-09-22T01:48:23.717+08:00error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartupHad this error when building a Qt program in Visual Studio 2012:<br />
<blockquote class="tr_bq">
<span style="color: #cc0000;">error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup</span></blockquote>
There was a <i>main()</i> in <i>main.cpp</i>, which was included and compiled in the project. So what happened?<br />
Turned out that <i><b><span style="color: blue;">qtmaind.lib</span></b></i> was removed from Linker Dependencies, added it back and problem solved. Don't ask me why I removed it in the first place :)<br />
<br />
Here's my general way to solve this particular linker error when playing with Qt in Visual Studio:<br />
<ol>
<li>Ensure <i>main()</i> is defined in a file (eg: main.cpp).</li>
<li>Ensure the file (eg: main.cpp) is included in the project.</li>
<li>Ensure the file is really being compiled, type some garbage and build. If there are errors in the file then it's being compiled.</li>
<li>Right-click the project and click Properties.</li>
<li>Go to <b>Configuration Properties -> Linker</b></li>
<ol>
<li>Go to <b>Input</b>, ensure <b>Additional Dependencies</b> has one of this entry:</li>
<ul>
<li><b><span style="color: blue;">qtmaind.lib</span></b> (for Debug build)</li>
<li><b><span style="color: blue;">qtmain.lib</span></b> (for Release build)<br /><div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt7WFMFGfnyukvhAwyJJvZHw_ElUky3epQJBW4Rd2yZwsYd2Cs9gQOb_fzmuv-gZ5N8tLqU_qdKSfZSq8nvwlU-ecLWnteSwDZmI0EaSZlhyphenhyphenIH0rqa6RI_eVd5tAK0LAcpujbsGikS168/s1600/LinkerInput.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt7WFMFGfnyukvhAwyJJvZHw_ElUky3epQJBW4Rd2yZwsYd2Cs9gQOb_fzmuv-gZ5N8tLqU_qdKSfZSq8nvwlU-ecLWnteSwDZmI0EaSZlhyphenhyphenIH0rqa6RI_eVd5tAK0LAcpujbsGikS168/s200/LinkerInput.png" width="200" /></a></div>
</li>
</ul>
<li>Go to <b>System</b>, ensure <b>SubSystem</b> is correct.<br /><div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLsl0-mQnxYVdxi5C7fJHQx-fPpgiqF-43AcDXGodJ4UPYza6lbhrX3CtoZFHtNBetkot-43CqExhvLVHN2jTAB8LKx6tOHh0jA8p8P1H8paG3twvWtiauR-cOeHY5J80zHq3FiKBr3mE/s1600/LinkerSystem.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLsl0-mQnxYVdxi5C7fJHQx-fPpgiqF-43AcDXGodJ4UPYza6lbhrX3CtoZFHtNBetkot-43CqExhvLVHN2jTAB8LKx6tOHh0jA8p8P1H8paG3twvWtiauR-cOeHY5J80zHq3FiKBr3mE/s200/LinkerSystem.png" width="200" /></a></div>
</li>
<li>Go to <b>Advanced</b>,<b> </b>ensure <b>Entry Point </b>is correct. The default is blank. Usually you don't mess with it and leave it blank.<br /><div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyAJeHHWPhm2N57-SXq5xsLkw12X_u5DD0Rw88e_r44CzGF-c-G4QgIqzckt01oFOglShbI2HTmvZYrBAaNE6UAMAi5j9oeS_bEF09UuaJbM_6mPWq61_O__Zro5f3joBAeRf8TegKaiI/s1600/LinkerEntryPoint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyAJeHHWPhm2N57-SXq5xsLkw12X_u5DD0Rw88e_r44CzGF-c-G4QgIqzckt01oFOglShbI2HTmvZYrBAaNE6UAMAi5j9oeS_bEF09UuaJbM_6mPWq61_O__Zro5f3joBAeRf8TegKaiI/s200/LinkerEntryPoint.png" width="200" /></a></div>
</li>
</ol>
</ol>
<br />
<br />fxamhttp://www.blogger.com/profile/11348816617061182683noreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-85193941795304266722011-10-21T07:47:00.002+08:002011-10-21T07:47:23.622+08:00Run minimized batch file in Task SchedulerI have a batch file scheduled in Windows Task Scheduler. The problem is it will always popup a window when running. Yes I want to see the window but I want it minimized instead of blocking my current view. Should an error occurs the batch file will pause and I will attend to it.<div>
<br /></div>
<div>
Some suggested using third-party program to minimize the window. Some suggested using Windows Script.<div>
<br /></div>
<div>
The solution is simple, use this: <b><span class="Apple-style-span" style="color: blue;">cmd /c start "title" /min "batch file"</span></b></div>
<div>
For example: <b><span class="Apple-style-span" style="color: blue;">cmd /c start "Backup" /min "d:\my documents\scripts\backup.bat"</span></b></div>
<div>
<br /></div>
<div>
Be cautious that the <b>start</b> command will treat the first double-quoted string as title. So if you do this: </div>
<div>
<ul>
<li><b><span class="Apple-style-span" style="color: blue;">cmd /c start /min "d:\my documents\scripts\backup.bat"</span></b> </li>
</ul>
</div>
<div>
you will just get a command prompt window entitled "<b>d:\my documents\scripts\backup.bat" </b>without the batch file running. Thus it's a good idea to always put a title to prevent scratching your head later.</div>
<div>
<br /></div>
<div>
There is one problem though, that you have to put an <b>exit</b> at the end of your batch file. Otherwise the batch file window will stay there when it is finished.</div>
<div>
<br /></div>
<div>
This is how you convert the above command into the Action of a scheduled task:</div>
<div>
<ol>
<li>Put "<b><span class="Apple-style-span" style="color: blue;">cmd</span></b>" in <i><b>Program/script</b>.</i></li>
<li>Put the rest in <b style="font-style: italic;">Add arguments (optional)</b>, eg: <b><span class="Apple-style-span" style="color: blue;">/c start "Hello" /min "d:\my documents\scripts\backup.bat"</span></b></li>
</ol>
</div>
<div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCy4UvnqUSjvGgzFrQ5ECDY3DOHecmlT-x62uifKMQY_LgPBbf8tzSXVSfj8ZlaWXXtaAB0zIT0DQyo2QZcXz6tTjguGR8RKBYcQVxQ-x9yZYEICNXQ-dIDtsa3QeYeBh0RZRwTjM1KAQP/s1600/2011-10-21+06-47-12+AM+Scheduled-Minimized-Batch-File.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCy4UvnqUSjvGgzFrQ5ECDY3DOHecmlT-x62uifKMQY_LgPBbf8tzSXVSfj8ZlaWXXtaAB0zIT0DQyo2QZcXz6tTjguGR8RKBYcQVxQ-x9yZYEICNXQ-dIDtsa3QeYeBh0RZRwTjM1KAQP/s640/2011-10-21+06-47-12+AM+Scheduled-Minimized-Batch-File.gif" width="588" /></a></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>Unknownnoreply@blogger.com9tag:blogger.com,1999:blog-7587053268317597101.post-25142804318318088522011-09-24T12:22:00.002+08:002011-09-25T19:59:34.613+08:00Rebuild SQLite driver for Qt in Visual Studio 2010The default build of SQLite driver in Qt does not have some features such as full text search. You can add the features yourself by rebuilding it. This is how I rebuild using Visual Studio 2010:<br />
<ol>
<li>Download latest SQLite amalgamation source code from <a href="http://www.sqlite.org/">http://www.sqlite.org</a>, eg: <a href="http://www.sqlite.org/sqlite-amalgamation-3070800.zip">http://www.sqlite.org/sqlite-amalgamation-3070800.zip</a></li>
<li>Run Visual Studio</li>
<li>Click <b>Qt</b> -> <b>Open Qt Project File (.pro)...</b></li>
<li>Select the Qt SQLite project, eg: <b>c:\Qt\4.7.4\src\plugins\sqldrivers\sqlite\sqlite.pro</b></li>
<li>If somehow the project is not opened in Solution Explorer, check the Output window for hints.</li>
<li>In Solution Explorer, open <b>sqlite3.c</b>, right-click on the file tab and select "<b>Open Containing Folder</b>".</li>
<li>Make a backup of that folder.</li>
<li>Extract SQLite source code to that folder, overwriting everything.</li>
<li>Back to Visual Studio.</li>
<li>Right-click sqlite project and click <b>Properties</b>.</li>
<li>Under <b>Configuration</b>, select <b>Debug</b>.</li>
<li>Go to <b>Configuration Properties</b> -> <b>C/C++</b> -> <b>Preprocessor</b>.</li>
<li>Click "<b>Preprocessor Definitions</b>". Click the down arrow at the far right. Click<b> <edit...></edit...></b></li>
<li>Put whatever <a href="http://www.sqlite.org/compile.html">SQLite compilation option</a> you want. Here's mine:</li>
<ul>
<li>SQLITE_THREADSAFE=1</li>
<li>SQLITE_ENABLE_FTS3</li>
<li>SQLITE_ENABLE_FTS3_PARENTHESIS</li>
<li>SQLITE_ENABLE_FTS4</li>
<li>SQLITE_ENABLE_RTREE</li>
<li>SQLITE_ENABLE_UPDATE_DELETE_LIMIT</li>
<li>SQLITE_SOUNDEX<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiohZZIxQNr54ipRN7AnEW_9pog1qQ7iX9LQO13f3nukGABwkNHX1c8VUUvtZa5HyF63HxQG7D_YrDniwakg84rDky2gMziCF4bw2SzLHQ6LWIK0M29YxdUKuIMz4DnSD0twRmWowvALR_y/s1600/sqlite1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiohZZIxQNr54ipRN7AnEW_9pog1qQ7iX9LQO13f3nukGABwkNHX1c8VUUvtZa5HyF63HxQG7D_YrDniwakg84rDky2gMziCF4bw2SzLHQ6LWIK0M29YxdUKuIMz4DnSD0twRmWowvALR_y/s640/sqlite1.gif" width="640" /></a></li>
</ul>
<li>Under <b>Configuration</b>, select <b>Release</b>. Visual Studio will prompt you to save. Click "<b>Yes</b>".</li>
<li>Add the same definitions as Debug.</li>
<li>Close any running applications that uses SQLite, such as Qt Assistant.</li>
<li>Rebuild both Debug and Release. Remember to Rebuild, not just Build, Visual Studio may not detect the changes.</li>
<li>If you get error C1033 ("cannot open program database c:\Qt\4.7.4<version>\src\plugins\sqldrivers\sqlite\vc100.pdb"), make sure the folder and files are not read-only.</version></li>
<li>These files will be created. Check their modified dates to be sure:</li>
<ol>
<li>C:\Qt\<version><version>4.7.4\src\plugins\sqldrivers\sqlite\debug\qsqlited4.dll</version></version></li>
<li>C:\Qt\4.7.4<version><version>\src\plugins\sqldrivers\sqlite\release\qsqlite4.dll</version></version></li>
</ol>
<li><b>IMPORTANT</b>: <b>qssqlite4.dll</b> and <b>qsqlited4.dll</b> may be created in <b>C:\Qt\4.7.4<version><span class="Apple-style-span" style="font-weight: normal;"><version></version></span>\src\plugins\sqldrivers\sqlite\release</version></b> (or debug). If this happens, move it to <b>C:\Qt\4.7.4<version><span class="Apple-style-span" style="font-weight: normal;"><version></version></span>\plugins\sqldrivers\</version></b> and overwrite the existing one. When you debug in Visual Studio, the DLL from this folder will be loaded, even though you have copied the SQLite DLL to your project output.</li>
</ol>
<br />
<div>
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-17870815679810235562011-09-24T09:46:00.001+08:002013-09-22T02:04:19.440+08:00"WARNING: Can't find the Qt version that's associated with this project."<i><span style="color: purple;">Updated in Sept 2013 for Qt5.</span></i><br />
<br />
I don't know why. I am always haunted by this whenever I use a new Qt version:<br />
<div>
<span class="Apple-style-span" style="color: blue;">"WARNING: Can't find the Qt version that's associated with this project. Defaulting to <some Qt version> <your cute="" here="" version="">instead. Please assign a valid Qt version to this project in the Qt project settings."</your></span></div>
<div>
<span class="Apple-style-span" style="color: blue;"><br /></span></div>
<div>
It happens when you are trying to build and you get it in the build Output window. Trying to change the version using Qt Visual Studio Add-in doesn't help.</div>
<div>
<br /></div>
<div>
My workaround:</div>
<div>
<div>
<ol>
<li>Open your project file in a text editor. The project file is the one with "<b>vcxproj</b>" extension, eg: <b>AwfulProject.vcxproj</b></li>
<li>Look for one of these:</li>
<ul>
<li>For Qt4, <b>QtVersion_x0020_Win32</b></li>
<li><b><span style="font-weight: normal;">For Qt5, </span>Qt5Version_x0020_Win32</b></li>
</ul>
<li>Change it to the Qt version you desire, for example:</li>
<ul>
<li><b><span style="font-weight: normal;">For Qt4, </span>QtVersion_x0020_Win32="4.7.4"</b></li>
<li><b><b><span style="font-weight: normal;">For Qt5, </span></b>Qt5Version_x0020_Win32="5.1.1"</b></li>
</ul>
<li>Save the file.</li>
<li>Reopen the project in Visual Studio.</li>
<li>Remember to change other Qt projects that this project depends on.</li>
</ol>
</div>
<div>
<br /></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-77042003479698967202011-09-24T09:24:00.005+08:002011-09-25T20:04:55.200+08:00"Qt version uses an unsupported makefile generator (used: MSBUILD, supported: MSVC.NET)"Ok, this post is for those who build Qt libraries with Visual C++ and annoyed by this:<br />
<span class="Apple-style-span" style="color: blue;">"<b>This Qt version uses an unsupported makefile generator (used: MSBUILD, supported: MSVC.NET)</b></span>"<br />
<br />
It may happen when adding your newly built Qt version in Qt Visual Studio Add-in.<br />
<br />
Here's a little hack that works for me:<br />
<ol>
<li>Close Visual Studio.</li>
<li>Run regedit.</li>
<li>Hop to <b>HKEY_CURRENT_USER\Software\Trolltech\Versions</b></li>
<li>Add a new key named "<b>4.7.4</b>" or whatever version you have.</li>
<li>Under the new key, create a new string "<b>InstallDir</b>" valued with "<b>c:\Qt\4.7.4</b>":<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xZk0NEzD_YwdsQPPN6Fc4SN6iF3WKQLZPdRoebgZz0pDvGgrk6pbyR6_-cxJXDUFIXIn2JpTT9Z8MhCMMlcXU1rQjh6vhX06Rv8o-LJu_T-MotrVekjgRGJByWeXxnGj29_JHJoz5-aL/s1600/regedit.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xZk0NEzD_YwdsQPPN6Fc4SN6iF3WKQLZPdRoebgZz0pDvGgrk6pbyR6_-cxJXDUFIXIn2JpTT9Z8MhCMMlcXU1rQjh6vhX06Rv8o-LJu_T-MotrVekjgRGJByWeXxnGj29_JHJoz5-aL/s640/regedit.gif" width="640" /></a></li>
<li>Run Visual Studio</li>
<li>Click Qt -> Qt Options.</li>
<li>The new version should be there.</li>
</ol>
<div>
<br />
My particular system:<br />
<ul>
<li>Visual Studio 2010 with SP1</li>
<li>Qt 4.7.4 - Instruction to build with Visual Studio 2010 is <a href="http://www.holoborodko.com/pavel/2011/02/01/how-to-compile-qt-4-7-with-visual-studio-2010/">here</a></li>
<li>Qt Visual Studio Add-in 1.1.9</li>
</ul>
<div>
<br /></div>
</div>
<br />Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-7587053268317597101.post-40269005560095961102011-07-20T09:13:00.000+08:002011-07-20T09:13:38.904+08:00Creating "Debug\blah.unsuccessfulbuild" because "AlwaysCreate" was specified.Now this '<b>Creating "Debug\blah.unsuccessfulbuild" because "AlwaysCreate" was specified.</b>' appearing in the Visual Studio 2010 output window is really annoying.<br />
<br />
Most of those who had this annoyance have had some of their project files missing. You can look for missing file by opening each project file in Visual Studio. But in my case, I can actually open all project files in Visual Studio. So I had to inspect the Visual Studio log as described <a href="http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx" target="_blank">here</a>. Unfortunately, my DebugView does not show useful stuff from Visual Studio even when running under Administrative privilege. I have to use file logging instead.<br />
<br />
My <b>devenv.exe.config</b> looks like this:<br />
<br />
<pre style="border: 1px solid #cccccc; padding: 8px;"><?xml version="1.0"?>
<configuration>
<configSections>
…
</configSections>
<system.diagnostics>
<switches>
<add name="CPS" value="4" />
</switches>
<trace autoflush="false" indentsize="2">
<listeners>
<add name="myListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="e:\\TextWriterOutput.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</pre><br />
Restart Visual Studio and <b>e:\TextWriterOutput.log</b> will have something. Run your project and check the log, you will see what's wrong. In my particular situation, I have these lines in the log:<br />
<br />
<div style="border: 1px solid #cccccc; font-family: Courier New;"> devenv.exe Information: 0 : Project 'D:\projects\bar\blah.vcxproj' is not up to date because 16 build inputs were missing. <br />
devenv.exe Information: 0 : up to date is missing: 'D:\PROJECTS\FOO\SRC\STDAFX.H' <br />
devenv.exe Information: 0 : up to date is missing: 'D:\PROJECTS\FOO\SRC\DEBUG.H'</div><br />
"<b>D:\Projects\Foo"</b> was a directory that no longer exists, that's what's wrong. Why did that happen? I renamed the project folder from "<b>D:\Projects\Foo</b>" to "<b>D:\Projects\Bar</b>". Those files can still be opened in Visual Studio, but somehow the build engine is missing the track. Re-adding the files to the project solve the problem.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7587053268317597101.post-41579045856297048372011-04-03T14:23:00.000+08:002011-04-03T14:23:07.459+08:00Setting user data in Qt's widget itemsIf you use standard Qt widget such as QTreeWidget, QTableWidget or QListWidget, you may want to attach objects to the items. As an example, here's how to do it with QTreeWidgetItem (NOTE: the code is written from scratch to give you a rough idea, it may not compile correctly and is not optimised):<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; border-right: #cccccc 1px solid; border-top: #cccccc 1px solid; padding-left: 10px;"><pre>#include <QVariant></pre><br />
<pre>QTreeWidgetItem* addApple() {
Apple *apple = new Apple();
QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0, QStringList( apple.name ) );
QVariant v;
v.setValue(apple);
item->setData(0, Qt::UserRole, v); // attach apple to column 0
return item;
}
Apple* getApple(QTreeWidgetItem *item) {
QVariant v = item->data(0, Qt::UserRole); // get the data from column 0
Apple *apple = v.value<Apple*>(); // convert the data to Apple*
return apple;</pre><br />
<pre>/* The following line will cause a compile error since "const Apple *"
is different from "Apple *". If you want to use it, add
<i> Q_DECLARE_METATYPE(const Apple*)</i> to Apple.</pre><pre>*/
//const Apple *apple = v.value<Apple*>();</pre><pre>}</pre><br />
</div><br />
<br />
<br />
<br />
In Apple.h, you need to declare a metatype:<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; border-right: #cccccc 1px solid; border-top: #cccccc 1px solid; padding-left: 10px;"><br />
<pre>#include <QMetaType>
class Apple {
…
};
<b><span style="color: red;">Q_DECLARE_METATYPE(Apple*);</span></b></pre><br />
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-75800823418288064932010-09-25T11:55:00.000+08:002010-09-25T11:55:24.877+08:00Faster debug start time in Visual C++ 2010 by skipping symbol loadingWhen you start debugging in Visual Studio, Visual Studio will try to load debug symbols for your executable file and DLLs it uses. The symbol loading time is insignificant if your program uses only a couple of DLLs. <br />
What if you have a handful of DLLs or just being paranoid? Here's how to stop loading the DLL symbols and, except of course, your executable file:<br />
<ol><li>In Visual Studio 2010, go to <b>Tools->Options->Debugging->Symbols</b></li>
<li>Click "<b>Only specified modules</b>"<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqHST7zHuO7xA4Osd11Td3fKsyalsfkgO0fNzD-NN4mywKEUoRK3Jb1F2wiil74OFThztjlgHlbRYZQfIa-wH1rIAGQRei-z-iVKip5Jd9ZzDnw9Nm9-IACXDIct00cEQSyC8bewTKnyPu/s1600-h/image%5B18%5D.png"> <br />
<br />
<img alt="image" border="0" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9OjuGD3KFE4Ywl6qxd3PrCv00O5yR751yGjjwYFHcqgviDf608psR2vct1w5ExosUPqADJGp96Ti8R3x5vyT44gY2xkXAxgYgrDhM6QrjC6VP8VDWWjnCgoL-62X5eVDKt9l_vUcAHctR/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="761" /> <br />
</a></li>
<li>Click "<b>Specify modules</b>"</li>
<li>Clear "<b>Always load symbols located next to modules</b>"</li>
<li>Click the new icon</li>
<li>Enter your executable filename. If you don't specify your program here, breakpoints will not be hit. <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZPKCzVkALF5CIalqWsL7_oXELPHTYdUwDyc1AKoenTz_Lbtt1tMeUtgDuAgZ0Rh5nUW0M_sC7JK6ms-ELlSiILT1mv4Yjre-U6ZF7qIU-NMzaeHazz4T9R59ODOio3_YL2AVZkjghAZPI/s1600-h/image%5B9%5D.png"><img alt="image" border="0" height="449" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPkeKrWvHd-M3xXZoCVPufk5S17u5KTl_nrlKqIEw7Rq0hJQMsbi4UJZNh1Y_cbxUyCicwF-xw9v1usbVy4-fk4pxXr0lSIg09OP8MGzoN3tlwu6mn3fKA56bIUHYW5DEG8a0fcJ_et59R/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="557" /></a></li>
</ol><br />
The idea is, most of the time, you want to debug only your executable, leaving those DLLs behind. In case you want to dig into those DLLs, just change the option to "<b>All modules, unless excluded</b>", or whichever way you want.<br />
Note that these symbol options has global effect. Be careful if you work on several projects at one time. You may need to change those options back and forth.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-6879265533295177632010-07-06T11:00:00.003+08:002010-07-08T06:34:43.450+08:00C++ constructor (ctor) and destructor (dtor) reviewIt’s been a long time I haven’t touched C++. I only realized this when I found that I couldn’t differentiate between<br />
<blockquote>Stuff *s = new Stuff;</blockquote>and<br />
<blockquote>Stuff s;</blockquote>If you use <b>new</b>, some memory from the heap will be allocated for <b>s</b>. And the ctor of Stuff is called.<br />
<br />
If you had too much C#, you may think that "<b>Stuff s"</b> does almost nothing other than declaring something. But in C++, <b>"Stuff s" </b>actually call the ctor of Stuff. And the memory required by <b>s</b> is taken from the stack. And the ctor of Stuff is called.<br />
<br />
When do you release the memory then? If you use <b>new</b>, you have to <b>delete s</b> somewhere in the program. If you don’t use <b>new</b>, the dtor of Stuff will be called before the current scope exits. The call to the dtor is actually generated by the compiler.<br />
<br />
Compile the following to see clearly what happens when you are not using new:<br />
<div style="border-bottom: 1px solid; border-left: 1px solid; border-right: 1px solid; border-top: 1px solid; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px;"><pre>class Stuff {
public:
Stuff() {
printf("\nctor called.");
}
~Stuff() {
printf("\ndtor called.");
}
};
void test() {
printf("\nInside test(). Before Stuff s.");
Stuff s;
printf("\nInside test(). After Stuff s.");
}
void main() {
printf("\nInside main(). Before calling test().");
test();
printf("\nInside main(). After calling test().");
printf("\n\nPress Enter to exit.");
getchar();
}</pre><br />
</div><br />
<br />
<br />
Did you notice that dtor is called even though you did not do anything? The following disassembled output shows that the compiler generated the call to dtor.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwD6frhyphenhyphenZFuRnkBLBcFE-7Hc-afvPfwocSXRKdBPJX4vd2JT1os8tw0Vy3zgelgTPlAhnDk-JpKqtFv2W4hSFnBDLlC9kzWEt9ZZJ1v4BpsQQIITlLnaMwYAcbG980bHfzL22rHnxJRXhQ/s1600/2010-07-08+ctor+dtor+01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwD6frhyphenhyphenZFuRnkBLBcFE-7Hc-afvPfwocSXRKdBPJX4vd2JT1os8tw0Vy3zgelgTPlAhnDk-JpKqtFv2W4hSFnBDLlC9kzWEt9ZZJ1v4BpsQQIITlLnaMwYAcbG980bHfzL22rHnxJRXhQ/s640/2010-07-08+ctor+dtor+01.png" /></a></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-45030401282614125022010-05-13T10:13:00.000+08:002010-05-13T10:13:10.094+08:00Restore BIOS in Gigabyte GA-8SIMLH Rev 3.xMy colleague could not use her new widescreen LCD since her built-in SiS graphics card in Gigabyte GA-8SIMLH Rev 3.x does not support the resolution. It didn’t help either, after installing the LCD driver and updating the graphics driver. So I downloaded a <a href="http://www.wimsbios.com/files/vgabiospatched/bios.jsp">patched BIOS</a> for this board to support widescreen resolutions. <br />
<br />
I ran the Gigabyte atBIOS tool in Windows, selected the patched BIOS file, and confirm the update. At the stage when the tool showed ‘Erasing…’ or something, here came the blue screen of death. What could I do? I rebooted, only to find out that the machine could no longer boot. There was no display on the screen either.<br />
<br />
The next step was naturally Google. This motherboard uses Award BIOS. Some pages suggested to create a boot floppy disk and put this command in autoexec.bat.<br />
<blockquote>awdflash 12345678.BIN /py/sn/f/cc/r</blockquote>Some pages also warned to carefully select the version of awdflash to use. I don’t know which version of awdflash that I should use, but I have a <b>flash893</b> by Gigabyte. I changed the above command to flash893 but the machine still wouldn’t boot. Maybe flash893 did not understand the parameters?<br />
<br />
I figured that 893 could be a version number. So I downloaded awd893 (awdflash version 8.93) and uses the above command line. After I rebooted, the machine did access the floppy for a while, but then nothing happen and the machine was still in bad condition.<br />
<br />
So I ran that awd893 in a Windows 98 machine (luckily we still have an old machine with a floppy drive!) with this command<br />
<blockquote>awd893 /?</blockquote>I could not find /f in the output. Could this be the problem? So I modified the line in autoexec.bat to this:<br />
<blockquote>awd893 bios.bin /py /sn /cc /R</blockquote>I don’t know whether the parameters should be case sensitive. I just followed the cases from the /?. But the above line works!<br />
<br />
To summarise, here’s what I did to save the old machine:<br />
<ol><li>Create a boot floppy disk using Windows 98:</li>
<ol><li>Insert the disk</li>
<li>Open Windows Explorer.</li>
<li>Right-click the disk</li>
<li>Click “Format”</li>
<li>Tick “Copy system files”</li>
<li>Click “Start”</li>
</ol>
<li>Copy awd893 to the floppy.</li>
<li>Copy the bios file to the floppy.</li>
<li>Create a file called autoexec.bat in the floppy. You can use Notepad.</li>
<li>In the file, put this line (bios.bin is the BIOS file, change it to the name of your BIOS file):</li>
<b>awd893 bios.bin /py /sn /cc /R</b>
<li>Save the file. When you save the file in Notepad, make sure you choose “All Files (*.*)” in “Save as type”. Name the file as <b>autoexec.bat</b></li>
<li>Insert the disk to the affected machine.</li>
<li>Start the machine.</li>
<li>If everything goes smoothly, the machine will flash the BIOS and reboot itself.</li>
</ol>The final floppy disk should have the following files. You may have one extra file called drvspace.bin. I deleted it since a page said the boot disk should have minimal bootup files.<br />
<ul><ul><li>io.sys</li>
<li>msdos.sys</li>
<li>command.com</li>
<li>awd893.exe</li>
<li>bios.bin</li>
<li>autoexec.bat</li>
</ul></ul>I didn’t use the patched BIOS, I used the BIOS from Gigabyte, so the widescreen still didn’t work, cause we decided to give her a new machine.Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-7587053268317597101.post-846839735754571332009-10-11T02:04:00.004+08:002009-10-11T15:54:29.018+08:00Where do you keep (serialize) application data?Applications keep data everywhere. From plain text file, INI file, Windows registry, database to proprietary file format.<br />
<br />
Take a browser as an example, it needs to serialize user options, bookmarks, cookies and history. The designer can choose to keep each kind of persistence in different files. For example, options in one file and bookmarks in one file. The designer can also choose to keep user options in Windows registry, while keeping the bookmarks in a file.<br />
<br />
Can we keep everything (or almost everything) in a single place? Sure, database to the rescue! I am not talking about client/server database system like Oracle and SQL Server. I am talking about small but powerful database system such as <a href="http://www.sqlite.org/" target="_blank">SQLite</a> and embedded <a href="http://www.firebirdsql.org/" target="_blank">Firebird</a>. For a real world example, Firefox 3 uses SQLite to keep bookmarks, histories and cookies.<br />
<br />
There are several apparent advantages of using database to keep data. It is easy to backup and restore if everything is kept in one database. You are also free from opening and closing various files. Retrieving data quickly is easily accomplished by using index. You can also avoid data inconsistency by using transactions.<br />
<br />
Some people will complain that using database to keep small set of data is an overkill. You’ll have to judge that by yourself. Do you want to free yourself from headaches such as creating indexes and creating your own file formats? If so, start to serialize your data to database now. You can then focus on developing your software and release it quicker.<br />
<br />
And yes, there are people who keep big list of bookmarks and histories.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-25675772750915841302009-10-09T21:47:00.001+08:002011-09-24T12:31:10.803+08:00Opera in XIII: The ConspiracyMaybe I haven't watched too many movies, so this was the first time I saw Opera in a film. I was excited that I replayed to see the icon again :)<br />
<br />
<a href="http://www.imdb.com/title/tt1117667/" target="_blank">XIII</a> was rescued by an old couple after being coma on a tree with a parachute. He woke up without remembering who the hell he was and what in the world he did, yet his could still show off his various skills.<br />
<br />
He tried to use the old folk’s machine which had Opera installed (notice the dot dot dot (…) button?):<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSCT1-uoBbYv7PhlxipmgFExYB_iSCfkB0LSbEJQNcvFKaV6s1fUzJeux2LbxwDXy2w3GfavCkeW6yis2KXlvhYzCrHIzvFMcNLRhNTuaiFZ7HhtthiuLYJjBP0jnsCa7I-q58wrTP4JI/s1600-h/2009-10-09%20Opera1%5B6%5D.jpg"><img alt="XIII uses Opera" border="0" height="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF3BCK2qnlSjcwbyebmRTtpSi7YXd1znfT_xQOVqNUYn-ThzcqP0lnnYjT1vlG7LfV88x2AALS1wfKnaecAuJYVKlal41fmDfUODpC3aNQrf3zKkNiN-nH6HS6OdFaPAldIV6MaMZXsMHk/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="XIII uses Opera" width="566" /></a> <br />
<br />
<br />
Opera couldn’t connect:<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0V4iRlzl-al5pGHlLsb7WyEPh4oHZvoN3c3dlhjm3qA_27JSgZs4jbnS9yMcKuRVMXb_DZc3cdVaEXIKeZ5K5cWwYvo-iB_yQEFAEe32KqzkoJQrsOyd4OM95xA0UCylPVBatGWmLKbOG/s1600-h/2009-10-09%20Opera2%5B7%5D.jpg"><img alt="2009-10-09 Opera2" border="0" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsBlwekLnb1VFbNfVGhfUnu255PPVAMILNjfFhcx5qDGif1VzSVmuejKPVACHxpUXF0IY_BFe5u-wHkDrdEDUo1WXt1B5Ix0zpGyvnkCDViG5iyAnRMVDoN1TEw5oBvKVhVvUnUsxdCnRB/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 Opera2" width="814" /></a> <br />
<br />
<br />
Old man said the internet has not been functioning for more than a year, it must have been disconnected. XIII said that some ISPs are so lazy that they just disable users by blocking hardware ID. So he took off the modem cover (which was not screwed or glued together at all), adjusted a <a href="http://en.wikipedia.org/wiki/DIP_switch" target="_blank">DIP switch</a>, <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_8Bn3FuaQY2YTOXT3d8swJg_y_d_ugg3kKv6snZVodYKh2i6nOCqI2mkhXftGXYb2ywLi83K1LRiojJiTGEL6CBUIA51QZzd914R2S9DlKN27hyphenhyphenxBnUSorsOChXXM1YwTEr0SVsZFfOfK/s1600-h/2009-10-09%20DIP%5B3%5D.jpg"><img alt="2009-10-09 DIP" border="0" height="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvTNfEUBAVc96KFr1d-1Z8uHBczewEwIxzTQ8U0I3w8oHL7TF6QS_OXiOXGxqSW8fHco4Bv18ZlFkJPBPkjFIipWiigA4RCf4hFIsFZQC-RUw_uaUEXnMQiifMl53VIaJHdUAw1v1GzeSM/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 DIP" width="753" /></a> <br />
<br />
<br />
spoofed the MAC address,<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz6Wh8wXrrmdf_1Qs30-IrTwkil_iuXeG8YGVBh5AFrE_vxmdi46Gh8cojzpxlMyOYR2P2NUhIPX-KT-YIdEEONYuPHL1y6u9UMCrwhhb4WkVxg12rzjiawEi8W5wv-iSLRNPRxo571TL5/s1600-h/2009-10-09%20Spoof%5B7%5D.jpg"><img alt="2009-10-09 Spoof" border="0" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia5zGkPw3Duyoyf9yNQM5j80E1sR9wOzzOw37TgxlATYPgC_PMHH6ezuyqe1dxdhyphenhyphenZ9AaWCa4NSrf87kp4MXpnTTst_m-n25dJzlyXh2tugkUJE7mfPKnxQsVuJggm-m4eb-1q7xQIVYr6/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 Spoof" width="816" /></a> <br />
<br />
<br />
and voilà, he’s online with HOT hit (#1 user-rated search engine)!<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6x5BUxi8-yLLSOdXujgt2vquVVMWKzuDjrMaJY6C6qiuNBEebuaOdC2LeUB3QHP_-0elmFknZfKobsRB5oJkzIL_-BF_D947Dys50sqKOWJCs_siJY19GqVliHo_5vxrouO7FDXaOi0y/s1600-h/2009-10-09%20Online%5B7%5D.jpg"><img alt="2009-10-09 Online" border="0" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSHcCpnzj7n5GK0krnbDHurHP6TPaeXgyx9OOnRrYYGUytta8VC-RqY-sw2n9BqtnwSZed7A8Fc1D5QdvvVW53MrsVfp88RMBsWMVpWiLFUn4O-YwMQx-D_tvmcAoKaM79a8udlvkZfECJ/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 Online" width="810" /></a> <br />
<br />
<br />
“You can't even remember your own name. How did you manage to do that?” the old man asked with a curious look.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQrH4tbC_bdPDMz52W1iqrHJSckhqSKDL3MvLHWu-5q1mkPeHVEpAk9AX2XVfoqKoFt44PQ6af3pbyCUXsKdte6g_fEA7-n20ZP7QtOymemLBV8gqzV_wFCf9-w8N4dHnbgtXnIoRRkOG/s1600-h/2009-10-09%20Old%20folk%5B3%5D.jpg"><img alt="2009-10-09 Old folk" border="0" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpAfvc2kckFJVLBaz8MJ2Ca59YlcrhJ2Uz5wFC2ml-Yw7cA_mZXrsV2WBf5U7c7TZWV44MolnxGGP7XG8CK0_7OO7Eh88ICOp5u4PP5k9MyV8x1IjhHQCWvboswgCJ4ZhGav5UHnJZEMtI/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 Old folk" width="810" /></a> <br />
<br />
<br />
“I have no idea,” XIII replied.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHG77_BmQXpslXwTvaEwoVfAPrYEYmMpgMQyA44_bOMTekzTTGgSwDEZteWepLzPo0a5Dn1zYKD3Z5QyFBu6uFJUXTVOgDcJ_oei2V2NddM4moTYIST-Q8Y6mzqIsrHJ0WULMhJrGkmFEq/s1600-h/2009-10-09%20No%20idea%5B3%5D.jpg"><img alt="2009-10-09 No idea" border="0" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggIBHn7sRA0vfigZDedyF2BeLZgGs8aihvNOcZUlNGD7K9AZtzMaWESNeBXsflvazbDEByXySi1fV4LrypWKIYTYlYqHQcEvF3RASfkQpeYiS3AGVBTEhZ9ypbhTTfJFQK5NFS4H7XoJFA/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="2009-10-09 No idea" width="810" /></a>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-7587053268317597101.post-90859045321948647012009-10-05T18:21:00.008+08:002009-10-05T22:06:22.601+08:00Windows 7 Keyboard and Mouse Shortcuts<p>Windows 7 added some useful shortcut keys and mouse shortcuts.</p><br /><h2><u>Window</u></h2><p>The following keys affect the current window. They works only if Aero Snap is enabled which is enabled by default. If yours is somehow disabled, go to <strong>Ease of Access Center -> Make the mouse easier to use –> </strong>clear the <strong>“Prevent windows from being automatically arranged when moved to the edge of the screen"</strong> checkbox.</p><ul><li><strong>Win+Up:</strong> Maximize window (if it can be maximized).</li><li><strong>Win+Down:</strong> Restore window if it is currently maximized, or minimize if it is not currently maximized.</li><li><strong>Win+Shift+Up </strong>or <strong>Double-click the top border:</strong> Maximize window vertically.</li><li><strong>Win+Shift+Left / Right:</strong> Move window to the another monitor.</li><li><strong>Win+Left:</strong> Dock to the left of the screen, press this repeatedly to cycle the window through different monitors.</li><li><strong>Win+Right:</strong> Dock to the right of the screen, press this repeatedly to cycle the window through different monitors.</li><li><strong>Win+Spacebar</strong> = Take a peek at the desktop.</li><li><strong>Win+Home</strong> = Minimize all other windows except the current window. Press again to undo.</li></ul><br /><h2><u>Taskbar</u></h2><p>In Windows Vista and Windows 7, you can press <strong>Win+T</strong> to focus the taskbar. You can do these when the taskbar has the keyboard focus:</p><ul><li><strong>Left</strong> or <strong>Right arrow</strong>: move between tasks.</li><li><strong>Home</strong>: focus the first task button. Works only in Windows 7.</li><li><strong>End</strong>: focus the last task button. Works only in Windows 7.</li><li><strong>Press the first letter of a task title</strong>: That task button will be focused.</li><li><strong>Up arrow</strong>: focus the Aero Peek window. When you are at a Aero Peek window, you can press left/right/home/end to move around. Press down arrow or Esc to focus back to the task button.</li><li><strong>Enter</strong> or<strong> Spacebar</strong>: switch to the selected task. </li></ul><br /><h2><u>Tray</u></h2>Press <strong>Win+B</strong> to focus the tray. Then:<br /><li><ul><li><strong>Left</strong> or <strong>Right arrow</strong>: move between icons.</li><li><strong>Press the first letter of a icon tooltip</strong>: That icon will be focused. The tooltip is the text that appears when you hover a tray icon with the mouse.</li><li><strong>Enter</strong> or<strong> Spacebar</strong>: this is the same as double-clicking the icon.</li><li><strong>Drag a tray icon from the taskbar and drop it outside the taskbar</strong>: this will hide that tray icon from the taskbar, unless it has notifications.</li><li><strong>Drag a icon from the hidden icon box to the taskbar</strong>: this will show that tray icon on the taskbar, making it always visible.</li></ul></li><h2><u><br /></u></h2><h2><u>Taskbar Favorites</u></h2>Press <strong>Win+<Number></strong> to open task quickly. For example: press <strong>Win+1</strong> to open the first program on the taskbar. Press <strong>Win+0</strong> to open the 10th program on the taskbar. These key combinations are called Taskbar Favorites, some models of Microsoft keyboard have actually included hotkeys just for these.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-27052273629391686592009-08-19T00:40:00.009+08:002009-08-19T22:31:49.556+08:0032-bit applications running under 64-bit Windows do not see the world as it really is64-bit desktop computing is becoming more common. Major computer vendors like Dell and HP have started to give users the choice of 64-bit OS (read: Windows) in many of their models. Some of you may have already owned a 12gb+ XPS from Dell.<p>The specific Windows I am talking about here is Windows 7 64-bit, but the behaviors should apply to Vista 64-bit and/or XP 64-bit, as well as those 64-bit variants of Windows Servers.</p>In those days of Windows 32-bit, we have those Windows API libraries such as user32.dll and gdi32.dll residing in %windir%\System32. It makes perfect sense that one would expect that 64-bit API libraries in 64-bit Windows would live in %windir%\System64.<p>But in reality, 64-bit API libraries still live in %windir%\System32. One may say: Ok, it's alright to have both 32-bit and 64-bit libraries in the same directories, as the names of 64-bit libraries should be user64.dll, gdi64.dll etc. </p><p>But again, in reality, 64-bit API libraries still use the same name -> user32.dll, gdi32.dll etc.</p><p>So if 32-bit and 64-bit libraries share the same name, how do they both sit together in the same directory?</p><p>The truth: </p><ol><li>64-bit Windows API libraries live in %windir%\System32</li><li>32-bit Windows API libraries live in %windir%\SysWOW64</li><li>64-bit applications <strong><em>directly</em></strong> use 64-bit Windows API libraries in %windir%\System32</li><li>32-bit applications <em><strong>indirectly </strong></em>use 32-bit Windows API libraries in %windir%\SysWOW64</li></ol><p>The interesting part is point #4. Well, 32-bit applications cannot see the real %windir%\system32. Whenever a 32-bit application try to access %windir%\system32, the OS will translate the request to %windir%\SysWOW64, which is the place where 32-bit libraries live now.</p><p>Need a proof? Let's do an experiement. We need Internet Explorer for this test. I hope you did not remove Internet Explorer 8 yet since Windows 7 indeed allow you to. If you have really removed it, just use any 32-bit applications that can open a file to test.</p><p>1. Make sure your Windows is 64-bit. You cannot see this effect in 32-bit Windows. </p><p>2. Open Windows Explorer (which is 64-bit), go to your %windir%\system32, create a folder named "Can you see me" inside it.<br /></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3unZIzEmv0nroLDQKgD0jONx2jqFh76KSEDygAW0LBkG2vm01887Ve6X5wyGXkr5Yxiw1aJZnTK7uaQENpVmycWXBNHeSSi7Jl5mS_Km8yhMWXSG4wNsoJt9eax5NgXkME9tTluYt-fbj/s1600-h/2009-08-19+CanYouSeeMe.jpg"><img style="cursor: pointer; width: 400px; height: 345px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3unZIzEmv0nroLDQKgD0jONx2jqFh76KSEDygAW0LBkG2vm01887Ve6X5wyGXkr5Yxiw1aJZnTK7uaQENpVmycWXBNHeSSi7Jl5mS_Km8yhMWXSG4wNsoJt9eax5NgXkME9tTluYt-fbj/s400/2009-08-19+CanYouSeeMe.jpg" alt="" id="BLOGGER_PHOTO_ID_5371346011186441650" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvCcQbrUd6mgRpkpMdF2kHqojCPQ58NMOe1KzuanBPme3uM5PVIC6sfhWc5ZbC4FgccgJcL0jFzKXnJ5cAlCiOHrC_AuqXOCm0PZ221IHogWzdP2EGRkT7fYrao0ATbAI8kst3pLwjOCO0/s1600-h/2009-08-18+IEStartMenu.jpg"><br /></a></p><p>3. 64-bit Windows come with both 32 and 64-bits of Internet Explorer. I need you to run the 32-bit Internet Explorer now.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvCcQbrUd6mgRpkpMdF2kHqojCPQ58NMOe1KzuanBPme3uM5PVIC6sfhWc5ZbC4FgccgJcL0jFzKXnJ5cAlCiOHrC_AuqXOCm0PZ221IHogWzdP2EGRkT7fYrao0ATbAI8kst3pLwjOCO0/s1600-h/2009-08-18+IEStartMenu.jpg"><img style="cursor: pointer; width: 400px; height: 171px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvCcQbrUd6mgRpkpMdF2kHqojCPQ58NMOe1KzuanBPme3uM5PVIC6sfhWc5ZbC4FgccgJcL0jFzKXnJ5cAlCiOHrC_AuqXOCm0PZ221IHogWzdP2EGRkT7fYrao0ATbAI8kst3pLwjOCO0/s400/2009-08-18+IEStartMenu.jpg" alt="" id="BLOGGER_PHOTO_ID_5371346004851404402" border="0" /></a> </p><p><br /></p> <p>4. In Internet Explorer, press Ctrl+O to show the Open dialog. Then click Browse.</p><p>5. Now go to your %windir%\system32. Can you see the folder we created in step 2? You can't. Why? Because this 32-bit Internet Explorer is actually viewing %windir%\SysWOW64 instead of the real %windir%\System32.</p><p><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_OU4O-EaUJyE4dK0F6qJigIchdy3rw9NweFAiHcBo1_lR0YCLVgw3Q4nWqH2VtmPE1nVHWBkpoFmn83AiwcSCz3XHS3Mccql9yBK1oXNMfg5Nii6brxdvJnWCq3F8UZEpJKBK4bVerFQQ/s1600-h/2009-08-19+IE32b.jpg"><img style="cursor: pointer; width: 400px; height: 332px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_OU4O-EaUJyE4dK0F6qJigIchdy3rw9NweFAiHcBo1_lR0YCLVgw3Q4nWqH2VtmPE1nVHWBkpoFmn83AiwcSCz3XHS3Mccql9yBK1oXNMfg5Nii6brxdvJnWCq3F8UZEpJKBK4bVerFQQ/s400/2009-08-19+IE32b.jpg" alt="" id="BLOGGER_PHOTO_ID_5371346019246435826" border="0" /></a></p><p><br /></p><p>6. Now run your 64-bit Internet Explorer. Press Ctrl+O. Click Browse. Go to %windir%\system32. Tada! We can see the folder now!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimO2xiqiUNRxBg1_ZdVFgWk417eqIltBpYAugX-pAswWswfmVt4M79jDTxYleq3dS1LmIO3YoJfx01z_wqyOOjO2UATI8__j4Dms1b3f9uHuttueG9DwMREJOu9SlMfvADnsmj2258codE/s1600-h/2009-08-19+IE64b.jpg"><img style="cursor: pointer; width: 400px; height: 332px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimO2xiqiUNRxBg1_ZdVFgWk417eqIltBpYAugX-pAswWswfmVt4M79jDTxYleq3dS1LmIO3YoJfx01z_wqyOOjO2UATI8__j4Dms1b3f9uHuttueG9DwMREJOu9SlMfvADnsmj2258codE/s400/2009-08-19+IE64b.jpg" alt="" id="BLOGGER_PHOTO_ID_5371346026447115650" border="0" /></a></p><p><br /></p><p>Why in the world did Microsoft do this kind of confusing stuff? For backward compatibility reasons. Many software hardcoded itself to access %windir%\system32. If Microsoft simply created a system64, many software will need to be changed and recompiled (including those from Microsoft). And why are the names still user32.dll, gdi32.dll etc? Same reason, if the DLL name are changed, many source code will need to be changed before recompiling to 64-bit targets. By using the same directory and same naming, you do not need to change much in your software to retarget to 64-bit Windows.<br /></p><p>Finally, how do you know whether a running application is 32 or 64-bit? You can use Task Manager to find out. A 32-bit process has a "*32" behind it's name. Those without it are 64-bits.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh59AdJhA_64NvsYt7rge0TNWzd6KqYOIzdT3PPVRDJKQncq56eUUmflewOj2Xo0UmBbKxjFf5hRfzEIG08hT9PxhmXiokrwiLr2RPECKg7BzIu8K2P5mG7jy10siaZB2Dk700GkboToyKz/s1600-h/2009-08-19+TaskManager.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh59AdJhA_64NvsYt7rge0TNWzd6KqYOIzdT3PPVRDJKQncq56eUUmflewOj2Xo0UmBbKxjFf5hRfzEIG08hT9PxhmXiokrwiLr2RPECKg7BzIu8K2P5mG7jy10siaZB2Dk700GkboToyKz/s400/2009-08-19+TaskManager.jpg" alt="" id="BLOGGER_PHOTO_ID_5371346035974656818" border="0" /></a> </p><p> </p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7587053268317597101.post-25039979815977061172009-08-12T17:03:00.032+08:002009-08-13T11:22:11.120+08:00Difference between Windows 7 RTM ISO from MSDN. Create a one-for-all Windows 7 RTM ISO (Install most editions with one DVD)<p>MSDN provides subscribers various versions of Windows 7 RTM. According to Microsoft, all features are actually installed, no matter which edition you have in hand. For example if you have Windows 7 Home Basic, you can upgrade to Ultimate without getting another DVD. The extra features will be unlocked from your computer.</p><p>Does that mean that all these ISOs are actually the same?</p><p>For Vista, MSDN provided one DVD that included Vista Home Basic, Home Premium, Business and Ultimate. With this DVD, the Vista edition that will be installed depends on the product key you entered in Setup.</p><p>But it is different this time. Installing from a Windows 7 Ultimate ISO, setup did not accept when I tried to put product keys from other editions.</p><p>Out of curiosity, I did a binary compare on two Windows 7 ISO - Home Premium and Ultimate. The two ISO have the same size - 2,501,894,144 bytes. And the difference was only 75 bytes.</p><p>I extracted the two ISO with WinRAR, both have 874 files and 200 folders. The total size was a little bit different. So I did comparison on all files with WinMerge. Turned out that the difference was only in one file - <em>sources\ei.cfg</em>. The contents of this file in Home Premium:</p><p style="border: 1px solid rgb(204, 204, 204); padding: 8px; margin-left: 20px;">[EditionID]<br /><span style="color: rgb(51, 51, 255);"><em>HomePremium</em></span><br />[Channel]<br />Retail<br />[VL]<br />0<br /></p><p>And in Ultimate:</p><p style="border: 1px solid rgb(204, 204, 204); padding: 8px; margin-left: 20px;">[EditionID]<br /><span style="color: rgb(51, 51, 255);"><em>Ultimate<br /></em></span>[Channel]<br />Retail<br />[VL]<br />0<br /></p><p>So if you change only that file in the ISO, you do not need to download all editions. <em>But the <strong>best solution</strong> is just <strong>delete ei.cfg</strong>, Setup will ask you which edition you want to install if it sees no such file.</em></p><p>With tools like <a href="http://www.poweriso.com/">PowerISO</a>, one can delete files in a ISO. The following shows the steps to create a One-For-All-Windows-7 DVD that you can use to install Windows 7 Starter, Home Basic, Home Premium, Professional and Ultimate. I don't know about other tools, but I used PowerISO for this.</p><p><span style="font-weight: bold;">Step 0</span><span>: Download one of the Windows 7 Edition (Starter, Home Basic, Home Premium, Professional or Ultimate). Note that Windows 7 Enterprise is not included in any of these ISOs.<br /></span></p><p><span style="font-weight: bold;">Step 1</span>: Open the ISO with PowerISO (or any ISO tool of your choice) and delete sources\ei.cfg</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc1cjFZLt7T8bOMrNDXhd8m31iDFsQV_ixpOcMdm0RA2tM5S3Eu7jV7ZraYvewjVk8ZTBII8YovC0V0f4SO-pgvpRNesjE8NugDR-V3y6R5YKknrVaXoGe9yQu5vnxZhKy3HbcUOb3tE8V/s1600-h/2009-08-13-Windows-7-Make-One-For-All-DVD.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc1cjFZLt7T8bOMrNDXhd8m31iDFsQV_ixpOcMdm0RA2tM5S3Eu7jV7ZraYvewjVk8ZTBII8YovC0V0f4SO-pgvpRNesjE8NugDR-V3y6R5YKknrVaXoGe9yQu5vnxZhKy3HbcUOb3tE8V/s640/2009-08-13-Windows-7-Make-One-For-All-DVD.jpg" alt="" id="BLOGGER_PHOTO_ID_5369254429731201410" border="0" /></a></p><p><br /></p><p><span style="font-weight: bold;">Step 2</span>: Save the new ISO</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkZ3TNC251MZYUDydmAI9S870t0No9oeHwdSWOjnqHxiCxZZQgYKWzRQqXOE0bIQAd5NjNTs6r39ZHDJrQ40IAzh5pGx-mF4A6w_Lze6ZdPi-4QwdUjucYxC5-UAflMNwSBBwC3qoIVxUL/s1600-h/2009-08-13-Windows-7-Make-One-For-All-DVD-2.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkZ3TNC251MZYUDydmAI9S870t0No9oeHwdSWOjnqHxiCxZZQgYKWzRQqXOE0bIQAd5NjNTs6r39ZHDJrQ40IAzh5pGx-mF4A6w_Lze6ZdPi-4QwdUjucYxC5-UAflMNwSBBwC3qoIVxUL/s640/2009-08-13-Windows-7-Make-One-For-All-DVD-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5369254436028564962" border="0" /></a></p><p><br /></p><p><span style="font-weight: bold;">Step 3</span>: Burn the ISO or mount it.</p><p><span style="font-weight: bold;">Step 4</span>: Try to install, you will see the following screen prompting "Select the operating system you want to install"<br /></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiesHw1Z_hmQG4sCDJ1RexqpY9OwzWY2mbufOtXqqgQ8vCDn_OsqGh2qHy0jFtePNWoTHxFZS6InInpzkoPm0YgY7f8evzH2t6XV1oMZNAL5frgReaHZFG4iEospF5jxEZe_qhso7pDT-Nq/s1600-h/2009-08-13-Windows-7-Setup-Choose-Edition.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiesHw1Z_hmQG4sCDJ1RexqpY9OwzWY2mbufOtXqqgQ8vCDn_OsqGh2qHy0jFtePNWoTHxFZS6InInpzkoPm0YgY7f8evzH2t6XV1oMZNAL5frgReaHZFG4iEospF5jxEZe_qhso7pDT-Nq/s640/2009-08-13-Windows-7-Setup-Choose-Edition.jpg" alt="" id="BLOGGER_PHOTO_ID_5369254441664106642" border="0" /></a></p><p>Will Microsoft eventually release a one-for-all Windows 7 ISO as in Vista? I certainly hope so, it will save many DVDs, covers and storage space.</p><p></p><p><span style="font-weight: bold;"><u>On Testing Windows 7 in VMware Workstation</u></span></p><p>If you are installing Windows 7 using VMware Workstation, you don't need to modify the ISO, Setup will prompt you for the edition. I tested on VMware Workstation version 6.5.2 and although it treats Windows 7 as Windows Vista, the installation went fine. I suspect that Windows 7 Setup changes its behavior whenever it finds itself living inside a Matrix world. Or maybe VMware Workstation has a way to "ask" Windows 7 Setup to let you choose the Edition ?<br /></p><p><br /></p>Unknownnoreply@blogger.com5tag:blogger.com,1999:blog-7587053268317597101.post-35261435385761162142009-08-11T23:30:00.010+08:002009-08-12T09:22:46.996+08:00Upgrading from Windows Vista Ultimate 64-bit to Windows 7 Ultimate 64-bitDownloaded Windows 7 Ultimate 32-bit and 64-bit RTM from MSDN. Installed the 32-bit on a Core 2 Duo 2.66Ghz in a new partition. Took only less than half an hour. The boot and shutdown speed were apparently faster than Vista. <div><br /></div><div>But it spent at least 3 hours when I upgraded from Vista Ultimate x64 to Windows 7 Ultimate x64. The machine is a Core 2 Quad 2.66hz with 8gb RAM. Obviously it was no joke when Windows 7 setup said the upgrade may take several hours. At the time of the writing of this sentence, it was still being upgraded, forcing me to use another machine to blog.</div><div><br /></div><div>The final step of the upgrade - <i>Tranferring files, settings, and programs</i> - was the most time-consuming, took over 2 hours in my machine. And it showed that there were 1,003,453 items to be transferred. I wonder what constituted these 1 million items. One registry key = one item? Maybe I really have that many files.</div><div><br /></div><div>I ran the Windows 7 Setup from within Windows Vista. It warned me that SQL Server 2008 may not run properly if I upgrade without uninstalling it first. After some googling I decided to follow the advice and uninstalled it.</div><div><br /></div><div>Seems like most settings from Vista are left untouched after the upgrade. Unfortunately there is one big problem - all my pinned programs in Start menu were gone. I have to repin those programs. Anyone experienced this?<br /></div>Unknownnoreply@blogger.com0