<?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-3876948052272338515</id><updated>2012-01-11T22:58:59.017+03:00</updated><category term='logging'/><category term='reflection'/><category term='SW engineering'/><category term='GIT'/><category term='java android'/><category term='exception handling'/><category term='STL'/><category term='thoughts'/><category term='mock'/><category term='.net'/><category term='BOOST'/><category term='c++'/><category term='cpp_trace'/><category term='must read'/><title type='text'>C++ lamer notes</title><subtitle type='html'>Some my friends who read my arbitrary blog are dissatisfied by my posts related to a SW development. That's the reason to start the blog here. It is especially targeted to the SW development topics which are interesting for me. According to this any terms ambiguity have to be interpreted in context of software development :-).
Constructive comment are welcome. English please.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3876948052272338515.post-7804266426992458933</id><published>2011-10-13T00:00:00.002+03:00</published><updated>2011-10-13T00:00:29.604+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GIT'/><title type='text'>Multiple working folders with single GIT repository clone</title><content type='html'>Actually the trick is quite trivial, we use our knowledge of git internals and unix symbolic links to achieve what we want. All we wanted is to have one repository and multiple working folders associated with it, so &lt;a href="http://finik.net/2010/10/24/multiple-working-folders-with-single-git-repository/"&gt;lets do just that&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-7804266426992458933?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/7804266426992458933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2011/10/multiple-working-folders-with-single.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/7804266426992458933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/7804266426992458933'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2011/10/multiple-working-folders-with-single.html' title='Multiple working folders with single GIT repository clone'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-8553824246428175314</id><published>2011-08-08T12:41:00.002+03:00</published><updated>2011-08-08T12:45:35.605+03:00</updated><title type='text'>Rhomobile Beginner's Guide</title><content type='html'>&lt;a href="http://www.packtpub.com/build-enterprise-mobile-web-application-using-rhomobile-beginners-guide/book"&gt;Rhomobile Beginner's Guide&lt;/a&gt;&amp;nbsp;by&amp;nbsp;&lt;a href="http://itsallaboutruby.blogspot.com/"&gt;Abhishek Nalwaya&lt;/a&gt; has recently published.&amp;nbsp;&lt;a href="http://www.packtpub.com"&gt;Packt Publishing&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-8553824246428175314?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/8553824246428175314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2011/08/rhomobile-beginners-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/8553824246428175314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/8553824246428175314'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2011/08/rhomobile-beginners-guide.html' title='Rhomobile Beginner&apos;s Guide'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-3581709522309575827</id><published>2011-04-04T23:02:00.002+03:00</published><updated>2011-08-08T10:47:20.664+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java android'/><title type='text'>Disable screen rotation at runtime on Android</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It's strange I found no ready solution in Net...&lt;br /&gt;&lt;br /&gt;There are two sources that help me:&lt;br /&gt;&lt;span&gt;&lt;a href="http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone"&gt;http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://www.anddev.org/rotate_screen_from_code_change_screen_orientation-t2687.html"&gt;http://www.anddev.org/rotate_screen_from_code_change_screen_orientation-t2687.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally, the next code is really works (I tested it):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeff; border-style: dotted; border-width: 1px; font: 9pt helvetica,arial,sans-serif; padding: 10px;"&gt;public class MyActivity extends Activity {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; private int mRuntimeOrientation;&lt;br /&gt;&amp;nbsp;&amp;nbsp; private boolean mDisableScreenRotation;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; protected int getScreenOrientation() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Display display = getWindowManager().getDefaultDisplay();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; int orientation = display.getOrientation();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (orientation == Configuration.ORIENTATION_UNDEFINED) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; orientation = getResources().getConfiguration().orientation;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (orientation == Configuration.ORIENTATION_UNDEFINED) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (display.getWidth() == display.getHeight())&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; orientation = Configuration.ORIENTATION_SQUARE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; else if(display.getWidth() &amp;lt; display.getHeight())&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; orientation = Configuration.ORIENTATION_PORTRAIT;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; orientation = Configuration.ORIENTATION_LANDSCAPE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; return orientation;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; mRuntimeOrientation = this.getScreenOrientation();&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp; public void onConfigurationChanged(Configuration newConfig) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (mDisableScreenRotation) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; super.onConfigurationChanged(newConfig);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; this.setRequestedOrientation(mRuntimeOrientation);&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; mRuntimeOrientation = this.getScreenOrientation();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; super.onConfigurationChanged(newConfig);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &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/3876948052272338515-3581709522309575827?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/3581709522309575827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2011/04/disable-screen-rotation-at-runtime-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/3581709522309575827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/3581709522309575827'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2011/04/disable-screen-rotation-at-runtime-on.html' title='Disable screen rotation at runtime on Android'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3876948052272338515.post-9034950386392051584</id><published>2011-03-17T11:01:00.001+02:00</published><updated>2011-03-17T11:03:06.719+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='must read'/><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><title type='text'>C++ exceptions in destructors</title><content type='html'>Latest time while I'm looking a new job place and participating in interviews with professionals at other companies I continiously try to lighten different C++ questions...&lt;br /&gt;&lt;br /&gt;I will post here Links to most appropriate C++ articles like previous and this ones...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kolpackov.net/projects/c++/eh/dtor-1.xhtml"&gt;C++ exceptions in destructors&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-9034950386392051584?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/9034950386392051584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2011/03/c-exceptions-in-destructors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/9034950386392051584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/9034950386392051584'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2011/03/c-exceptions-in-destructors.html' title='C++ exceptions in destructors'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-3891375165240715197</id><published>2011-03-08T18:10:00.002+02:00</published><updated>2011-03-17T11:08:23.425+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='must read'/><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><title type='text'>One more time about C++ exception performance</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The article&amp;nbsp;&lt;a href="http://lazarenko.me/tips-and-tricks/c-exception-handling-and-performance"&gt;C++ Exception Handling and Performance&lt;/a&gt;&amp;nbsp;by Vlad Lazarenko is very demonstrative according to modern C++.&lt;br /&gt;&lt;br&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-3891375165240715197?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/3891375165240715197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2011/03/one-more-time-about-c-exceptions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/3891375165240715197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/3891375165240715197'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2011/03/one-more-time-about-c-exceptions.html' title='One more time about C++ exception performance'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-4121085608896030538</id><published>2010-12-10T18:32:00.001+02:00</published><updated>2010-12-10T18:34:31.996+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>Obvios and incredible C++</title><content type='html'>&amp;nbsp;&lt;br /&gt;&lt;div style="font:9pt helvetica,arial,sans-serif;border-style:dotted;border-width:1px;background-color:#EEEEFF;padding:10px 10px 10px 10px"&gt;void &lt;b&gt;print_component&lt;/b&gt;(const Component&amp;amp;, const std::string&amp;amp;);&lt;br /&gt;void &lt;b&gt;print_component_env&lt;/b&gt;(const Component&amp;amp;, const std::string&amp;amp;);&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;(env ? &lt;b&gt;print_component_env&lt;/b&gt; : &lt;b&gt;print_component&lt;/b&gt;)(comp, prop_names);&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/3876948052272338515-4121085608896030538?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/4121085608896030538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2010/12/obvios-and-incredible-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/4121085608896030538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/4121085608896030538'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2010/12/obvios-and-incredible-c.html' title='Obvios and incredible C++'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-2293291169785076226</id><published>2010-03-12T17:00:00.000+02:00</published><updated>2010-03-12T17:00:37.454+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>.NET: The Project Location is Not Trusted</title><content type='html'>There is instructions at msdn that can be found easy:&lt;br /&gt;http://msdn.microsoft.com/en-us/library/bs2bkwxc(VS.80).aspx&lt;br /&gt;&lt;br /&gt;To start Mscorcfg.msc tool go to:&lt;br /&gt;Control Panel\Administrative Tools\Microsoft .NET Framework 2.0 Configuration&lt;br /&gt;&lt;br /&gt;Microsoft gives instruction to setup new trusted zone for every project location at intranet. There is better solution if your corporate intranet protected by firewall and you have many project locations (or location can change frequently: like with ClearCase).&lt;br /&gt;&lt;br /&gt;Instead of URL select Zone for code group condition type and select Local Intranet zone.&lt;br /&gt;Select FullTrust permission set at next page. Finish the wizard.&lt;br /&gt;Viola: All intranet is trusted. The only thing: you should be sure that you can trust your intranet :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-2293291169785076226?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/2293291169785076226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2010/03/net-project-location-is-not-trusted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2293291169785076226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2293291169785076226'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2010/03/net-project-location-is-not-trusted.html' title='.NET: The Project Location is Not Trusted'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-4314680034061505163</id><published>2010-03-10T14:28:00.002+02:00</published><updated>2010-03-10T17:43:11.365+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='SW engineering'/><title type='text'>How do you dig in another's source codes?..</title><content type='html'>Two and a half years ago I moved to my present job place. Then I again faced the problem to lean new portion of legacy spaghetti code...&lt;br /&gt;&lt;br /&gt;I asked my new colleagues what tools they use to understand project code. I was very pity for their answer: a most advanced tools they used are a paper and a pen... One or two remembered &lt;a href="http://www.sourceinsight.com/"&gt;SourceInsight IDE&lt;/a&gt; that can build a call tree (kind of search of references organized in a tree view).&lt;br /&gt;&lt;br /&gt;I made fast analysis what facilities I need to dig in to a completely unknown complex code:&lt;br /&gt;1. Search of references&lt;br /&gt;2. Editable result of the search (to remove references I do not need)&lt;br /&gt;3. Bookmarks to remember recent places in sources that are interesting&lt;br /&gt;4. Tree organized bookmarks view to remember search tree&lt;br /&gt;&lt;br /&gt;It is not very complex requirements but nobody implemented it so far (Or I do not know about...) :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-4314680034061505163?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/4314680034061505163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2010/03/how-do-you-dig-in-anothers-source-codes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/4314680034061505163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/4314680034061505163'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2010/03/how-do-you-dig-in-anothers-source-codes.html' title='How do you dig in another&apos;s source codes?..'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-9193540374123736621</id><published>2009-12-10T22:37:00.019+02:00</published><updated>2010-03-10T17:42:40.903+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='BOOST'/><category scheme='http://www.blogger.com/atom/ns#' term='STL'/><title type='text'>Life without the BOOST</title><content type='html'>&amp;nbsp;&lt;br /&gt;&lt;div style="font:9pt helvetica,arial,sans-serif;border-style:dotted;border-width:1px;background-color:#EEEEFF;padding:10px 10px 10px 10px"&gt;void somefoo(A &amp;amp;a, list&amp;lt;b *&amp;gt; &amp;amp;bb)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i style="color: #666666;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;a.foo(*It)&lt;/i&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for_each(bb.begin(), bb.end(), bind1st(mem_fun(&amp;amp;A::foo),&amp;amp;a));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i style="color: #666666;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;It-&amp;gt;foo(&amp;amp;a);&lt;/i&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for_each(bb.begin(), bb.end(), bind2nd(mem_fun(&amp;amp;B::foo), &amp;amp;a));&lt;br /&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/3876948052272338515-9193540374123736621?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/9193540374123736621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2009/12/life-without-boost.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/9193540374123736621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/9193540374123736621'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2009/12/life-without-boost.html' title='Life without the BOOST'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-7441694655449246366</id><published>2009-11-25T12:46:00.002+02:00</published><updated>2009-11-25T12:51:04.433+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='cpp_trace'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><title type='text'>cpp_trace intro</title><content type='html'>Development logging is a powerful tool any real time or embedded programmer employs. Do you use development logging from your code?.. If yes, cpp_trace library may help.&lt;br /&gt;&lt;br /&gt;I started to write this library since I need it at every my project. And with every project I needed to make some logging component which allows to filter, buffer, route to output device and bla-bla-bla.&lt;br /&gt;Every time I faced the same problems: time consuming filtering, delayed text formatting and filter id managing. These are the reasons to design new effective solution.&lt;br /&gt;&lt;br /&gt;Main &lt;a href="http://sourceforge.net/apps/mediawiki/cpp-trace/index.php"&gt;cpp_trace&lt;/a&gt; design decisions are:&lt;br /&gt;1. Use any declared type for filter ids (do you know C++ type lists?..).&lt;br /&gt;This means you are have no limits for ids such as number of bits for a mask or range boundary for enum. &lt;br /&gt;2. Use compile time filtering if possible (partial template specification allows to eliminate unused code).&lt;br /&gt;This means you can use trace instructions at any place with any frequency in code - it has no impact on production performance.&lt;br /&gt;3. Comply with STL streams.&lt;br /&gt;This means you can follow standard at first. Second, you can override operator&amp;lt;&amp;lt; and control every parameter independently (to make buffering of unprocessed parameters and delay text formatting).&lt;br /&gt;&lt;br /&gt;I use the library for a year now. It is just an alpha version which has no run-time filtering and delayed text formatting so far. I found it extremely useful for a unit testing since you can identify a filter with class type you are implementing. Then at unit test just list classes you want to debug and get the log from it!  From another point, if you like common filter identification by constant values or enumerations: just use BOOST wrappers for constants that converts constant value into a type.&lt;br /&gt;&lt;br /&gt;If you are interested, read more at &lt;a href="http://sourceforge.net/apps/mediawiki/cpp-trace/index.php"&gt;cpp_trace wiki&lt;/a&gt; and enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-7441694655449246366?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/7441694655449246366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2009/11/cpptrace-intro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/7441694655449246366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/7441694655449246366'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2009/11/cpptrace-intro.html' title='cpp_trace intro'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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-3876948052272338515.post-2314676395744150156</id><published>2009-11-03T19:58:00.002+02:00</published><updated>2009-11-06T14:08:38.777+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='mock'/><title type='text'>Automatic Mock Object For C++</title><content type='html'>Two or three years ago when I dive to Java for a half a year I studied &lt;a href="http://en.wikipedia.org/wiki/Mock_object"&gt;Mock objects&lt;/a&gt;. At Java (or C#) it build around a &lt;a href="http://en.wikipedia.org/wiki/Reflection_%28computer_science%29"&gt;reflection&lt;/a&gt;. During these years I discussed with my friends and colleagues about C++ Mock object libraries. A sharp corner of the discussions was a possibility to write powerful C++ Mock library without a reflection.&lt;br /&gt;If you see any of existent C++ Mock implementations you find it requires to implement every mock object class by hands. Afterwards you can adjust its behavior at runtime like in Java. My opinion was to use code generation to implement a Mock. I even started to write some code with this concept in mind...&lt;br /&gt;Another alternative is try to use C++ generic programming technique to emulate some reflection features at compile time. But it seemed hard and may not enough. Any case you cannot enumerate interface methods :(&lt;br /&gt;There was some time while I found &lt;a href="http://code.google.com/p/amop/"&gt;AMOP&lt;/a&gt; - Automatic Mock Object For C++. It is a very young project (first download became available at January'2008). I looked at the AMOP description, decided it very interesting to try but didn't find time to dive inside. I had think it need much time to understand the code and setup it for my project :(&lt;br /&gt;Several days ago I found a hour to try it because I face task to write a really isolated test.&lt;br /&gt;I was surprised how easy it can be. Just single include and library contains three cpp files! No any code generation, just instantiate a template and write a scenario like in Java!&lt;br /&gt;&lt;br /&gt;Would you think it is possible to have such a lightweight solution with C++?.. Now I can answer - yes! See yourself at AMOP &lt;a href="http://code.google.com/p/amop/wiki/BasicUsage"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PS: I am not a guy who like C# or even Java! I really like C++. I like it because it allows to do what you want and what you need in many ways. The AMOP example shows the power of C++. C++ may cover solutions you would never have thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-2314676395744150156?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clamernotes.blogspot.com/feeds/2314676395744150156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clamernotes.blogspot.com/2009/11/automatic-mock-object-for-c.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2314676395744150156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2314676395744150156'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2009/11/automatic-mock-object-for-c.html' title='Automatic Mock Object For C++'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3876948052272338515.post-2642936314377855081</id><published>2009-11-03T19:32:00.000+02:00</published><updated>2009-11-03T19:42:24.217+02:00</updated><title type='text'>C++ lamer notes</title><content type='html'>Hello there!&lt;br /&gt;&lt;br /&gt;Some my friends who read my arbitrary &lt;a href="http://lexis-t.livejournal.com"&gt;blog&lt;/a&gt; are dissatisfied by my posts related to a SW development. That's the reason to start the new blog here. It is especially targeted to the SW development topics which are interesting for me.&lt;br /&gt;&lt;br /&gt;/lexis&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3876948052272338515-2642936314377855081?l=clamernotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2642936314377855081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3876948052272338515/posts/default/2642936314377855081'/><link rel='alternate' type='text/html' href='http://clamernotes.blogspot.com/2009/11/c-lamer-notes.html' title='C++ lamer notes'/><author><name>/lexis</name><uri>http://www.blogger.com/profile/18112158423976969880</uri><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></entry></feed>
