<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-935270342438133864</id><updated>2012-01-13T02:41:41.354-08:00</updated><category term='pydev'/><category term='fastcgi'/><category term='lighttpd'/><category term='mysql'/><category term='webdesign'/><category term='django-admin'/><category term='python2.5'/><category term='django'/><category term='wordpress'/><category term='chrome'/><category term='batch'/><category term='idle semanticweb'/><category term='wpf codesnippet'/><category term='css'/><category term='python'/><category term='wpf'/><category term='winapi'/><category term='html'/><category term='flup'/><category term='debian'/><category term='chromium'/><category term='forms'/><category term='windows'/><category term='glass'/><category term='.net'/><category term='windows7'/><category term='eclipse'/><category term='inkscape'/><category term='rant'/><category term='mysqldb'/><category term='aero'/><title type='text'>Ciantic's testing blog</title><subtitle type='html'>It is very likely that I will not post here.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-86736245674642769</id><published>2012-01-13T02:41:00.000-08:00</published><updated>2012-01-13T02:41:41.361-08:00</updated><title type='text'>iPad &amp; iPhone targetting</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;pre&gt;/* iPad [portrait + landscape] */&lt;br /&gt;@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {&lt;br /&gt; .selector-01 { margin: 10px; }&lt;br /&gt; .selector-02 { margin: 10px; }&lt;br /&gt; .selector-03 { margin: 10px; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* iPhone [portrait + landscape] */&lt;br /&gt;@media only screen and (max-device-width: 480px) {&lt;br /&gt; .selector-01 { margin: 10px; }&lt;br /&gt; .selector-02 { margin: 10px; }&lt;br /&gt; .selector-03 { margin: 10px; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* == iPad/iPhone [portrait + landscape] == */&lt;br /&gt;@media only screen and (min-device-width: 768px) and (max-device-width: 1024px), &lt;br /&gt;@media only screen and (max-device-width: 480px) {&lt;br /&gt; .selector-01 { margin: 10px; }&lt;br /&gt; .selector-02 { margin: 10px; }&lt;br /&gt; .selector-03 { margin: 10px; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Stolen from &lt;a href="http://perishablepress.com/press/2010/10/20/target-iphone-and-ipad-with-css3-media-queries/"&gt;Preishablepress&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-86736245674642769?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/86736245674642769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=86736245674642769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/86736245674642769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/86736245674642769'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2012/01/ipad-iphone-targetting.html' title='iPad &amp; iPhone targetting'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-6890088584287682096</id><published>2011-10-21T11:07:00.000-07:00</published><updated>2011-10-21T11:17:11.904-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Sticky Footer &amp; Variable Height - modern CSS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b style="text-align: -webkit-auto;"&gt;Copy &amp;amp; Pasted&lt;/b&gt; from&amp;nbsp;&lt;a href="http://pixelsvsbytes.com/blog/2011/09/sticky-footers-the-flexible-way/" rel="nofollow"&gt;http://pixelsvsbytes.com/blog/2011/09/sticky-footers-the-flexible-way/&lt;/a&gt;&lt;span class="Apple-style-span" style="text-align: -webkit-auto;"&gt;&amp;nbsp;Page was down for me, so salvaged this from Bing search cache (Google cache didn't have):&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;-- cut --&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; All we have to do now is to put our CSS and HTML code together. Fortunately we can use the &lt;code&gt;body&lt;/code&gt; element as .Frame, so there is no need for an extra &lt;code&gt;div&lt;/code&gt; tag or so.&lt;/p&gt;&lt;pre&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html, body {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; height: 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; margin: 0pt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Frame {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; display: table;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; height: 100%;&lt;br /&gt;             width: 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Row {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; display: table-row;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Row.Expand {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; height: 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body class="Frame"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;header class="Row"&amp;gt;&amp;lt;h1&amp;gt;Catchy header&amp;lt;/h1&amp;gt;&amp;lt;/header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section&amp;nbsp;class="Row Expand"&amp;gt;&amp;lt;h2&amp;gt;Awesome content&amp;lt;/h2&amp;gt;&amp;lt;/section&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;footer&amp;nbsp;class="Row"&amp;gt;&amp;lt;h3&amp;gt;Sticky footer&amp;lt;/h3&amp;gt;&amp;lt;/footer&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Remember to include the &lt;a href="http://code.google.com/p/html5shiv/"&gt;html5shiv&lt;/a&gt; workaround in your page (and define appropriate CSS styles) if you want to use HTML5 tags in IE8 and below. Or simply use &lt;code&gt;div&lt;/code&gt; tags instead of &lt;code&gt;header&lt;/code&gt;, &lt;code&gt;section&lt;/code&gt; and &lt;code&gt;footer&lt;/code&gt;.&lt;/p&gt;&lt;h1&gt;A word on older browsers&lt;/h1&gt;&lt;p&gt;The code above will work even with older versions of Firefox, Opera and Safari, so there is nothing to worry about here, but unfortunately Internet Explorer 7 and below don’t know anything about &lt;code&gt;display:table&lt;/code&gt; or &lt;code&gt;display:table-row&lt;/code&gt;, so we go the way of graceful degradation here.&lt;/p&gt;&lt;p&gt;The first thing we have to to is, to prevent the margins of elements inside the row from being outside of it, by adding &lt;code&gt;overflow:hidden&lt;/code&gt; to the &lt;code&gt;.Row&lt;/code&gt; style.&lt;/p&gt;&lt;p&gt;That gives us quite acceptable results, but the footer will always be outside of the window due to the 100% height of the &lt;code&gt;.Frame&lt;/code&gt; and the &lt;code&gt;.Row&lt;/code&gt;. The solution is to set &lt;code&gt;height:100%&lt;/code&gt; in a way that all Internet Explorer versions below 8 won’t recognize. I’m using the (valid) &lt;code&gt;html&amp;gt;/**/body&lt;/code&gt; CSS hack to accomplish this, but you might also use conditional comments if you feel better that way. However, here is the fixed CSS:&lt;/p&gt;&lt;pre&gt;.Frame {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;display: table;&lt;br /&gt;    width: 100%;&lt;br /&gt;}&lt;br /&gt;html&amp;gt;/**/body .Frame {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;height: 100%;&lt;br /&gt;}&lt;br /&gt;.Row {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;display: table-row;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;overflow: hidden;&lt;br /&gt;}&lt;br /&gt;html&amp;gt;/**/body .Row.Expand {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;height: 100%;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;I guess it shouldn’t be too complicated to create a sticky footer by adjusting the height of &lt;code&gt;.Row.Expand&lt;/code&gt; with some little Javascript.&lt;/p&gt;&lt;/blockquote&gt;-- paste --&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-6890088584287682096?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/6890088584287682096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=6890088584287682096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/6890088584287682096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/6890088584287682096'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2011/10/sticky-footer-variable-height-modern.html' title='Sticky Footer &amp; Variable Height - modern CSS'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-7182551436360319713</id><published>2011-09-27T09:43:00.000-07:00</published><updated>2011-09-27T09:47:42.738-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wordpress'/><title type='text'>WP: Turn Off Comments / Ping Backs by Default from Pages</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Turn Off Comments / Ping Backs by Default from Pages&lt;br /&gt;&lt;br /&gt;Themes &lt;b&gt;functions.php&lt;/b&gt; or &lt;b&gt;yourplugin.php&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;// This is valid hack as long as "wp-admin/includes/post.php"&lt;br /&gt;// `get_default_post_to_edit()` keeps calling `apply_filter()` for &lt;br /&gt;// `default_content` *after* `comment_status` and `ping_status` setting.&lt;/pre&gt;&lt;pre&gt;function my_disable_pages_default_commenting($content, $post) {&lt;br /&gt;    if ($post-&amp;gt;post_type == 'page') {&lt;br /&gt;        $post-&amp;gt;comment_status = "closed";&lt;br /&gt;        $post-&amp;gt;ping_status = "closed";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $content;&lt;br /&gt;}&lt;br /&gt;add_filter('default_content', 'my_disable_pages_default_commenting', 1, 2);&lt;/pre&gt;&lt;br /&gt;Snippet above turns off the check boxes only from &lt;i&gt;New Pages&lt;/i&gt;, any existing pages must be unchecked manually.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-7182551436360319713?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/7182551436360319713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=7182551436360319713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7182551436360319713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7182551436360319713'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2011/09/wp-turn-off-comments-ping-backs-by.html' title='WP: Turn Off Comments / Ping Backs by Default from Pages'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-8093023320124071147</id><published>2011-09-23T05:37:00.000-07:00</published><updated>2011-09-24T01:16:29.329-07:00</updated><title type='text'>Duplicate All Pages (in-place) in Acrobat X</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This is just a small JavaScript extension to &lt;i&gt;Acrobat X&lt;/i&gt; that allowes to Duplicate all pages &lt;i&gt;in-place&lt;/i&gt; there exists another version which used extractPages and I didn't like that behavior so I wrote own.&lt;br /&gt;&lt;br /&gt;First &lt;i&gt;elevate privileges&lt;/i&gt; of the JavaScript programs:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Right click on document, and choose "Page Display Preferences"&lt;/li&gt;&lt;li&gt;Choose "JavaScript" from the left.&lt;/li&gt;&lt;li&gt;Check the "Enable menu items JavaScript execution privileges".&lt;/li&gt;&lt;/ol&gt;Secondly save following snippet as &lt;b&gt;duplicate.js&lt;/b&gt; to the &lt;code&gt;%appdata%\Adobe\Acrobat\10.0\JavaScripts&lt;/code&gt; folder:&lt;br /&gt;&lt;pre&gt;app.addMenuItem({&lt;br /&gt;        cExec: "duplicatePagesInPlace();",&lt;br /&gt;        cParent: "Edit",&lt;br /&gt;        cName: "Duplicate all pages (in-place)"&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;function duplicatePagesInPlace() {&lt;br /&gt;    var doc = this,&lt;br /&gt;        pages = this.numPages;&lt;br /&gt;    for (var i = pages - 1; i &gt;= 0; i--) {&lt;br /&gt;        doc.insertPages({ &lt;br /&gt;            cPath: doc.path, &lt;br /&gt;            nStart : i, &lt;br /&gt;            nEnd : i,&lt;br /&gt;            nPage : i&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you should be able to access the "Duplicate all pages (in-place)" under "Edit" menu item. If you can't see the item remember to restart Acrobat.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-8093023320124071147?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/8093023320124071147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=8093023320124071147' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/8093023320124071147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/8093023320124071147'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2011/09/duplicate-all-pages-in-acrobat-x.html' title='Duplicate All Pages (in-place) in Acrobat X'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-4862078510917309485</id><published>2011-07-30T07:53:00.000-07:00</published><updated>2011-07-30T07:53:15.195-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><title type='text'>Windows 7 - Photo Viewer was really slow</title><content type='html'>&lt;i&gt;Windows 7 Photo Viewer&lt;/i&gt; was acting really slow for loading images, this fixed it:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;i&gt;Color management&lt;/i&gt; (Desktop -&amp;gt; Screen Resolution -&amp;gt; Advanced Settings -&amp;gt; Color Management -&amp;gt; Color Management -&amp;gt; Advanced (tab) -&amp;gt; Change System Defaults)&lt;/li&gt;&lt;li&gt;Remove all profiles from all screens, and add single profile per display. (I chose &lt;i&gt;sRGB virtual device mode profile.)&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Check the colors in Photo Viewer if the colors are fine then you chose good profile.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;That did the trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-4862078510917309485?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/4862078510917309485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=4862078510917309485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4862078510917309485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4862078510917309485'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2011/07/windows-7-photo-viewer-was-really-slow.html' title='Windows 7 - Photo Viewer was really slow'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-973933331985860485</id><published>2011-01-22T11:17:00.000-08:00</published><updated>2011-01-22T11:17:53.300-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='pydev'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Where Django &amp; PyDev fails</title><content type='html'>Don't get me wrong, I like Python, PyDev and Django. But I simply hate the &lt;i&gt;small problems&lt;/i&gt;&amp;nbsp;like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_G-OW5TgcJUY/TTso_e8w5XI/AAAAAAAAAHc/b6g5c2UiADI/s1600/always-helpful-tip.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_G-OW5TgcJUY/TTso_e8w5XI/AAAAAAAAAHc/b6g5c2UiADI/s1600/always-helpful-tip.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I forget something simple, like what was the order of return tuple of &lt;code&gt;get_or_create&lt;/code&gt;? Then I try to look the tip of the function, and what do I get? The useless &lt;code&gt;**kwargs&lt;/code&gt; passing.&lt;br /&gt;&lt;br /&gt;Same thing with the god damned exception handling. I don't think I've seen any official package that lists the exceptions given function may rise. All functions should have a&amp;nbsp;&lt;i&gt;good&lt;/i&gt;&amp;nbsp;doc-strings that lists parameters, exceptions (including nested) and in case the return value is tuple or something non&amp;nbsp;obvious&amp;nbsp;the order of items in tuple.&lt;br /&gt;&lt;br /&gt;Simply, it takes ages to open up the webpage, and browse to right place of docs. There exists a fix, but PyDev does not support it. It's the &lt;a href="http://docs.djangoproject.com/en/dev/_objects/"&gt;official objects.inv for Django&lt;/a&gt; (sphinx mapping file from keyword to URI).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-973933331985860485?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/973933331985860485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=973933331985860485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/973933331985860485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/973933331985860485'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2011/01/where-django-pydev-fails.html' title='Where Django &amp; PyDev fails'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_G-OW5TgcJUY/TTso_e8w5XI/AAAAAAAAAHc/b6g5c2UiADI/s72-c/always-helpful-tip.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-4036070312783155018</id><published>2010-12-12T06:10:00.000-08:00</published><updated>2011-01-06T06:17:00.716-08:00</updated><title type='text'>Windows 7 - QoS Policies not working</title><content type='html'>I've noticed that QoS Policies does not work in Windows 7.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution&lt;/b&gt; (thanks to &lt;a href="http://forums.speedguide.net/showthread.php?274421-Windows-7-resets-DiffServ-(DSCP)-to-0x00&amp;amp;p=2375165#post2375165"&gt;xedoc in speedguide.net&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\QoS]&lt;br /&gt;"Do not use NLA"="1"&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;I configure them using "Group Policy Manager", followingly:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_G-OW5TgcJUY/TQTWR62nLsI/AAAAAAAAAHI/iHbjMiqxs1A/s1600/ssh_group_policy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_G-OW5TgcJUY/TQTWR62nLsI/AAAAAAAAAHI/iHbjMiqxs1A/s1600/ssh_group_policy.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And capturing using &lt;a href="http://www.wireshark.org/"&gt;WireShark&lt;/a&gt; like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_G-OW5TgcJUY/TQTXOllDZuI/AAAAAAAAAHQ/9pDUwSoBYwE/s1600/ssh_capture.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_G-OW5TgcJUY/TQTXOllDZuI/AAAAAAAAAHQ/9pDUwSoBYwE/s1600/ssh_capture.jpg" /&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 class="separator" style="clear: both; text-align: left;"&gt;More about this in: &lt;a href="http://ask.wireshark.org/questions/1188/why-is-dscp-always-0-on-windows-7"&gt;Wireshark Ask Forum&lt;/a&gt;, &amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/dd919203(WS.10).aspx"&gt;MSDN QoS Policy&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-4036070312783155018?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/4036070312783155018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=4036070312783155018' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4036070312783155018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4036070312783155018'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/12/windows-7-qos-policies-not-working.html' title='Windows 7 - QoS Policies not working'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_G-OW5TgcJUY/TQTWR62nLsI/AAAAAAAAAHI/iHbjMiqxs1A/s72-c/ssh_group_policy.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-2837833276118735608</id><published>2010-10-21T12:59:00.000-07:00</published><updated>2010-11-12T04:18:36.203-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='batch'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Basename, Filename, Dirname in Batch</title><content type='html'>Umm, batch scripts sucks, but here goes:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;set filepath="C:\some path\having spaces.txt"&lt;br /&gt;&lt;br /&gt;for /F "delims=" %%i in (%filepath%) do set dirname="%%~dpi" &lt;br /&gt;for /F "delims=" %%i in (%filepath%) do set filename="%%~nxi"&lt;br /&gt;for /F "delims=" %%i in (%filepath%) do set basename="%%~ni"&lt;br /&gt;&lt;br /&gt;echo %dirname%&lt;br /&gt;echo %filename%&lt;br /&gt;echo %basename%&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have awed this &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;for &lt;/span&gt;crap many times before, now I have it here for the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-2837833276118735608?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/2837833276118735608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=2837833276118735608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2837833276118735608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2837833276118735608'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/10/basename-filename-dirname-in-batch.html' title='Basename, Filename, Dirname in Batch'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-1136543943662653741</id><published>2010-06-22T02:41:00.000-07:00</published><updated>2010-06-22T02:46:41.591-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winapi'/><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><title type='text'>Aero Snap vertical maximize winapi</title><content type='html'>Easy way to toggle the Aero Snap vertical maximize in WinAPI:&lt;br /&gt;&lt;code&gt;HWND active = GetForegroundWindow();&lt;br /&gt;PostMessage((HWND) active, WM_NCLBUTTONDBLCLK, HTTOP, 0);&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-1136543943662653741?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/1136543943662653741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=1136543943662653741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1136543943662653741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1136543943662653741'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/06/aero-snap-vertical-maximize-winapi.html' title='Aero Snap vertical maximize winapi'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-4455741563276739329</id><published>2010-05-27T07:30:00.000-07:00</published><updated>2010-05-27T07:31:09.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python binary tree traversal</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Sorted_binary_tree.svg/250px-Sorted_binary_tree.svg.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; background: white;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Sorted_binary_tree.svg/250px-Sorted_binary_tree.svg.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;# Python&lt;br /&gt;from itertools import chain&lt;br /&gt;from collections import deque&lt;br /&gt;&lt;br /&gt;class n(object):&lt;br /&gt;    left = None&lt;br /&gt;    right = None&lt;br /&gt;    value = None&lt;br /&gt;    &lt;br /&gt;    def __init__(self, value=None, left=None, right=None):&lt;br /&gt;        self.value = value&lt;br /&gt;        self.left = left&lt;br /&gt;        self.right = right&lt;br /&gt;        &lt;br /&gt;    def __call__(self, left=None, right=None):&lt;br /&gt;        self.left = left&lt;br /&gt;        self.right = right&lt;br /&gt;        return self.value&lt;br /&gt;&lt;br /&gt;def preorder(node):&lt;br /&gt;    lefts = []&lt;br /&gt;    rights = []&lt;br /&gt;    &lt;br /&gt;    if node.left != None:&lt;br /&gt;        lefts = preorder(node.left)&lt;br /&gt;        &lt;br /&gt;    if node.right != None:&lt;br /&gt;        rights = preorder(node.right)&lt;br /&gt;        &lt;br /&gt;    return chain([node], lefts, rights)&lt;br /&gt;        &lt;br /&gt;def inorder(node):&lt;br /&gt;    lefts = []&lt;br /&gt;    rights = []&lt;br /&gt;    &lt;br /&gt;    if node.left != None:&lt;br /&gt;        lefts = inorder(node.left)&lt;br /&gt;    &lt;br /&gt;    if node.right != None:&lt;br /&gt;        rights = inorder(node.right)&lt;br /&gt;        &lt;br /&gt;    return chain(lefts, [node], rights)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def postorder(node):&lt;br /&gt;    lefts = []&lt;br /&gt;    rights = []&lt;br /&gt;    &lt;br /&gt;    if node.left != None:&lt;br /&gt;        lefts = postorder(node.left)&lt;br /&gt;    &lt;br /&gt;    if node.right != None:&lt;br /&gt;        rights = postorder(node.right)&lt;br /&gt;        &lt;br /&gt;    return chain(lefts, rights, [node])&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;def levelorder(node):&lt;br /&gt;    queue = deque([node])&lt;br /&gt;    &lt;br /&gt;    while len(queue) &amp;gt; 0:&lt;br /&gt;        node = queue.pop() # Remove from right&lt;br /&gt;        yield node&lt;br /&gt;        if node.left:&lt;br /&gt;            queue.appendleft(node.left)&lt;br /&gt;        if node.right:&lt;br /&gt;            queue.appendleft(node.right)&lt;br /&gt;&lt;br /&gt;# Create nodes&lt;br /&gt;_ = None&lt;br /&gt;A = n('A')&lt;br /&gt;B = n('B')&lt;br /&gt;C = n('C')&lt;br /&gt;D = n('D')&lt;br /&gt;E = n('E')&lt;br /&gt;F = n('F')&lt;br /&gt;G = n('G')&lt;br /&gt;H = n('H')&lt;br /&gt;I = n('I')&lt;br /&gt;&lt;br /&gt;# Link the nodes&lt;br /&gt;F(B,G)&lt;br /&gt;B(A,D)&lt;br /&gt;D(C,E)&lt;br /&gt;&lt;br /&gt;G(_,I)&lt;br /&gt;I(H,_)&lt;br /&gt;&lt;br /&gt;print "Pre order:"&lt;br /&gt;print list(node.value for node in preorder(F))&lt;br /&gt;    &lt;br /&gt;print "In order:"&lt;br /&gt;print list(node.value for node in inorder(F))&lt;br /&gt;&lt;br /&gt;print "Post order:"&lt;br /&gt;print list(node.value for node in postorder(F))&lt;br /&gt;    &lt;br /&gt;print "Level order (queue):"&lt;br /&gt;print list(node.value for node in levelorder(F))&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-4455741563276739329?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/4455741563276739329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=4455741563276739329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4455741563276739329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4455741563276739329'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/05/python-binary-tree-traversal.html' title='Python binary tree traversal'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-286558842686398830</id><published>2010-02-20T10:40:00.000-08:00</published><updated>2010-02-22T12:05:01.874-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python notes, optparse positional argument parsing</title><content type='html'>&lt;pre&gt;&lt;code&gt;    parser = optparse.OptionParser()&lt;br /&gt;    try:&lt;br /&gt;        (options, (first_posarg, second_posarg, )) = parser.parse_args()&lt;br /&gt;    except ValueError:&lt;br /&gt;        parser.error("Two positional arguments are required.")&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-286558842686398830?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/286558842686398830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=286558842686398830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/286558842686398830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/286558842686398830'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/02/python-notes-optparse-positional.html' title='Python notes, optparse positional argument parsing'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-7662095105895002041</id><published>2010-02-06T14:16:00.000-08:00</published><updated>2010-02-06T14:16:55.112-08:00</updated><title type='text'>VLC S/PDIF Stuttering fix</title><content type='html'>I had this problem with VLC where all output going S/PDIF was stuttering with Windows Vista, and now that I got myself Windows 7 X64, I had to re-fix this problem.&lt;br /&gt;&lt;br /&gt;Now I finally found the fix, so I decided to save it to here for future reference:&lt;br /&gt;&lt;br /&gt;Preferences -&amp;gt; Advanced settings -&amp;gt; Audio -&amp;gt; Output modules -&amp;gt; Win32 waveOut extension output.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_G-OW5TgcJUY/S23pmsj66KI/AAAAAAAAAG0/Zj4rlArulG8/s1600-h/vlc_spdif_stutter.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_G-OW5TgcJUY/S23pmsj66KI/AAAAAAAAAG0/Zj4rlArulG8/s320/vlc_spdif_stutter.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now the AC3/DTS passthrough works without stuttering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-7662095105895002041?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/7662095105895002041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=7662095105895002041' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7662095105895002041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7662095105895002041'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/02/vlc-spdif-stuttering-fix.html' title='VLC S/PDIF Stuttering fix'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_G-OW5TgcJUY/S23pmsj66KI/AAAAAAAAAG0/Zj4rlArulG8/s72-c/vlc_spdif_stutter.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-1134780480718715746</id><published>2010-01-02T07:23:00.001-08:00</published><updated>2010-01-02T07:28:07.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python snippets, find all occurences of string</title><content type='html'>&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; def find_all(string, occurrence):&lt;br /&gt;... &amp;nbsp; &amp;nbsp; found = 0&lt;br /&gt;...&lt;br /&gt;... &amp;nbsp; &amp;nbsp; while True:&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; found = string.find(occurrence, found)&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if found != -1:&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; yield found&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break&lt;br /&gt;...&lt;br /&gt;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; found += 1&lt;br /&gt;...&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print list(find_all("awpropeoaspwtoapwroawpeoaweo", "p"))&lt;br /&gt;[2, 5, 10, 15, 21]&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print list(find_all("Overllllapping", "ll"))&lt;br /&gt;[4, 5, 6]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Finds all &lt;em&gt;overlapping&lt;/em&gt; matches.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-1134780480718715746?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/1134780480718715746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=1134780480718715746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1134780480718715746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1134780480718715746'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/01/python-snippets-find-all-occurences-of.html' title='Python snippets, find all occurences of string'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-8797842864880389869</id><published>2010-01-01T07:39:00.000-08:00</published><updated>2010-01-01T07:39:54.384-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chromium'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Add your program to "Default Programs" in Windows 7</title><content type='html'>I wanted to have chromium in "Default Programs", so I can associate HTTP protocol to it, here is how I did that. If you want to do same just change &lt;code&gt;C:\\Program Copies\\Chromium\\chrome.exe&lt;/code&gt; to point your chrome.exe, note that &lt;i&gt;is in two places!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;For your own program just change the chromium/path etc. to something suitable for your project.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_G-OW5TgcJUY/Sz4ViEJJ3JI/AAAAAAAAAGg/pyF26W2Z6ME/s1600-h/default_program1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_G-OW5TgcJUY/Sz4ViEJJ3JI/AAAAAAAAAGg/pyF26W2Z6ME/s640/default_program1.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;ChromiumToSetDefaults.reg&lt;/b&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;; Infamous capabilities:&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Chromium\Capabilities]&lt;br /&gt;"ApplicationDescription"="Chromium - Beta Google Chrome"&lt;br /&gt;"ApplicationIcon"="C:\\Program Copies\\Chromium\\chrome.exe,0"&lt;br /&gt;"ApplicationName"="Chromium"&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Chromium\Capabilities\FileAssociations]&lt;br /&gt;".htm"="ChromiumURL"&lt;br /&gt;".html"="ChromiumURL"&lt;br /&gt;".shtml"="ChromiumURL"&lt;br /&gt;".xht"="ChromiumURL"&lt;br /&gt;".xhtml"="ChromiumURL"&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Chromium\Capabilities\URLAssociations]&lt;br /&gt;"ftp"="ChromiumURL"&lt;br /&gt;"http"="ChromiumURL"&lt;br /&gt;"https"="ChromiumURL"&lt;br /&gt;&lt;br /&gt;; Register to Default Programs&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications]&lt;br /&gt;"Chromium"="Software\\Chromium\\Capabilities"&lt;br /&gt;&lt;br /&gt;; ChromiumURL HANDLER:&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\Software\Classes\ChromiumURL]&lt;br /&gt;@="Chromium Document"&lt;br /&gt;"FriendlyTypeName"="Chromium Document"&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\Software\Classes\ChromiumURL\shell]&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\Software\Classes\ChromiumURL\shell\open]&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\Software\Classes\ChromiumURL\shell\open\command]&lt;br /&gt;@="\"C:\\Program Copies\\Chromium\\chrome.exe\" -- \"%1\""&lt;/code&gt;&lt;/pre&gt;&lt;div&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/_G-OW5TgcJUY/Sz4WhB5Xs9I/AAAAAAAAAGo/TuT504_UvYo/s1600-h/default_program_done.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_G-OW5TgcJUY/Sz4WhB5Xs9I/AAAAAAAAAGo/TuT504_UvYo/s640/default_program_done.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-8797842864880389869?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/8797842864880389869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=8797842864880389869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/8797842864880389869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/8797842864880389869'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2010/01/add-your-program-to-default-programs-in.html' title='Add your program to &quot;Default Programs&quot; in Windows 7'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_G-OW5TgcJUY/Sz4ViEJJ3JI/AAAAAAAAAGg/pyF26W2Z6ME/s72-c/default_program1.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-2697206699357711750</id><published>2009-10-05T14:29:00.000-07:00</published><updated>2009-10-05T14:36:33.959-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf codesnippet'/><title type='text'>WPF Command line arguments.</title><content type='html'>&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;strong&gt;App.xaml&lt;/strong&gt;&lt;br /&gt;&amp;lt;Application ...&lt;br /&gt;Startup="App_Startup"&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;strong&gt;App.xaml.cs;&lt;/strong&gt;&lt;br /&gt;...&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Interaction logic for App.xaml&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public partial class App : Application&lt;br /&gt;{&lt;br /&gt;    // Storing your arguments in your type you wish:&lt;br /&gt;    public static string Input = "";&lt;br /&gt;&lt;br /&gt;    void App_Startup(object sender, StartupEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        // Store the arguments to static public you declared:&lt;br /&gt;        Input = String.Join(" ", e.Args);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;hr /&gt;&lt;strong&gt;Window1.xaml.cs&lt;/strong&gt;&lt;br /&gt;...&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Create window.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    public Window1()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(App.Input); // Woohoo! Got the input...&lt;br /&gt;        ...&lt;br /&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;p&gt;See, MSDN, you don't have to be so damn verbose always, when little &lt;strong&gt;codespeak&lt;/strong&gt; would do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-2697206699357711750?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/2697206699357711750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=2697206699357711750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2697206699357711750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2697206699357711750'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/10/wpf-command-line-arguments.html' title='WPF Command line arguments.'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-2217596611063235744</id><published>2009-10-03T02:40:00.000-07:00</published><updated>2009-10-03T02:58:13.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><category scheme='http://www.blogger.com/atom/ns#' term='glass'/><category scheme='http://www.blogger.com/atom/ns#' term='aero'/><title type='text'>Glass *only* fallback, in Windows.Forms (when aero disabled / in XP)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_G-OW5TgcJUY/SscdFFpCoRI/AAAAAAAAAGY/91OwYnOMaw0/s1600-h/aero-disabled-glass-fallback-forms.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 313px; height: 314px;" src="http://4.bp.blogspot.com/_G-OW5TgcJUY/SscdFFpCoRI/AAAAAAAAAGY/91OwYnOMaw0/s320/aero-disabled-glass-fallback-forms.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5388307452422955282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="font-size: 180%;"&gt;Usage: Create windows.forms application and take stuff from here:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;namespace GlassingJustFallbackInForms&lt;br /&gt;{&lt;br /&gt;  public partial class FormGlassedFallback : Form&lt;br /&gt;  {&lt;br /&gt;      public FormGlassedFallback()&lt;br /&gt;      {&lt;br /&gt;          InitializeComponent();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      #region WINAPI Crap:&lt;br /&gt;      private bool isActivated;&lt;br /&gt;&lt;br /&gt;      protected override void OnActivated(EventArgs e)&lt;br /&gt;      {&lt;br /&gt;          isActivated = true;&lt;br /&gt;          base.OnActivated(e);&lt;br /&gt;          this.Refresh(); // Causes flickering, any ideas?&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      protected override void OnDeactivate(EventArgs e)&lt;br /&gt;      {&lt;br /&gt;          isActivated = false;&lt;br /&gt;          base.OnDeactivate(e);&lt;br /&gt;          this.Refresh(); // Causes flickering, any ideas?&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      protected override void OnPaint(PaintEventArgs e)&lt;br /&gt;      {&lt;br /&gt;          IntPtr thmdata = OpenThemeData(this.Handle, "WINDOW");&lt;br /&gt;          IntPtr hdc = e.Graphics.GetHdc();&lt;br /&gt;&lt;br /&gt;          // Not very efficient, but doesn't flicker:&lt;br /&gt;          RECT rect = new RECT(-2, 0, this.Width, this.Height);&lt;br /&gt;          // RECT rect = new RECT(e.ClipRectangle.Left-3, e.ClipRectangle.Top, e.ClipRectangle.Right+3, e.ClipRectangle.Bottom);&lt;br /&gt;&lt;br /&gt;          base.OnPaint(e);&lt;br /&gt;          DrawThemeBackground(thmdata, hdc, WP_FRAMELEFT, isActivated ? FS_ACTIVE : FS_INACTIVE, ref rect, 0);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      private const int FS_ACTIVE = 1;&lt;br /&gt;      private const int FS_INACTIVE = 2;&lt;br /&gt;      private const int WP_FRAMELEFT = 7;&lt;br /&gt;&lt;br /&gt;      [DllImport("uxtheme", ExactSpelling = true)]&lt;br /&gt;      private extern static Int32 DrawThemeBackground(IntPtr hTheme, IntPtr hdc, int iPartId,&lt;br /&gt;         int iStateId, ref RECT pRect, int test);&lt;br /&gt;&lt;br /&gt;      [DllImport("uxtheme", ExactSpelling = true)]&lt;br /&gt;      private extern static Int32 DrawThemeBackground(IntPtr hTheme, IntPtr hdc, int iPartId,&lt;br /&gt;         int iStateId, ref RECT pRect, IntPtr pClipRect);&lt;br /&gt;&lt;br /&gt;      [DllImport("uxtheme.dll", ExactSpelling = true, CharSet = CharSet.Unicode)]&lt;br /&gt;      private static extern IntPtr OpenThemeData(IntPtr hWnd, String classList);&lt;br /&gt;&lt;br /&gt;      private const int WM_PAINT = 15;&lt;br /&gt;&lt;br /&gt;      [Serializable, StructLayout(LayoutKind.Sequential)]&lt;br /&gt;      private struct RECT&lt;br /&gt;      {&lt;br /&gt;          public int Left;&lt;br /&gt;          public int Top;&lt;br /&gt;          public int Right;&lt;br /&gt;          public int Bottom;&lt;br /&gt;&lt;br /&gt;          public RECT(int left_, int top_, int right_, int bottom_)&lt;br /&gt;          {&lt;br /&gt;              Left = left_;&lt;br /&gt;              Top = top_;&lt;br /&gt;              Right = right_;&lt;br /&gt;              Bottom = bottom_;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;      #endregion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-2217596611063235744?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/2217596611063235744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=2217596611063235744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2217596611063235744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/2217596611063235744'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/10/glass-only-fallback-in-windowsforms.html' title='Glass *only* fallback, in Windows.Forms (when aero disabled / in XP)'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_G-OW5TgcJUY/SscdFFpCoRI/AAAAAAAAAGY/91OwYnOMaw0/s72-c/aero-disabled-glass-fallback-forms.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-1446168713219720767</id><published>2009-10-02T05:15:00.000-07:00</published><updated>2009-10-05T14:38:02.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='glass'/><category scheme='http://www.blogger.com/atom/ns#' term='aero'/><title type='text'>WPF Window with aero glass background. (C# .NET)</title><content type='html'>&lt;p style="font-size: 180%;"&gt;Usage, in your Window constructor do:&lt;/p&gt;&lt;pre&gt;&lt;code&gt; ...&lt;br /&gt;public partial class Window1 : Window&lt;br /&gt;{&lt;br /&gt;  public Window1()&lt;br /&gt;  {&lt;br /&gt;      InitializeComponent();&lt;br /&gt;      &lt;span style="color:red;"&gt;this.GlassBackground();&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;...&lt;/code&gt;&lt;/pre&gt;&lt;p style="font-size: 180%;"&gt;Installation:&lt;br /&gt;1.) Add reference "System.Drawing" to your Project (Right click on References folder on your project, and Add reference)&lt;br /&gt;&lt;br /&gt;2.) Add to your project a class file (GlassExtensions.cs) replace the "YOURNAMESPACE" in with same namespace as in your Window1.xaml.cs, and paste this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Media;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Windows.Interop;&lt;br /&gt;&lt;br /&gt;namespace YOURNAMESPACE&lt;br /&gt;{&lt;br /&gt;public static class GlassingExtension&lt;br /&gt;{&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Sets glass background to whole window.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    /// &amp;lt;remarks&amp;gt;Remember to set your WPF Window Background to "Transparent"!&amp;lt;/remarks&amp;gt;&lt;br /&gt;    /// &amp;lt;param name="win"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;    public static void GlassBackground(this Window win)&lt;br /&gt;    {&lt;br /&gt;        // Glass extend WINAPI thingie http://msdn.microsoft.com/en-us/library/aa969512%28VS.85%29.aspx form more details&lt;br /&gt;        // If any of the margins is "-1" the whole window is glass!&lt;br /&gt;        win.GlassBackground(-1, 0, 0, 0);&lt;br /&gt;    }&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Sets glass background to custom margins in the window.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    /// &amp;lt;param name="win"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;    public static void GlassBackground(this Window win, int left, int right, int top, int bottom)&lt;br /&gt;    {&lt;br /&gt;        // Why would you read the inner workings? Why? If you need to know why...&lt;br /&gt;        // DwmExtendFrameIntoClientArea http://msdn.microsoft.com/en-us/library/aa969512%28VS.85%29.aspx is the magical WINAPI call&lt;br /&gt;        // rest is just crap to get its parameters populated.&lt;br /&gt;        win.Loaded += delegate(object sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                // Obtain the window handle for WPF application&lt;br /&gt;                IntPtr mainWindowPtr = new WindowInteropHelper(win).Handle;&lt;br /&gt;                HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);&lt;br /&gt;&lt;br /&gt;                // Transparent shall be glassed!&lt;br /&gt;                mainWindowSrc.CompositionTarget.BackgroundColor = System.Windows.Media.Colors.Transparent;&lt;br /&gt;&lt;br /&gt;                // Margin for the DwmExtendFrameIntoClientArea WINAPI call.&lt;br /&gt;                NonClientRegionAPI.MARGINS margins = new NonClientRegionAPI.MARGINS();&lt;br /&gt;                margins.cxLeftWidth = left;&lt;br /&gt;                margins.cxRightWidth = right;&lt;br /&gt;                margins.cyBottomHeight = bottom;&lt;br /&gt;                margins.cyTopHeight = top;&lt;br /&gt;&lt;br /&gt;                // Glass extend WINAPI thingie http://msdn.microsoft.com/en-us/library/aa969512%28VS.85%29.aspx form more details&lt;br /&gt;                int hr = NonClientRegionAPI.DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);&lt;br /&gt;                if (hr &amp;lt; 0)&lt;br /&gt;                {&lt;br /&gt;                    //DwmExtendFrameIntoClientArea Failed&lt;br /&gt;                } else {&lt;br /&gt;                    win.Background = System.Windows.Media.Brushes.Transparent;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            // If not glassing capabilities (Windows XP...), paint background white.&lt;br /&gt;            catch (DllNotFoundException)&lt;br /&gt;            {&lt;br /&gt;                Application.Current.MainWindow.Background = System.Windows.Media.Brushes.White;&lt;br /&gt;            }&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region WINAPI Crap, none should handle this in 21st century&lt;br /&gt;    private class NonClientRegionAPI&lt;br /&gt;    {&lt;br /&gt;        [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;        public struct MARGINS&lt;br /&gt;        {&lt;br /&gt;            public int cxLeftWidth;      // width of left border that retains its size&lt;br /&gt;            public int cxRightWidth;     // width of right border that retains its size&lt;br /&gt;            public int cyTopHeight;      // height of top border that retains its size&lt;br /&gt;            public int cyBottomHeight;   // height of bottom border that retains its size&lt;br /&gt;        };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        [DllImport("DwmApi.dll")]&lt;br /&gt;        public static extern int DwmExtendFrameIntoClientArea(&lt;br /&gt;            IntPtr hwnd,&lt;br /&gt;            ref MARGINS pMarInset);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-1446168713219720767?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/1446168713219720767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=1446168713219720767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1446168713219720767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1446168713219720767'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/10/wpf-window-with-areo-glass-background-c.html' title='WPF Window with aero glass background. (C# .NET)'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-1456389048963603372</id><published>2009-06-10T11:34:00.000-07:00</published><updated>2009-06-10T11:54:54.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idle semanticweb'/><title type='text'>semtech2009 conference coming up!</title><content type='html'>&lt;a href="http://www.semtech2009.com/"&gt;semtech2009&lt;/a&gt; conference is coming up! Pointing the way for semantic web, I shall take an excerpt from their webpage HTML:&lt;br /&gt;&lt;pre&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;/pre&gt;&lt;br /&gt;The glorious semantics of /dev/null I presume...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-1456389048963603372?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/1456389048963603372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=1456389048963603372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1456389048963603372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1456389048963603372'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/06/semtech2009-conference-coming-up.html' title='semtech2009 conference coming up!'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-7160183596913974201</id><published>2009-03-27T09:55:00.001-07:00</published><updated>2009-03-27T09:59:24.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pydev'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Eclipse, pydev notes, refresh errors and warnings</title><content type='html'>To refresh all errors project(s) widely do:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Project &lt;/span&gt;(from menu)&lt;span style="font-weight: bold;"&gt; -&gt; Clean&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Very useful when refactoring classes as all files will be parsed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-7160183596913974201?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/7160183596913974201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=7160183596913974201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7160183596913974201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7160183596913974201'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/03/eclipse-pydev-notes-refresh-errors-and.html' title='Eclipse, pydev notes, refresh errors and warnings'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-1295988048311466020</id><published>2009-03-26T10:59:00.000-07:00</published><updated>2009-03-26T11:02:57.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python notes, halving list</title><content type='html'>&lt;strong&gt;Splitting list from the middle:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&gt;&gt;&gt; a = [34,412,3,2,4,6,78,9,2]&lt;br /&gt;&gt;&gt;&gt; [a.pop(0) for alk in a]&lt;br /&gt;[34, 412, 3, 2, 4]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;... tricky ain't it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-1295988048311466020?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/1295988048311466020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=1295988048311466020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1295988048311466020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/1295988048311466020'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/03/python-notes.html' title='Python notes, halving list'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-5096589913683799400</id><published>2009-02-21T18:02:00.000-08:00</published><updated>2009-06-02T02:49:41.324-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inkscape'/><category scheme='http://www.blogger.com/atom/ns#' term='webdesign'/><title type='text'>Inkscape slicer</title><content type='html'>&lt;a href="http://users.jyu.fi/%7Ejaotospe/inkscape/slicer/slicer0.1.1.tar.gz"&gt;Download Inkscape slice effect a.k.a. 'slicer' 0.1.1 (bugfix)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Usage:&lt;/h4&gt;1.) Create layer e.g. named 'slices'.&lt;br /&gt;2.) Create rectangles as your slices, &lt;span style="font-weight: bold;"&gt;set their Label*&lt;/span&gt; (select rect and Object -&gt; Object properties) as the output filename (without extension).&lt;br /&gt;3.) Run Effects -&gt; Export -&gt; Slicer, specify directory where you want your slices to be saved and Apply.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;What program does:&lt;/h4&gt;1.) It takes all rectangles you give, puts opacity 0, stroke to none.&lt;br /&gt;2.) And tries to save contents inside rectangles to new files.&lt;br /&gt;3.) Returns the style to original value.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Installation:&lt;/h4&gt;Copy these two files (slicer.py, slicer.inx) to share/extensions directory inside inkscape, do not create directory for these files.&lt;br /&gt;&lt;br /&gt;Extensions dir in common platforms:&lt;br /&gt;Ubuntu 8.10 user scope: ~/.inkscape/extensions/&lt;br /&gt;Ubuntu 8.10 global scope: /usr/share/inkscape/extensions/&lt;br /&gt;Windows: c:\Program Files\Inkscape\share\extensions\&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Thanks&lt;/h4&gt;Original idea from &lt;a href="http://panela.blog-city.com/slicing_web_pages_with_inkscape_and_python.htm"&gt;Matt Harrison&lt;/a&gt;:&lt;br /&gt;WARNING, Matt's version didn't work with latest Ubuntu (8.10) and Inkscape 0.46, major API differences, that was the reason I rewrote whole script with features I needed. I have no intention to ripoff Matt's effort, so I fully thank Matt for his work, and if you somehow feel that I have broken the license in Matt's file you can contact me through comments in this blog.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;*&lt;/b&gt; Label allows all characters, where as ID allows only few. I need ability to use spaces in filenames so ID is no go. One can switch it to back to ID by changing line in slicer.py:&lt;br /&gt;&lt;code&gt;basename = rect_label.lstrip("#")&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;basename = rect_id&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-5096589913683799400?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/5096589913683799400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=5096589913683799400' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5096589913683799400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5096589913683799400'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/02/inkscape-slicer.html' title='Inkscape slicer'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-5554493969863805664</id><published>2009-02-12T16:11:00.000-08:00</published><updated>2009-03-27T10:04:21.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pydev'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Django and Eclipse</title><content type='html'>(When I have interest, I have planned to convert this to HTML, for now, let it be Plain text)&lt;br /&gt;Anyone is welcome to edit, repost and/or distribute the following instructions, I just have a little wish: Provide link for this post.&lt;br /&gt;&lt;code&gt;&lt;pre style="overflow: scroll; display: block; height: 35em;"&gt;&lt;br /&gt;Used: Eclipse Classic Ganymede (3.4.1), Django 1.0.2, PyDev&lt;br /&gt;&lt;br /&gt;Install Pydev&lt;br /&gt;=============&lt;br /&gt;... TODO ...&lt;br /&gt;&lt;br /&gt;Python interpreters (Eclipse preferences -&amp;gt; Pydev -&amp;gt; Interpreter - Python)&lt;br /&gt;--------------------------------------------------------------------------&lt;br /&gt;Press `New`&lt;br /&gt; Type (Ubuntu) `/usr/bin/python`&lt;br /&gt; Type (Windows) `C:\Python25\python.exe` *** Warning: not tested!&lt;br /&gt; Press `Ok`&lt;br /&gt;  *IMPORTANT!*&lt;br /&gt;  If you have installed Django to site-packages&lt;br /&gt;   *UNCHECK* I repeat *UN*CHECK the Django from the Pythonpath list&lt;br /&gt;   (Or remove from the list)&lt;br /&gt;  (We are *NOT* going to use the site-packages django to this for development purposes)&lt;br /&gt;&lt;br /&gt;Django project for Eclipse&lt;br /&gt;==========================&lt;br /&gt;&lt;br /&gt;File -&amp;gt; New -&amp;gt; Pydev project&lt;br /&gt; Project name: `Django`&lt;br /&gt; Grammar version: `2.5`&lt;br /&gt; Uncheck `Create default `src` folder and add it to the pythonpath?`&lt;br /&gt;  Error about interpreter?: `Click here to configure an interpreter not listed` see above Install Pydev section&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pydev Package Explorer (the "file tree" on the left) -&amp;gt; Django (right click) -&amp;gt; Properties&lt;br /&gt; PyDev - PYTHONPATH&lt;br /&gt;  Add source folder -&amp;gt; Choose `Django` (the project's "root" directory, for why, see (*1))&lt;br /&gt;&lt;br /&gt;(Ubuntu) in terminal (go to your eclipse workspace directory):&lt;br /&gt; cd Django/&lt;br /&gt; svn co http://code.djangoproject.com/svn/django/tags/releases/1.0.2/ .&lt;br /&gt;&lt;br /&gt;(Windows) Extract the django release to the Django/ dir:&lt;br /&gt; (after extraction you should have directories like `Django/django`, `Django/examples`, `Django/docs` ...)&lt;br /&gt;&lt;br /&gt;Pydev Package Explorer (the "file tree" on the left) -&amp;gt; Django (right click) -&amp;gt; Refresh (now zip some coffee, this might take while)&lt;br /&gt;&lt;br /&gt;All is set for Django project.&lt;br /&gt;&lt;br /&gt;(*1) Why root? Because for instance `django` and `examples` directories in django distribution should be in pythonpath and they are in root, this is only reasonable way since we won't relocate them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My django project:&lt;br /&gt;==================&lt;br /&gt;&lt;br /&gt;VERY IMPORTANT! DO THE DAMN `Django project for Eclipse` section FIRST! SINCE YOU WON'T GET THE AUTOCOMPLETE/*PLUGGABLE DJANGO VERSION BETWEEN APPLICATIONS* WITHOUT IT.&lt;br /&gt;&lt;br /&gt;File -&amp;gt; New -&amp;gt; Pydev project&lt;br /&gt; Project name: `Django Poll`&lt;br /&gt; Grammar version: `2.5`&lt;br /&gt; *Check* I repeat *Check* (It should be checked by default) the `Create default `src` folder and add it to the pythonpath?`&lt;br /&gt;  Error about interpreter?: This can't be, you set it up on `Django project for Eclipse`&lt;br /&gt; Click `Next`&lt;br /&gt;  (In reference page)&lt;br /&gt;  Check `Django` (the Django project you created earlier, remember that?)&lt;br /&gt;  Press `Finish`&lt;br /&gt;&lt;br /&gt;Django-admin.py from within Eclipse:&lt;br /&gt;------------------------------------&lt;br /&gt;&lt;br /&gt;Run -&amp;gt; External tools -&amp;gt; External tools configurations&lt;br /&gt; Left side tree: Right click `Program` -&amp;gt; New&lt;br /&gt;  Name: `Django-admin (for project src directory)`&lt;br /&gt;  Location (Ubuntu): `/bin/bash`&lt;br /&gt;  Location (Windows): `c:\Windows\system32\cmd.exe`   *** Warning: Not tested&lt;br /&gt;  Working directory: `${project_loc}/src`&lt;br /&gt;&lt;br /&gt; Environment tab:&lt;br /&gt;  New (from right)&lt;br /&gt;   Name: `PATH`&lt;br /&gt;   Value (Ubuntu): `${env_var:PATH}:${workspace_loc:Django/django/bin}`&lt;br /&gt;   Value (Windows): `${env_var:PATH};${workspace_loc:Django/django/bin}`   *** Warning: Not tested&lt;br /&gt;   Click `Ok`&lt;br /&gt;  New (from right)&lt;br /&gt;   Name: `PYTHONPATH`&lt;br /&gt;   Value (Ubuntu): `${project_loc}/src:${workspace_loc:Django/}`&lt;br /&gt;   Value (Windows): `${project_loc}/src;${workspace_loc:Django/}`   *** Warning: Not tested&lt;br /&gt;   Click `Ok`&lt;br /&gt;&lt;br /&gt;  Press `Apply` and `Close` (Don't try to Run, it will (most likely) give error)&lt;br /&gt;&lt;br /&gt;Run -&amp;gt; External tools -&amp;gt; Organize favorites&lt;br /&gt; Click `Add`&lt;br /&gt;  Choose `Django-admin (for project src directory)`&lt;br /&gt;  Click `Ok`&lt;br /&gt; Click `Ok`&lt;br /&gt;&lt;br /&gt;Now in order to run this tool one must do *TWO* things:&lt;br /&gt;&lt;br /&gt;1.) Pydev Package Explorer (the "file tree" on the left) -&amp;gt; Click on the `Django Poll` project (even if it is selected, just click it (to get focus on it))&lt;br /&gt;&lt;br /&gt;2.) Run -&amp;gt; External tools -&amp;gt; `Django-admin (for project src directory)`&lt;br /&gt; *** If you get error about `Variable references empty selection: ${project_loc}`, you didn't do 1.) well enough, you *MUST* click it first and nothing else afterwards, the *project folder* in *Pydev Package Explorer* must have *focus* (being selected is not enough)!&lt;br /&gt;&lt;br /&gt; Console window (if not visible do Window -&amp;gt; Show view -&amp;gt; Console), type: &lt;br /&gt;  `django-admin.py`&lt;br /&gt;&lt;br /&gt; If all went well you should get something like: `Type django-admin.py help for usage.`&lt;br /&gt; &lt;br /&gt; Following is from official django tutorial http://docs.djangoproject.com/en/dev/intro/tutorial01/#intro-tutorial01&lt;br /&gt;&lt;br /&gt; Console window, type: &lt;br /&gt;  `django-admin.py startproject mysite`&lt;br /&gt;&lt;br /&gt;PyDev Package Explorer (the tree on the left) -&amp;gt; `Django Poll` (right click) -&amp;gt; Refresh&lt;br /&gt;(If all worked well you should now have directory `src/mysite` in your project)&lt;br /&gt;&lt;br /&gt;Manage.py from within Eclipse&lt;br /&gt;-----------------------------&lt;br /&gt;&lt;br /&gt;PyDev package explorer (tree in the left) -&amp;gt; `Django Poll` (your project name) -&amp;gt; src -&amp;gt; manage.py (right click) -&amp;gt; Properties&lt;br /&gt; (You should be in dialog called `Properties for manage.py`)&lt;br /&gt; Click `New...`&lt;br /&gt;  Choose `Python Run`&lt;br /&gt;   (For reason unknown Eclipse doesn't prepopulate the following fields)&lt;br /&gt;   Name: `Django Poll -- Custom manage.py`  (Yes you read it right, I prefixed it with project name for extra verbosity)&lt;br /&gt;&lt;br /&gt;   Main tab (default tab):&lt;br /&gt;    Project click `Browse`, choose your project `Django Poll`&lt;br /&gt;    Main module click `Browse`, choose `src -&amp;gt; mysite -&amp;gt; manage.py`, click `Ok` (it should now read ${workspace_loc:Django Poll/src/mysite/manage.py} )&lt;br /&gt;&lt;br /&gt;   Arguments tab:&lt;br /&gt;    Press `Variables` (from Program arguments)&lt;br /&gt;     Choose `string_prompt`&lt;br /&gt;     (It should have added this `${string_prompt}`)&lt;br /&gt;     Click `Ok`&lt;br /&gt;   Click `Ok`&lt;br /&gt; Click `Ok`&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Running test:&lt;br /&gt;&lt;br /&gt;Locate Run button from toolbar (Green play button, with arrow downwards next to it), press the arrow -&amp;gt; Choose `Organize Favorites`&lt;br /&gt; Press `Add...`&lt;br /&gt;  Check the `Django Poll: Custom manage.py`&lt;br /&gt;&lt;br /&gt;Run button (press the arrow) -&amp;gt; `Django Poll -- Custom manage.py`&lt;br /&gt; (If all went well, you should be given prompt)&lt;br /&gt; Type: `help`&lt;br /&gt;  (If all worked well, you should get long list of commands, beginning:&lt;br /&gt;&lt;br /&gt;  `Type 'manage.py help &amp;lt;subcommand&amp;gt;' for help on a specific subcommand.`&lt;br /&gt;  ...)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lets create app:&lt;br /&gt;&lt;br /&gt;Run button press the arrow -&amp;gt; `Django Poll -- Custom manage.py`&lt;br /&gt; Type: `startapp polls`&lt;br /&gt;&lt;br /&gt;Now refresh your project directory from Pydev Package explorer (the tree in the left)&lt;br /&gt;(If all worked well you should now have directory `src/mysite/polls` in your project)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Running the development server&lt;br /&gt;------------------------------&lt;br /&gt;Run button (press the arrow) -&amp;gt; `Django Poll -- Custom manage.py`&lt;br /&gt; Type: `runserver --noreload`&lt;br /&gt;&lt;br /&gt;(You can use it without `--noreload`, but the console window is rather useless in that case, since Eclipse can't handle the refresh behaviour of `manage.py`.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other Eclipse preferences (optional), though highly recommended&lt;br /&gt;===============================================================&lt;br /&gt;&lt;br /&gt;More run configurations&lt;br /&gt;-----------------------&lt;br /&gt;Since you most likely need manage.py's commands `runserver`, `syncdb`, `reset` the most, create own run configurations for those, using similar steps as in "Manage.py from within Eclipse" section.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tasks of project&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;Window -&amp;gt; Show view -&amp;gt; Tasks&lt;br /&gt;&lt;br /&gt;Tasks (little `downward triangle` before minimize of tasks window) -&amp;gt; Configure contents&lt;br /&gt; Right side of the window: check `On any element in same project`&lt;br /&gt; Left side of the window: check `TODOs`&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-5554493969863805664?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/5554493969863805664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=5554493969863805664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5554493969863805664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5554493969863805664'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/02/django-and-eclipse.html' title='Django and Eclipse'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-5515499001634948103</id><published>2009-01-23T18:13:00.000-08:00</published><updated>2009-01-23T18:22:37.987-08:00</updated><title type='text'>SFTP umask</title><content type='html'>Do this &lt;code&gt;pico /opt/sftp-server.sh&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;pre style="overflow: scroll"&gt;#!/bin/bash&lt;br /&gt;# This is a wrapper around the sftp-server subsystem to set umask. Point&lt;br /&gt;# the subsystem in /etc/ssh/sshd_config to this file. (Ubuntu/Debian&lt;br /&gt;# file locations assumed)&lt;br /&gt;&lt;br /&gt;umask 0002&lt;br /&gt;exec /usr/lib/openssh/sftp-server&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Remember to &lt;code&gt;chmod ugo+x /opt/sftp-server.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then &lt;code&gt;pico /etc/ssh/sshd_config&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Replace/edit this part:&lt;br /&gt;&lt;code&gt;&lt;pre style="overflow: scroll"&gt;# Subsystem sftp /usr/lib/openssh/sftp-server # replaced with below&lt;br /&gt;Subsystem sftp /opt/sftp-server.sh&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Finally remember: &lt;code&gt;/etc/init.d/ssh restart&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-5515499001634948103?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/5515499001634948103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=5515499001634948103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5515499001634948103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/5515499001634948103'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2009/01/sftp-umask.html' title='SFTP umask'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-7480953492976544884</id><published>2008-08-18T04:44:00.000-07:00</published><updated>2009-03-27T10:02:40.943-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django-admin'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Django 1.0 custom admin two fields shown as one</title><content type='html'>I needed a way to have two model fields to be shown/edited on one form field. And I came up with the following.&lt;br /&gt;&lt;br /&gt;(CurrencyField (expense) shows and edits fields `value` and `currency` in the actual model)&lt;br /&gt;&lt;br /&gt;&lt;pre style="overflow: scroll; display: block; height: 35em;"&gt;from django.contrib import admin&lt;br /&gt;from budget.models import Expense&lt;br /&gt;from django import forms&lt;br /&gt;from django.forms.util import ValidationError&lt;br /&gt;&lt;br /&gt;class CurrencyField(forms.CharField):&lt;br /&gt;   def clean(self, value):&lt;br /&gt;       amount = 0&lt;br /&gt;       currency = ''&lt;br /&gt;       try:&lt;br /&gt;           amount = float(value.split(" ")[0].strip())&lt;br /&gt;       except (ValueError, TypeError), te:&lt;br /&gt;           raise ValidationError('Amount is incorrect!')&lt;br /&gt;      &lt;br /&gt;       try:&lt;br /&gt;           currency = value.split(" ")[1].strip().upper()&lt;br /&gt;           if len(currency) != 3:&lt;br /&gt;               raise TypeError('cur')&lt;br /&gt;       except (ValueError, TypeError), te:&lt;br /&gt;           raise ValidationError('Currency is incorrect! Should be three letter universal sign (e.g. EUR)')&lt;br /&gt;      &lt;br /&gt;       return (amount, currency)&lt;br /&gt;&lt;br /&gt;class ExpenseForm(forms.ModelForm):&lt;br /&gt;   expense = CurrencyField()&lt;br /&gt;   def __init__(self, *args, **kwargs):&lt;br /&gt;       super(ExpenseForm, self).__init__(*args, **kwargs)&lt;br /&gt;       self.initial['expense'] = "%s %s" % (self.instance.value or '',&lt;br /&gt;                                            self.instance.currency or '')&lt;br /&gt;  &lt;br /&gt;   def save(self, commit=True):&lt;br /&gt;       self.instance.value, self.instance.currency = self.cleaned_data['expense']&lt;br /&gt;       return super(ExpenseForm, self).save(commit)&lt;br /&gt;  &lt;br /&gt;   class Meta:&lt;br /&gt;       model = Expense&lt;br /&gt;&lt;br /&gt;# Note added:&lt;br /&gt;# Expense is like this:&lt;br /&gt;# class Expense(models.Model):&lt;br /&gt;#     ...&lt;br /&gt;#     value = models.FloatField(...)    # This contains the amount of currency, like 120.32&lt;br /&gt;#     currency = models.CharField(...)  # Currency is e.g. 'USD', 'EUR' identifier of currency&lt;br /&gt;#     ...&lt;br /&gt;&lt;br /&gt;class ExpenseAdmin(admin.ModelAdmin):&lt;br /&gt;   list_display = ('date', 'time', 'local_currency', 'in_euro', 'description', 'tags')&lt;br /&gt;   ordering = ('date','time')&lt;br /&gt;   form = ExpenseForm&lt;br /&gt;   fields = ('expense', 'date', 'time', 'description', 'tags')&lt;br /&gt;  &lt;br /&gt;admin.site.register(Expense, ExpenseAdmin)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-7480953492976544884?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/7480953492976544884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=7480953492976544884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7480953492976544884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/7480953492976544884'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2008/08/django-custom-admin.html' title='Django 1.0 custom admin two fields shown as one'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-4173022625859644858</id><published>2008-08-12T03:55:00.000-07:00</published><updated>2008-08-18T04:55:57.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django-admin'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Django 1.0 admin custom inlines</title><content type='html'>&lt;pre&gt;&lt;code&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;class ChangeSetForm(forms.ModelForm):&lt;br /&gt;  dosomething = forms.BooleanField(label="Do something")&lt;br /&gt;  class Meta:&lt;br /&gt;      model = ChangeSet&lt;br /&gt;      &lt;strike&gt;exclude = ('modified',)&lt;/strike&gt; # Note: This doesn't work!&lt;br /&gt;      &lt;strike&gt;fields = ('old_title',)&lt;/strike&gt; # Note: This doesn't work!&lt;br /&gt;    &lt;br /&gt;ChangeSetInlineFormSet = inlineformset_factory(&lt;br /&gt;  Article, ChangeSet,&lt;br /&gt;  form = ChangeSetForm&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;class InlineChangeSet(admin.TabularInline):&lt;br /&gt;  model = ChangeSet&lt;br /&gt;  form = ChangeSetForm&lt;br /&gt;  extra = 0&lt;br /&gt;  raw_id_fields = ('editor',)&lt;br /&gt;  &lt;u&gt;fields = ('old_title', )&lt;/u&gt; # This works.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;Completely custom inline (without delete checkbox etc)&lt;/h4&gt;&lt;br /&gt;coming...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-4173022625859644858?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/4173022625859644858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=4173022625859644858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4173022625859644858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/4173022625859644858'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2008/08/django-10-admin-custom-inlines.html' title='Django 1.0 admin custom inlines'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-6838496279816587337</id><published>2008-07-16T02:05:00.000-07:00</published><updated>2008-07-16T02:12:45.164-07:00</updated><title type='text'>Lighttpd 1.4.19 compiling (Debian etch)</title><content type='html'>Following explains briefly how I managed to compile and run Lighttpd.&lt;br /&gt;&lt;br /&gt;Remember that this doesn't include init.d scripts and such, and is not great idea for production servers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Using Debian repository installation of Lighttpd is advised, seek the older article of installing Django, I have exaplained it there.&lt;/span&gt;&lt;br /&gt;&lt;pre style="overflow: scroll"&gt;&lt;br /&gt;# Dependencies:&lt;br /&gt;sudo apt-get install libpcre3&lt;br /&gt;sudo apt-get install libpcre3-dev&lt;br /&gt;sudo apt-get install zlib1g&lt;br /&gt;sudo apt-get install zlib1g-dev&lt;br /&gt;&lt;br /&gt;# Compilation:&lt;br /&gt;cd /usr/src/&lt;br /&gt;sudo wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz&lt;br /&gt;sudo tar -xvzf lighttpd-1.4.19.tar.gz&lt;br /&gt;cd lighttpd-1.4.19&lt;br /&gt;sudo ./configure&lt;br /&gt;sudo make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;ls -la /usr/local/sbin/ # should contain lighttpd (and lighttpd-angel)&lt;br /&gt;ls -la /usr/local/lib/ # should contain whole bunch of mod_... files&lt;br /&gt;&lt;br /&gt;# now since this is bare ass installation, &lt;br /&gt;# we need to make init scripts and such ourselves&lt;br /&gt;sudo adduser lighttpd&lt;br /&gt;&lt;br /&gt;sudo apt-get install authbind&lt;br /&gt;cd /etc/authbind/byport/&lt;br /&gt;sudo touch 80&lt;br /&gt;sudo chown lighttpd:lighttpd 80&lt;br /&gt;sudo chmod 775 80&lt;br /&gt;&lt;br /&gt;sudo mkdir /etc/lighttpd&lt;br /&gt;sudo chown lighttpd:lighttpd /etc/lighttpd/&lt;br /&gt;sudo su lighttpd&lt;br /&gt;&lt;br /&gt;mkdir /home/lighttpd/public_html&lt;br /&gt;pico /home/lighttpd/public_html/index.html&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Congrats I'm running!&amp;lt;/body&amp;gt;&amp;lt;html&amp;gt;&lt;br /&gt;# Exit the pico&lt;br /&gt;&lt;br /&gt;pico /etc/lighttpd/lighttpd.conf&lt;br /&gt;server.document-root = "/home/lighttpd/public_html"&lt;br /&gt;server.port = 80&lt;br /&gt;index-file.names = ( "index.html", "index.htm" )&lt;br /&gt;include_shell "/etc/lighttpd/create-mime.assign.pl"&lt;br /&gt;# Exit the pico&lt;br /&gt;&lt;br /&gt;pico /etc/lighttpd/create-mime.assign.pl&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;open MIMETYPES, "/etc/mime.types" or exit;&lt;br /&gt;print "mimetype.assign = (\n";&lt;br /&gt;my %extensions;&lt;br /&gt;while(&lt;MIMETYPES&gt;) {&lt;br /&gt;  chomp;&lt;br /&gt;  s/\#.*//;&lt;br /&gt;  next if /^\w*$/;&lt;br /&gt;  if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) {&lt;br /&gt;    foreach(split / /, $2) {&lt;br /&gt;      # mime.types can have same extension for different&lt;br /&gt;      # mime types&lt;br /&gt;      next if $extensions{$_};&lt;br /&gt;      $extensions{$_} = 1;&lt;br /&gt;      print "\".$_\" =&gt; \"$1\",\n";&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;print ")\n";&lt;br /&gt;# Exit the pico&lt;br /&gt;&lt;br /&gt;/etc/lighttpd/create-mime.assign.pl&lt;br /&gt;&lt;br /&gt;# Runs the lighttpd for test ^C to exit&lt;br /&gt;authbind /usr/local/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -D&lt;br /&gt;&lt;br /&gt;exit # exits the "sudo su lighttpd"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-6838496279816587337?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/6838496279816587337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=6838496279816587337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/6838496279816587337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/6838496279816587337'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2008/07/lighttpd-1419-compiling-debian-etch.html' title='Lighttpd 1.4.19 compiling (Debian etch)'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-935270342438133864.post-319116664682064969</id><published>2008-07-15T04:48:00.000-07:00</published><updated>2008-07-17T01:22:11.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flup'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqldb'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='lighttpd'/><category scheme='http://www.blogger.com/atom/ns#' term='fastcgi'/><category scheme='http://www.blogger.com/atom/ns#' term='python2.5'/><title type='text'>Installation of MySQL server, MySQLdb, Flup, Lighttpd and Django (Debian etch)</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Note:&lt;/span&gt; I have not tested it as is, I was writing this afterwards from memory, so beware of the errors.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Setting up debian&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;# logged in as root:&lt;br /&gt;apt-get install sudo&lt;br /&gt;adduser joe&lt;br /&gt;sudoedit /etc/sudoers&lt;br /&gt;joe ALL=(ALL) ALL # added this line&lt;br /&gt;&lt;br /&gt;# Following is done in my own user (joe):&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo dpkg-reconfigure locales&lt;br /&gt;sudo tzselect&lt;br /&gt;sudo apt-get install build-essential&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Now to the installing Django and others...&lt;/h3&gt;&lt;br /&gt;&lt;pre style="overflow: scroll"&gt;&lt;span style="font-size:200%;"&gt;# Python 2.5&lt;/span&gt;&lt;br /&gt;sudo apt-get install python2.5&lt;br /&gt;sudo rm /usr/bin/python&lt;br /&gt;sudo ln -s /usr/bin/python /usr/bin/python2.5&lt;br /&gt;&lt;br /&gt;python&lt;br /&gt;Python 2.5 (release25-maint, Dec  9 2006, 14:35:53)&lt;br /&gt;[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;# Storing downloaded/compiled python-modules:&lt;br /&gt;sudo mkdir /usr/src/python-modules &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# MySQL server:&lt;/span&gt;&lt;br /&gt;sudo apt-get install mysql-server&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# MySQLdb:&lt;/span&gt;&lt;br /&gt;# Dependencies:&lt;br /&gt;sudo apt-get install libmysqlclient15-dev&lt;br /&gt;sudo apt-get install python2.5-dev&lt;br /&gt;&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;sudo wget http://mesh.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz&lt;br /&gt;sudo tar -xvzf MySQL-python-1.2.2.tar.gz&lt;br /&gt;cd MySQL-python-1.2.2&lt;br /&gt;python setup.py build&lt;br /&gt;sudo python setup.py install&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;&lt;br /&gt;python&lt;br /&gt;&gt;&gt;&gt; import MySQLdb&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# Flup (for the fastcgi):&lt;/span&gt;&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;svn co http://svn.saddi.com/flup/trunk/ flup-svn&lt;br /&gt;cd flup-svn&lt;br /&gt;sudo python setup.py install&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;&lt;br /&gt;python&lt;br /&gt;&gt;&gt;&gt; import flup&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# Lighttpd (1.4.19) installation using Debian unstable repository:&lt;/span&gt;&lt;br /&gt;# TODO: Coming...&lt;br /&gt;&lt;br /&gt;# NOTE: My installation method of Django allows to use both, svn and release&lt;br /&gt;# Django as far as you always run the wanted django using env PYTHONPATH...&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# Django release installation:&lt;/span&gt;&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;sudo wget http://www.djangoproject.com/download/0.96.2/tarball/ # this one downloads Django-0.96.2.tar.gz&lt;br /&gt;sudo tar -xvzf Django-0.96.2.tar.gz&lt;br /&gt;&lt;br /&gt;env PYTHONPATH=$PYTHONPATH:/usr/src/python-modules/Django-0.96.2 python&lt;br /&gt;&gt;&gt;&gt; import django&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# Django svn installation:&lt;/span&gt;&lt;br /&gt;cd /usr/src/python-modules/&lt;br /&gt;sudo svn co http://code.djangoproject.com/svn/django/trunk/ Django-svn&lt;br /&gt;&lt;br /&gt;env PYTHONPATH=$PYTHONPATH:/usr/src/python-modules/Django-svn python&lt;br /&gt;&gt;&gt;&gt; import django&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:200%;"&gt;# Django new project and fastcgi server:&lt;/span&gt;&lt;br /&gt;sudo mkdir /var/www-domains/&lt;br /&gt;&lt;br /&gt;sudo adduser examplecom&lt;br /&gt;sudo mkdir /var/www-domains/example.com/&lt;br /&gt;sudo chown examplecom:examplecom /var/www/example.com&lt;br /&gt;sudo chmod +s /var/www/example.com&lt;br /&gt;&lt;br /&gt;sudo su examplecom&lt;br /&gt;cd /var/www/example.com/&lt;br /&gt;mkdir public&lt;br /&gt;mkdir public_media&lt;br /&gt;mkdir fastcgi-servers&lt;br /&gt;mkdir django-projects&lt;br /&gt;&lt;br /&gt;# TODO: More to come...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/935270342438133864-319116664682064969?l=ciantic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ciantic.blogspot.com/feeds/319116664682064969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=935270342438133864&amp;postID=319116664682064969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/319116664682064969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/935270342438133864/posts/default/319116664682064969'/><link rel='alternate' type='text/html' href='http://ciantic.blogspot.com/2008/07/installation-of-mysql-server-mysqldb.html' title='Installation of MySQL server, MySQLdb, Flup, Lighttpd and Django (Debian etch)'/><author><name>Ciantic</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
