<?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-6050653249193748526</id><updated>2012-01-08T15:44:18.295-08:00</updated><category term='start with'/><category term='C++'/><category term='destructor'/><category term='SQL'/><category term='remote debugging'/><category term='Multithread'/><category term='lock'/><category term='connect by'/><category term='session'/><category term='scope'/><category term='recursive'/><category term='Hoard'/><category term='JDPA'/><category term='eclipse'/><category term='Java'/><category term='Oracle'/><category term='constructor'/><title type='text'>Tech Temp</title><subtitle type='html'>Programming &amp;amp; related technologies - mainly use as a note to myself, but also share to everyone :)

&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.easycounter.com/"&gt;
&lt;img align="right" src="http://www.easycounter.com/counter.php?airgear02" border="0" alt="HTML Hit Counters"&gt;&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://airgear01.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://airgear01.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>datalost</name><uri>http://www.blogger.com/profile/05280411402423143564</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://2.bp.blogspot.com/_1tVgQsKv358/Su8TOlYOduI/AAAAAAAAABo/zHD1AqifoxI/S220/6-1.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6050653249193748526.post-238996137051007295</id><published>2009-10-23T15:02:00.000-07:00</published><updated>2009-10-23T15:36:16.150-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='start with'/><category scheme='http://www.blogger.com/atom/ns#' term='recursive'/><category scheme='http://www.blogger.com/atom/ns#' term='connect by'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Recursive SQL statement for Oracle database</title><content type='html'>&lt;span style="font-size:85%;"&gt;Many people may still in doubt about how to do query against table which link recursively to itself. i.e. if you want to select all tree relate to folder 'A' from data as shown in the sample table below&lt;/span&gt;&lt;br /&gt;&lt;pre  style="font-size:10px;"&gt;Folders&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre style="font-size: 10px;"&gt; +-----------+-------------+&lt;br /&gt;| Folder    | ParentFolder|&lt;br /&gt;| --------- | ----------- |&lt;br /&gt;| A         | B           |&lt;br /&gt;| B         | C           |&lt;br /&gt;| E         | A           |&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;This can be done by using &lt;b&gt;start with ... connect by&lt;/b&gt; clause like below&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="SQL"&gt;&lt;br /&gt;select folder from folders &lt;span style="font-weight: bold;"&gt;start with&lt;/span&gt; groupname = 'A'&lt;br /&gt;               &lt;span style="font-weight: bold;"&gt;connect by&lt;/span&gt; prior parentfolder = folder&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy coding!&lt;br /&gt;&lt;br /&gt;&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/6050653249193748526-238996137051007295?l=airgear01.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://airgear01.blogspot.com/feeds/238996137051007295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://airgear01.blogspot.com/2009/10/recursive-sql-statement-for-oracle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/238996137051007295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/238996137051007295'/><link rel='alternate' type='text/html' href='http://airgear01.blogspot.com/2009/10/recursive-sql-statement-for-oracle.html' title='Recursive SQL statement for Oracle database'/><author><name>datalost</name><uri>http://www.blogger.com/profile/05280411402423143564</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://2.bp.blogspot.com/_1tVgQsKv358/Su8TOlYOduI/AAAAAAAAABo/zHD1AqifoxI/S220/6-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050653249193748526.post-6335794086427682676</id><published>2009-10-22T09:42:00.001-07:00</published><updated>2009-10-24T15:22:15.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='constructor'/><category scheme='http://www.blogger.com/atom/ns#' term='scope'/><category scheme='http://www.blogger.com/atom/ns#' term='lock'/><category scheme='http://www.blogger.com/atom/ns#' term='session'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='destructor'/><title type='text'>[C++] Safe and efficient way to release session/lock</title><content type='html'>Have you ever found problem in managing lock or something similar to below?&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;void MyClass::MyMethod()&lt;br /&gt;{&lt;br /&gt;try{&lt;br /&gt;&lt;br /&gt;LockAble.lock();&lt;br /&gt;// do sensitive stuff&lt;br /&gt;&lt;br /&gt;if (FaltalError){&lt;br /&gt; &lt;b&gt;// i worry about unlock the lock here&lt;/b&gt;&lt;br /&gt; LockAble.unlock();&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;b&gt;// i worry about unlock the lock here&lt;/b&gt;&lt;br /&gt;LockAble.unlock();&lt;br /&gt;}&lt;br /&gt;catch(MyClassException &amp;amp;)&lt;br /&gt;{&lt;br /&gt; &lt;b&gt;// i worry about unlock the lock here&lt;/b&gt;&lt;br /&gt;LockAble.unlock();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you are finding alternative way to handle the above situation, you are reading the right blog :)..&lt;br /&gt;&lt;br /&gt;The aim of writing this blog is explain a way to cope with pair operation such as lock/unlocked, check-in/check-out, acquire/release etc. Would that be cool if just declare only one statement then forget about it? Just look what it should be :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;void MyClass::MyMethod()&lt;br /&gt;{&lt;br /&gt;try{&lt;br /&gt;ScopeLock lock(mLockableObj);&lt;br /&gt;// do sensitive stuff&lt;br /&gt;if (FaltalError){&lt;br /&gt;// i don't worry about unlock the lock here&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;// i don't worry about unlock the lock here&lt;br /&gt;}&lt;br /&gt;catch(MyClassException &amp;amp;amp;)&lt;br /&gt;{&lt;br /&gt;// i don't worry about unlock the lock here&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As above, you might already spotted that there is a class ScopeLock appears, what magic it is to solve it? Well, it just utilize destructor to unlock to lock automatically when that object is out from scope. See below for implementation..&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;class ScopeLock {&lt;br /&gt;public:&lt;br /&gt;ScopeLock(ILockAble &amp;amp;lockable):mLock(lockable)&lt;br /&gt;{&lt;br /&gt;lock.lock();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;~ScopeLock()&lt;br /&gt;{&lt;br /&gt;lock.unlock();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;ILockAble &amp;amp;mLock;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it! Very easy to adapt to your existing implementation. Just put the starting operation in constructor and exiting operation in destructor. Enjoy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050653249193748526-6335794086427682676?l=airgear01.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://airgear01.blogspot.com/feeds/6335794086427682676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://airgear01.blogspot.com/2009/10/c-safe-and-efficient-way-to-release.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/6335794086427682676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/6335794086427682676'/><link rel='alternate' type='text/html' href='http://airgear01.blogspot.com/2009/10/c-safe-and-efficient-way-to-release.html' title='[C++] Safe and efficient way to release session/lock'/><author><name>datalost</name><uri>http://www.blogger.com/profile/05280411402423143564</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://2.bp.blogspot.com/_1tVgQsKv358/Su8TOlYOduI/AAAAAAAAABo/zHD1AqifoxI/S220/6-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050653249193748526.post-7721602745621700351</id><published>2009-10-16T11:05:00.000-07:00</published><updated>2009-10-16T12:32:07.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='remote debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='JDPA'/><title type='text'>Java Remote Debugging with JDPA with Eclipse</title><content type='html'>Many Java developers doesn't realize about remote debugging capability, thus make their life stay in trouble when their program start acting weirdly when it's running outside their development environment. Almost all of them start to add special code to print some useful information in some place to diagnose the problem. But is that the best way to do? In my aspect, the easiest way to spot the problem is using JDPA capability to debug it without touching source code...&lt;br /&gt;&lt;br /&gt;To do that, these few steps are required.&lt;br /&gt;&lt;br /&gt;1) Compile Java source code with debugging information attached.&lt;br /&gt;2) Allow remote debugging in target JVM&lt;br /&gt;3) Start remote debugging from supported client (Eclipse is perfect for me)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;First step &lt;/span&gt;&lt;/span&gt;- Compile with debug information.&lt;br /&gt;&lt;br /&gt;Go to project-&gt;properties-&gt;Java Compiler then select the check box as in the pic below&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1tVgQsKv358/Sti5rV0VdBI/AAAAAAAAAAw/VLeznfulVXU/s1600-h/eclipse.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 87px;" src="http://1.bp.blogspot.com/_1tVgQsKv358/Sti5rV0VdBI/AAAAAAAAAAw/VLeznfulVXU/s320/eclipse.JPG" alt="" id="BLOGGER_PHOTO_ID_5393264708018336786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Next step&lt;/span&gt;&lt;/span&gt; - Deploy the compiled classes then enable remote debug in execution JVM&lt;br /&gt;&lt;br /&gt;Build your application which contains debug information from first step then deploy it to target execution environment, then add the following execution arguments.&lt;br /&gt;&lt;br /&gt;&lt;pre class="displaycode"&gt;java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar TechTemp.jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note: The target VM will be suspended until the debugger connects, just to ensure the program will not be executed pass the spot that you need to debug :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The last step&lt;/span&gt;&lt;/span&gt; - Start debugger to attach to remote JVM&lt;br /&gt;&lt;br /&gt;Go to run-&gt;debug configurations then select Remote Java Application&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1tVgQsKv358/Sti_zBoD_YI/AAAAAAAAAA4/cSwAOE07_MQ/s1600-h/eclipse2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 273px;" src="http://2.bp.blogspot.com/_1tVgQsKv358/Sti_zBoD_YI/AAAAAAAAAA4/cSwAOE07_MQ/s320/eclipse2.JPG" alt="" id="BLOGGER_PHOTO_ID_5393271437106871682" border="0" /&gt;&lt;/a&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Change config to fit with your application then hit the Debug button and enjoy debugging!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Acronym:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;JDPA - Java Platform Debugger Architecture&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050653249193748526-7721602745621700351?l=airgear01.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://airgear01.blogspot.com/feeds/7721602745621700351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://airgear01.blogspot.com/2009/10/java-remote-debugging-with-jdpa-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/7721602745621700351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/7721602745621700351'/><link rel='alternate' type='text/html' href='http://airgear01.blogspot.com/2009/10/java-remote-debugging-with-jdpa-with.html' title='Java Remote Debugging with JDPA with Eclipse'/><author><name>datalost</name><uri>http://www.blogger.com/profile/05280411402423143564</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://2.bp.blogspot.com/_1tVgQsKv358/Su8TOlYOduI/AAAAAAAAABo/zHD1AqifoxI/S220/6-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1tVgQsKv358/Sti5rV0VdBI/AAAAAAAAAAw/VLeznfulVXU/s72-c/eclipse.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050653249193748526.post-2397781263169120701</id><published>2009-10-01T13:01:00.000-07:00</published><updated>2009-10-01T13:18:56.218-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hoard'/><category scheme='http://www.blogger.com/atom/ns#' term='Multithread'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Speedup C++ application using Hoard library</title><content type='html'>Does your C++ based application slow down, latency drop or stop working when dealing against a lot of data? Using Hoard might help you get rid of those problem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is Hoard?&lt;/span&gt;&lt;br /&gt;Hoard library,  the great memory allocator for C++ based program which is executed on multi-processor machine.&lt;br /&gt;"Hoard is a drop-in replacement for malloc() that can &lt;strong&gt;dramatically improve application performance, especially for multithreaded programs running on multiprocessors&lt;/strong&gt;"&lt;br /&gt;- &lt;a href="http://prisms.cs.umass.edu/emery/index.php?page=hoard"&gt;Hoard Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How do i adapt Hoard to my program?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You do not need to touch any source code / build procedure to adopt Hoard to your C++ application. Just simply add Hoard lib to your execution environment, that's all! Just read &lt;a href="http://prisms.cs.umass.edu/emery/index.php?page=using-hoard"&gt;here &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download Hoard &lt;a href="http://prisms.cs.umass.edu/emery/index.php?page=download-hoard"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050653249193748526-2397781263169120701?l=airgear01.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://airgear01.blogspot.com/feeds/2397781263169120701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://airgear01.blogspot.com/2009/10/speedup-c-application-using-hoard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/2397781263169120701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050653249193748526/posts/default/2397781263169120701'/><link rel='alternate' type='text/html' href='http://airgear01.blogspot.com/2009/10/speedup-c-application-using-hoard.html' title='Speedup C++ application using Hoard library'/><author><name>datalost</name><uri>http://www.blogger.com/profile/05280411402423143564</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://2.bp.blogspot.com/_1tVgQsKv358/Su8TOlYOduI/AAAAAAAAABo/zHD1AqifoxI/S220/6-1.JPG'/></author><thr:total>0</thr:total></entry></feed>
