<?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-1507108132689046588</id><updated>2011-12-28T14:21:50.672-08:00</updated><category term='mobile'/><category term='Windows XP'/><category term='Geocities'/><category term='Visual Studio'/><category term='Microsoft'/><category term='Windows 8'/><category term='SQL'/><category term='GLUT'/><category term='C'/><category term='Slashdot'/><category term='VirtualBox'/><category term='SQL Server'/><category term='uCertify'/><category term='hosting'/><category term='PrepKit'/><category term='Windows'/><category term='Oracle'/><category term='GNOME'/><category term='Jaunty'/><category term='defragmentation'/><category term='HTTP'/><category term='C++'/><category term='accessibility'/><category term='Google Earth'/><category term='SDL'/><category term='Android'/><category term='Yahoo'/><category term='wget'/><category term='usability'/><category term='Informix'/><category term='Startup'/><category term='OpenGL'/><category term='Windows 7'/><category term='MySQL'/><category term='Dogfooding'/><category term='client/server'/><category term='administrator'/><category term='graphics'/><category term='best practices'/><category term='Quick Launch'/><category term='games'/><category term='Windows Services'/><category term='Java'/><category term='NetBeans'/><category term='Google'/><category term='databases'/><category term='PrepEngine'/><category term='certification'/><category term='Google Chrome'/><category term='Sun'/><category term='network programming'/><category term='Linux'/><category term='HTML'/><category term='DOSBox'/><category term='MCTS'/><category term='Ubuntu'/><category term='Defraggler'/><category term='accesskey'/><category term='Boost'/><category term='LaTeX'/><category term='Thesis'/><category term='vista'/><category term='Sierra'/><title type='text'>Gigi on IT</title><subtitle type='html'>Random encounters in the IT world</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8200871264873976638</id><published>2011-12-28T14:21:00.000-08:00</published><updated>2011-12-28T14:21:50.678-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL Error Nr 1045: Access denied ... (using password: YES)</title><content type='html'>If you opt to reinstall MySQL, the following error is probably what you'll find upon reinstalling and finishing the MySQL Instance Config Wizard:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-x7W3lL4iDkg/TvuVRpmaIpI/AAAAAAAABJk/GYs8tBRfAAs/s1600/mysql-error-1045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://2.bp.blogspot.com/-x7W3lL4iDkg/TvuVRpmaIpI/AAAAAAAABJk/GYs8tBRfAAs/s400/mysql-error-1045.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The solution is to not only uninstall MySQL, but also remove (a) the directory where it is installed, and (b) the directory where it keeps its settings. On Windows 7, the latter can be found at C:\ProgramData\MySQL, or C:\Users\All Users\MySQL which is the same thing. Once these are removed, proceed to reinstall MySQL, doing a detailed configuration (from the MySQL Instance Config Wizard) to reset the root password. If you miss any of these steps, you might need to uninstall and reinstall again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8200871264873976638?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8200871264873976638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/12/mysql-error-nr-1045-access-denied-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8200871264873976638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8200871264873976638'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/12/mysql-error-nr-1045-access-denied-using.html' title='MySQL Error Nr 1045: Access denied ... (using password: YES)'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-x7W3lL4iDkg/TvuVRpmaIpI/AAAAAAAABJk/GYs8tBRfAAs/s72-c/mysql-error-1045.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-4093309903493883773</id><published>2011-12-07T12:15:00.000-08:00</published><updated>2011-12-07T12:15:35.743-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Chrome'/><title type='text'>Search using Google, or Google</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qNd4ctvzxbI/Tt_JApN0B5I/AAAAAAAABJU/HZiBL90aGgA/s1600/google-or-google.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="154" src="http://1.bp.blogspot.com/-qNd4ctvzxbI/Tt_JApN0B5I/AAAAAAAABJU/HZiBL90aGgA/s320/google-or-google.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When installing the Google Chrome browser, you are asked to choose which search engine you want to use directly from the browser. This might seem to allow fair competition, although there is obviously no mention of Bing. What I found funny, though, is that two out of four choices are Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-4093309903493883773?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/4093309903493883773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/12/search-using-google-or-google.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4093309903493883773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4093309903493883773'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/12/search-using-google-or-google.html' title='Search using Google, or Google'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qNd4ctvzxbI/Tt_JApN0B5I/AAAAAAAABJU/HZiBL90aGgA/s72-c/google-or-google.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-1386411485154838284</id><published>2011-10-17T12:24:00.000-07:00</published><updated>2011-10-17T12:24:50.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans squashed button bug</title><content type='html'>For a while I've been having a problem with NetBeans 7.0.1 which is sometimes creating buttons that look squashed, like a sausage. I haven't noted a pattern that causes this bug to occur, but I finally found a &lt;a href="http://www.experts-exchange.com/Programming/Editors_IDEs/Java/NetBeans/Q_25964360.html"&gt;solution&lt;/a&gt;. You have to &lt;i&gt;Clean and Build Main Project&lt;/i&gt; (Shift+F11), and then the buttons will render correctly when you run the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-1386411485154838284?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/1386411485154838284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/netbeans-squashed-button-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/1386411485154838284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/1386411485154838284'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/netbeans-squashed-button-bug.html' title='NetBeans squashed button bug'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-2024279168619273998</id><published>2011-10-08T04:31:00.000-07:00</published><updated>2011-10-08T04:31:42.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Informix'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL String Concatenation in Informix, MySQL and SQL Server</title><content type='html'>Like &lt;a href="http://gigionit.blogspot.com/2011/10/sql-top-n-rows.html"&gt;selecting the top N rows&lt;/a&gt;, syntax for string concatenation is DBMS-specific. The following are examples for Informix, MySQL and SQL Server.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Informix&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select name || ' ' || surname&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select concat(name, ' ', surname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: the MySQL concat() function can accept any number of arguments.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; SQL Server&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select name + ' ' + surname&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-2024279168619273998?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/2024279168619273998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/sql-string-concatenation-in-informix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2024279168619273998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2024279168619273998'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/sql-string-concatenation-in-informix.html' title='SQL String Concatenation in Informix, MySQL and SQL Server'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8218274421715936693</id><published>2011-10-07T12:05:00.000-07:00</published><updated>2011-10-07T12:05:42.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boost'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>How to build the Boost libraries</title><content type='html'>The &lt;a href="http://www.boost.org/"&gt;Boost libraries&lt;/a&gt; for C++ are distributed in source form, and can be easily built by following &lt;a href="http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html#or-simplified-build-from-source"&gt;these instructions&lt;/a&gt;. From the Boost root directory, simply run the following two commands:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;bootstrap&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;.\b2&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8218274421715936693?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8218274421715936693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/how-to-build-boost-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8218274421715936693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8218274421715936693'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/how-to-build-boost-libraries.html' title='How to build the Boost libraries'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-3746121197789338297</id><published>2011-10-04T09:06:00.000-07:00</published><updated>2011-10-04T09:06:21.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='administrator'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>Run as different user, in Windows 7</title><content type='html'>Here's a little gem from a friend of mine. In Windows 7 we all know how to right click and "Run as administrator". But how do you run a program as a different user, perhaps as an administrator on a different domain? The answer: when you Shift + Right click, you get an additional "&lt;i&gt;Run as different user&lt;/i&gt;" option.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thanks, Microsoft, for hiding stuff from us. You really know all about usability.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-3746121197789338297?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/3746121197789338297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/run-as-different-user-in-windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3746121197789338297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3746121197789338297'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/run-as-different-user-in-windows-7.html' title='Run as different user, in Windows 7'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-6920372996828247252</id><published>2011-10-03T12:03:00.000-07:00</published><updated>2011-10-08T04:24:26.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Informix'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Top n Rows in Informix, MySQL and SQL Server</title><content type='html'>Different dialects of SQL allow you to obtain the first &lt;i&gt;n&lt;/i&gt; rows, resulting from a query, in different ways. The following are examples in Informix, SQL Server, and MySQL. &lt;b&gt;Tip&lt;/b&gt;: to get the &lt;i&gt;last&lt;/i&gt; n rows, simple switch the &lt;i&gt;order by&lt;/i&gt; clause (from ascending to descending, or vice versa).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Informix&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select first 5 *&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select *&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;limit 5;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;SQL Server&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select top 5 *&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;from customer;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-6920372996828247252?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/6920372996828247252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/sql-top-n-rows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6920372996828247252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6920372996828247252'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/sql-top-n-rows.html' title='SQL Top n Rows in Informix, MySQL and SQL Server'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-3276619342259324076</id><published>2011-10-03T11:45:00.000-07:00</published><updated>2011-10-03T11:45:06.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='accesskey'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>HTML Access Keys</title><content type='html'>The HTML &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;accesskey&lt;/b&gt; attribute is very useful usability feature that is reminiscent of shortcut keys in standard desktop applications. This allows you to define particular key combinations for your navigation links (e.g. Shift+Alt+H for Home). Originally, these access keys used the Alt key, but they would clash with the browser menu (which also uses the Alt key, by convention), so they were changed to use Shift+Alt in most browsers.&lt;br /&gt;&lt;br /&gt;Firefox, Safari, Chrome and Internet Explorer use Shift+Alt for access keys. The first three will follow the link when you press the key combination, while IE (always the black sheep of browsers) will just focus it, so you have to press an additional ENTER to follow the link. I don't know what the developers were thinking. What's the point of just focusing a link?&lt;br /&gt;&lt;br /&gt;It is up to the site to make the access keys evident, often by underlining the particular character that triggers the link - a convention typical of application menus. However, by pressing the Shift+ESC key, the Opera browser brings up a full list of access keys in a particular page, even if they are obscure. Subsequently pressing the access key character (e.g. Shift+ESC+H) will trigger the link.&lt;br /&gt;&lt;br /&gt;Juicy Studio has a really good &lt;a href="http://juicystudio.com/article/firefox2-accesskeys.php"&gt;article&lt;/a&gt; on the topic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-3276619342259324076?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/3276619342259324076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/html-access-keys.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3276619342259324076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3276619342259324076'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/html-access-keys.html' title='HTML Access Keys'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-4416381616244762395</id><published>2011-10-01T12:15:00.000-07:00</published><updated>2011-10-01T12:15:05.921-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MCTS'/><category scheme='http://www.blogger.com/atom/ns#' term='uCertify'/><category scheme='http://www.blogger.com/atom/ns#' term='PrepKit'/><category scheme='http://www.blogger.com/atom/ns#' term='PrepEngine'/><category scheme='http://www.blogger.com/atom/ns#' term='certification'/><title type='text'>uCertify PrepKit Review</title><content type='html'>&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We live in a competitive world. This is evident at every level, from technology giants like Microsoft and Google wrestling with one another for market share, to technology professionals fighting to get that prestigious new job with that particular company. The ones who make an extra effort to distinguish themselves from the rest are ultimately those who win. Certifications are one way of gaining this edge over the rest.&lt;br /&gt;&lt;br /&gt;Today, hundreds of certifications exist, and they cover just about every IT job, including support, analysis, development, management, security, and much more. Many people choose to attain a certification in order to gain and demonstrate expertise in a particular subject, sometimes leading to promotions and/or pay rises as well. However, obtaining a certification is a difficult goal that requires long-term commitment, and in doing so, one must have access to the right preparation material.&lt;br /&gt;&lt;br /&gt;Some people attend a course to prepare for a certification, while others opt to teach themselves through books and other material. There are also many commercially available preparation engines that serve not only to teach the subject, but also to serve as mock exams. This is very useful because free mock exams are usually very hard to find or non-existant, and having a feel for what the exam will be like is very important. Ultimately, there is no single correct way of preparing oneself, and a combination of learning methods may be the best solution.&lt;br /&gt;&lt;br /&gt;This article reviews &lt;a href="http://www.ucertify.com/"&gt;uCertify&lt;/a&gt;'s PrepEngine, which is one such preparation engine. The PrepEngine allows you to use one or more PrepKits, each of which provide learning and test materials for a particular certification. This review is based on the MCTS: Windows Application Development with Microsoft .NET Framework 4 (C#) PrepKit. However, uCertify has PrepKits for just about any certification you can think of doing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dashboard&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GaIK7nieICw/Toc9-7sJiEI/AAAAAAAABHU/U5sMe4A5WhY/s1600/ucertify-dashboard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://3.bp.blogspot.com/-GaIK7nieICw/Toc9-7sJiEI/AAAAAAAABHU/U5sMe4A5WhY/s320/ucertify-dashboard.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The main screen for the particular PrepKit you are using is called the &lt;b&gt;Dashboard&lt;/b&gt;. The preparation materials are organised into four categories for easy access. At the top are two tabs: &lt;b&gt;Practice Test&lt;/b&gt; and &lt;b&gt;Study Helper&lt;/b&gt;. Practice Test incorporates the PrepEngine's test engine, that will allow you to take a variety of tests in order to gauge your level of preparation for the real certification exam. Study Helper allows you to navigate through pages that teach you each topic you need to know, in a step-by-step manner.&lt;br /&gt;&lt;br /&gt;Beneath these two tabs is the &lt;b&gt;Enhance your understanding&lt;/b&gt; section. The resources in this section are more intended for when you have already covered the material required for the certification, and need to consolidate that knowledge before taking the exam. Finally, the &lt;b&gt;Track your progress&lt;/b&gt; section lets you monitor your progress and determine your readiness to take the exam.&lt;br /&gt;&lt;br /&gt;The Dashboard is simple and intuitive. A small thing that could have been done better is the list of features on the right part of the Dashboard. When you get used to the product, you will ignore them, so about half of the screen space is wasted. The &lt;i&gt;Study Helper&lt;/i&gt; and &lt;i&gt;Track your progress&lt;/i&gt; sections could be placed on the right, allowing instant access to all the product's features without scrolling or tabbing. Hints about the features could still be provided in the form of a random tip, either at startup or in a corner. However, I will point out that this is a very minor usability issue and in no way detracts from the product's rich feature set.&lt;br /&gt;&lt;br /&gt;Although I will go over each category separately in this review, you will actually be going from one to another all the time. For example, going over the Exam objectives (&lt;i&gt;Enhance your understanding&lt;/i&gt; section) is a good place to start, after which you can take a Diagnostic test (&lt;i&gt;Practice Test&lt;/i&gt; section) or go over the study material in the &lt;i&gt;Study Helper&lt;/i&gt; section. The flexibility of uCertify is that you can do things in any order you want, and everything is customisable for your convenience.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Study Helper&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PZK-ppcc-mw/TodDaupflHI/AAAAAAAABHY/TnYR1W7Np0I/s1600/ucertify-study01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://2.bp.blogspot.com/-PZK-ppcc-mw/TodDaupflHI/AAAAAAAABHY/TnYR1W7Np0I/s320/ucertify-study01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Study Helper is a collection of learning resources organised by exam objective. Each chapter explains the exam objectives, covers each topic, and lets you take short quizzes (with answers provided) to see that you've grasped the concepts. Navigation is easy by using the buttons in the panel at the bottom, and keyboard shortcuts enhance the product's accessibility.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Z4jmj6Mtykc/TodFYv-TDWI/AAAAAAAABHc/gdeQF8feyuU/s1600/ucertify-study02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://4.bp.blogspot.com/-Z4jmj6Mtykc/TodFYv-TDWI/AAAAAAAABHc/gdeQF8feyuU/s320/ucertify-study02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A little glitch I noticed is that although the Prior (Back) button is disabled when you're at the beginning, the Next button remains enabled when you're at the very end. This happens not just in the &lt;i&gt;Study Helper&lt;/i&gt; section but throughout the PrepKit.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enhance your understanding&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eSsJUoxDzFg/TodGRks5kDI/AAAAAAAABHg/10WYIcF0kqY/s1600/ucertify-enhance01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="189" src="http://2.bp.blogspot.com/-eSsJUoxDzFg/TodGRks5kDI/AAAAAAAABHg/10WYIcF0kqY/s320/ucertify-enhance01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The resources in this section are quite varied, so I'll go over them briefly. &lt;b&gt;Exam objectives&lt;/b&gt;, as I noted earlier, is a good place to start, because it gives you a general overview of all the topics you need to know. You can get this same information at the beginning of each chapter in the &lt;i&gt;Study Helper&lt;/i&gt; section, but here it is available all in one place.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qD3UuHsKKK4/TodWzEsrvNI/AAAAAAAABHk/TrXXFT1KUio/s1600/ucertify-enhance02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://2.bp.blogspot.com/-qD3UuHsKKK4/TodWzEsrvNI/AAAAAAAABHk/TrXXFT1KUio/s320/ucertify-enhance02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Flash cards&lt;/b&gt; are cool way of assessing your knowledge without having to take a whole test. Basically you are asked questions which are the same as the topic titles from the &lt;i&gt;Study Helper&lt;/i&gt; chapters. After you write what you think is the correct answer, you can check your answer against the &lt;i&gt;Study Helper&lt;/i&gt; material there and then. One thing I noticed, however, is that the Dashboard says that there are 167 flash cards, when in reality there are only 155.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Study notes&lt;/b&gt; also give you access to the &lt;i&gt;Study Helper&lt;/i&gt; material, using a different view. Like with flash cards, the Dashboard says there are 167, but in reality there are 155. 167 is actually the total number of study notes, articles, how to's and study tips combined, so the PrepEngine evidently has got some of its numbers wrong.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-m85l9Ux4muo/TodZ0DDB1FI/AAAAAAAABHs/GZw_lsXlrMU/s1600/ucertify-enhance03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://1.bp.blogspot.com/-m85l9Ux4muo/TodZ0DDB1FI/AAAAAAAABHs/GZw_lsXlrMU/s200/ucertify-enhance03.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-dFBcEm0sxCU/TodZzJvJp8I/AAAAAAAABHo/XTKzoZwFjd0/s1600/ucertify-enhance04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://3.bp.blogspot.com/-dFBcEm0sxCU/TodZzJvJp8I/AAAAAAAABHo/XTKzoZwFjd0/s200/ucertify-enhance04.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now we come to the &lt;b&gt;Articles&lt;/b&gt;. After seeing 155 study notes and flash cards, there are... 2 articles? And both about LINQ, which is just a tiny part of this MCTS? The articles are intended as technical articles written by industry experts, and they do go into some depth, but the choice of topics could have been better. Even the dog below has something to say about this (image &lt;i&gt;borrowed&lt;/i&gt; from &lt;a href="http://shiitushouldkno.blogspot.com/2011/04/wtf-is-going-on-with-world.html"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QrKfgW203wg/TodaBuzthBI/AAAAAAAABHw/5ar5KGtdhzY/s1600/ucertify-enhance05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-QrKfgW203wg/TodaBuzthBI/AAAAAAAABHw/5ar5KGtdhzY/s320/ucertify-enhance05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The &lt;b&gt;Study tips&lt;/b&gt; contain general information about the certification aside from the curriculum itself, including background information about the exam, test procedures, and checklists for the skills you need. I'm saying "checklist&lt;b&gt;s&lt;/b&gt;" because there were two study tips that were exactly identical except for the tense of the initial verb (see below).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-JU6ZuzgDAmA/Toddt2yqVsI/AAAAAAAABH0/bG2m3jWNAOg/s1600/ucertify-enhance07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://4.bp.blogspot.com/-JU6ZuzgDAmA/Toddt2yqVsI/AAAAAAAABH0/bG2m3jWNAOg/s200/ucertify-enhance07.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-Mi3gNEIU9Yo/ToddulB01FI/AAAAAAAABH4/ZXsxQEts5S8/s1600/ucertify-enhance06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://2.bp.blogspot.com/-Mi3gNEIU9Yo/ToddulB01FI/AAAAAAAABH4/ZXsxQEts5S8/s200/ucertify-enhance06.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The &lt;b&gt;How To&lt;/b&gt;'s are step-by step guides to configuring specific things in Visual Studio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Practice Test&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KVJkjhYnuzA/Todetx9Rc6I/AAAAAAAABH8/fEl-_mWiXzE/s1600/ucertify-practice01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://1.bp.blogspot.com/-KVJkjhYnuzA/Todetx9Rc6I/AAAAAAAABH8/fEl-_mWiXzE/s320/ucertify-practice01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This section is probably the most important part of the PrepEngine. You can read a book to prepare for the MCTS, and it might even have a CD with a mock test or two. However the PrepEngine's test engine is much more flexible and will allow you to test your knowledge in the particular certification you are following.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YR3l83eAIW8/Todf3uqPYII/AAAAAAAABIA/_vQ8EVmBd_g/s1600/ucertify-practice02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://4.bp.blogspot.com/-YR3l83eAIW8/Todf3uqPYII/AAAAAAAABIA/_vQ8EVmBd_g/s320/ucertify-practice02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There are several different types of tests you can take. The &lt;b&gt;diagnostic test&lt;/b&gt; is a quick test that gauges your general ability before you actually get serious about learning all the certification material. Most of the questions are multiple choice, but then you also get some weird stuff like the above, and the results screen incorrectly shows that you've answered them, even if you skipped them. Also, you get tired very quickly of every question saying that you work at uCertify.&lt;br /&gt;&lt;br /&gt;Then you get &lt;b&gt;practice tests&lt;/b&gt; among other things. These aren't different at all from the diagnostic test, and the PrepEngine's greatest strength is that you can customise the tests as you like. By using &lt;b&gt;learn mode&lt;/b&gt;, you can see the correct answer and an explanation for each question as you go along, right after you answer. Tests can also be customised by topic, by the amount of time you have available, etc. There are also useful features that let you tag questions, write notes about them, etc.&lt;br /&gt;&lt;br /&gt;While these tests will help you, and while uCertify does guarantee that you will pass, always keep in mind that these aren't the questions you will see in the exam. Certification exams keep their questions secret, and the best that software like this can do is try to come close based on the exam objectives. Passing a practice test in no way means that you'll do great in the certification exam.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Track your progress&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-yB-DzFu57iI/TodhmNUBV_I/AAAAAAAABIE/yVR7jWSakX4/s1600/ucertify-track01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://1.bp.blogspot.com/-yB-DzFu57iI/TodhmNUBV_I/AAAAAAAABIE/yVR7jWSakX4/s320/ucertify-track01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This section gives you statistics about your progress. Since your test progress is &lt;i&gt;always&lt;/i&gt; tracked, even when you take a test just to look at how it works, my progress looks pretty awful:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4LJJugRRkbI/Todi5oIqh4I/AAAAAAAABII/OsYQSHOzTR4/s1600/ucertify-track02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://4.bp.blogspot.com/-4LJJugRRkbI/Todi5oIqh4I/AAAAAAAABII/OsYQSHOzTR4/s320/ucertify-track02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Nonetheless, this is good because you can monitor your strengths and weaknesses by topic or by test. This allows you to prioritise by focusing on the topics you are not so good at.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;uCertify's PrepKits pack quite a lot of useful material to help you achieve the certification you want.. The PrepEngine is built with usability in mind, and it is easy to find the information you need. There are several little bugs throughout the product; however none of these significantly affect the preparation experience. While it is always a good idea to compare features with competing products before acquiring something like this, uCertify's PrepKits are no doubt a good choice to complement a book and/or course in helping you sharpen your skills and go through the exam with confidence. As I already mentioned, however, certification tests are ultimately very  different from mock tests, so you should never be overconfident.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-4416381616244762395?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/4416381616244762395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/ucertify-prepkit-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4416381616244762395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4416381616244762395'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/ucertify-prepkit-review.html' title='uCertify PrepKit Review'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-GaIK7nieICw/Toc9-7sJiEI/AAAAAAAABHU/U5sMe4A5WhY/s72-c/ucertify-dashboard.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-6727464219984721854</id><published>2011-10-01T02:25:00.000-07:00</published><updated>2011-10-01T02:25:19.393-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dogfooding'/><title type='text'>Dogfooding</title><content type='html'>Some companies deploy and use their software within the company itself. This is known as &lt;b&gt;dogfooding&lt;/b&gt;, and Coding Horror has a pretty good &lt;a href="http://www.codinghorror.com/blog/2009/01/the-ultimate-dogfooding-story.html"&gt;article&lt;/a&gt; about it. Dogfooding is pretty useful to let a software product undergo day-to-day use (for proper testing) before it is released to clients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-6727464219984721854?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/6727464219984721854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/10/dogfooding.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6727464219984721854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6727464219984721854'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/10/dogfooding.html' title='Dogfooding'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-1304041816964645926</id><published>2011-09-18T04:40:00.000-07:00</published><updated>2011-09-18T04:40:58.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quick Launch'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Startup'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><title type='text'>Working with Windows</title><content type='html'>Here are a few links I found useful when messing with Windows:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.theeldergeek.com/add_a_service_in_windows_xp.htm"&gt;Create or delete a service in Windows XP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;How to &lt;a href="http://www.brighthub.com/computing/windows-platform/articles/33470.aspx"&gt;bring back the missing Security tab&lt;/a&gt; in Windows XP&lt;/li&gt;&lt;li&gt;How to &lt;a href="http://www.sevenforums.com/tutorials/888-quick-launch-enable-disable.html"&gt;show Quick Launch in Windows 7&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://indiawebsearch.com/content/where-is-the-startup-folder-located-in-windows-7-for-a-user-and-all-users-profile"&gt;Startup folder locations in Windows 7&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-1304041816964645926?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/1304041816964645926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/09/working-with-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/1304041816964645926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/1304041816964645926'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/09/working-with-windows.html' title='Working with Windows'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-963206002023399968</id><published>2011-09-17T03:03:00.000-07:00</published><updated>2011-09-18T04:41:40.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><title type='text'>Windows 8 Bootup: Unexpected error 0xc0000225</title><content type='html'>The &lt;a href="http://tech.slashdot.org/story/11/09/14/2219226/Windows-8-Roundup"&gt;unveiling of Windows 8&lt;/a&gt; this week has had mixed reception. Nonetheless, the reease of the &lt;a href="http://msdn.microsoft.com/en-us/windows/apps/br229516"&gt;Windows 8 Developer Preview&lt;/a&gt; has sparked curiosity among fans and skeptics alike. I am no exception.&lt;br /&gt;&lt;br /&gt;Upon installing the Windows 8 Developer Preview under VirtualBox, though, the following error appeared:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-so8NHe63klU/TnRvRcLpYkI/AAAAAAAABHQ/X8MLvIJ7Uv0/s1600/win8error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" src="http://4.bp.blogspot.com/-so8NHe63klU/TnRvRcLpYkI/AAAAAAAABHQ/X8MLvIJ7Uv0/s320/win8error.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Error 0xc0000225, very helpfully explained as "An unexpected error has occurred", prevents the Windows 8 installer from booting. Fortunately, however, getting it to run is simply a matter of enabling IO APIC from the Settings -&amp;gt; System screen. &lt;a href="http://www.kombitz.com/2011/09/16/status-0xc000025-error-when-installing-windows-8-developer-preview-on-virtualbox/"&gt;This blog post&lt;/a&gt; shows how it's done.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="goog_309263417"&gt;&lt;/span&gt;&lt;span id="goog_309263418"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-963206002023399968?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/963206002023399968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/09/windows-8-bootup-unexpected-error.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/963206002023399968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/963206002023399968'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/09/windows-8-bootup-unexpected-error.html' title='Windows 8 Bootup: Unexpected error 0xc0000225'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-so8NHe63klU/TnRvRcLpYkI/AAAAAAAABHQ/X8MLvIJ7Uv0/s72-c/win8error.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-7646252391470682800</id><published>2011-05-17T01:25:00.000-07:00</published><updated>2011-05-17T01:25:25.692-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu resolution in VirtualBox - revisited</title><content type='html'>Apparently it isn't enough to &lt;a href="http://gigionit.blogspot.com/2011/02/adjusting-ubuntu-resolution-in.html"&gt;install the guest additions&lt;/a&gt; in order to get a proper resolution in Ubuntu under VirtualBox. A further necessary step is to use the vboxmanage tool (from the command line) to adjust the resolution as follows:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;vboxmanage setextradata "VMname" CustomVideoMode1 AxBxC&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;where OSname is the name of your virtual machine as it appears in VirtualBox, AxB is your resolution, and C is your colour depth. For example, the command to adjust the resolution on my laptop is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;vboxmanage setextradata "Ubuntu 10.04 LTS i386" CustomVideoMode1 1366x768x32&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-7646252391470682800?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/7646252391470682800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/05/ubuntu-resolution-in-virtualbox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/7646252391470682800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/7646252391470682800'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/05/ubuntu-resolution-in-virtualbox.html' title='Ubuntu resolution in VirtualBox - revisited'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-999628239100649886</id><published>2011-05-17T01:12:00.000-07:00</published><updated>2011-05-17T01:12:43.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Restart Now, or Restart Now</title><content type='html'>The saga of Microsoft's &lt;a href="http://gigionit.blogspot.com/2010/09/errors-helpful-vs-useless.html"&gt;dumbass message boxes&lt;/a&gt; is back in the Visual C# Express 2010 installer.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0Mu5RQZRpNI/TdItx-lvpgI/AAAAAAAABEA/CdUQ3xV-2T4/s1600/vcsexpr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="119" src="http://4.bp.blogspot.com/-0Mu5RQZRpNI/TdItx-lvpgI/AAAAAAAABEA/CdUQ3xV-2T4/s320/vcsexpr.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Putting aside the annoyance of having to actually restart in this day and age, the "Restart Later" button is present or disabled, leaving you no option but to either restart or leave the prompt in the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-999628239100649886?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/999628239100649886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/05/restart-now-or-restart-now.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/999628239100649886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/999628239100649886'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/05/restart-now-or-restart-now.html' title='Restart Now, or Restart Now'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-0Mu5RQZRpNI/TdItx-lvpgI/AAAAAAAABEA/CdUQ3xV-2T4/s72-c/vcsexpr.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-3595602845091091297</id><published>2011-04-24T04:41:00.000-07:00</published><updated>2011-10-03T15:04:42.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GLUT'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>Getting started with OpenGL on Windows</title><content type='html'>This post describes how to set up OpenGL in Windows. It uses Microsoft Visual Studio 2008 Professional Edition, and has been applied to Windows 7 Home Premium and Windows XP x64 SP2.&lt;br /&gt;&lt;br /&gt;The first thing to do is &lt;a href="http://www.opengl.org/resources/libraries/glut/glut_downloads.php"&gt;download GLUT&lt;/a&gt;. From there you reach &lt;a href="http://www.xmission.com/%7Enate/glut.html"&gt;GLUT for Windows&lt;/a&gt;, which is what you need to download. The zip file contains glut32.dll, glut32.lib and glut.h, which you need to place in their &lt;a href="http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/GettingStarted/msvcnetglut.html"&gt;correct places&lt;/a&gt;. glut32.dll needs to go in C:\WINDOWS\system (system32 &lt;a href="http://channel9.msdn.com/Forums/TechOff/492952-glut-with-Windows-7"&gt;won't work&lt;/a&gt;, and neither will &lt;a href="http://cboard.cprogramming.com/game-programming/121102-windows-7-program-unable-find-glut-glfw-dll.html"&gt;placing it with your executable&lt;/a&gt;). glut32.lib needs to go in Visual Studio's lib folder (C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\gl - you will need to create the gl folder), and glut32.h goes in the include folder (C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-AavGW_2FiI0/TbQLNrnCrzI/AAAAAAAABD0/0QAgGN0IQy8/s1600/glsetup01.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://1.bp.blogspot.com/-AavGW_2FiI0/TbQLNrnCrzI/AAAAAAAABD0/0QAgGN0IQy8/s400/glsetup01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Good, so now we set up a C++ project to try it out. Launch Visual Studio 2008. Go to File -&amp;gt; New -&amp;gt; Project... and create a Visual C++ project (Visual C++ -&amp;gt; General -&amp;gt; Empty Project). So now the project has been created but it is still empty so you still see the VS2008 start page. Go to the Project Properties (either by right clicking on the project in Solution Explorer and selecting Properties, or via the Project menu then Properties).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aYmtbacxtSA/TbQLN1_p_HI/AAAAAAAABD4/ww2KzCrdlsM/s1600/glsetup02.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-aYmtbacxtSA/TbQLN1_p_HI/AAAAAAAABD4/ww2KzCrdlsM/s400/glsetup02.png" width="158" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Set the Configuration field at the top left to All Configurations. In the treeview, go into Configuration Properties -&amp;gt; Linker -&amp;gt; Input. In Additional Dependencies, &lt;a href="http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/GettingStarted/msvcnetglut.html"&gt;insert &lt;/a&gt;"opengl32.lib glu32.lib glut32.lib" (without quotes, as is, separated only by spaces). glaux.h is &lt;a href="http://social.msdn.microsoft.com/forums/en-US/windowssdk/thread/b66e5f7a-91f6-4dbe-b388-0c131008b08f/"&gt;deprecated&lt;/a&gt; so you can just leave it out.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1YWEodabhqg/TbQLOEaSQyI/AAAAAAAABD8/0ea3jG86e-8/s1600/glsetup03.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://2.bp.blogspot.com/-1YWEodabhqg/TbQLOEaSQyI/AAAAAAAABD8/0ea3jG86e-8/s400/glsetup03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally, create a main.cpp file (Add -&amp;gt; New Item..., then C++ file; name it main.cpp), paste some &lt;a href="http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/GettingStarted/msvcnetglut.html"&gt;sample code&lt;/a&gt;, and press F5 to run it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y0WLiXm_-O0/TbQLNKjCdPI/AAAAAAAABDw/rt84uXqvZ24/s1600/glsetup04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-Y0WLiXm_-O0/TbQLNKjCdPI/AAAAAAAABDw/rt84uXqvZ24/s400/glsetup04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;That's it. Hopefully this saved you the frustration I went through during the initial setup of OpenGL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-3595602845091091297?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/3595602845091091297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/04/getting-started-with-opengl-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3595602845091091297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3595602845091091297'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/04/getting-started-with-opengl-on-windows.html' title='Getting started with OpenGL on Windows'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-AavGW_2FiI0/TbQLNrnCrzI/AAAAAAAABD0/0QAgGN0IQy8/s72-c/glsetup01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-6285895731005675030</id><published>2011-02-26T06:00:00.000-08:00</published><updated>2011-02-26T06:00:43.239-08:00</updated><title type='text'>Getting Started with Microsoft Visual Studio Lightswitch Beta</title><content type='html'>The newest addition to the Microsoft Visual Studio family is Lightswitch - a new take on the IDE allowing business applications to be built faster than ever. Lightswitch uses the model of such applications being based on data tables and screens, and the provision of standard functionality (e.g. field validation) that developers spend countless hours rewriting every time, to speed up the development process.&lt;br /&gt;&lt;br /&gt;Aside from the standard functionality provided, customisation (e.g. custom validations) is possible using the normal C# or Visual Basic code we are all used to. Additionally, the look and feel of applications can be changed through a simple dropdown box, and may be adjusted on the fly even while debugging applications.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.microsoft.com/visualstudio/en-us/lightswitch"&gt;Lightswitch website&lt;/a&gt; provides information, screenshots and videos on what Lightswitch is all about. The &lt;a href="http://msdn.microsoft.com/en-us/lightswitch"&gt;Lightswitch Developer Center&lt;/a&gt; provides several resources to get started, including a download of the beta itself.&lt;br /&gt;&lt;br /&gt;Actually getting up and running with the Lightswitch beta can be a bit tricky. &lt;a href="http://www.paulspatterson.com/technology/lightswitch/microsoft-lightswitch-my-first-fail-at-beta-1-installation/"&gt;Paul Patterson's blog post&lt;/a&gt; goes through the difficulties encountered in setting up Lightswitch. A &lt;a href="http://forums.silverlight.net/forums/t/149912.aspx"&gt;forum post&lt;/a&gt; deals with removing WCF RIA Services for Visual Studio 2010 through the registry (since the uninstall does not actually cleanly remove it), which is necessary before installing the Lightswitch beta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-6285895731005675030?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/6285895731005675030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/02/getting-started-with-microsoft-visual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6285895731005675030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6285895731005675030'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/02/getting-started-with-microsoft-visual.html' title='Getting Started with Microsoft Visual Studio Lightswitch Beta'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8818674238566380470</id><published>2011-02-15T13:38:00.000-08:00</published><updated>2011-02-15T13:38:12.341-08:00</updated><title type='text'>Adjusting Ubuntu resolution in VirtualBox</title><content type='html'>I had a problem when installing an Ubuntu 10.10 image in VirtualBox because the screen resolution was remaining at a tiny 800x600, barely allowing room for a single terminal window.&lt;br /&gt;&lt;br /&gt;The following commands install the guest additions which are necessary for running Ubuntu at full resolution:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get update&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install build-essential linux-headers-$(uname -r)&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install virtualbox-ose-guest-X11&lt;/div&gt;&lt;br /&gt;Thanks goes to Gilbert Galea for providing the above solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8818674238566380470?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8818674238566380470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2011/02/adjusting-ubuntu-resolution-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8818674238566380470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8818674238566380470'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2011/02/adjusting-ubuntu-resolution-in.html' title='Adjusting Ubuntu resolution in VirtualBox'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-2581796222745551336</id><published>2010-11-27T04:36:00.000-08:00</published><updated>2011-02-03T14:21:49.328-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='SDL'/><title type='text'>SDL Quickstart for Linux: Empty Window</title><content type='html'>This short tutorial explains how to get started with SDL on Linux, by showing an empty Window. Once this is set up, you can go on to create 2D games or use SDL as a basis for OpenGL.&lt;br /&gt;&lt;br /&gt;This tutorial is loosely based on &lt;a href="http://www.lazyfoo.net/SDL_tutorials/"&gt;Lazy Foo&lt;/a&gt;'s "&lt;a href="http://www.lazyfoo.net/SDL_tutorials/lesson01/index2.php"&gt;Getting an Image on the Screen&lt;/a&gt;" tutorial, but is intended to be more concise, link to reference material, apply directly to Linux, and teach additional items learned through experience.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Setting up&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt; &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;First of all you need to have the SDL development and runtime libraries installed on your system. You can find the SDL-related libraries using the command&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #444444; color: white; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;apt-cache search sdl&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;This will give you a whole list of libraries. At the time of writing of this tutorial, the one you need is &lt;b&gt;libsdl1.2-dev&lt;/b&gt;. Therefore, on Ubuntu or similar Debian-based Linux distributions, you would install SDL using the command:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #444444; color: white; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;sudo apt-get install libsdl1.2-dev&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;This will install the header files in /usr/include/SDL/ and also the shared libraries you need to run SDL applications (similar to the SDL.dll you need on Windows).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;First SDL Application: Empty Window&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Like with any C program, you start with a main() function and any necessary header inclusions. For SDL applications you need to include the SDL.h file, which contains all the functionality you will need:&lt;br /&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="background-color: white;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;#include &lt;sdl sdl.h=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;int main(int argc, char * argv[])&lt;br /&gt;{&lt;/span&gt;&lt;/sdl&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="background-color: #eeeeee; font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;In SDL programs, it is necessary to declare the main() function with arguments, as above. I have experienced errors in the past when compiling SDL programs with a main() function that did not account for command line parameter arguments (argc and argv).&lt;br /&gt;&lt;br /&gt;The next step is to initialise the SDL library, and also prepare the cleanup function while you're at it. Other program code will go in between.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_Init(SDL_INIT_VIDEO);&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // other program code goes here&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="background-color: #eeeeee; font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_Quit();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.libsdl.org/docs/html/sdlinit.html"&gt;SDL_Init&lt;/a&gt; is the function that initialises SDL. As a parameter, it takes a number of flags which tell it what to initialise. Multiple flags may be used at once by using the bitwise OR operator (e.g. &lt;tt class="LITERAL"&gt;SDL_INIT_VIDEO | &lt;/tt&gt;&lt;tt class="LITERAL"&gt;SDL_INIT_AUDIO&lt;/tt&gt;). Although &lt;a href="http://www.lazyfoo.net/SDL_tutorials/lesson01/index2.php"&gt;Lazy Foo's tutorial&lt;/a&gt; simply initialises everything, all you need for this simple tutorial is video display functionality.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.libsdl.org/docs/html/sdlquit.html"&gt;SDL_Quit&lt;/a&gt; is a cleanup routine that you should use at the end of your SDL code, to free resources allocated by &lt;a href="http://www.libsdl.org/docs/html/sdlinit.html"&gt;SDL_Init&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Between &lt;a href="http://www.libsdl.org/docs/html/sdlinit.html"&gt;SDL_Init&lt;/a&gt; and &lt;a href="http://www.libsdl.org/docs/html/sdlquit.html"&gt;SDL_Quit&lt;/a&gt;, you can now show your window. First declare relevant variables:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int width = 640;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int height = 480;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int bpp = 32;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uint32 flags = SDL_SWSURFACE;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_Surface * screen = NULL; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Then actually show the screen, and clean up after. Program code will go in between.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; screen = SDL_SetVideoMode(width, height, bpp, flags);&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // program code goes here&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_FreeSurface(screen);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.libsdl.org/docs/html/sdlsetvideomode.html"&gt;SDL_SetVideoMode&lt;/a&gt; displays a window with the given parameters. SDL has the limitation that only one window can be displayed at any given time, so calling this function again will result in a new window drawn instead of the first one. As parameters, &lt;a href="http://www.libsdl.org/docs/html/sdlsetvideomode.html"&gt;SDL_SetVideoMode&lt;/a&gt; takes the width and height of the window (in pixels), the bits per pixel (32 on modern systems - this is a measure of the graphical quality used) and a set of flags (refer to the function's documentation via the link). For the purpose of displaying something simple, you can use the SDL_SWSURFACE flag; however for complex applications such as OpenGL you will need to use more advanced options to optimise your program.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Handling the "X" to close the window&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;&lt;br /&gt;If you run your program now, a window will flash briefly on the screen and then disappear. This is because you are showing the window but have no code in place to keep it there. &lt;a href="http://www.lazyfoo.net/SDL_tutorials/lesson01/index2.php"&gt;Lazy Foo's tutorial&lt;/a&gt; uses &lt;a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_Delay"&gt;SDL_Delay&lt;/a&gt; to delay the disappearance of the window.&lt;br /&gt;&lt;br /&gt;A better way is to handle events - something you will need to do anyway in your program. Games and other graphical applications generally run a &lt;i&gt;game loop&lt;/i&gt;, i.e. they will keep running until something happens (e.g. you quit the game). In this case we want to handle the "X" at the top of the window, so that when a user clicks on it, the window closes - but otherwise the window remains. The following code will do the trick::&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int quit = 0;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_Event event; &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (quit == 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDL_WaitEvent(&amp;amp;event);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch(event.type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case SDL_QUIT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The code above runs the game loop, i.e. the window will remain visible as long as &lt;i&gt;quit&lt;/i&gt; is zero. Using &lt;a href="http://sdl.beuc.net/sdl.wiki/SDL_WaitEvent"&gt;SDL_WaitEvent&lt;/a&gt;, the program sits idle until something happens. In this case we are taking action when the event is &lt;i&gt;SDL_QUIT&lt;/i&gt;, i.e. the close-window "X" button has been clicked. At that point we set &lt;i&gt;quit&lt;/i&gt; to one and let the program exit.&lt;br /&gt;&lt;br /&gt;Interactive applications such as games normally use &lt;a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_PollEvent"&gt;SDL_PollEvent&lt;/a&gt; to constantly check for events and update the game state. However, this is very CPU intensive, and for something as simple as this, &lt;a href="http://sdl.beuc.net/sdl.wiki/SDL_WaitEvent"&gt;SDL_WaitEvent&lt;/a&gt; is a better alternative. Note:&amp;nbsp; &lt;a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_PollEvent"&gt;SDL_PollEvent&lt;/a&gt; can be combined with a small&amp;nbsp;&lt;a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_Delay"&gt;SDL_Delay&lt;/a&gt; to reduce the burden on CPU.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Compile and run&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;&lt;br /&gt;Save the code in a file called main.c. From your terminal, use the following command to compile your SDL application:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #444444;"&gt;&lt;span style="background-color: #444444; color: white; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;gcc main.c -lSDLmain -lSDL -o app&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Run &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;./app&lt;/span&gt; to launch the application.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Full code (main.c)&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; color: black; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;#include &amp;lt;SDL/SDL.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char * argv[])&lt;br /&gt;{&lt;br /&gt;    int width = 640;&lt;br /&gt;    int height = 480;&lt;br /&gt;    int bpp = 32;&lt;br /&gt;    Uint32 flags = SDL_SWSURFACE;&lt;br /&gt;    SDL_Event event;&lt;br /&gt;    int quit = 0;&lt;br /&gt;&lt;br /&gt;    SDL_Surface * screen = NULL;&lt;br /&gt;    &lt;br /&gt;    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;    &lt;br /&gt;    screen = SDL_SetVideoMode(width, height, bpp, flags);&lt;br /&gt;    &lt;br /&gt;    while (quit == 0)&lt;br /&gt;    {&lt;br /&gt;        SDL_WaitEvent(&amp;amp;event);&lt;br /&gt;&lt;br /&gt;        switch(event.type)&lt;br /&gt;        {&lt;br /&gt;            case SDL_QUIT:&lt;br /&gt;                quit = 1;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    SDL_FreeSurface(screen);&lt;br /&gt;    &lt;br /&gt;    SDL_Quit();&lt;br /&gt;    &lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/sdl&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-2581796222745551336?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/2581796222745551336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/11/sdl-quickstart-for-linux-empty-window.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2581796222745551336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2581796222745551336'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/11/sdl-quickstart-for-linux-empty-window.html' title='SDL Quickstart for Linux: Empty Window'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8417667470636414687</id><published>2010-11-14T04:49:00.000-08:00</published><updated>2010-11-25T13:34:41.402-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Legacy icons in Windows XP</title><content type='html'>When your computer is a bit busy, you might notice something like this while Windows Media Player is loading:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BnfgOUCnwyM/TN_bbZ0krMI/AAAAAAAABCs/_YQAMnSI4nY/s1600/win31cx2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539387330523344066" src="http://3.bp.blogspot.com/_BnfgOUCnwyM/TN_bbZ0krMI/AAAAAAAABCs/_YQAMnSI4nY/s320/win31cx2.png" style="cursor: pointer; display: block; height: 80px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;The icons in the upper right hand corner show while it is busy loading. A similarly dated prompt appears when there is an error accessing your CD or DVD drive:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BnfgOUCnwyM/TN_bbtbuHyI/AAAAAAAABC0/i6AMuW4nOso/s1600/win31cx3.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539387335787814690" src="http://2.bp.blogspot.com/_BnfgOUCnwyM/TN_bbtbuHyI/AAAAAAAABC0/i6AMuW4nOso/s320/win31cx3.png" style="cursor: pointer; display: block; height: 78px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Notice that this prompt does not use the Windows XP styles.&lt;br /&gt;&lt;br /&gt;I have always thought that this is because the XP visuals are simply a layer over Windows 3.1 or Windows 2000 functionality. If a window gets stuck (as in the Windows Media Player example) then you can see the old layout before the XP one is rendered over it. This is obviously a waste of performance.&lt;br /&gt;&lt;br /&gt;On the other hand, I think the CD/DVD error was simply forgotten and left as it was.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8417667470636414687?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8417667470636414687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/11/legacy-icons-in-windows-xp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8417667470636414687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8417667470636414687'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/11/legacy-icons-in-windows-xp.html' title='Legacy icons in Windows XP'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BnfgOUCnwyM/TN_bbZ0krMI/AAAAAAAABCs/_YQAMnSI4nY/s72-c/win31cx2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-9156197970601832031</id><published>2010-10-26T14:36:00.000-07:00</published><updated>2010-11-25T13:35:02.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>LaTeX: MiKTeX undefined references</title><content type='html'>For the past three days I tried to get started with LaTeX on Windows. Using MiKTeX, I ended up in a situation where (a) my bibliography wasn't showing at all, (b) citations showed up as [?], and (c) the log complained about undefined references.&lt;br /&gt;&lt;br /&gt;It turned out that the errors were obscure and unrelated to the cause. The references and citations were fine; it was the bibliography style that was incorrect. It needs to be like this to work:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;\bibliographystyle{plain}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;\bibliography{mybib}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;\nocite{*}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You need to use \bibliographystyle and not \bibstyle that appears on some websites. The style needs to exist or it will not work. The bibliography file specified must be without the .bib extension. \nocite{*} is optional and makes LaTeX include references even if they are not cited.&lt;br /&gt;&lt;br /&gt;Also, you may need to compile two or three times for the references to be properly linked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-9156197970601832031?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/9156197970601832031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/10/latex-miktex-undefined-references.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/9156197970601832031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/9156197970601832031'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/10/latex-miktex-undefined-references.html' title='LaTeX: MiKTeX undefined references'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-3409903086577632881</id><published>2010-10-16T05:48:00.000-07:00</published><updated>2010-11-25T13:36:05.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='network programming'/><category scheme='http://www.blogger.com/atom/ns#' term='client/server'/><title type='text'>inet_ntoa() segmentation fault issue</title><content type='html'>&lt;a href="http://beej.us/guide/bgnet/output/html/multipage/inet_ntoaman.html"&gt;&lt;span style="font-weight: bold;"&gt;inet_ntoa&lt;/span&gt;&lt;/a&gt; is a UNIX system call used in socket programming to obtain an IPv4 string form of an IP address from its &lt;a href="http://www.retran.com/beej/sockaddr_inman.html"&gt;in_addr form&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have encountered an issue where its use results in the following warning:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;warning: assignment makes pointer from integer without a cast&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Attempting to run a program with this warning on inet_ntoa will result in a segmentation fault.&lt;br /&gt;&lt;br /&gt;The cause of the problem is not incorrect C, but a missing header file. &lt;span class="sender"&gt;Shachar Shemesh wrote that the &lt;a href="http://www.mail-archive.com/linux-il@cs.huji.ac.il/msg55924.html"&gt;solution&lt;/a&gt; to this obscure problem is simply to include the arpa/inet.h header file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#include &amp;lt;arpa/inet.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-3409903086577632881?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/3409903086577632881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/10/inetntoa-segmentation-fault-issue.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3409903086577632881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3409903086577632881'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/10/inetntoa-segmentation-fault-issue.html' title='inet_ntoa() segmentation fault issue'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8389669441034020214</id><published>2010-09-04T06:12:00.001-07:00</published><updated>2010-11-25T13:36:35.652-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Errors: helpful vs useless</title><content type='html'>Today I tried to install the Windows Phone 7 Developer Tools beta, and was given this lovely error message while the setup tried to start:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://4.bp.blogspot.com/_BnfgOUCnwyM/TIJGAGNTNsI/AAAAAAAABCI/yZu9RiEVCoA/s1600/unknown-error.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="font-style: italic;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5513045861335250626" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/TIJGAGNTNsI/AAAAAAAABCI/yZu9RiEVCoA/s320/unknown-error.png" style="cursor: pointer; display: block; height: 82px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic;"&gt;"A problem has been encountered while loading the setup components. Canceling setup."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Thanks. &lt;span style="font-weight: bold;"&gt;What problem? Why? What can I do about it?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This really sounds like the installer crashed and there is no reason why - as if the developer just put a try..catch block to catch any kind of problem regardless of what the problem is. The downside is that the end user sees a problem and has no clue what happened.&lt;br /&gt;&lt;br /&gt;The least you could do as a developer is put an error number. The user does not know what this means, but it gives him room to (a) ask the developer what went wrong, or (b) Google it, knowing that other users definitely ran into it and posted about it somewhere.&lt;br /&gt;&lt;br /&gt;The best way to show errors, though is to do it in a way that is indicative of (a) what exactly went wrong (e.g. SQL error -264), (b) where it went wrong (e.g. function name), and (c) what the user can do about it (e.g. contact customer support, read some FAQ, configure a setting, etc).&lt;br /&gt;&lt;br /&gt;This is informative for the user (who knows what went wrong and what action to take) and also for the developer (who can debug the software if necessary and trace the source of the problem).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8389669441034020214?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8389669441034020214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/09/errors-helpful-vs-useless.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8389669441034020214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8389669441034020214'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/09/errors-helpful-vs-useless.html' title='Errors: helpful vs useless'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BnfgOUCnwyM/TIJGAGNTNsI/AAAAAAAABCI/yZu9RiEVCoA/s72-c/unknown-error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-5692594403675370495</id><published>2010-03-28T11:36:00.000-07:00</published><updated>2010-03-28T11:51:56.583-07:00</updated><title type='text'>Smart meters and use of IT in critical environments</title><content type='html'>An article titled "&lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5hql6AnzfBz5qKiOrGArkxuVbN6eAD9EMFLGG0"&gt;`Smart' meters have security holes&lt;/a&gt;" shows that smart meters can be hacked, and that this can allow malicious parties to both tamper with a user's security bill and actually control the supply of power.&lt;br /&gt;&lt;br /&gt;I think that use of IT systems in critical circumstances such as this (because your home security is indeed critical) is a big mistake. Our work and leisure (not to mention time and money) is already at stake every day with the vulnerabilities that our computers contain. Extending this insecurity to the power grid is simply insane. In a few years' time, when IT becomes even more central in our lives, hackers will probably be able to control the doors to our homes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-5692594403675370495?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/5692594403675370495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2010/03/smart-meters-and-use-of-it-in-critical.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5692594403675370495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5692594403675370495'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2010/03/smart-meters-and-use-of-it-in-critical.html' title='Smart meters and use of IT in critical environments'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-7899876972457296721</id><published>2009-11-07T06:38:00.000-08:00</published><updated>2009-11-07T06:51:10.628-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Defraggler'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='defragmentation'/><title type='text'>defrag interface: one year later</title><content type='html'>In my &lt;a href="http://gigionit.blogspot.com/2008/12/vista-kills-disk-defragmenter.html"&gt;first post&lt;/a&gt; to this blog last year, I showed the difference between the Windows Disk Defragmenter on Windows XP and that on Windows Vista. The bottom line was that the Vista version lost the graphical interface and the user has no idea what is going on in the background.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BnfgOUCnwyM/SvWHJ76LsPI/AAAAAAAABA0/b-jlEIQTdrM/s1600-h/win7-defrag.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_BnfgOUCnwyM/SvWHJ76LsPI/AAAAAAAABA0/b-jlEIQTdrM/s320/win7-defrag.png" alt="" id="BLOGGER_PHOTO_ID_5401371932871078130" border="0" /&gt;&lt;/a&gt;With the release of Windows 7, one would hope that this annoyance has been taken care of. Sadly, this is not the case. The interface does give some information on what it is doing, but the user gets no idea of how much progress has been made, and the graphical display we have come to love in XP is long gone.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SvWHKJ6dQDI/AAAAAAAABA8/mIsJ_p9LB0I/s1600-h/defraggler.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SvWHKJ6dQDI/AAAAAAAABA8/mIsJ_p9LB0I/s320/defraggler.png" alt="" id="BLOGGER_PHOTO_ID_5401371936630325298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Fortunately, the good folks at &lt;a href="http://www.piriform.com/"&gt;Piriform&lt;/a&gt; have created a defragmentation utility called &lt;a href="http://www.piriform.com/defraggler"&gt;Defraggler&lt;/a&gt; that shows the defragmentation operations on the hard disk in real-time. This is even better than XP's defrag utility. The visual display is, of course, only one of the great features of this utility. I only gave it a quick try (and loved the Quick Defrag option), but the interface was enough to amend the sorrows caused by Vista and Windows 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-7899876972457296721?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/7899876972457296721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/11/defrag-interface-one-year-later.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/7899876972457296721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/7899876972457296721'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/11/defrag-interface-one-year-later.html' title='defrag interface: one year later'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BnfgOUCnwyM/SvWHJ76LsPI/AAAAAAAABA0/b-jlEIQTdrM/s72-c/win7-defrag.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-5602714400776168690</id><published>2009-10-14T08:27:00.001-07:00</published><updated>2009-10-14T08:44:06.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wget'/><title type='text'>Using wget</title><content type='html'>With Geocities going down in less that 2 weeks' time, I found myself needing to archive a number of websites hosted there that would otherwise disappear. For this purpose, one can go through the frustrating experience of saving a webpage's files one by one, but that would be stupid when there exist tools that automate the whole process.&lt;br /&gt;&lt;br /&gt;The tool for the job is &lt;a href="http://www.gnu.org/software/wget/"&gt;GNU Wget&lt;/a&gt;. While I've used this tool before for similar purposes, Geocities has several annoying things that made me need to learn to use the tool a bit better.&lt;br /&gt;&lt;br /&gt;For starters, this is how to use the tool:&lt;br /&gt;&lt;br /&gt;wget http://www.geocities.com/mitzenos/&lt;br /&gt;&lt;br /&gt;Great, that downloaded index.html. But we want to download the whole site! So we use the -r option to make it recursive. This means that it will follow references to files used by each webpage, using attributes such as href and src. While this recursion could potentially go on forever, what limits it is the (default) &lt;span style="font-style: italic;"&gt;recursion depth&lt;/span&gt; (i.e. follow such references only to a certain limit) and the fact that &lt;span style="font-style: italic;"&gt;wget will, by default, not follow links that span different hosts&lt;/span&gt; (i.e. jump to different domains). Here's how the recursion thing works:&lt;br /&gt;&lt;br /&gt;wget -r http://www.geocities.com/mitzenos/&lt;br /&gt;&lt;br /&gt;OK, that downloads an entire site. In the case of Geocities, which hosts many different accounts, wget may end up downloading other sites on Geocities. If /mitzenos/ links to /xenerkes/, for example, both accounts are technically on the same host, so wget will just as well download them both. We can solve this problem by using the -np switch [&lt;a href="http://ubuntuforums.org/showthread.php?t=884447"&gt;ref1&lt;/a&gt;] [&lt;a href="http://www.gnu.org/software/wget/manual/html_node/Recursive-Download.html"&gt;ref2&lt;/a&gt;]. Note combining -r and -np as -rnp does not work (at least on Windows it doesn't).&lt;br /&gt;&lt;br /&gt;wget -r -np http://www.geocities.com/mitzenos/&lt;br /&gt;&lt;br /&gt;So that solved most of the problems. Now when we try downloading /xenerkes/ separately, Geocities ends up taking down the site for an hour because of bandwidth restrictions, and you see a lot of 503 Service Temporarily Unavailable errors in the wget output. This is because Geocities impose a 4.2MB &lt;span style="font-style: italic;"&gt;hourly&lt;/span&gt; limit on bandwidth (bastards). Since the webspace limit for Geocities is 15MB, it makes it difficult to download a site with size between 4.2MB and 15MB.&lt;br /&gt;&lt;br /&gt;The solution to this problem is to force wget to download files at a slower rate, so that if the site is, say, 5MB, then the bandwidth will be spread over more than one hour. This is done using the -w switch [ref: &lt;a href="http://www.gnu.org/software/wget/manual/html_node/Download-Options.html"&gt;download options&lt;/a&gt;], which by default takes an argument in seconds (you can also specify minutes, etc). For Geocities, 40-60 seconds per file should be enough, if the files aren't very large. Back when Geocities was popular, it wasn't really normal to have very large files on the web, so that isn't really an issue. This is the line that solves it:&lt;br /&gt;&lt;br /&gt;wget -r -np -w 60 http://www.geocities.com/mitzenos/&lt;br /&gt;&lt;br /&gt;This command will obviously take several hours to download a site if there are a lot of files, so choose the download interval wisely. If you're exceeding the bandwidth limit then use a large interval (around 60 seconds); if there are lots of files and the download is too damn slow, then use a smaller interval (30-40 seconds).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-5602714400776168690?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/5602714400776168690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/10/using-wget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5602714400776168690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5602714400776168690'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/10/using-wget.html' title='Using wget'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-8085785273121223375</id><published>2009-04-25T08:56:00.000-07:00</published><updated>2009-04-25T09:02:00.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slashdot'/><category scheme='http://www.blogger.com/atom/ns#' term='Sierra'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Early Sierra games playable online</title><content type='html'>Some interesting stuff that surfaced between yesterday and today:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://games.slashdot.org/article.pl?sid=09/04/25/0139213"&gt;Old Sierra Games Playable In Browser Through Open Source Game Engine&lt;/a&gt; - a great piece of work at &lt;a href="http://www.sarien.net/"&gt;Sarien.net&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tech.slashdot.org/article.pl?sid=09/04/24/1927231"&gt;Microsoft Suffers Leaks, Lagging Sales Numbers As They Look Forward To Windows 8&lt;/a&gt; - article about the leak of Windows 7 Release Candidate, and the fact that Microsoft are already beginning to plan Windows 8.&lt;/li&gt;&lt;li&gt;My thesis is going through a public evaluation beta this week - check out the &lt;a href="http://gigi.nullneuron.net/chatbot/chatbot.htm"&gt;chatbot evaluation&lt;/a&gt; page.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-8085785273121223375?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/8085785273121223375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/04/early-sierra-games-playable-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8085785273121223375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/8085785273121223375'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/04/early-sierra-games-playable-online.html' title='Early Sierra games playable online'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-4185184736709905425</id><published>2009-04-24T10:54:00.000-07:00</published><updated>2009-04-24T11:03:39.901-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='databases'/><category scheme='http://www.blogger.com/atom/ns#' term='Slashdot'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Geocities'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Oracle buys Sun; Geocities to die soon; Ubuntu 9.04 released</title><content type='html'>A lot of stuff has happened this week, and keeping up to date with &lt;a href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt; is a good idea. Some highlights:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On Monday 20th April, &lt;a href="http://developers.slashdot.org/article.pl?sid=09/04/20/128246&amp;amp;art_pos=1"&gt;Oracle bought Sun Microsystems&lt;/a&gt;&lt;/li&gt;&lt;li&gt;On Thursday 23rd April, &lt;a href="http://developers.slashdot.org/article.pl?sid=09/04/23/134208&amp;amp;art_pos=30"&gt;MySQL split into two separate forks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On Thursday 23rd April, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; 9.04 was released&lt;/li&gt;&lt;li&gt;On Thursday 23rd April, &lt;a href="http://tech.slashdot.org/article.pl?sid=09/04/23/2339224&amp;amp;art_pos=14"&gt;Yahoo! announced the end of Geocities&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-4185184736709905425?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/4185184736709905425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/04/oracle-buys-sun-geocities-to-die-soon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4185184736709905425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/4185184736709905425'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/04/oracle-buys-sun-geocities-to-die-soon.html' title='Oracle buys Sun; Geocities to die soon; Ubuntu 9.04 released'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-3466389648035777768</id><published>2009-04-16T09:47:00.000-07:00</published><updated>2009-04-16T10:00:24.123-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Android SDK 1.5 Early Look</title><content type='html'>A few days ago, a &lt;a href="http://developer.android.com/sdk/preview/"&gt;pre-release of the Google Android SDK 1.5&lt;/a&gt; was released.&lt;br /&gt;&lt;br /&gt;Google Android is an operating system for mobile phones. I had to write a program for it in April 2008 (as one of my University Assigned Practical Tasks), back when there was no mobile phone supporting it, and when the SDK was so alpha or beta that it didn't even have a version number and was identified by a milestone number and release number.&lt;br /&gt;&lt;br /&gt;Today, the SDK appears to have matured a lot, and so have the tools that come with it, including the emulator. Out of curiosity, I re-installed the Android SDK to see how the emulator changed over the past year. Below are a couple of screenshots.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BnfgOUCnwyM/SedhfR_fC4I/AAAAAAAAA28/d6nm8VYRP5g/s1600-h/android2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_BnfgOUCnwyM/SedhfR_fC4I/AAAAAAAAA28/d6nm8VYRP5g/s320/android2.png" alt="" id="BLOGGER_PHOTO_ID_5325332274422418306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BnfgOUCnwyM/SedhfGLo_QI/AAAAAAAAA20/ebFlY6O7Rxw/s1600-h/android1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_BnfgOUCnwyM/SedhfGLo_QI/AAAAAAAAA20/ebFlY6O7Rxw/s320/android1.png" alt="" id="BLOGGER_PHOTO_ID_5325332271252176130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Anyone wishing to install this pre-release version should follow the instructions on the &lt;a href="http://developer.android.com/sdk/preview/"&gt;pre-release page&lt;/a&gt; since there are a few differences from the procedure described by the &lt;a href="http://developer.android.com/sdk/1.1_r1/installing.html"&gt;current SDK documentation&lt;/a&gt;. Also, running the emulator has become slightly more complex, because of the extra step of having to create an &lt;a href="http://developer.android.com/sdk/preview/#avd"&gt;AVD (Android Virtual Device)&lt;/a&gt;. This tiny complication is for the better, however, as it allows you to create several different emulator configurations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-3466389648035777768?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/3466389648035777768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/04/google-android-sdk-15-early-look.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3466389648035777768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/3466389648035777768'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/04/google-android-sdk-15-early-look.html' title='Google Android SDK 1.5 Early Look'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BnfgOUCnwyM/SedhfR_fC4I/AAAAAAAAA28/d6nm8VYRP5g/s72-c/android2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-5577172073889379145</id><published>2009-04-05T08:18:00.000-07:00</published><updated>2009-04-05T09:27:43.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Jaunty'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>A quick look at Ubuntu 9.04 Beta</title><content type='html'>Ubuntu 9.04 (Jaunty Jackalope) is currently in beta, and is due for a stable release on 23rd April 2009.&lt;br /&gt;&lt;br /&gt;I'm mainly a Windows user, but for some tasks (especially programming) I like using Linux. I'm not extremely technical, so this little review is more about covering what the average user expects to get from an operating system, rather than exciting new features like the ext4 filesystem.&lt;br /&gt;&lt;br /&gt;For about a year I've been using Kubuntu 7.04, and although support for it has long since stopped, I preferred not to upgrade. One of the main reasons was that I simply did not like the latest versions of KDE. I got my first taste of KDE when I tried Knoppix, and immediately loved it. When the time came to install Linux rather than using a live CD, Kubuntu was an obvious choice over Ubuntu. But today, this is not so obvious any more. Even &lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;taxonomyName=Software&amp;amp;articleId=9126619&amp;amp;taxonomyId=18&amp;amp;pageNumber=5"&gt;Linus agrees that KDE 4 is a mess&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since it is about time I upgrade my Linux distribution, I thought I'd try Ubuntu 9.04. I never liked GNOME (mostly due to aesthetic reasons, but I also never felt comfortable with the menu bar on top), but since KDE has become far worse, I thought I'd give it a second chance. Ubuntu 9.04 comes with GNOME 2.26 [ref: &lt;a href="http://arstechnica.com/open-source/reviews/2009/03/jackalope-sighting-first-look-at-ubuntu-904-beta.ars"&gt;Ars Technica article&lt;/a&gt;]. Now this version number means very little to me, but &lt;span style="font-weight: bold;"&gt;this Ubuntu feels more like Windows than Kubuntu ever did&lt;/span&gt;... at least the left mouse button simply selects items rather than trying to run them; and dragging an item will always move it rather than opening up a silly context menu every time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BnfgOUCnwyM/SdjZTSFkZaI/AAAAAAAAA2k/6-yO49ptCsU/s1600-h/apps.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/SdjZTSFkZaI/AAAAAAAAA2k/6-yO49ptCsU/s320/apps.png" alt="" id="BLOGGER_PHOTO_ID_5321241885034177954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ubuntu 9.04 comes with a number of good pieces of software pre-installed. Among these are &lt;span style="font-weight: bold;"&gt;Firefox 3.0.7&lt;/span&gt; (on Kubuntu I am still stuck with Firefox 2 because I never managed to install Firefox 3), &lt;span style="font-weight: bold;"&gt;OpenOffice.org 3.0.1&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;Pidgin&lt;/span&gt;, which to me looks very much like Gaim, but has a fresher look, is easier to configure, and has much less grotesque conversation windows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BnfgOUCnwyM/SdjY5k1_0UI/AAAAAAAAA2U/s5XlaSSCfT0/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/SdjY5k1_0UI/AAAAAAAAA2U/s5XlaSSCfT0/s320/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5321241443392540994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One of the features I really liked on Kubuntu was &lt;span style="font-weight: bold;"&gt;how screenshots are saved&lt;/span&gt;. You press Print Screen, and a dialogue comes up prompting you to save the screenshot, without you having to even paste the screenshot in some image editor. This feature is still there in Ubuntu 9.04.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SdjbeqeYN-I/AAAAAAAAA2s/SMDgtJvmbJY/s1600-h/networking.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SdjbeqeYN-I/AAAAAAAAA2s/SMDgtJvmbJY/s320/networking.png" alt="" id="BLOGGER_PHOTO_ID_5321244279582504930" border="0" /&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;For those people like me who work with multiple computers with different operating systems, it is important to be able to &lt;span style="font-weight: bold;"&gt;transfer files from one PC to another over the network&lt;/span&gt;. In Kubuntu I used to go to "Remote Places" and then to "Samba Shares", and proceed from there. It worked great, but was painful because I had to nagivate through several virtual network folders every time I wanted to locate my shared folder.&lt;br /&gt;&lt;br /&gt;In Ubuntu 9.04, there is something similar. You go to "Places" &gt; "Network" and then find your network and host and shared folder. Ubuntu is nicer because it actually mounts the shared folder, so you can easily access it from your desktop next time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SdjY52in57I/AAAAAAAAA2c/KOihnUyUp8I/s1600-h/media.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SdjY52in57I/AAAAAAAAA2c/KOihnUyUp8I/s320/media.png" alt="" id="BLOGGER_PHOTO_ID_5321241448143120306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Listening to music&lt;/span&gt; on Ubuntu 9.04, unfortunately, is not such a pleasant experience. Both pre-installed media players, "Movie Player" and "Rhythmbox Music Player", aren't capable of playing MP3s without a plugin. Also, I was unable to find my usual 2 Linux media players (VLC and XMMS) using both apt-get and the Add/Remove Applications program, and Amarok and JuK failed to install. I am still lost as to how to play MP3s on this version of Ubuntu... something I had no problem doing on good old Kubuntu.&lt;br /&gt;&lt;br /&gt;A couple of things I never managed to do on Linux are &lt;span style="font-weight: bold;"&gt;printing&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;watching videos on YouTube&lt;/span&gt; since the Flash player plugin for Firefox is not compatible with x64 architectures. The Flash issue can't be blamed on Ubuntu, but I think anyone would expect to be able to print without much hassle on any decent operating system. With this new version of Ubuntu, I still had no luck in either area.&lt;br /&gt;&lt;br /&gt;Other minor things I don't like include how access to the Terminal could be easier ("Applications" &gt; "Accessories" &gt; "Terminal"), and how the shutdown options are available in a counter-intuitive "Live session user" menu in the top-right.&lt;br /&gt;&lt;br /&gt;On the whole, Ubuntu 9.04 seems to be very promising, and assuming that some issues get fixed, I may seriously consider using it as my next Linux operating system once my thesis is finished.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-5577172073889379145?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/5577172073889379145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/04/quick-look-at-ubuntu-904-beta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5577172073889379145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5577172073889379145'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/04/quick-look-at-ubuntu-904-beta.html' title='A quick look at Ubuntu 9.04 Beta'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BnfgOUCnwyM/SdjZTSFkZaI/AAAAAAAAA2k/6-yO49ptCsU/s72-c/apps.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-6364704937278270629</id><published>2009-03-07T10:15:00.001-08:00</published><updated>2009-04-25T08:52:52.473-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><category scheme='http://www.blogger.com/atom/ns#' term='client/server'/><category scheme='http://www.blogger.com/atom/ns#' term='Thesis'/><title type='text'>HTTP Communication: A Closer Look</title><content type='html'>About four months ago, I wrote a very simple HTTP server in Python, since my thesis has a Python artifact and I wanted to integrate it with a server. I've known the basics of HTTP for a year and a half now, but actually writing a server is obviously another story.&lt;br /&gt;&lt;br /&gt;For those who aren't familiar with HTTP (I mean the actual protocol itself... everyone knows what it does, but not everyone knows what it looks like), or who know the basics but need to see a few examples, &lt;span style="font-weight: bold;"&gt;"&lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.jmarshall.com/easy/http/"&gt;HTTP Made Really Easy&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;" is a great place to start&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;My very simple HTTP server worked nicely, but I soon ran into a problem. If the server was hosted on Windows and I accessed it from a &lt;span style="font-weight: bold;"&gt;browser on Linux&lt;/span&gt;, I &lt;span style="font-weight: bold;"&gt;wasn't getting the payload&lt;/span&gt; of the POST packets (I wasn't getting all of the header either, although I didn't notice at first). I got the payload for all other Windows/Linux combinations (server on Linux, browser on Windows; and both server and browser on same system).&lt;br /&gt;&lt;br /&gt;Till today, I had no clue what could be (in my mind) causing Linux to send requests without the payload. Then I decided to use &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; to find out what exactly was happening to the packets. Wireshark is a great tool that lets you see the actual data in packets you send and receive.&lt;br /&gt;&lt;br /&gt;By using Wireshark, I noticed that the &lt;span style="font-weight: bold;"&gt;HTTP requests were being split into multiple packets&lt;/span&gt; when sent from Linux, while a Windows would send the request as one whole packet. This means the payload would arrive in a second or third packet, and since I had only one send() call, I would not receive it.&lt;br /&gt;&lt;br /&gt;The solution is to &lt;span style="font-weight: bold;"&gt;keep a buffer associated with each single connection&lt;/span&gt; (identified by ip:port), and append each packet to it. You know when you've reached the end from the Content-Length field in the HTTP header, which tells you the size of the payload. The payload starts after the first "\r\n\r\n" double-newline, so you can start counting from there.&lt;br /&gt;&lt;br /&gt;Now, regarding connections... here's another thing I learned by poking around in Wireshark. I used to think that a browser keeps the same connection open for each website, until the browser is closed, so that it can use the same connection (for efficiency purposes) for the same website rather than opening new connections all the time. Well, that's not the case.&lt;br /&gt;&lt;br /&gt;Apparently, &lt;span style="font-weight: bold;"&gt;each HTTP request starts a new connection&lt;/span&gt;, so if you're watching requests coming in from the server side, you'll see the client's port number increase by one each time. Connections are reused only to send multiple packets associated with the same request (as above). In other words, a Linux client would open a connection, split the request into a number of packets, send them via the same connection, and close the connection. Well, almost.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;browser actually doesn't close the connection&lt;/span&gt;. If your server just sends the data, the browser will keep waiting for data to arrive. So &lt;span style="font-weight: bold;"&gt;your server must close the connection immediately after sending the response&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-6364704937278270629?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/6364704937278270629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/03/http-communication-closer-look.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6364704937278270629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/6364704937278270629'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/03/http-communication-closer-look.html' title='HTTP Communication: A Closer Look'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-79774013679646684</id><published>2009-03-06T05:22:00.000-08:00</published><updated>2009-04-25T08:53:47.738-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='DOSBox'/><title type='text'>DOSBox for Dummies</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;br /&gt;What is DOSBox?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.dosbox.com/"&gt;DOSBox&lt;/a&gt; is a program that emulates DOS, allowing you to &lt;span style="font-weight: bold;"&gt;run most old games&lt;/span&gt; that might not run on modern operating systems.&lt;br /&gt;&lt;br /&gt;This is what it looks like (as soon as you run it):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SbElZu8zjvI/AAAAAAAAA1s/X1Bp7s3WVM8/s1600-h/dosbox.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SbElZu8zjvI/AAAAAAAAA1s/X1Bp7s3WVM8/s320/dosbox.png" alt="" id="BLOGGER_PHOTO_ID_5310066559676550898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is what it looks like after running a game:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BnfgOUCnwyM/SbElFUS_ZrI/AAAAAAAAA1k/hMmO3fjOb9Q/s1600-h/ultima5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/SbElFUS_ZrI/AAAAAAAAA1k/hMmO3fjOb9Q/s320/ultima5.png" alt="" id="BLOGGER_PHOTO_ID_5310066208924460722" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;How do I use DOSBox?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;DOSBox can be used like any command line interface. The commands are pretty standard: cd changes directory; typing the name of an executable runs that executable, etc.&lt;br /&gt;&lt;br /&gt;But first, before you can access your files, you need to &lt;span style="font-weight: bold;"&gt;mount a drive&lt;/span&gt;. In DOSBox you start at drive Z:, which is virtual, so you need to map a drive in DOSBox (e.g. C:) to a particular drive or folder on your hard disk. You can mount drive C: as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mount c c:\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DOSBox recommends that you don't map a DOSBox drive directly to a root directory, so you should use some folder instead of C:\.&lt;br /&gt;&lt;br /&gt;Note that in case a folder name is longer than 8 characters or contains spaces, you should use the &lt;span style="font-weight: bold;"&gt;tilde version&lt;/span&gt; of that folder name (e.g. administrator -&gt; admini~1, i.e. take the first 6 characters and add ~1). In case a folder name contains spaces you should do something similar but take the first word instead, but I believe DOSBox still has problems with folder names containing spaces.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Writing Batch Files for DOSBox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;If you use DOSBox often and &lt;span style="font-weight: bold;"&gt;don't want to do some of the repetitive tasks&lt;/span&gt; (e.g. mounting a drive, or running your favourite game) every time, you can &lt;span style="font-weight: bold;"&gt;write a batch file&lt;/span&gt; to automate the process.&lt;br /&gt;&lt;br /&gt;A batch file (on Windows) is a text file with a .bat extension (e.g. u5.bat). In the batch file you write a &lt;span style="font-weight: bold;"&gt;list of commands&lt;/span&gt; that you would write in the command line; each new line runs the previous command.&lt;br /&gt;&lt;br /&gt;The following is an example of a batch file I wrote to run Ultima 5 right away:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd tools&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd dosbox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dosbox -c "mount c C:\docume~1\admini~1\Desktop" -c "C:" -c "cd U5" -c "ultima"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each line is run as a separate command. In the first 3 lines, I'm going to the DOSBox directory, and in the fourth I'm running DOSBox.&lt;br /&gt;&lt;br /&gt;Now DOSBox is nice because you can give it certain parameters, one of which is "-c". "-c" means that the following parameter is a &lt;span style="font-weight: bold;"&gt;command to be run in DOSBox&lt;/span&gt;. Like this, you can make DOSBox run several commands as soon as it starts, without you having to type them. Line 4 shows four commands: first I'm mounting the C drive, then I'm switching to it, then I'm going to the U5 directory, then I'm running Ultima 5.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Speed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Some games may run too fast or too slow. Hit&lt;span style="font-weight: bold;"&gt; Ctrl+F11 to slow DOSBox, or Ctrl+F12 to speed it up&lt;/span&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-79774013679646684?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/79774013679646684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/03/dosbox-for-dummies.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/79774013679646684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/79774013679646684'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/03/dosbox-for-dummies.html' title='DOSBox for Dummies'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_BnfgOUCnwyM/SbElZu8zjvI/AAAAAAAAA1s/X1Bp7s3WVM8/s72-c/dosbox.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-5211391406219491384</id><published>2009-02-18T12:10:00.000-08:00</published><updated>2009-02-18T12:30:30.885-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Earth'/><title type='text'>Google Earth 5 beta</title><content type='html'>It's been a long time since I last used Google Earth. I first discovered it two or three years ago, and loved it. You could go anywhere on Earth, and see all kinds of landscapes. Occasionally I would look for a famous monument, or simply trek through the countryside in some far away country.&lt;br /&gt;&lt;br /&gt;Eventually I stopped using it, and uninstalled it. Today I suddenly felt like visiting the beauty of New Zealand (after watching &lt;span style="font-style: italic;"&gt;The Lord of the Rings: The Return of the King&lt;/span&gt; yesterday - it was filmed there), so I downloaded Google Earth again and installed it.&lt;br /&gt;&lt;br /&gt;I was impressed with the new features available. Admittedly, I haven't used Google Earth for a while, so some features might not be exactly new. What is definitely new is the ability to explore the ocean floor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SZxs8LcWPdI/AAAAAAAAA08/Tkj54Zz26Mo/s1600-h/ocean.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SZxs8LcWPdI/AAAAAAAAA08/Tkj54Zz26Mo/s320/ocean.jpg" alt="" id="BLOGGER_PHOTO_ID_5304234242255240658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The feature I love most is the Sky feature. It allows you to see the stars and other heavenly bodies visible in the night sky. I've always loved stuff about constellations (Japanese cartoons are full of them, and I'm currently back to watching &lt;span style="font-style: italic;"&gt;I Cavalieri dello Zodiaco&lt;/span&gt;), zodiac, astronomy, etc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BnfgOUCnwyM/SZxtx8x5XMI/AAAAAAAAA1E/kpmbl2J8U3o/s1600-h/sky.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_BnfgOUCnwyM/SZxtx8x5XMI/AAAAAAAAA1E/kpmbl2J8U3o/s320/sky.jpg" alt="" id="BLOGGER_PHOTO_ID_5304235166032026818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Another thing I really like is the &lt;span style="font-style: italic;"&gt;Mars&lt;/span&gt; feature. As if &lt;a href="http://www.google.com/mars/"&gt;Google Mars&lt;/a&gt; wasn't brilliant enough already, you can now fly over the surface of Mars in Google Earth.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SZxuXQoReDI/AAAAAAAAA1M/9r_keg1tmek/s1600-h/mars.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SZxuXQoReDI/AAAAAAAAA1M/9r_keg1tmek/s320/mars.jpg" alt="" id="BLOGGER_PHOTO_ID_5304235807015532594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yet another feature that is new to me is the Sun feature. This shows the sunlight and shade on the globe, and you can drag a time slider to actually see the shade moving across the globe.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BnfgOUCnwyM/SZxum0tQQ2I/AAAAAAAAA1U/zUcXGHpTcYY/s1600-h/sun.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_BnfgOUCnwyM/SZxum0tQQ2I/AAAAAAAAA1U/zUcXGHpTcYY/s320/sun.jpg" alt="" id="BLOGGER_PHOTO_ID_5304236074398139234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, this is an old feature, but still worth mentioning. It's always nice that Google Earth lets you view buildings in certain cities in 3D. Being able to see any place on Earth is already great, but seeing tall buildings in all their majesty is a definite plus over seeing them on a flat photo surface, their height being hinted at only by the amount of shadow they cast on their surroundings.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BnfgOUCnwyM/SZxu80KmdwI/AAAAAAAAA1c/kX_GQlqyw5g/s1600-h/3d.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/SZxu80KmdwI/AAAAAAAAA1c/kX_GQlqyw5g/s320/3d.jpg" alt="" id="BLOGGER_PHOTO_ID_5304236452209915650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well, that's it. This wasn't exactly a review of Google Earth; it's more like a 5-minute account of the new features I noticed while quickly revisiting this masterpiece of a program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-5211391406219491384?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/5211391406219491384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/02/google-earth-5-beta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5211391406219491384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/5211391406219491384'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/02/google-earth-5-beta.html' title='Google Earth 5 beta'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_BnfgOUCnwyM/SZxs8LcWPdI/AAAAAAAAA08/Tkj54Zz26Mo/s72-c/ocean.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-2115573184607166556</id><published>2009-01-26T05:58:00.000-08:00</published><updated>2009-01-26T06:12:59.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft 'Songsmith'</title><content type='html'>An &lt;a href="http://entertainment.slashdot.org/article.pl?sid=09/01/25/2322238"&gt;article by Slashdot&lt;/a&gt; has a few links about 'Songsmith', a program from 'Microsoft Research'.&lt;br /&gt;&lt;br /&gt;A shame for any software company.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-2115573184607166556?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/2115573184607166556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2009/01/microsoft-songsmith.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2115573184607166556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2115573184607166556'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2009/01/microsoft-songsmith.html' title='Microsoft &apos;Songsmith&apos;'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1507108132689046588.post-2415317317106684117</id><published>2008-12-21T08:20:00.000-08:00</published><updated>2008-12-21T08:30:20.990-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='defragmentation'/><title type='text'>Vista kills Disk Defragmenter</title><content type='html'>This is what the Disk Defragmenter looked like in XP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BnfgOUCnwyM/SU5tZmbNGwI/AAAAAAAAAzc/smtmlZeSVWw/s1600-h/defrag_xp.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 234px;" src="http://4.bp.blogspot.com/_BnfgOUCnwyM/SU5tZmbNGwI/AAAAAAAAAzc/smtmlZeSVWw/s320/defrag_xp.jpg" alt="" id="BLOGGER_PHOTO_ID_5282279699530980098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is what it looks like in Vista.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BnfgOUCnwyM/SU5tZ_pFHqI/AAAAAAAAAzk/RLRncJLHF8A/s1600-h/defrag_vista.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_BnfgOUCnwyM/SU5tZ_pFHqI/AAAAAAAAAzk/RLRncJLHF8A/s320/defrag_vista.jpg" alt="" id="BLOGGER_PHOTO_ID_5282279706300063394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I do not even need to explain why the Vista version totally sucks. You have no idea what's going on behind the scene, nor do you have any hint as to how far the defragmentation has progressed and how much longer it will take.&lt;br /&gt;&lt;br /&gt;As one of my best lecturers once said, a good program needs to be verbose, and that means that it keeps the user informed of what it's doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1507108132689046588-2415317317106684117?l=gigionit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gigionit.blogspot.com/feeds/2415317317106684117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gigionit.blogspot.com/2008/12/vista-kills-disk-defragmenter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2415317317106684117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1507108132689046588/posts/default/2415317317106684117'/><link rel='alternate' type='text/html' href='http://gigionit.blogspot.com/2008/12/vista-kills-disk-defragmenter.html' title='Vista kills Disk Defragmenter'/><author><name>Daniel D'Agostino</name><uri>http://www.blogger.com/profile/03674104019613318379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_BnfgOUCnwyM/SgQQfw_QBwI/AAAAAAAAA34/2w0Om9DkELw/S220/gigi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BnfgOUCnwyM/SU5tZmbNGwI/AAAAAAAAAzc/smtmlZeSVWw/s72-c/defrag_xp.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
