<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkQMSHsyfyp7ImA9WhBTEk8.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766</id><updated>2013-02-06T22:59:49.597-08:00</updated><category term="ruby" /><category term="rest" /><category term="android" /><category term="java" /><category term="python" /><category term="software" /><category term="programming" /><category term="drupal" /><category term="microsoft" /><category term="government" /><category term="vim" /><category term="fun" /><category term="film" /><category term="art" /><category term="ramblings" /><category term="django" /><category term="hardware" /><category term="google" /><category term="chrome" /><category term="websites-that-suck" /><title>Andriy Drozdyuk</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://drozdyuk.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Andriy Drozdyuk</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AndriyDrozdyuk" /><feedburner:info uri="andriydrozdyuk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0cAQ3w7eip7ImA9WhRQE0U.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-2932382285948237180</id><published>2011-12-08T13:48:00.001-08:00</published><updated>2011-12-08T13:50:42.202-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T13:50:42.202-08:00</app:edited><title>USSR Animation</title><content type="html">&lt;br /&gt;
Some links to some USSR cartoons:&lt;br /&gt;
1. &lt;a href="http://www.youtube.com/watch?v=2Hh4VVxCXQw"&gt;Gil bil pes (about a dog - setting in Ukrainian village)&lt;/a&gt;&lt;br /&gt;
2. &lt;a href="http://www.youtube.com/watch?v=Ag-gwF_9Yqk&amp;amp;feature=player_embedded"&gt;The Three from Prostokvashino&lt;/a&gt;&lt;br /&gt;
3. &lt;a href="http://www.spike.com/video-clips/7qtcxj/hedgehog-in-the-fog"&gt;Hedgehog in the fog&lt;/a&gt;&lt;br /&gt;
4. &lt;a href="http://www.youtube.com/watch?v=85Ww3-JigyY&amp;amp;feature=player_embedded"&gt;Cinderella&lt;/a&gt;&lt;br /&gt;
5. &lt;a href="http://www.youtube.com/watch?v=MlqDTExvs3g"&gt;Kolobok&lt;/a&gt;&lt;br /&gt;
6. &lt;a href="http://www.youtube.com/watch?v=JBfCgY35yWg&amp;amp;feature=player_embedded"&gt;Nu pogodi (similar to "tom and jerry")&lt;/a&gt;&lt;br /&gt;
7. &lt;a href="http://www.youtube.com/watch?v=b_q3WoYawNI"&gt;Tale of tales (artistic)&lt;/a&gt;&lt;br /&gt;
8. &lt;a href="http://www.dailymotion.com/video/x7kqjq__shortfilms"&gt;Kids cartoon&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/jn2U9bQXcUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/2932382285948237180/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=2932382285948237180" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/2932382285948237180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/2932382285948237180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/jn2U9bQXcUk/ussr-animation.html" title="USSR Animation" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2011/12/ussr-animation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBQHs5cSp7ImA9WhRSEUg.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8709856689200293676</id><published>2011-11-12T19:19:00.001-08:00</published><updated>2011-11-12T19:20:51.529-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T19:20:51.529-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ramblings" /><title>How is convex polygon like our society?</title><content type="html">&lt;br /&gt;
Convex polygons are really interesting shapes in mathematics. They are surprisingly simple to define but have many interesting mathematical properties. But they apply not only to mathematics, but also to our everyday lives.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;What is "convex"?&lt;/span&gt;&lt;br /&gt;
Let us first define what a convex polygon is. We will look at 2D only, as it is simple to imagine. So, a &amp;nbsp;shape &amp;nbsp;is&amp;nbsp;&lt;b&gt;convex&amp;nbsp;&lt;/b&gt;if for two points that we pick in it, a line segment between the points is also part of that shape. In the image below you can see some examples of convex and non-convex shapes. Note how for the non-convex ones we can always find two points that will have a line segment between them fall outside the given shape.&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://math.hws.edu/graphicsnotes/c3/convexity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://math.hws.edu/graphicsnotes/c3/convexity.png" width="430" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Convexity in our society&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;a href="http://www.grist.org/phpThumb/phpThumb.php?src=http://www2.grist.org/images/feature/2009/01/16/mayor-quimby_s150.jpg&amp;amp;w=630" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://www.grist.org/phpThumb/phpThumb.php?src=http://www2.grist.org/images/feature/2009/01/16/mayor-quimby_s150.jpg&amp;amp;w=630" /&gt;&lt;/a&gt;How does convexity show itself in our society? Simple. Any two members, that are accepted by society imply that any member "in-between" them is also accepted. For example, if society considers a person of height six feet two as tall, and a person of height six feet as tall - then any person with a height in-between is also considered as such - tall.&lt;br /&gt;This is a rather silly example, as "tall" people are already defined as some range, say - six feet to seven feet. However, this is not as clear when it comes to views on different issues like politics or religion. Say that both a person A=(90% religious, 10% republican) and B=(10% religious, 90% republican) are accepted as members of society. Well, then by convexity it follows that any person in-between these beliefs is also accepted, for example person C=(50% religious, 50% republican).&lt;/div&gt;
&lt;div class="" style="clear: both;"&gt;
It would seem absurd for society to accept "extremes" - but to reject the "in-betweens". Indeed, it is rather that society rejects the "extremes", and tends more towards the middle ground, making itself convex.&lt;/div&gt;
&lt;div class="" style="clear: both;"&gt;
This can be extended to politics, where, for example, a government cannot consist of only 1 corrupt&amp;nbsp;politician&amp;nbsp;and 99 non-corrupt ones. By convexity, such a government must contain&amp;nbsp;politicians&amp;nbsp;that are all "shades" of corruptness - some completely corrupt, while others only "recreationally" so.&lt;br /&gt;That is rather an amusing perspective!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/8X0ZLkKab-w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8709856689200293676/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8709856689200293676" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8709856689200293676?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8709856689200293676?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/8X0ZLkKab-w/how-is-convex-polygon-like-our-society.html" title="How is convex polygon like our society?" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2011/11/how-is-convex-polygon-like-our-society.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDRXo6cSp7ImA9WhdXE0s.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8334118404651935292</id><published>2011-08-26T06:13:00.001-07:00</published><updated>2011-08-26T06:14:34.419-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T06:14:34.419-07:00</app:edited><title>Why Eclipse Sucks 3</title><content type="html">&lt;div class="mobile-photo"&gt;&lt;a href="http://1.bp.blogspot.com/-MHMsHsKVJEI/Tleb4RkGLAI/AAAAAAAAC80/S_dsnYPOPF0/s1600/eclipse_Logo-783444.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5645152049021987842" src="http://1.bp.blogspot.com/-MHMsHsKVJEI/Tleb4RkGLAI/AAAAAAAAC80/S_dsnYPOPF0/s320/eclipse_Logo-783444.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;As we are moving away from the problems in operating systems, more and more emphasis is put on the functionality within the browser.&lt;/div&gt;&lt;div&gt;Most of our everyday person activities can be carried out inside the browser. As more and more applications move over to the web, in a sense there are less and less desktop applications that remain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What ends up happening is that desktop applications get less and less attention. This results in poorer quality desktop applications - because the expertise in desktop development is decreased.&lt;/div&gt;&lt;div&gt;Less users are hammering on the code - to test out the kinks in the software. The error reports are not always submitted (as they are in web-applications). As more and features and "versions" are release - the desktop application tends to get clogged with bugs and failures.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Desktop applications have to evolve. And the perfect example of where the evolution has to head is web applications.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Some applications are leading the way. Take for example, google chrome. Their auto updating feature mimics exactly the way web-applications operate. By ensuring that most users are running the same version there is not need to support legacy software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Take as another example - &lt;a href="http://store.steampowered.com/" target="_blank"&gt;Steam&lt;/a&gt; client (client for a online games store). By using an integrate web-browser they rid themselves of the buggy and error prone GUIs that most cross-platform desktop applications come with. By evolving towards the web-application they are making it better for the user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So why not?&lt;/div&gt;&lt;div&gt;&lt;div&gt;Why not implement a "single version" auto-updating policy?&lt;/div&gt;&lt;div&gt;Why not implement an automatic-bug reporting system?&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Why not borrow browser's rendering to render you GUIs?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Eclipse is one of many desktop applications in need of "evolution". In order to make it easier to use, easier to support and update. Will it manage to do this anytime soon? Or will an alternative arise and beat it to it? Or will the developers be always content with old "desktop" application. I think it will be a rather long wait we wait to see the result of these questions.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
-Andriy Drozdyuk&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/rJQ4QkU4U-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8334118404651935292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8334118404651935292" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8334118404651935292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8334118404651935292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/rJQ4QkU4U-o/why-eclipse-sucks-3.html" title="Why Eclipse Sucks 3" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-MHMsHsKVJEI/Tleb4RkGLAI/AAAAAAAAC80/S_dsnYPOPF0/s72-c/eclipse_Logo-783444.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2011/08/why-eclipse-sucks-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MRnk8eip7ImA9WhdQEEo.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-7879462015435393694</id><published>2011-08-11T07:09:00.001-07:00</published><updated>2011-08-11T07:11:27.772-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T07:11:27.772-07:00</app:edited><title>Why Eclipse Sucks 2</title><content type="html">&lt;div class="mobile-photo"&gt;&lt;a href="http://2.bp.blogspot.com/-C_Sc1S_sYCE/TkPir4LlfCI/AAAAAAAAC8s/9eZYokd7sJE/s1600/eclipseError2-791773.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5639600401841224738" src="http://2.bp.blogspot.com/-C_Sc1S_sYCE/TkPir4LlfCI/AAAAAAAAC8s/9eZYokd7sJE/s320/eclipseError2-791773.png" /&gt;&lt;/a&gt;&lt;/div&gt;Again this error makes no sense, and what's more it leaves one&lt;br /&gt;
completely helpless as to what to do next.&lt;br /&gt;
How can all the developers in the world be using such a poor quality&lt;br /&gt;
software is beyond me!&lt;br /&gt;
How come it is fine for the "geek" to be of anti-windows culture&lt;br /&gt;
(Windows seldom gives me errors when updating itself nor does it ever&lt;br /&gt;
crash anymore) but it is completely fine to be using buggy and slow&lt;br /&gt;
tool for their coding needs?&lt;br /&gt;
Is there no end to poor quality software, that just "kind-of-works"&lt;br /&gt;
that we will accept? Why is there no standard among programmers of how&lt;br /&gt;
good something should be - before they themselves actually use it? Is&lt;br /&gt;
it because the developers are adventurous and don't mind "hacking"&lt;br /&gt;
things to work properly, or is it because that by using buggy software&lt;br /&gt;
they acquit themselves of writing "good" software too?&lt;br /&gt;
In other words, if I am using a "kinda-good-enough" IDE, it is&lt;br /&gt;
completely fine for me to write "kinda-good-enough" software.&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/ZrY_iFf7UvM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/7879462015435393694/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=7879462015435393694" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7879462015435393694?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7879462015435393694?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/ZrY_iFf7UvM/why-eclipse-37-sucks.html" title="Why Eclipse Sucks 2" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-C_Sc1S_sYCE/TkPir4LlfCI/AAAAAAAAC8s/9eZYokd7sJE/s72-c/eclipseError2-791773.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2011/08/why-eclipse-37-sucks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QERn4_cCp7ImA9WhdQEEo.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-3569624925110655614</id><published>2011-08-11T07:01:00.001-07:00</published><updated>2011-08-11T07:01:47.048-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T07:01:47.048-07:00</app:edited><title>Why Eclipse Sucks</title><content type="html">&lt;p class="mobile-photo"&gt;&lt;a href="http://4.bp.blogspot.com/-kb0cAwNFq2c/TkPgy8IrAgI/AAAAAAAAC8k/EaD_JbxwClM/s1600/eclipseError-707049.png"&gt;&lt;img src="http://4.bp.blogspot.com/-kb0cAwNFq2c/TkPgy8IrAgI/AAAAAAAAC8k/EaD_JbxwClM/s320/eclipseError-707049.png"  border="0" alt="" id="BLOGGER_PHOTO_ID_5639598324138574338" /&gt;&lt;/a&gt;&lt;/p&gt;This should not be happening.&lt;br&gt;Violates some of the common sense criteria:&lt;br&gt;1) Does not indicate what the error is&lt;br&gt;2) Does not indicate how to fix it&lt;br&gt;3) Does not indicate where to go for help&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/L6Oczp1Yujc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/3569624925110655614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=3569624925110655614" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3569624925110655614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3569624925110655614?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/L6Oczp1Yujc/why-eclipse-sucks.html" title="Why Eclipse Sucks" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-kb0cAwNFq2c/TkPgy8IrAgI/AAAAAAAAC8k/EaD_JbxwClM/s72-c/eclipseError-707049.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2011/08/why-eclipse-sucks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHRHc_fip7ImA9Wx9SE0g.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-3387857232021091868</id><published>2010-12-02T20:56:00.000-08:00</published><updated>2010-12-02T21:12:15.946-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-02T21:12:15.946-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Converting Between Time Zones by Hand</title><content type="html">&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/TPh6Npq8T8I/AAAAAAAAC0M/LygoBfvjiEk/s1600/dali_memory.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="306" src="http://2.bp.blogspot.com/_qyu5MLVdruE/TPh6Npq8T8I/AAAAAAAAC0M/LygoBfvjiEk/s400/dali_memory.jpg" width="400" /&gt;&lt;/a&gt;How does one convert time between different time zones? Sounds like a simple question.&lt;br /&gt;
With the abundance of information and ready-made solutions it is sometimes hard to find the&amp;nbsp;essence&amp;nbsp;behind the solutions.&lt;br /&gt;
Try searching for "time zone conversion" in your favorite search engine, and all you get are ready made converters or programming language libraries that do the task for you.&lt;br /&gt;
But How do you actually do it? What is the process?&lt;br /&gt;
&lt;br /&gt;
Luckily &lt;a href="http://en.wikipedia.org/wiki/Time_zone#Time_zone_conversions"&gt;Wikipedia &lt;/a&gt;has an answer and it&amp;nbsp;is a rather simple solution.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Solution&lt;/span&gt;&lt;br /&gt;
Let's say we want to convert from certain time2 to time1.&lt;br /&gt;
&lt;br /&gt;
Clearly the following is true:&lt;br /&gt;
time1 - timeZone1Offset = time2 - timeZone2Offset &amp;nbsp; (1)&lt;br /&gt;
&lt;br /&gt;
since subtracting offset from the time will give you the time in UTC(or GMT), and we really want both of them to convert to the same standard time.&lt;br /&gt;
For example 8pm in GMT-1 is the same as 9pm in GMT-2:&lt;br /&gt;
20:00 - 1:00 = 19:00 = 21:00 - 2:00&lt;br /&gt;
&lt;br /&gt;
In any case, you can solve (1) &amp;nbsp;for either time1 or time2, e.g.:&lt;br /&gt;
time1 = time2 - timeZone2Offset + timeZone1Offset&lt;br /&gt;
&lt;br /&gt;
which, if we rearrange some more comes out to be:&lt;br /&gt;
time1 = time2 + timeZone1Offset&amp;nbsp;- timeZone2Offset&lt;br /&gt;
&lt;br /&gt;
and if we set quantitiy:&lt;br /&gt;
zoneDiff = timeZone1Offset&amp;nbsp;- timeZone2Offset&lt;br /&gt;
&lt;br /&gt;
we get:&lt;br /&gt;
time1 = time2 + zoneDiff&lt;br /&gt;
&lt;br /&gt;
Which is rather neat.&lt;br /&gt;
&lt;br /&gt;
PS: Of course, you must check that each part (e.g. hour, minute, seconds etc...) of the final time are not negative. Because that means it is wrapping around, so you have to subtract it from the appropriate value. For example for negative hours, you subtract it from 24, for negative minutes you subtract it from 60 etc.&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/h09y8OA0mZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/3387857232021091868/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=3387857232021091868" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3387857232021091868?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3387857232021091868?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/h09y8OA0mZM/converting-between-time-zones-by-hand.html" title="Converting Between Time Zones by Hand" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_qyu5MLVdruE/TPh6Npq8T8I/AAAAAAAAC0M/LygoBfvjiEk/s72-c/dali_memory.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/12/converting-between-time-zones-by-hand.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGQX8zfyp7ImA9Wx5aFkU.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8973131800203629976</id><published>2010-11-13T13:42:00.000-08:00</published><updated>2010-11-13T13:42:00.187-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-13T13:42:00.187-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>File dialog improvement</title><content type="html">Have you ever been confronted with a file changed dialog? Perhaps once, twice or maybe 10 times per day. If you have - you know how annoying it can get to refocus on a dialog instead of the task at hand.&lt;br /&gt;
If you use Eclipse as your programming IDE you will often see&amp;nbsp;something&amp;nbsp;like the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FFxgp47I/AAAAAAAACzo/GaKrLzg_vLY/s1600/fileChanged.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FFxgp47I/AAAAAAAACzo/GaKrLzg_vLY/s400/fileChanged.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FFxgp47I/AAAAAAAACzo/GaKrLzg_vLY/s1600/fileChanged.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&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/_qyu5MLVdruE/TN8FGfA5ZSI/AAAAAAAACzw/313iVnDAVeo/s1600/realFileChanged.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_qyu5MLVdruE/TN8FGfA5ZSI/AAAAAAAACzw/313iVnDAVeo/s1600/realFileChanged.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://3.bp.blogspot.com/_qyu5MLVdruE/TN8FGfA5ZSI/AAAAAAAACzw/313iVnDAVeo/s400/realFileChanged.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;To me it looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What about making it more intuitive?&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FGE0G66I/AAAAAAAACzs/Kml6iEpV5H0/s1600/fileChangedFinal.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FGE0G66I/AAAAAAAACzs/Kml6iEpV5H0/s400/fileChangedFinal.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/k_WccFX4CeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8973131800203629976/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8973131800203629976" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8973131800203629976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8973131800203629976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/k_WccFX4CeA/file-dialog-improvement.html" title="File dialog improvement" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_qyu5MLVdruE/TN8FFxgp47I/AAAAAAAACzo/GaKrLzg_vLY/s72-c/fileChanged.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/11/file-dialog-improvement.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCSXc6eip7ImA9Wx5bFUg.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4352012587486666162</id><published>2010-10-31T12:42:00.000-07:00</published><updated>2010-10-31T12:42:48.912-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-31T12:42:48.912-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="film" /><title>Good movie: Hereafter</title><content type="html">Don't dismiss it as another Matt Damon flick. It is not. In fact, if you like any of the Matt Damon movies - you probably will not like this one.&lt;br /&gt;
As anything directed by Clint Eastwood it is a gem. Expect slow paced, relaxing and thought provoking film. It is almost as if Eastwood is pondering the end of his own life. Eerie.&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/43N98Pky8yg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4352012587486666162/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4352012587486666162" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4352012587486666162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4352012587486666162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/43N98Pky8yg/good-movie-hereafter.html" title="Good movie: Hereafter" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/10/good-movie-hereafter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDQ3g9eip7ImA9Wx5bFUg.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8450407876728177872</id><published>2010-10-06T13:26:00.000-07:00</published><updated>2010-10-31T12:51:12.662-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-31T12:51:12.662-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="websites-that-suck" /><title>Eclipse website confusing as heck!</title><content type="html">&lt;div&gt;How do you get from here:&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_qyu5MLVdruE/TKzauQ1rinI/AAAAAAAACyU/pr8vfFbhpDM/s1600/downloads.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="1" height="320" src="http://4.bp.blogspot.com/_qyu5MLVdruE/TKzauQ1rinI/AAAAAAAACyU/pr8vfFbhpDM/s320/downloads.png" width="297" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;To here:&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_qyu5MLVdruE/TKzavZ2bsVI/AAAAAAAACyY/palEUzR3OkQ/s1600/downloadsM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="1" height="337" src="http://4.bp.blogspot.com/_qyu5MLVdruE/TKzavZ2bsVI/AAAAAAAACyY/palEUzR3OkQ/s400/downloadsM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
In other words, how in the world can you get to the latest Stream Stable Release version 3.7M2a, from the Official Eclipse website? Horrible.&lt;br /&gt;
&lt;br /&gt;
The only way I could find it, is by googling for "Eclipse m5" then going to the download link on some wierd website, and finding the eclipse download site for all releases: http://download.eclipse.org/eclipse/downloads/&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/uZw6N3fTgic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8450407876728177872/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8450407876728177872" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8450407876728177872?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8450407876728177872?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/uZw6N3fTgic/eclipse-website-confusing-as-heck.html" title="Eclipse website confusing as heck!" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_qyu5MLVdruE/TKzauQ1rinI/AAAAAAAACyU/pr8vfFbhpDM/s72-c/downloads.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/10/eclipse-website-confusing-as-heck.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRnY7cCp7ImA9Wx5TGEk.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-5620855482517769822</id><published>2010-08-03T07:53:00.000-07:00</published><updated>2010-08-03T07:53:47.808-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-03T07:53:47.808-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="websites-that-suck" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>XNA forums gets a D grade from Y-slow</title><content type="html">XNA is a great framework for&amp;nbsp;writing&amp;nbsp;games, and now recently, &lt;a href="http://en.wikipedia.org/wiki/Windows_Phone_7"&gt;Windows Phone&lt;/a&gt; applications. Unfortunately with every good microsoft product, there is always a bad side. Just like with &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Developer_Network"&gt;MSDN&lt;/a&gt; of the past, &lt;a href="http://forums.xna.com/forums/"&gt;Creators XNA Forum&lt;/a&gt;&amp;nbsp;looms over the XNA community.&lt;br /&gt;
&lt;br /&gt;
The problems with the forum are numerous. Just navigating around is sluggish, and pressing the "back" button on the browser always causes a page reload. But I really wanted to find out what the problems with the forum are. So I installed Firebug + YSlow webpage profiling utility.&lt;br /&gt;
&lt;br /&gt;
It looks like the whole thing is clearly written in ASP.NET. The dreaded&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/ASP.NET#View_state"&gt;__VIEWSTATE&lt;/a&gt;&amp;nbsp;is there - storing the whole session information client side. This indicates that the site is not using the new&amp;nbsp;&lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt;&amp;nbsp;framework, but the web-forms version of ASP.NET.&lt;br /&gt;
&lt;br /&gt;
Running YSlow on the &lt;a href="http://forums.xna.com/forums/32.aspx"&gt;general forum section&lt;/a&gt;&amp;nbsp;results in grade D.&lt;br /&gt;
&lt;br /&gt;
Some of the problems reported by YSlow are:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Make fewer HTTP requests&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Grade: F&lt;br /&gt;
This page has 8 external Javascript scripts.  Try combining them into  one.&lt;br /&gt;
This page has 3 external stylesheets.  Try combining them into  one.&lt;br /&gt;
This page has 19 external background images.  Try combining them  with CSS sprites.&lt;br /&gt;
&lt;br /&gt;
What this means is that a browser has to make 8+3+19=30 requests! What's more, is that there are 11 more content image requests, 1 content html and 1 favicon request - brining the total to 43 requests.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Add Expires headers&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Grade: F&lt;br /&gt;
There are 38 static components without a far-future expiration date.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;http://forums.xna.com/assets/css/main_Default_FF.css?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/.../xnacommunityserver_Default_FF.css?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/.../menu.css&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/assets/scripts/common.js&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/.../RadMenu.js&lt;/li&gt;
&lt;li&gt;etc...&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;What this means is that every time you reload the page, or come back to it later, the browser will request the same resources it requested before. Things like background images and javascript files, that do not change - could be simply saved on the client side without the need to fetch the again and again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Compress components with gzip&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Grade: F&lt;/div&gt;&lt;div&gt;There are 9 plain text components that should be sent compressed&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;http://forums.xna.com/forums/32.aspx&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/assets/scripts/common.js&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/.../RadMenu.js&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/assets/scripts/shellHeader.js&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/WebResource.axd?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/WebResource.axd?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/WebResource.axd?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/WebResource.axd?...&lt;/li&gt;
&lt;li&gt;http://forums.xna.com/Assets/Scripts/WebTrends.js&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;One can easily compress the data on the server side, and then decompress it on the client side. Even for small amounts of information it is often faster to compress and uncompress it, then to send it in plain text, because the internet transfer speed is much slower than the processor.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Minify JavaScript and CSS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Grade: F&lt;/div&gt;&lt;div&gt;There are 6 components that can be minified...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What minifying means is removing all&amp;nbsp;unneeded&amp;nbsp;spaces and comments from the code files. For example minifying the following css file used on the XNA forums:&lt;/div&gt;&lt;div&gt;http://forums.xna.com/assets/RadControls/Menu/Scripts/4_4_5/menu.css&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;we reduce it's size by 21%. While this is not much, when taken together over several files, it can add up to significant savings for the amount of data needed to transfer over the network. This reduces the wait time for the user and improves the web-site responsiveness.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Configure entity tags (ETags)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Grade: F&lt;/div&gt;&lt;div&gt;There are 38 components with&amp;nbsp;misconfigured&amp;nbsp;tags (ETags).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;ETags are a way of saying that the resource did not change. For example, say that the browser visits the forum the first time and finds and downloads an image Cat.png. Then the user comes back to the forum the next week, and the browser has to download the Cat.png again, say because the user is looking at the same page.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now if ETags are properly set on this image, the browser will simply send a request for "Cat.png" and recieve a reply code "304" which in HTTP terms means "Did not change". Thus the browser knows that the image is the same and it should use a locally saved copy it got a week before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;This mechanism complements the expires headers, to make for returning visits to the site much smoother, and makes the "back" button behave like users expect - snappy and quick.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;A Grades&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I only included the F grades in this post as they are the most interesting cases. This is not to say that the forum is a complete failure. The following features all got an A-grade:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Put JavaScript at bottom&lt;/li&gt;
&lt;li&gt;Avoid CSS expressions&lt;/li&gt;
&lt;li&gt;Reduce DNS lookups&lt;/li&gt;
&lt;li&gt;Avoid URL redirects&lt;/li&gt;
&lt;li&gt;Remove duplicate JavaScript and CSS&lt;/li&gt;
&lt;li&gt;Make AJAX cacheable&lt;/li&gt;
&lt;li&gt;Use GET for AJAX requests&lt;/li&gt;
&lt;li&gt;Reduce the number of DOM elements&lt;/li&gt;
&lt;li&gt;Avoid HTTP 404 (Not Found) error&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;/b&gt;Reduce cookie  size.&lt;/li&gt;
&lt;li&gt;Use cookie-free domains&lt;/li&gt;
&lt;li&gt;Avoid AlphaImageLoader filter&lt;/li&gt;
&lt;li&gt;Do not scale images in HTML&lt;/li&gt;
&lt;li&gt;Make favicon small and cacheable&lt;/li&gt;
&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In the end it is not that important what "grade" tools like YSlow give a site. They are simply a means of looking at something that is already faulty. If the XNA forums site was not sluggish in the first place, I would not have thought of running YSlow on it (except maybe to see how fast it was!).&lt;br /&gt;
&lt;br /&gt;
What is important is how users feel about the experience on the site. Unfortunately, it seems that most of the users who are Microsoft programmers are used to the sluggish experience of online resources and don't seem to mind it.&lt;br /&gt;
&lt;br /&gt;
There is no excuse for making the user experience online so horrible. What is more sad is that the web division of Microsoft is not going to help them. Just look at their &lt;a href="http://forums.asp.net/15.aspx"&gt;forums&lt;/a&gt;.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/ThhsmA8VZOA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/5620855482517769822/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=5620855482517769822" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/5620855482517769822?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/5620855482517769822?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/ThhsmA8VZOA/xna-forums-gets-d-grade-from-y-slow.html" title="XNA forums gets a D grade from Y-slow" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/08/xna-forums-gets-d-grade-from-y-slow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4MSH49cSp7ImA9WxFbGU4.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8210652900311267351</id><published>2010-07-12T04:26:00.000-07:00</published><updated>2010-07-12T04:26:29.069-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-12T04:26:29.069-07:00</app:edited><title>Gamers on Steam watching the world cup</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qyu5MLVdruE/TDr7yV4LC5I/AAAAAAAACws/m6doAIApjts/s1600/steam_worldcup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://1.bp.blogspot.com/_qyu5MLVdruE/TDr7yV4LC5I/AAAAAAAACws/m6doAIApjts/s640/steam_worldcup.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/P4qapLVpaS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8210652900311267351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8210652900311267351" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8210652900311267351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8210652900311267351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/P4qapLVpaS4/gamers-on-steam-watching-world-cup.html" title="Gamers on Steam watching the world cup" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_qyu5MLVdruE/TDr7yV4LC5I/AAAAAAAACws/m6doAIApjts/s72-c/steam_worldcup.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/07/gamers-on-steam-watching-world-cup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQXYzeyp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-3192737846685864449</id><published>2010-05-01T22:07:00.000-07:00</published><updated>2010-05-01T22:10:30.883-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-01T22:10:30.883-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>stackoverflow, stackexchange 2.0 oh my!</title><content type="html">&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;The problem&lt;/span&gt;&lt;br /&gt;
It is quite amusing, how the experts-exchange killer stackoverflow.com is becoming something similar. Ever since StackOverflow started, people wanted to make their own sites for similar Q&amp;amp;A types of sites.&lt;br /&gt;
&lt;br /&gt;
Various topics could benefit from the similarly formatted Q&amp;amp;A sites. Unfortunately the SO team has not really been very open to open-sourcing it's source code.&lt;br /&gt;
&lt;br /&gt;
First they tried to make some &lt;a href="http://www.readwriteweb.com/start/2009/10/stackoverflow-shares-its-mojo.php"&gt;bucks&lt;/a&gt; from selling it, thanks to the business mind of Joel Spolsky. However not all developers were eager to shell out $130/month for having their own little stackoverflow clone.&lt;br /&gt;
&lt;br /&gt;
So then, SO team, figured that they will never make big money by just having 4 paid sites (as that's all they managed to sell I think). What to do, what to do?&lt;br /&gt;
&lt;br /&gt;
This is where stackexchange 2.0 comes in. They together with a community (who are mostly developers) will "approve" the topics for the sites they think are worthy, and will host it themselves.&lt;br /&gt;
&lt;br /&gt;
Advanges? Ad revenue. Disadvantages? You can't really start your own. Even if your idea is great it may get downvoted by the community. After all - they are a community of developers, not say mechanics.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;The solution&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Free Django based Open Source Q&amp;amp;A system or&amp;nbsp;&lt;a href="http://www.osqa.net/"&gt;OSQA&lt;/a&gt;&amp;nbsp;for short.&lt;/div&gt;&lt;div&gt;These guys are essentially re-building stack-overflow from the ground up!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Not only is this an exiting free alternative to the SO, it is also great to see it being built on top of Django, as opposed to starting from scratch, and&amp;nbsp;encountering&amp;nbsp;all the same problems that a framework like Django already solved.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;But the project is still very young. So I encourage anyone out there, who is interested in Django, Python to check it out!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;You can &lt;a href="http://wiki.osqa.net/display/docs/Downloading+OSQA"&gt;download&lt;/a&gt; the latest release, and contribute back to the &lt;a href="http://meta.osqa.net/"&gt;community&lt;/a&gt; by posting questions, bugs or patches at &lt;a href="http://meta.osqa.net/"&gt; Meta OSQA&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/gCSG4FQKIyc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/3192737846685864449/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=3192737846685864449" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3192737846685864449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3192737846685864449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/gCSG4FQKIyc/stackoverflow-stackexchange-20-oh-my.html" title="stackoverflow, stackexchange 2.0 oh my!" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/05/stackoverflow-stackexchange-20-oh-my.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMMSXs-cSp7ImA9WxFREkw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-7412384910637732867</id><published>2010-04-25T08:48:00.000-07:00</published><updated>2010-04-25T08:48:08.559-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T08:48:08.559-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Chrome keeps crashing</title><content type="html">&lt;b&gt;ironic&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;(adj)&amp;nbsp;humorously sarcastic or mocking&lt;/li&gt;
&lt;li&gt;(adj) characterized by Chrome browser, produced by Google, crashing on Google's own web email Gmail&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/GBN6Vg785G0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/7412384910637732867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=7412384910637732867" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7412384910637732867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7412384910637732867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/GBN6Vg785G0/google-chrome-keeps-crashing.html" title="Google Chrome keeps crashing" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/04/google-chrome-keeps-crashing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQARXY8cSp7ImA9WxFSFE4.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-7915916019383107117</id><published>2010-04-16T09:43:00.000-07:00</published><updated>2010-04-16T09:45:44.879-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-16T09:45:44.879-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Installing Python 2.5 in Fedora 12 for Google App Engine</title><content type="html">This stupid install process gets me every time! How do you run Google App Engine which currently &lt;b&gt;requires&lt;/b&gt; Python2.5 on a machine that has Python2.6 installed? This also goes for anybody trying to use Django with App-Engine.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Everytime I try I get an error like this:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
File "/home/andriy/lib/google_appengine/dev_appserver.py", line 68, in &lt;module&gt;&lt;br /&gt;
run_file(__file__, globals())&lt;br /&gt;
File "/home/andriy/lib/google_appengine/dev_appserver.py", line 64, in run_file&lt;br /&gt;
execfile(script_path, globals_)&lt;br /&gt;
File "/home/andriy/lib/google_appengine/google/appengine/tools/dev_appserver_main.py", line 82, in &lt;module&gt;&lt;br /&gt;
from google.appengine.tools import appcfg&lt;br /&gt;
File "/home/andriy/lib/google_appengine/google/appengine/tools/appcfg.py", line 59, in &lt;module&gt;&lt;br /&gt;
from google.appengine.tools import appengine_rpc&lt;br /&gt;
File "/home/andriy/lib/google_appengine/google/appengine/tools/appengine_rpc.py", line 32, in &lt;module&gt;&lt;br /&gt;
https_handler = urllib2.HTTPSHandler&lt;br /&gt;
AttributeError: 'module' object has no attribute 'HTTPSHandler'&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Now some people say that you need to "compile python with ssl support". But it ain't so. There is actually nothing to &lt;b&gt;configure&lt;/b&gt; in the python install to make it include ssl. Python finds the ssl libraries automatically if they are installed. The trick is you need the dev ssl libraries.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;So here it is for my own reference:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the openssl-dev packages! Yes... you need them: sudo yum install openssl-dev*&lt;/li&gt;
&lt;li&gt;Download python2.5&lt;/li&gt;
&lt;li&gt;Configure it: ./configure&lt;/li&gt;
&lt;li&gt;Build it: sudo make&lt;/li&gt;
&lt;li&gt;Alt-install it to make it reside near your current python install: sudo make altinstall&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;p&gt;Now download App-Engine and make sure to use python2.5 command with it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/NxmZP7zSWbs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/7915916019383107117/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=7915916019383107117" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7915916019383107117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/7915916019383107117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/NxmZP7zSWbs/installing-python-25-in-fedora-12-for.html" title="Installing Python 2.5 in Fedora 12 for Google App Engine" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/04/installing-python-25-in-fedora-12-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGQ34zeCp7ImA9WxFTFEU.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4640705628177701328</id><published>2010-04-05T10:07:00.000-07:00</published><updated>2010-04-05T10:07:02.080-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-05T10:07:02.080-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><title>Multiple monitors</title><content type="html">Having recently read the&amp;nbsp;&lt;a href="http://www.codinghorror.com/blog/2010/04/three-monitors-for-every-user.html"&gt;Three Monitors For Every User&lt;/a&gt; article at coding horror blog, I started&amp;nbsp;writing&amp;nbsp;a comment in reply but decided to turn it into a post.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Multiple monitors and me&lt;/h3&gt;Personally I get distracted by working with anything more than 1 screen.&lt;br /&gt;
&lt;br /&gt;
I think anyone who ever tried working on a single 24" will not go back to 2x19", neither will you switch from single 30" to 3x20" screens.&lt;br /&gt;
&lt;br /&gt;
There are a few big problems for me with a multi monitor setup:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Brightness - there is just too much light coming from the 2 or 3 monitors. Much more than I need and my eyes get tired, having nowhere to look for rest.&lt;/li&gt;
&lt;li&gt;Interference - whenever I try to concentrate on a single screen, I am always conscious out of the corner of my eye of another screen on the side. It is always there and is very distracting (especially if it has content with bright/white colors). If there was a way to "turn-off" and turn-on the extra monitors at my whim - then perhaps it would be worth it.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Separation - there is no clean separation of "desktops" on multiple monitors. I cannot drag something to a different monitor and forget about it. My mouse always moves off my current screen and sometimes I am hunting for it by moving it around like I am playing quake 2.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;h3&gt;In the end&lt;/h3&gt;I think multiple monitors are more of a "hip" thing to have, that many people think they need. I am better of having a single large screen with multiple &lt;i&gt;software&lt;/i&gt; desktops like &lt;a href="http://library.gnome.org/users/user-guide/stable/overview-workspaces.html.en"&gt;workspaces in Gnome&lt;/a&gt; (to bad windows 7 has no built-in virtual desktops). &lt;br /&gt;
&lt;br /&gt;
Unfortunately the prices for large screens are still exponential in relation to their sizes. I am quite happy with &lt;a href="http://www.samsung.com/ca/consumer/office/monitors/lcd/LS24TWHSUV/ZA/index.idx?pagetype=prd_detail"&gt;my 24"&lt;/a&gt; but I would love to get my hands on a decent 30" - which unfortunately runs more than $1000 these days.&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/FpDIRbdi-h8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4640705628177701328/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4640705628177701328" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4640705628177701328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4640705628177701328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/FpDIRbdi-h8/multiple-monitors.html" title="Multiple monitors" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/04/multiple-monitors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUDQ3c5cSp7ImA9WxBaGEw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-5018284510649456413</id><published>2010-03-28T16:00:00.001-07:00</published><updated>2010-03-28T16:01:12.929-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-28T16:01:12.929-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="websites-that-suck" /><category scheme="http://www.blogger.com/atom/ns#" term="government" /><title>Canada Revenue Agency Fail</title><content type="html">Recently I tried to change my address through Canada Revenue Agency's website. Silly rabbit! Navigating to &lt;a href="http://www.cra-arc.gc.ca/esrvc-srvce/tx/ndvdls/myccnt/menu-eng.html" title="http://www.cra-arc.gc.ca/esrvc-srvce/tx/ndvdls/myccnt/menu-eng.html"&gt;http://www.cra-arc.gc.ca/esrvc-srvce/tx/ndvdls/myccnt/menu-eng.html&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_qyu5MLVdruE/S6_fgTPBAFI/AAAAAAAACtw/P7kPDDqN0Eo/s1600-h/cra_font%5B5%5D.jpg"&gt;&lt;img alt="cra_font" border="0" height="394" src="http://lh3.ggpht.com/_qyu5MLVdruE/S6_fg5rYpZI/AAAAAAAACt0/jdsfO4Rec4E/cra_font_thumb%5B3%5D.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="cra_font" width="334" /&gt;&lt;/a&gt; My mistake of course thinking that &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; might be supported!&lt;a href="http://lh5.ggpht.com/_qyu5MLVdruE/S6_fhVJQhXI/AAAAAAAACt4/4Cq6IY1ctGk/s1600-h/chrome%5B9%5D.jpg"&gt;&lt;img alt="chrome" border="0" height="231" src="http://lh5.ggpht.com/_qyu5MLVdruE/S6_fh0KeWaI/AAAAAAAACt8/JbQpLrj0M-g/chrome_thumb%5B7%5D.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="chrome" width="400" /&gt;&lt;/a&gt; Indeed. How about second most used browser on the planet - &lt;a href="http://www.mozilla.com/en-US/firefox/firefox.html"&gt;Firefox&lt;/a&gt;? Why of course not:&lt;a href="http://lh4.ggpht.com/_qyu5MLVdruE/S6_fiSHD08I/AAAAAAAACuA/ZsxRFqQXD7s/s1600-h/firefox%5B6%5D.jpg"&gt;&lt;img alt="firefox" border="0" height="288" src="http://lh5.ggpht.com/_qyu5MLVdruE/S6_fi9jWAjI/AAAAAAAACuE/LEz7AFcR7bo/firefox_thumb%5B4%5D.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="firefox" width="406" /&gt;&lt;/a&gt;I don’t know what kind of incompetent web-developers &lt;a href="http://www.cra-arc.gc.ca/"&gt;CRA&lt;/a&gt; hired, but even a 14-year kid could create a simple html website that allows users to enter some information WITHOUT java required.&lt;br /&gt;
I suspect that they might be relatives of the boss in the company.&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/LlK5mgI9Abs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/5018284510649456413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=5018284510649456413" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/5018284510649456413?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/5018284510649456413?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/LlK5mgI9Abs/canada-revenue-agency-fail.html" title="Canada Revenue Agency Fail" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_qyu5MLVdruE/S6_fg5rYpZI/AAAAAAAACt0/jdsfO4Rec4E/s72-c/cra_font_thumb%5B3%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/03/canada-revenue-agency-fail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8HSHg8eCp7ImA9WxBbFkU.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4630449533662565963</id><published>2010-03-15T13:09:00.000-07:00</published><updated>2010-03-15T13:10:39.670-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-15T13:10:39.670-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Gmail chat</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;My status message has a curious effect on me...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qyu5MLVdruE/S56T4IiCY5I/AAAAAAAACtQ/e7OXX30KiFA/s1600-h/invi.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://3.bp.blogspot.com/_qyu5MLVdruE/S56T4IiCY5I/AAAAAAAACtQ/e7OXX30KiFA/s200/invi.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/uvbNCcM6rkM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4630449533662565963/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4630449533662565963" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4630449533662565963?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4630449533662565963?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/uvbNCcM6rkM/gmail-chat.html" title="Gmail chat" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_qyu5MLVdruE/S56T4IiCY5I/AAAAAAAACtQ/e7OXX30KiFA/s72-c/invi.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/03/gmail-chat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICSHY5fCp7ImA9WxBbFkw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-1861944463526949396</id><published>2010-03-14T17:19:00.000-07:00</published><updated>2010-03-14T17:22:49.824-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T17:22:49.824-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="government" /><title>Canada and the saddest thing about Tax Software</title><content type="html">Every year I and everyone I know, about this time of year, start&amp;nbsp;clamoring&amp;nbsp;about preparing their tax returns. It is a painful process for many, mainly because it is both mathematically&amp;nbsp;challenging&amp;nbsp;and lengthy. Neither of which the average lazy joe is very interested in. What to do what do to?&amp;nbsp;Well, most of the people much rather plunk down around $50 and let someone else do it for them.&lt;br /&gt;
&lt;br /&gt;
However, with the advent of the tax-software, some are actually getting ready to do the taxes on their own. There are always concerns when using "software" to do something &lt;a href="http://www.youtube.com/watch?v=vzFUcDKC64E"&gt;critical&lt;/a&gt;, like your personal finances that government will make sure to scrutinize you about. Things like:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Bugs in software&lt;br /&gt;
Sometimes bugs make the software frustrating to use! However this is getting better with &lt;a href="http://www.ufile.ca/"&gt;more&lt;/a&gt; &lt;a href="http://quicktax.intuit.ca/tax-software/index.jsp"&gt;competition&lt;/a&gt; on the horizon.&lt;/li&gt;
&lt;li&gt;Crashes&lt;br /&gt;
Paper taxes never "crash", unless you are not using a pencil and eraser.&lt;/li&gt;
&lt;li&gt;Inaccurate&amp;nbsp;calculations&lt;br /&gt;
What happens when the programmer who wrote the software, misplaces a &lt;a href="http://en.wikipedia.org/wiki/Office_Space"&gt;decimal point&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;Missing features&lt;br /&gt;
What happens when some tiny little piece of required functionality is missing? You may be tempted to overlook it and submit your tax as is - only to be caught "cheating" later on.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Also, if you are like me, prefer the hassle-less Online versions of tax software you are also exposing yourself to one more bonus problem:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Privacy!&lt;br /&gt;
Some company who has hired a bunch of out-of-college programmers to add up numbers is going to have &amp;nbsp;ALL your financial history on file.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Well, well - that is quite a bad decision to make on the part of regular joe if he doesn't want any&amp;nbsp;headaches! Maybe using paper forms is the best solution after all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;The Solution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Wait a minute! Did you say paper forms?&lt;/div&gt;&lt;div&gt;One thing always bothered me about those things. I mean have you ever though about:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;How in the world does government process your paper tax forms?&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Well, I would imagine the have some people. doing something like this:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Look at your scribbly handwriting&lt;/li&gt;
&lt;li&gt;Record each line that you wrote - onto the computer&lt;/li&gt;
&lt;li&gt;Recalculate ALL of your calculations&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Do you see any redundancy there? I mean why would they take the things you already "wrote" and "re-write" them?&lt;/div&gt;&lt;div&gt;For me the most obvious elephant in the room solution is for the government to simply &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Write their own tax software!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;What would be the advantage of this approach? Well...&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Accuracy&lt;br /&gt;
Who else is going to tell you what you missed to fill out - but the government?&lt;/li&gt;
&lt;li&gt;Automatic calculations&lt;br /&gt;
Why should I use a silly calculator and make silly mistakes when computer is much more apt to do arithmetic!&lt;/li&gt;
&lt;li&gt;Immediate fraud detection&lt;br /&gt;
If something doesn't fit - they can go after you immediately!&lt;/li&gt;
&lt;li&gt;Helpful history&lt;br /&gt;
Part of the information can be automatically filled in for you.&lt;/li&gt;
&lt;li&gt;Privacy&lt;br /&gt;
Well, just about as much privacy as you are getting by filing taxes by any other means. At least, the hope is, that an average hacker Joe won't gain access to it, or your information won't be sold to the highest bidder.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Why it's not happening&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Well, well you ask. This is all great and such but why doesn't the goverment do it? Why don't they create a software package like this? Surely some things must be stopping them... For example:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;It would be a huge and expensive project to undertake.&lt;br /&gt;
Really? Paying a team of developers for 1 year to develop it is more expensive than paying hundreds, if not&amp;nbsp;thousands&amp;nbsp;employees who scan the paper forms and enter the information into computers, for 10 years? I mean realistically this could have been done 10 years ago.&lt;br /&gt;
In the extreme case - just buy one of those existing companies that do it already!&lt;/li&gt;
&lt;li&gt;It will be hard to use and not user friendly&lt;br /&gt;
Well, better make sure that it is user friendly. If it's not - I'm not voting for the party who made this project so bad.&lt;/li&gt;
&lt;li&gt;JOBS - think of all the jobs that will be lost!!! Think of the little guy who does your taxes!&lt;br /&gt;
Well, sooner or later &lt;a href="http://en.wikipedia.org/wiki/Luddite"&gt;technology&lt;/a&gt;&amp;nbsp;wins, and you have to adapt in some way. Also, I don't think that it's completely moral to make a &lt;a href="http://www.hrblock.ca/"&gt;killing&lt;/a&gt;&amp;nbsp;of this type of business.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The personal tax software and businesses have grown into an industry over the last decade. However the government, the only reason for the&amp;nbsp;taxation&amp;nbsp;itself, has no interest in it whatsoever!&lt;/div&gt;&lt;div&gt;Things like online tax software, would be trivial to implement for the government. Online systems are definitely not new to&amp;nbsp;governments. As was the case with parking tickets for example: it quickly realized that getting money from the population online is much more efficient than tying up phone lines or appeal courts.&lt;/div&gt;&lt;div&gt;When will the government implement a viable alternative to all the paid tax software out there? My guess is probably not any time soon. There seem to be some "hidden" factors holding this type of program back. What those are - we'll never know.&lt;/div&gt;&lt;div&gt;In the meantime, you are left with the usual choices: diy, hire a guy or do it online with a third party company.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Good luck!&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/vj2ZWthgAjY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/1861944463526949396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=1861944463526949396" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/1861944463526949396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/1861944463526949396?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/vj2ZWthgAjY/canada-and-saddest-thing-about-tax.html" title="Canada and the saddest thing about Tax Software" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/03/canada-and-saddest-thing-about-tax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANRHw4cSp7ImA9WxBUGUk.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-1799279649732304257</id><published>2010-03-06T21:41:00.000-08:00</published><updated>2010-03-06T21:46:35.239-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T21:46:35.239-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Debugging production Django deployment</title><content type="html">Deploying Django is a process that can drive one bananas. There are &lt;a href="http://docs.djangoproject.com/en/dev/howto/deployment/"&gt;a lot of things&lt;/a&gt; to setup to go from your development environment to the production. Aside from the regular hassles - there come special little buggers that can really make you mad. If you ever had problems with 500.html pages, url configurations or import errors - you know what I mean.&lt;br /&gt;
&lt;br /&gt;
However it doesn't all have to be that bad. There are quite a few steps you can take early on to minimize the pain. If you do get into trouble - there are some things you can do to debug out of it.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Preventative Measures&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Deploy early&lt;br /&gt;
If you want to avoid the hassle of debugging 100 things at once, deploy your project as soon as possible. By "as soon as possible" I mean right after you create it - when there are no models, views and funky url settings!&lt;/li&gt;
&lt;li&gt;Commit often&lt;br /&gt;
You are of course using &lt;a href="http://git-scm.com/"&gt;source control&lt;/a&gt; for your project, correct? By&amp;nbsp;committing often you allow for greater granularity of your project. In a way you "isolate" bugs in a particular commit. This makes finding them later on particularly easy.&lt;/li&gt;
&lt;li&gt;Deploy often&lt;br /&gt;
Same as #1 - the only way to make sure it works - is to put it out into the wild!&lt;/li&gt;
&lt;li&gt;Separate production from development.&lt;br /&gt;
You should have something like this in your settings.py file:&lt;br /&gt;
if socket.gethostname() == 'server40.online.com':&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; DEBUG = False&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; DEBUG = True&lt;br /&gt;
and feed all your other settings (i.e. database, media, etc) from this variable. This will make for painless deployment.&lt;/li&gt;
&lt;li&gt;Use dynamic path names&lt;br /&gt;
Don't just hardcode "C:\Documents" or "/home/user/app" in your settings. Don't be lazy. This is how we do it:&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))&lt;br /&gt;
&lt;br /&gt;
and then go crazy for all the other path veriables:&lt;br /&gt;
MEDIA_ROOT = os.path.join(SITE_ROOT, 'core/media')&lt;br /&gt;
TEMPLATE_DIRS = ( os.path.join(SITE_ROOT, 'core/templates') )&lt;br /&gt;
and so on...&lt;/li&gt;
&lt;li&gt;Checkout source code into production&lt;br /&gt;
Don't just copy your code to production server with FTP or SCP! Install revision control like &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; or &lt;a href="http://mercurial.selenic.com/"&gt;mercurial&lt;/a&gt; on the server, so you can hack away at the code without being afraid of messing things up, and more importantly - not loosing your important "tweaks" that you can only do in production.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Debugging the Deployed&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Check your path and full-qualify the import names&lt;br /&gt;
Make sure you python path is correct. Sometimes the modules you can see in your development - are invisible in production.&lt;br /&gt;
If your project structure is something like this:&lt;br /&gt;
/project&lt;br /&gt;
---/app&lt;br /&gt;
------- views.py&lt;br /&gt;
and you are importing your views in your urls.py files like so:&lt;br /&gt;
from app import views&lt;br /&gt;
than you might get a wierd handler500 error that makes no sense at all.&lt;br /&gt;
Either reference your modules with full qualified names, i.e. "project.app.views" or put the path to your app directory into your path: "/home/user/blah/project/app".&lt;/li&gt;
&lt;li&gt;Back up - test - roll forward&lt;br /&gt;
Sometimes you can't tell if the bug is from your latest update. Because production can keep some code in memory - one often fails to notice a bug until it is more than one update later.&lt;br /&gt;
Your first order of business should be to find the bug exactly. Figure out which "commit" added that bug into the system.&lt;br /&gt;
For this you must follow these steps:&lt;br /&gt;
a) Roll back to some point in the code where it worked&lt;br /&gt;
b) Restart your server, services etc... Make sure it works.&lt;br /&gt;
c) Roll forward to the newer revision&lt;br /&gt;
d) Restart. If everything still works - go to c).&lt;br /&gt;
e) If stuff is broken Roll back to some point before a).&lt;br /&gt;
Essentially you are doing a "binary" search on your commit history to isolate the bug. If you are using git &amp;nbsp;- you can automate this process with &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html"&gt;git-bisect&lt;/a&gt;.&lt;br /&gt;
Once you find the offending commit - roll your code to the revision before it, and start by copying by hand the code from the offending revision.&lt;br /&gt;
Hopefully because you kept your commits small, it should not be too long before you find the bug!&lt;/li&gt;
&lt;li&gt;90% it's urls and imports&lt;br /&gt;
Most likely you screwed up your imports or urls. Check them over.&lt;/li&gt;
&lt;li&gt;The other 10% it's your 500.html and 404.html&lt;br /&gt;
Did you create your 500.html and 404.html pages in your templates directory? The production environment won't work without them.&lt;/li&gt;
&lt;li&gt;User postgresql_psycopg2 and not postgresql&lt;br /&gt;
This is more of a tip than debugging technique, but one often confuses the two. The new psycopg is termed psycopg2 and so we must use postgresql_psycopg2 for our database engine setting.&lt;/li&gt;
&lt;li&gt;Set DEBUG to True on production&lt;br /&gt;
Just below your logic which determines your DEBUG variable, overwrite it temporarily with true.&lt;br /&gt;
if blah..&lt;br /&gt;
&amp;nbsp;&amp;nbsp; DEBUG = True&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; DEBUG = False&lt;br /&gt;
DEBUG = True # Overwrite temporarily&lt;br /&gt;
&lt;br /&gt;
This is a real hack, but it can temporarily give you some great insight into the problem.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;In the end if you try to keep the "production" on your mind from the start, your deployment should be not a problem. Because one does not deploy very often, one tends to forget all the mistakes that were made previously. This makes it really&amp;nbsp;challenging&amp;nbsp;to get it "right" every time. Some time is spent going over the error logs and figuring out the same problems. However we cannot solve this. It will always be like so.&lt;br /&gt;
The best thing you can do is prepare for this process ahead of time - and once there, have effective ways of dealing with it.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/fRrQRSU95-8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/1799279649732304257/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=1799279649732304257" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/1799279649732304257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/1799279649732304257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/fRrQRSU95-8/debugging-production-django-deployment.html" title="Debugging production Django deployment" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/03/debugging-production-django-deployment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEGRnY8eSp7ImA9WxBUE0Q.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8880671088577140938</id><published>2010-02-28T13:37:00.000-08:00</published><updated>2010-02-28T13:47:07.871-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-28T13:47:07.871-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="websites-that-suck" /><title>Websites that suck: Futureshop.ca</title><content type="html">Today I'll be starting a new series of posts called "websites-that-suck".&lt;br /&gt;
Now in order for a website to suck it has to simply be:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Non-functional&lt;/li&gt;
&lt;li&gt;Confusing&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;The nominee of the day: Futureshop website!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. Non-functional&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Let's see. When you try and place an order online and check it's status you get:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qyu5MLVdruE/S4reqISUcuI/AAAAAAAACso/wsFG4QPuLkE/s1600-h/acc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="http://1.bp.blogspot.com/_qyu5MLVdruE/S4reqISUcuI/AAAAAAAACso/wsFG4QPuLkE/s640/acc.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Great! Now let's try to cancel and order:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/S4rexV_MyNI/AAAAAAAACsw/zwmK7uIjosY/s1600-h/error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="323" src="http://2.bp.blogspot.com/_qyu5MLVdruE/S4rexV_MyNI/AAAAAAAACsw/zwmK7uIjosY/s640/error.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Yes! At least I know that there is an error in English AND French. What would I do without the french translation? Probably the same thing as without it - stare at the stupid error and do nothing!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;2. Confusing&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now we come to the second criteria: "confusability". When one opens Futureshop site we can see a clown trying to help you by encouraging to you "ask a question":&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qyu5MLVdruE/S4rflwnfrYI/AAAAAAAACs4/tDBjM60Uqok/s1600-h/search.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="483" src="http://3.bp.blogspot.com/_qyu5MLVdruE/S4rflwnfrYI/AAAAAAAACs4/tDBjM60Uqok/s640/search.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Every time I come to the site and I want to search for something, I always end up typing my search terms into the "Your question here" box. How many damn search boxes can there be???&lt;/div&gt;&lt;div&gt;Here Futureshop - let me fix it for you:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_qyu5MLVdruE/S4rgw2Q0idI/AAAAAAAACtA/JCL48oVJ1RE/s1600-h/search_new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="484" src="http://4.bp.blogspot.com/_qyu5MLVdruE/S4rgw2Q0idI/AAAAAAAACtA/JCL48oVJ1RE/s640/search_new.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Futureshop website "sucks" because most of their effort is spent on "bling" and "blang" and not on content or ease of use. Granted - not everything is bad. The good features are: search that actually works if you figure out how to do it, helpful customer reviews (not sure how reliable or "unabiased" they are) and product specs right on the site (even though some specifications - especially for notebooks are completely wrong).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now one can easily fix the layouts and most of the usability issues, however the funcionality with "ordering" products online is fundamentally flawed. If you are thinking of shopping online - don't. Not only is the ordering &amp;nbsp;plagued by errors, but it also performs POST request at every step, making the use of the browser BACK button completely impossible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;In the end - it boggles one's mind how a "computer" shop's website can be so bad and suck so much.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Futureshop made it to the&amp;nbsp;&lt;a href="http://www.matthewbirks.com/canadas-50-worst-websites/"&gt;CANADA'S 50 WORST WEBSITES&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/QN6x-_ZOWAA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8880671088577140938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8880671088577140938" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8880671088577140938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8880671088577140938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/QN6x-_ZOWAA/websites-that-suck-futureshopca.html" title="Websites that suck: Futureshop.ca" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_qyu5MLVdruE/S4reqISUcuI/AAAAAAAACso/wsFG4QPuLkE/s72-c/acc.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/websites-that-suck-futureshopca.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkADSXw4cCp7ImA9WxBWGUQ.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4739703643739448748</id><published>2010-02-12T08:06:00.001-08:00</published><updated>2010-02-12T08:06:18.238-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T08:06:18.238-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Comparing times in Ruby</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Did you know that Ruby stores time as the amount elapsed since 1969's New Year?&lt;br/&gt;&lt;font face='monospace'&gt;&amp;gt; irb&lt;br/&gt;&amp;gt; Time.at(0)&lt;br/&gt;Wed Dec 31 18:00:00 CST 1969&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;Recently I looked at an interesting problem in Ruby. It had to do with comparing two Time objects. Given two time objects, say time_1 and time_2 you want to see which one occurs at a later time.&lt;br/&gt;The problem is that they can be of different dates, e.g.:&lt;br/&gt;&lt;font face='monospace'&gt;&lt;br/&gt;&amp;gt; &lt;/font&gt;&lt;font face='monospace'&gt;time_1  # 6 PM on Dec 31&lt;br/&gt;=&amp;gt; Wed Dec 31 18:00:00 CST 1969&lt;br/&gt;&amp;gt; time_2 # 7 PM on Dec 30&lt;br/&gt;&lt;/font&gt;&lt;font face='monospace'&gt;=&amp;gt; Tue Dec 30 19:00:00 CST 1969&lt;br/&gt;&lt;/font&gt;&lt;div class='zemanta-pixie'&gt;&lt;font face='monospace'&gt;&amp;gt; (time_1 &amp;lt; time_2)&lt;br/&gt;=&amp;gt; false&lt;/font&gt;&lt;br/&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=1e65d57d-6fb8-817c-8dd5-ee0e756e94db' alt='' class='zemanta-pixie-img'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;Solutions&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;There are many ways to go about this problem. One of which uses a &lt;a href='http://ruby-doc.org/core/classes/Time.html#M000305'&gt;Time.parse&lt;/a&gt; function to extract time from both time objects and equate the date. Something like this:&lt;br/&gt;&lt;br/&gt;&lt;font face='monospace'&gt;&amp;gt; norm_date = Date.today&lt;br/&gt;&amp;gt; parsed1 = Time.parse("#{norm_date} #{time_1.strftime "%H:%M:%S"}")&lt;br/&gt;&amp;gt; parsed2 = Time.parse("#{norm_date} #{time_2.strftime "%H:%M:%S"}")&lt;br/&gt;&amp;gt; parsed1 &amp;lt; parsed2&lt;br/&gt;=&amp;gt; true&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;However this solution resorts to string manipulation.&lt;br/&gt;An alternative is to use a function &lt;a href='http://ruby-doc.org/core/classes/Time.html#M000251'&gt;Time.at&lt;/a&gt; which basically takes a number of seconds and returns a time object.&lt;br/&gt;So we can do the following:&lt;br/&gt;&lt;br/&gt;&lt;font face='monospace'&gt;&amp;gt; conv1 = Time.at(time_1.hour * 60 * 60 + time_1.min * 60 + time_1.sec)&lt;br/&gt;&amp;gt; conv2 = Time.at(time_2.hour * 60 * 60 + time_2.min * 60 + time_2.sec)&lt;/font&gt;&lt;br/&gt;&amp;gt; (conv1 &amp;lt; conv 2)&lt;br/&gt;=&amp;gt; true&lt;br/&gt;&lt;br/&gt;It might seem like this does not make much difference, so I decided to run a little test.&lt;br/&gt;Do each conversion 5000 times and see how long it takes.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;Results&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;Here are the results:&lt;br/&gt;&lt;br/&gt;&lt;font face='monospace'&gt;&amp;gt; ruby time.rb&lt;br/&gt;0.016277&lt;br/&gt;2.704446&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;That is over 150 times difference in speed. Can you guess which method is which?&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;Conclusion&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;If comparing times in Ruby use Time.at function to normalize your times and than do a comparison. Strings are slow. In Ruby or any other language. If one can resort to integer arithmetic - it goes much faster and less error prone.&lt;br/&gt;Also I learned that python does times in a more sensible manner than Ruby:&lt;br/&gt;&lt;br/&gt;&lt;font face='monospace'&gt;&amp;gt; python&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t1&lt;br/&gt;datetime.time(18, 0)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; t2&lt;br/&gt;datetime.time(19, 0)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (t1 &amp;lt; t2)&lt;br/&gt;True&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;P.S.&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;What is the equivalent of dir() python function in Ruby?&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;Source code&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;&lt;br/&gt;&lt;font face='monospace'&gt;# Compare Time.at method to the Time.parse&lt;br/&gt;# by converting two time objects and comparing them&lt;br/&gt;require 'time'&lt;br/&gt;require 'date'&lt;br/&gt;t1 = Time.now + 12&lt;br/&gt;t2 = t1 + 13&lt;br/&gt;&lt;br/&gt;LOOPS = 5000&lt;br/&gt;int_time = Time.now&lt;br/&gt;(1..LOOPS).each do |i|&lt;br/&gt;    # Standartize the times&lt;br/&gt;    conv1 = Time.at(t1.hour * 60 * 60 + t1.min * 60 + t1.sec)&lt;br/&gt;    conv2 = Time.at(t2.hour * 60 * 60 + t2.min * 60 + t2.sec)&lt;br/&gt;&lt;br/&gt;    if conv1 &amp;lt; conv2 then&lt;br/&gt;    end&lt;br/&gt;end&lt;br/&gt;int_end = Time.now&lt;br/&gt;int_time = int_end - int_time&lt;br/&gt;puts int_time&lt;br/&gt;&lt;br/&gt;parsed_begin = Time.now&lt;br/&gt;(1..LOOPS).each do |i|&lt;br/&gt;    # Standardize the times&lt;br/&gt;    parsed1 = Time.parse("#{Date.today} #{t1.strftime "%H:%M:%S"}")&lt;br/&gt;    parsed2 = Time.parse("#{Date.today} #{t2.strftime "%H:%M:%S"}")&lt;br/&gt;&lt;br/&gt;    if parsed1 &amp;lt; parsed2 then&lt;br/&gt;    end&lt;br/&gt;end&lt;br/&gt;parsed_end = Time.now&lt;br/&gt;parsed_time = parsed_end - parsed_begin&lt;br/&gt;puts parsed_time&lt;/font&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/qO5MPLzuoKM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4739703643739448748/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4739703643739448748" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4739703643739448748?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4739703643739448748?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/qO5MPLzuoKM/comparing-times-in-ruby.html" title="Comparing times in Ruby" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/comparing-times-in-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkECQHk9fip7ImA9WxBWGEQ.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-8723606298831783818</id><published>2010-02-11T06:28:00.000-08:00</published><updated>2010-02-11T06:31:01.766-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T06:31:01.766-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Python 2.6 - an orphan child</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;The current dominating version of python is 2.5. Most of the frameworks and vendors have comfortably settled on 2.5. Some of the upcoming technologies will support Python 3 exclusively. That leaves our old friend Python 2.6 out in the cold.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;b&gt;The situation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Python 2.6 - it is really not worth the effort to support it. I mean if you start breaking your code and such, you might as well upgrade to Python 3.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;b&gt;The problem&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Python 2.6 provides a lot of nice features over Python 2.5 ("except as" is my personal favorite). A lost of the libraries are standardized (e.g. json over simplejson) and improved in terms of performance.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;However - it is not backward compatible to 2.5. The version difference of 0.1 makes it very easy to start using Python 2.6 for everything only to realize at the end that one has to &lt;a href="http://forum.webfaction.com/viewtopic.php?pid=9341"&gt;regress&lt;/a&gt; to 2.5 for production.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;b&gt;The solution&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Either stick with python 2.5 or stick with python 2.5.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;It seems that in quest of progress, and by splitting their core language into three, Python community has went against one of it's core principles: "Simple is better than complex". After all if your application uses components all of which might require different versions of Python (e.g. django, apache, mysql) you suddenly find yourself in the position of the "System administrator" instead of a programmer. In this respect, even &lt;a href="http://drozdyuk.blogspot.com/2010/01/number-one-reason-why-java-absolutely.html"&gt;Java&lt;/a&gt; is easier!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/IklbGVocP4w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/8723606298831783818/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=8723606298831783818" title="22 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8723606298831783818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/8723606298831783818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/IklbGVocP4w/python-26-orphan-child.html" title="Python 2.6 - an orphan child" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>22</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/python-26-orphan-child.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEANRXYycCp7ImA9WxBbFkw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4000901694340091978</id><published>2010-02-10T19:54:00.000-08:00</published><updated>2010-03-14T17:26:34.898-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T17:26:34.898-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>What Firefox learned from windows: Restart!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_qyu5MLVdruE/S3N_Mp9-8CI/AAAAAAAACpU/7qOs8cMLpAg/s1600-h/windows-xp-automatic-restart.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://2.bp.blogspot.com/_qyu5MLVdruE/S3N_Mp9-8CI/AAAAAAAACpU/7qOs8cMLpAg/s400/windows-xp-automatic-restart.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_qyu5MLVdruE/S3N_QGJKGRI/AAAAAAAACpc/Ht0xkoPqwME/s1600-h/firefox-auto-update-02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="355" src="http://4.bp.blogspot.com/_qyu5MLVdruE/S3N_QGJKGRI/AAAAAAAACpc/Ht0xkoPqwME/s400/firefox-auto-update-02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/-SH57SbyQ-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4000901694340091978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4000901694340091978" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4000901694340091978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4000901694340091978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/-SH57SbyQ-o/what-firefox-learned-from-windows.html" title="What Firefox learned from windows: Restart!" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_qyu5MLVdruE/S3N_Mp9-8CI/AAAAAAAACpU/7qOs8cMLpAg/s72-c/windows-xp-automatic-restart.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/what-firefox-learned-from-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8EQXw7eip7ImA9WxBbFkw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-3804208049189221397</id><published>2010-02-10T19:24:00.000-08:00</published><updated>2010-03-14T17:26:40.202-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T17:26:40.202-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Designing Java If statement</title><content type="html">We want to have something that says "if &lt;em&gt;condition is true&lt;/em&gt; then do &lt;em&gt;some-thing&lt;/em&gt;, else do &lt;em&gt;another-thing&lt;/em&gt;". How should we design it?"&lt;br /&gt;
&lt;strong&gt;Attempt #1&lt;/strong&gt;:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
if EXPRESSION STATEMENTS else STATEMENTS&lt;/code&gt;&lt;br /&gt;
Hm... this leaves us with the &lt;a href="http://en.wikipedia.org/wiki/Dangling_else"&gt;dangling else&lt;/a&gt; problem. How about:&lt;br /&gt;
&lt;strong&gt;Attempt #2&lt;/strong&gt;:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
if EXPRESSION { STATEMENTS } else { STATEMENTS }&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Better. But I think &lt;em&gt;if&lt;/em&gt; looks pretty lonely, let's add some parenthesis:&lt;br /&gt;
&lt;strong&gt;Attempt #3&lt;/strong&gt;:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
if (EXPRESSION) { STATEMENTS } else { STATEMENTS }&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Perfect!&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/hICltVG1Q50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/3804208049189221397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=3804208049189221397" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3804208049189221397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/3804208049189221397?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/hICltVG1Q50/designing-java-if-statement.html" title="Designing Java If statement" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/designing-java-if-statement.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8ERHk4fSp7ImA9WxBbFkw.&quot;"><id>tag:blogger.com,1999:blog-7446841198555618766.post-4075140100347722120</id><published>2010-02-10T19:04:00.000-08:00</published><updated>2010-03-14T17:26:45.735-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T17:26:45.735-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Web application browser compatibility</title><content type="html">&lt;h4&gt;Web application requirements&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Firefox 2 or IE 7&lt;/li&gt;
&lt;/ol&gt;&lt;h4&gt;Desktop application requirements&lt;/h4&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Windows Vista, SP2&lt;/li&gt;
&lt;li&gt;.NET runtime 2.0&lt;/li&gt;
&lt;li&gt;Visual C++ runtime&lt;/li&gt;
&lt;li&gt;Ability to enjoy exotic user experiences&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AndriyDrozdyuk/~4/axOzWR4bYUo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://drozdyuk.blogspot.com/feeds/4075140100347722120/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7446841198555618766&amp;postID=4075140100347722120" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4075140100347722120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7446841198555618766/posts/default/4075140100347722120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndriyDrozdyuk/~3/axOzWR4bYUo/web-application-browser-compatibility.html" title="Web application browser compatibility" /><author><name>Andriy Drozdyuk</name><uri>https://plus.google.com/109068953836442764324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uDpPo9tfgAw/AAAAAAAAAAI/AAAAAAAAECU/k9fKuTa7CyQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://drozdyuk.blogspot.com/2010/02/web-application-browser-compatibility.html</feedburner:origLink></entry></feed>
