<?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-1962372541082810985</id><updated>2012-01-17T09:46:51.713+04:00</updated><category term='linux'/><category term='firefox'/><category term='msvc'/><category term='blogger'/><category term='Trac'/><category term='software'/><category term='tips'/><category term='coding'/><category term='to remember'/><category term='fun'/><category term='qt'/><category term='template'/><category term='google'/><category term='Jira'/><title type='text'>Denis Dzyubenko</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-7420934690818659839</id><published>2009-06-10T21:10:00.002+04:00</published><updated>2009-06-10T21:20:02.289+04:00</updated><title type='text'>Window resizing and repainting synchronization on X11</title><content type='html'>&lt;a href="http://qt.gitorious.org/qt/qt/commit/2312b121131774a84d01854b3e47d3d2a035a6a1"&gt;Implemented&lt;/a&gt; the &lt;a href="http://standards.freedesktop.org/wm-spec/1.3/ar01s06.html#id2523713"&gt;_NET_WM_SYNC_REQUEST&lt;/a&gt; protocol in Qt for synchronizing window resize (ConfigureNotify events) and repainting (Expose events).&lt;br /&gt;&lt;br /&gt;The change makes window resize feel a bit more sluggish in some cases (for example when repainting the whole toplevel is not very fast) since the frame doesn't follow the mouse when the window manager waits for the preview resize+repaint to complete, however there are no more grey unexposed areas when the user resizes windows. Though it works perfectly in Compiz and Metacity, kwin4 seems to need more polishing in its composition manager.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.trolltech.com/blogs/2009/06/10/smooth-and-solid-resizing-on-x11/"&gt;More info&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-7420934690818659839?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/7420934690818659839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=7420934690818659839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7420934690818659839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7420934690818659839'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2009/06/window-resizing-and-repainting.html' title='Window resizing and repainting synchronization on X11'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-2703465859370441514</id><published>2009-04-08T21:24:00.004+04:00</published><updated>2009-04-08T22:57:34.748+04:00</updated><title type='text'>Automatic window maximization in Gnome</title><content type='html'>After using Windows 7 for some time, I've noticed that it has a really nice feature that allows to automatically maximize a window by dragging it to the top edge of the screen and restore a window from a maximized state by dragging its titlebar. I've implemented the same feature for metacity, the Gnome's window manager, and I find it very convenient. Lets hope it will be accepted upstream. Issue &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=578409"&gt;578409&lt;/a&gt; in bugzilla.&lt;br /&gt;&lt;br /&gt;P.S. It's been a while since I blogged last time here and I made only a few blog posts in the corporate &lt;a href="http://labs.trolltech.com/blogs/author/dzyubenk"&gt;blog&lt;/a&gt;, well I have to say I am a terrible blogger, will see how it goes on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-2703465859370441514?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/2703465859370441514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=2703465859370441514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2703465859370441514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2703465859370441514'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2009/04/automatic-window-maximization-in-gnome.html' title='Automatic window maximization in Gnome'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-7803918311556551065</id><published>2007-09-10T11:51:00.002+04:00</published><updated>2009-02-17T13:18:59.167+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='to remember'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='msvc'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><title type='text'>Visual Studio 2005 tips &amp; tricks</title><content type='html'>Here are some tips and trick for Microsoft Visual Studio 2005 (mostly Visual C++ ones).&lt;br /&gt;&lt;br /&gt;&lt;a name="open"&gt;&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;1. Open files in Visual Studio&lt;/h2&gt;&lt;br /&gt;You can open files from Windows Explorer (or Total Commander, or any similar application) in existing instance of MSVS by specifying shell command for file type:&lt;br /&gt;&lt;pre&gt;"...\Microsoft Visual Studio 8\Common7\IDE\devenv.exe" /edit "%1"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="step-through"&gt;&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;2. How to Not Step Into Functions using the debugger (&lt;a href="http://blogs.msdn.com/andypennell/archive/2004/02/06/69004.aspx"&gt;article&lt;/a&gt;)&lt;/h2&gt;&lt;br /&gt;Here is my configuration with comments:&lt;br /&gt;&lt;br /&gt;Default configuration of MSVC8:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"Security check function"="__security_check_cookie"&lt;br /&gt;"Rpcrt4.dll functions that hinder RPC StepInto"="_ObjectStublessClient.*"&lt;br /&gt;"Rpcrt4.dll function that hinders RPC StepOut"="_Invoke@12"&lt;br /&gt;"Run time check function"="_RTC_CheckEsp"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Don't step into TAO reference counted pointers:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"TAO_vars"="TAO_Objref_Var_T.*\\:\\:in=NoStepInto"&lt;br /&gt;"TAO_seq_var"="TAO_Seq_Var_Base_T.*\\:\\:.*=NoStepInto"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Don't step into STL:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"std_string_c_str"="std\\:\\:basic_string.*\\:\\:.*=NoStepInto"&lt;br /&gt;"std::list"="std\\:\\:list.*\\:\\:.*=NoStepInto"&lt;br /&gt;"std::vector"="std\\:\\:vector.*\\:\\:.*=NoStepInto"&lt;br /&gt;"std::map"="std\\:\\:map.*\\:\\:.*=NoStepInto"&lt;br /&gt;"std::set"="std\\:\\:set.*\\:\\:.*=NoStepInto"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Don't step into boost::foreach and boost::shared_ptr (could be very usefull within code like &lt;blockquote&gt;foreach(Object&amp; obj, getObject())&lt;/blockquote&gt; 'step-into' goes to getObject() instead of boost internals)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"boost_foreach"="boost\\:\\:foreach_detail_\\:\\:.*=NoStepInto"&lt;br /&gt;"boost_shared_ptr"="boost\\:\\:shared_ptr.*\\:\\:.*=NoStepInto"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Don't step into 'dynamic_cast'&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"RTDynamicCast"="__RTDynamicCast=NoStepInfo"&lt;br /&gt;&lt;/pre&gt;Here are my configuration: &lt;a href="https://projects.novotest.net/svn/tools/msvc/trunk/debugger-step-through/dbg.reg"&gt;dbg.reg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="visualizers"&gt;&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;3. Debugger Visualizers for Qt generic container types&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QList&lt;t&gt;,QQueue&lt;t&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QList&lt;*&gt;|QQueue&lt;*&gt;{&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #array&lt;br /&gt;    (&lt;br /&gt;        expr :    *($T1*)(($c.d-&gt;array+$c.d-&gt;begin)[$i]),&lt;br /&gt;        size :    $c.d-&gt;end-$c.d-&gt;begin&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;        "[",&lt;br /&gt;        $e.d-&gt;end - $e.d-&gt;begin ,&lt;br /&gt;        "](",&lt;br /&gt;   &lt;br /&gt;        #array&lt;br /&gt;        (&lt;br /&gt;            expr :     *($T1*)(($c.d-&gt;array+$c.d-&gt;begin)[$i]),&lt;br /&gt;            size :     $c.d-&gt;end-$c.d-&gt;begin&lt;br /&gt;        ),&lt;br /&gt;        ")"&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QList&lt;t&gt;::iterator, QQueue&lt;t&gt;::iterator&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QList&lt;*&gt;::iterator|QList&lt;*&gt;::const_iterator|QQueue&lt;*&gt;::iterator|QQueue&lt;*&gt;::const_iterator {&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(*($T1*)$e.i-&gt;v)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(ptr: *($T1*)$e.i-&gt;v)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QListIterator&lt;t&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QListIterator&lt;*&gt;|QMutableListIterator&lt;*&gt; {&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(*($T1*)$e.i.i-&gt;v)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(ptr: *($T1*)$e.i.i-&gt;v)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QVector&lt;t&gt;::iterator, QStack&lt;t&gt;::iterator&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QVector&lt;*&gt;::iterator|QVector&lt;*&gt;::const_iterator|QStack&lt;*&gt;::iterator|QStack&lt;*&gt;::const_iterator {&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #($e.i)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(ptr: $e.i)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QVector&lt;t&gt;, QStack&lt;t&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QVector&lt;*&gt;|QStack&lt;*&gt;{&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #array&lt;br /&gt;    (&lt;br /&gt;        expr :    $c.d-&gt;array[$i],&lt;br /&gt;        size :    $c.d-&gt;size&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;        "[",&lt;br /&gt;        $e.d-&gt;size ,&lt;br /&gt;        "](",&lt;br /&gt;   &lt;br /&gt;        #array&lt;br /&gt;        (&lt;br /&gt;            expr :     $c.d-&gt;array[$i],&lt;br /&gt;            size :     $c.d-&gt;size&lt;br /&gt;        ),&lt;br /&gt;        ")"&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QLinkedList&lt;t&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QLinkedList&lt;*&gt;{&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #list&lt;br /&gt;    (&lt;br /&gt;        head : $c.d-&gt;n,&lt;br /&gt;  size : $c.d-&gt;size,&lt;br /&gt;        next : n&lt;br /&gt;    ) : #( (*(QLinkedListNode&lt;$T1&gt;*)&amp;$e).t )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;        "[",&lt;br /&gt;        $e.d-&gt;size ,&lt;br /&gt;        "](",&lt;br /&gt;    #list&lt;br /&gt;    (&lt;br /&gt;      head : $c.d-&gt;n,&lt;br /&gt;      size : $c.d-&gt;size,&lt;br /&gt;      next : n&lt;br /&gt;    ) : ( (*(QLinkedListNode&lt;$T1&gt;*)&amp;amp;amp;amp;amp;$e).t ),&lt;br /&gt;    ")"&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QLinkedList&lt;t&gt;::iterator&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QLinkedList&lt;*&gt;::iterator|QLinkedList&lt;*&gt;::const_iterator{&lt;br /&gt;    preview&lt;br /&gt;(&lt;br /&gt;    #($e.i-&gt;t)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(ptr: $e.i-&gt;t)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QMap&lt;t&gt;::Node&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QMap&lt;*,*&gt;::Node{&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;      "(",&lt;br /&gt;      $e.key,&lt;br /&gt;      "; ",&lt;br /&gt;      $e.value,&lt;br /&gt;      ")"&lt;br /&gt;     )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;      key: $e.key,&lt;br /&gt;      value: $e.value&lt;br /&gt;     )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QMap&lt;t&gt;::iterator&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;QMap&lt;*&gt;::iterator|QMap&lt;*&gt;::const_iterator{&lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;     (QMap&lt;$T1&gt;::Node*)((char*)$e.i - (sizeof(*(QMap&lt;$T1&gt;::PayloadNode*)0) - sizeof(QMapData::Node*)))&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;      node: (QMap&lt;$T1&gt;::Node*)((char*)$e.i - (sizeof(*(QMap&lt;$T1&gt;::PayloadNode*)0) - sizeof(QMapData::Node*)))&lt;br /&gt;    )&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;  QMap&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;QMap&lt;*&gt;{&lt;br /&gt;children&lt;br /&gt;(&lt;br /&gt;    #tree&lt;br /&gt;    (&lt;br /&gt;          head : $c.d-&gt;forward[0],&lt;br /&gt;          skip : $c.d,&lt;br /&gt;        size : $c.d-&gt;size,&lt;br /&gt;        left : backward,&lt;br /&gt;        right : forward&lt;br /&gt;    ) : ( (QMap&lt;$T1&gt;::Node*)((char*)&amp;$e - (sizeof(*(QMap&lt;$T1&gt;::PayloadNode*)0) - sizeof(QMapData::Node*))) )&lt;br /&gt;)&lt;br /&gt;    &lt;br /&gt;preview&lt;br /&gt;(&lt;br /&gt;    #(&lt;br /&gt;        "[",&lt;br /&gt;        $e.d-&gt;size,&lt;br /&gt;        "](",&lt;br /&gt;&lt;br /&gt;        #tree&lt;br /&gt;        (&lt;br /&gt;            head : $c.d-&gt;forward,&lt;br /&gt;            size : $c.d-&gt;size,&lt;br /&gt;            left : backward,&lt;br /&gt;            right : forward&lt;br /&gt;        ) : $e,&lt;br /&gt;   &lt;br /&gt;        ")"&lt;br /&gt;    )&lt;br /&gt;)        &lt;br /&gt;}&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To use these visualizers they should be pasted into "c:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat"&lt;br /&gt;&lt;br /&gt;Here are some articles about configuring visualizers for STLport: &lt;a href="http://garrys-brain.blogspot.com/2007/08/debugging-stlport-in-visual-studio.html"&gt;Garry's Brain Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These tips are written in short just not to forget.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-7803918311556551065?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/7803918311556551065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=7803918311556551065' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7803918311556551065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7803918311556551065'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/09/visual-studio-2005-tips-tricks.html' title='Visual Studio 2005 tips &amp; tricks'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-586413483256583784</id><published>2007-01-14T17:22:00.000+03:00</published><updated>2007-01-14T17:44:57.362+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>apt-cacher</title><content type='html'>Damn! Write a patch to a debian package &lt;a href="http://packages.debian.org/apt-cacher"&gt;apt-cacher&lt;/a&gt; only to find out that latest version from Etch already support the functionality I need. (g)&lt;br /&gt;&lt;br /&gt;though publish the patch here (only to base app, not to the package itself), in case I (or anybody) will need it in Woody.&lt;br /&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;diff -u apt-cacher.orig/apt-cacher.pl apt-cacher/apt-cacher.pl&lt;br /&gt;--- apt-cacher.orig/apt-cacher.pl   2005-07-30 17:03:00.000000000 +0400&lt;br /&gt;+++ apt-cacher/apt-cacher.pl    2007-01-14 17:00:49.000000000 +0300&lt;br /&gt;@@ -683,7 +683,8 @@&lt;br /&gt;&lt;br /&gt; sub usage_error {&lt;br /&gt;    print STDERR "--- apt-cacher.pl:Usage error\n";&lt;br /&gt;-&lt;br /&gt;+   my $is_proxy_user = "no";&lt;br /&gt;+   $is_proxy_user = "yes" if ($config{proxy_user});&lt;br /&gt;    print &amp;lt;&amp;lt;EOF;&lt;br /&gt; Content-Type: text/html&lt;br /&gt; Expires: 0&lt;br /&gt;@@ -723,6 +724,7 @@&lt;br /&gt; &amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; errorfile &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $config{errorfile} &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; expire_hours &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $config{expire_hours} &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; http_proxy &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $config{http_proxy} &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;+&amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; proxy_user &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $is_proxy_user &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; use_proxy &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $config{use_proxy} &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr bgcolor="cccccc"&amp;gt;&amp;lt;td bgcolor="ccccff"&amp;gt; debug &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; $config{debug} &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;/table&amp;gt;&lt;br /&gt;@@ -781,6 +783,9 @@&lt;br /&gt;   # Check whether a proxy is to be used, and set the appropriate environment variable&lt;br /&gt;   if ( $config{use_proxy} eq 1 &amp;amp;&amp;amp; $config{http_proxy}) {&lt;br /&gt;      push(@elist, "-x", "http://$config{http_proxy}");&lt;br /&gt;+    if ($config{proxy_user}) {&lt;br /&gt;+       push(@elist, "-U", "$config{proxy_user}");&lt;br /&gt;+   }&lt;br /&gt;   }&lt;br /&gt;   # Check if we need to set a rate limiting value: otherwise make it null&lt;br /&gt;   push(@elist,"--limit-rate", $config{limit}) if ($config{limit} &amp;gt; 0);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://packages.debian.org/apt-cacher"&gt;apt-cacher&lt;/a&gt; is a proxy for apt, that allows upgrading many debian boxes through one caching 'proxy'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-586413483256583784?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/586413483256583784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=586413483256583784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/586413483256583784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/586413483256583784'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/01/apt-cacher.html' title='apt-cacher'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-949600318077782829</id><published>2007-01-10T20:30:00.000+03:00</published><updated>2007-01-10T20:35:51.257+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Emacs learning curve</title><content type='html'>&lt;a href="http://unix.rulez.org/~calver/pictures/curves.jpg"&gt;Comparison&lt;/a&gt; of text editors learning curves. True.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-949600318077782829?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/949600318077782829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=949600318077782829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/949600318077782829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/949600318077782829'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/01/emacs-learning-curve.html' title='Emacs learning curve'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-5106801046804318355</id><published>2007-01-05T15:07:00.000+03:00</published><updated>2007-01-05T15:15:01.436+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='to remember'/><title type='text'>fine-tuning Firefox</title><content type='html'>Feels like a secret knoledge: To be able closing a tab with a middle click, you should set middlemouse.ContentLoadURL to false in about:config. Seems it is need only in Linux-version of Firefox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-5106801046804318355?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/5106801046804318355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=5106801046804318355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/5106801046804318355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/5106801046804318355'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/01/fine-tuning-firefox.html' title='fine-tuning Firefox'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-7576882782016282942</id><published>2007-01-04T04:00:00.000+03:00</published><updated>2007-01-04T04:11:04.513+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Reader update</title><content type='html'>wow, Google added new feature to the &lt;a href="http://www.google.com/reader"&gt;Google Reader&lt;/a&gt; - &lt;a href="http://www.google.com/reader/view/?page=trends"&gt;trends&lt;/a&gt; view - very nice statistics about reading feed - now I know I've read more that 4000 items for the last 30 days. what a waste of time of mine. (g)&lt;br /&gt;&lt;br /&gt;The one I don't understand is how do they calculate percent of read items - trends tell me all my feed has 100% read items. Is 'read' mean 'viewed by user'? If so, thats not true, since when reading with google reader I scroll throw all items reading titles, and read full articles (summaries and descriptions) only when title concerns me. &lt;br /&gt;I think there should be another trend like 'percent of viewed items' - 'viewed' like 'opened original source article'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-7576882782016282942?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/7576882782016282942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=7576882782016282942' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7576882782016282942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/7576882782016282942'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/01/google-reader-update.html' title='Google Reader update'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-5239789148977348918</id><published>2007-01-03T23:25:00.000+03:00</published><updated>2007-01-03T23:43:32.895+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><title type='text'>Expandable posts</title><content type='html'>Added 'expandable post' feature described at &lt;a href="http://hackosphere.blogspot.com/2006/09/expandable-posts-with-peekaboo-view.html"&gt;hackosphere&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Though I am not sure if it is useful since it isn't the same as &lt;a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=75"&gt;&amp;lt;lj-cut&amp;gt;&lt;/a&gt; and doesn't stop loading of all post contents. It just makes posts partially hidden.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size:small"&gt;(just not to forget how to make posts 'expandable': after blog template customization (done once) wrap text with tags &lt;em&gt;&amp;lt;span id="fullpost"&amp;gt;&lt;/em&gt; and &lt;em&gt;&amp;lt;/span&amp;gt;&lt;/em&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-5239789148977348918?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/5239789148977348918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=5239789148977348918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/5239789148977348918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/5239789148977348918'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2007/01/expandable-posts.html' title='Expandable posts'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-6030365653856607798</id><published>2006-12-21T18:54:00.000+03:00</published><updated>2007-01-03T23:59:29.856+03:00</updated><title type='text'>distributing compilation</title><content type='html'>Everyone knows how long does it take to transform c++ sources into binary code, but there are several tools in the &lt;s&gt;google&lt;/s&gt;world that can cut down compilation time: &lt;a href="http://www.xoreax.com/"&gt;Xoreax IncrediBuild&lt;/a&gt; for Microsoft Visual Studio, and  &lt;a href="http://www.builderbooster.com/"&gt;BuilderBooster&lt;/a&gt; for Borland C++ Builder and Borland Turbo C++. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PHcyEgqnSW4/RZwYlF85BAI/AAAAAAAAAAU/eQcfmS9vyCs/s1600-h/builderboosterscreen1.jpg"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_PHcyEgqnSW4/RZwYlF85BAI/AAAAAAAAAAU/eQcfmS9vyCs/s320/builderboosterscreen1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5015911110515688450" /&gt;&lt;/a&gt;&lt;br /&gt;We use first for some time and find it really usefull - installed on 10 computers (two developer and eight other office computers), it cuts down compilation time of eight megabytes c++ project from 40 minutes to about 5 mins!&lt;br /&gt;Since our projects divides into two parts - server-side that uses &lt;a href="http://www.cs.wustl.edu/~schmidt/"&gt;ACE+TAO&lt;/a&gt;, STL, Boost, and written with Visual Studio. And client-side, written with Borland C++ Builder 5 (for historical reasons), so IncrediBuild can't satisfy all our needs, and it would be nice to speed up compilation of client-side software too. But it is not. BuilderBooster sucks - it has some bugs (which were revealed after only first 20 mins of using!), its Delphi-style GUI is awful!&lt;br /&gt;What a pity! even google doesn't know any good distributed compiling tool for BCB.&lt;br /&gt;So, hope our migration from BCB to &lt;a href="http://www.trolltech.com/"&gt;Qt4&lt;/a&gt; doesn't take too much time :(&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PHcyEgqnSW4/RZwYk185A_I/AAAAAAAAAAM/rC1Pc8PfEig/s1600-h/VisualStudioIDE_Small.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_PHcyEgqnSW4/RZwYk185A_I/AAAAAAAAAAM/rC1Pc8PfEig/s320/VisualStudioIDE_Small.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5015911106220721138" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-6030365653856607798?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/6030365653856607798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=6030365653856607798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/6030365653856607798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/6030365653856607798'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2006/12/distributing-compilation.html' title='distributing compilation'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PHcyEgqnSW4/RZwYlF85BAI/AAAAAAAAAAU/eQcfmS9vyCs/s72-c/builderboosterscreen1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-6459111581208878283</id><published>2006-11-16T14:36:00.000+03:00</published><updated>2006-11-16T14:41:17.250+03:00</updated><title type='text'></title><content type='html'>Microsoft &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;released PowerShell&lt;/a&gt; (ex-"Monad") - powerfull shell for Windows.&lt;br /&gt;&lt;br /&gt;Does they think unix-like shell is obsolete? (&lt;a href="http://www.windowsitpro.com/Article/ArticleID/50565/50565.html"&gt;"Introducing Windows PowerShell: UNIX Administrators Won’t Be Laughing Anymore"&lt;/a&gt;)&lt;br /&gt;Command-line tools which operate objects instead of strings maybe very usefull, but what about the-main-unix-approach "every think is a string"?&lt;br /&gt;&lt;br /&gt;Have to try it in real-life work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-6459111581208878283?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/6459111581208878283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=6459111581208878283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/6459111581208878283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/6459111581208878283'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2006/11/microsoft-released-powershell-ex-monad.html' title=''/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-2680602487672887375</id><published>2006-11-15T13:34:00.000+03:00</published><updated>2006-11-15T13:50:08.664+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Desktop 4.5</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/7268/405/320/sidebar_refresh.png" width="145px" height="319px" style="float: right"/&gt;&lt;br /&gt;yep, another shiny &lt;a href="http://desktop.google.com"&gt;Google Desktop&lt;/a&gt; is &lt;a href="http://googledesktop.blogspot.com/2006/11/check-out-new-sidebar.html"&gt;out&lt;/a&gt;: transparency support, firefox 2.0 support.&lt;br /&gt;i'm loving it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-2680602487672887375?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/2680602487672887375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=2680602487672887375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2680602487672887375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2680602487672887375'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2006/11/google-desktop-45.html' title='Google Desktop 4.5'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-2061873233820561513</id><published>2006-10-27T19:53:00.000+04:00</published><updated>2007-09-12T00:08:42.694+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jira'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Trac to Jira migration</title><content type='html'>Some days ago I spent few hours to migrate our corporate issue tracking system from &lt;a href="http://trac.edgewall.com"&gt;Trac&lt;/a&gt; to &lt;a href="http://www.atlassian.com/software/jira/"&gt;Jira&lt;/a&gt;. For this task I've written some scripts that automate the migration process.&lt;br /&gt;&lt;br /&gt;Just to remember, in case I will need them again some day, I publish them &lt;s&gt;here&lt;/s&gt; ... on &lt;a href="http://code.google.com/p/trac2jira/"&gt;Google Code&lt;/a&gt;. Will see if Google Code is comparable enough with sourceforge to use.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac2jira.googlecode.com/svn/trunk/comments.py"&gt;comments.py&lt;/a&gt; extracts and reformats all trac comments.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac2jira.googlecode.com/svn/trunk/export.py"&gt;export.py&lt;/a&gt; saves ticket and extracted comments to a csv file.&lt;br /&gt;&lt;br /&gt;Example of using these scripts: &lt;a href="http://trac2jira.googlecode.com/svn/trunk/trac2jira.sh"&gt;trac2jira.sh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jira import configuration: &lt;a href="http://trac2jira.googlecode.com/svn/trunk/jira.config"&gt;jira.config&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And the script to update subversion commit messages. It simply replaces links to Trac tickets (ex: #1) to Jira-style issue links (ex: COR-1): &lt;a href="http://trac2jira.googlecode.com/svn/trunk/repo_update.sh"&gt;repo_update.sh&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-2061873233820561513?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/2061873233820561513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=2061873233820561513' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2061873233820561513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/2061873233820561513'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2006/10/trac-to-jira-migration.html' title='Trac to Jira migration'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1962372541082810985.post-580772431126220248</id><published>2006-10-27T11:13:00.000+04:00</published><updated>2007-01-03T23:24:00.521+03:00</updated><title type='text'>hello, world</title><content type='html'>Just to mark beginning of blog usage, here are my hello-s:&lt;br /&gt;&lt;br /&gt;Elisp&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(while t&lt;br /&gt; (message "Hello, all")&lt;br /&gt; (message ""))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Python&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def hello_world_generator(msg):&lt;br /&gt; for i in range(0, len(msg)):&lt;br /&gt;   yield msg[i]&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt; for char in hello_world_generator('Hello, world'):&lt;br /&gt;   print char,&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And of course, the C++&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;#include &amp;lt;iterator&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class hello_world_iterator : public iterator&amp;lt;forward_iterator_tag, char&amp;gt;&lt;br /&gt;{&lt;br /&gt;  static const string msg;&lt;br /&gt;  string::const_iterator msg_i;&lt;br /&gt;  bool end_;&lt;br /&gt;public:&lt;br /&gt;  hello_world_iterator(bool end=false) : msg_i(msg.end()), end_(end) { }&lt;br /&gt;&lt;br /&gt;  char operator* () const&lt;br /&gt;  {&lt;br /&gt;    return (msg_i == msg.end()) ? '\0' : *msg_i;&lt;br /&gt;  }&lt;br /&gt;  hello_world_iterator&amp; operator++ ()&lt;br /&gt;  {&lt;br /&gt;    if (msg_i == msg.end() &amp;&amp; !end_)&lt;br /&gt;      msg_i = msg.begin();&lt;br /&gt;    else&lt;br /&gt;      msg_i++;&lt;br /&gt;    if (msg_i == msg.end())&lt;br /&gt;      end_ = true;&lt;br /&gt;    return *this;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  bool operator== (const hello_world_iterator &amp;rhs) const&lt;br /&gt;  {&lt;br /&gt;    return msg_i == rhs.msg_i &amp;&amp; end_ == rhs.end_;&lt;br /&gt;  }&lt;br /&gt;  bool operator!= (const hello_world_iterator &amp;rhs) const&lt;br /&gt;  {&lt;br /&gt;    return !(*this == rhs);&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;const string hello_world_iterator::msg = "Hello, world";&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;  copy(hello_world_iterator(), hello_world_iterator(true),&lt;br /&gt;    ostream_iterator&amp;lt;char&amp;gt;(cout));&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;i&gt;(c++ version was written very fast, so sorry, it may contain some flaws).&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1962372541082810985-580772431126220248?l=shadone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shadone.blogspot.com/feeds/580772431126220248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1962372541082810985&amp;postID=580772431126220248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/580772431126220248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1962372541082810985/posts/default/580772431126220248'/><link rel='alternate' type='text/html' href='http://shadone.blogspot.com/2006/10/hello-world.html' title='hello, world'/><author><name>Denis Dzyubenko</name><uri>http://www.blogger.com/profile/16130744702574821501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://lh3.google.com/shadone/Rubx50sxjkI/AAAAAAAACFg/WriD-bkTVFM/me_big.jpg'/></author><thr:total>0</thr:total></entry></feed>
