<?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-5252664766554532044</id><updated>2011-07-29T01:27:50.088+02:00</updated><title type='text'>Retrospects</title><subtitle type='html'>In order not to forget.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5252664766554532044.post-9077506512602506926</id><published>2009-03-17T19:31:00.003+01:00</published><updated>2009-03-17T19:43:18.865+01:00</updated><title type='text'>LOB in Hibernate over DB2 9.5</title><content type='html'>Using BLOB/CLOB in hibernate may cause exceptions complaining "LOB closed" when running on top of DB2 (see &lt;a href="http://www.hibernate.org/120.935.html"&gt;Hibernat Users FAQ&lt;/a&gt;). The reason can be the &lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.java.doc/doc/cjvjdlob.htm"&gt;progressive streaming feature of DB2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are two solutions:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Use iterate() of ResultSet and load LOB content during each iteration.&lt;br /&gt;  &lt;li&gt;Disable progressive streaming by specifying options in the JDBC url:&lt;br /&gt;   jdbc:db2://localhost:50000/DatabaseName:fullyMaterializeLobData=false;progressiveStreaming=2;progresssiveLocators=2;&lt;br /&gt;      &lt;span style="font-style:italic;"&gt;Please note: fullMaterializeLobData is set to false, which enables lazy loading.&lt;/span&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5252664766554532044-9077506512602506926?l=4remembrance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/9077506512602506926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5252664766554532044&amp;postID=9077506512602506926' title='42 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/9077506512602506926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/9077506512602506926'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/2009/03/lob-in-hibernate-over-db2-95.html' title='LOB in Hibernate over DB2 9.5'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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>42</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5252664766554532044.post-8298508923122111878</id><published>2008-11-13T11:07:00.004+01:00</published><updated>2008-11-13T12:31:26.716+01:00</updated><title type='text'>Two ways to make bad documentation</title><content type='html'>Since our group are going to switch to a modern Content Management System (CMS), I am investigating candidate products. Two promising choices are&lt;a href="http://lenya.apache.org/"&gt; Apache Lenya&lt;/a&gt; and &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt;. I have to say that going deep into neither of the two is pleasing.&lt;br /&gt;&lt;br /&gt;Lenya suffers from lacking documentation. Till now, not a single book is published about it. Furthermore, it is migrating to version 2.0, which renders most of existing documentation useless. At the time of writing, there is no complete manual on the Lenya site. However, because of the conceptual simplicity, Lenya is easier to understand in my opinion. The use of Apache Cocoon also adds to the value of Lenya.&lt;br /&gt;&lt;br /&gt;It is just the other side for Plone. We are just flooded by documentations, which are full of specific terminology  known only inside the community. Again, almost all the existing documentations are out of date for Plone 3. Furthermore, i have a feeling that the document authors are not really serious programmers. They tend to use quite informal and inaccurate descriptions. Maybe that is the way the supporting staff make money. Plone gives me a feeling of SAP, which always requires 2nd development that is more interesting to service staff than to users.&lt;br /&gt;&lt;br /&gt;Lessons learned: &lt;br /&gt;- documentation should be up to date and understandable:&lt;br /&gt;  There should be at least one entry level sample that can be run. If some special terms really have to be used, define them first. Finally, combining documentations for both front-end users and developers would just be confusing.&lt;br /&gt;- Simplicity is much better than complexity&lt;br /&gt;  There should be some overview over the architecture or main mechanism. Although a framework can be rather complicated, there should be some central ideas that are so simple that humans can bear in mind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5252664766554532044-8298508923122111878?l=4remembrance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/8298508923122111878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5252664766554532044&amp;postID=8298508923122111878' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/8298508923122111878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/8298508923122111878'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/2008/11/two-ways-to-make-bad-documentation.html' title='Two ways to make bad documentation'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5252664766554532044.post-3144284708814595309</id><published>2008-02-12T12:43:00.001+01:00</published><updated>2008-02-12T12:55:06.173+01:00</updated><title type='text'>My Visit to Philips Research</title><content type='html'>My most valuable experience from the visit is not about the technical problems being solved. In fact two of three labs i visited were dealing with some medical image processing, operated by physical scientists. Although radioactivity could still be understood, a pair of photons was too distant from me. The remaining project was trying to aim stroke rehabilitation using sensors and computers. During the lunch served around 1pm, we got opportunity talking with those senior researchers with background in physics. It was fun talking with them. A person who has received enough scientific training behaves somehow differently, when they consider problems. It is independent on any particular knowledge, but the insight on solutions, quick understanding of questions, and pragmatic way of problem solving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5252664766554532044-3144284708814595309?l=4remembrance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/3144284708814595309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5252664766554532044&amp;postID=3144284708814595309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/3144284708814595309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/3144284708814595309'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/2008/02/my-visit-to-philips-research.html' title='My Visit to Philips Research'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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-5252664766554532044.post-7460104202576147943</id><published>2007-07-02T14:44:00.002+02:00</published><updated>2007-07-03T18:02:17.002+02:00</updated><title type='text'>Hooray For Mylyn : Task-focused Development in Eclipse 3.3 (Europa)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/mylyn/images/tasklist-splash.jpg"&gt;&lt;img style="width: 172px; height: 420px;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.eclipse.org/mylyn/images/tasklist-splash.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Last Friday, Eclipse 3.3 (code name Europa) was released. As an enthusiast for Eclipse Framework, i cannot wait take a first taste. From my point of view, the most attractive feature, besides other numerous improvements, is the integration of Mylyn, a task focus tool. Some opinions  are to be given in the rest of this review, which are NOT intended as an tutorial of this tool.  Anyone  searching for a tutorial can  see  [1, 2]. A few high level characteristics of Mylyn are going to be discussed, together with some thinking why it is beneficial.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Mylyn in 3 Aspects&lt;/span&gt;&lt;br /&gt;Mylyn is currently described as "task focused UI" officially [4]. However, it is much more than UI. Benefits provided by the tool can be categorized into three aspects:&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:100%;" &gt;Task-focus UI Overlay &lt;/span&gt;&lt;br /&gt;A task is something like a bug or feature requirement, which is usually the unit of work programmers face with everyday. The motivation of task-focus is to easy programmers out of so-called information overloading, which is the case when lots of time is spent solely on navigating and searching for relevant elements(e.g., packages, classes, aspects, or methods)  due to numerous projects in workspace or large enterprise projects. The idea of task focus, inspired by Aspect Oriented Methodology [5], tries to separate out elements (concerns of tasks) ,  which are usually scattered throughout project(s), into units of tasks. Furthermore, the seamless integration with Eclipse GUI makes Mylyn an undoubted success. The use of Mylyn can be pervasive in Europa. You can find it in, just to name a few,  package browser, java editor, synchronizing view, context menu, and etc. All the visual elements have an overlay of task-focus, which mainly does filtering and folding, leaving only elements relevant with current activated task.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Adaptive&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; Relevance Discovery&lt;/span&gt;&lt;br /&gt;The UI overlay works all fine, in presence of task relevance data that maintains all elements relevant with each task. Then, where does such information come from? Mylyn employs a quite smart way: all user interactions are intercepted and recorded. Thus when a task is activated, the knowledge of relevance can be learned gradually. Intuitively, the relevance can be measured simply by counting the references(selecting and editing), while decaying old statistics over time. In fact, Mylyn adopted a tree-structured degree-of-interest model [5]. Since the knowledge of relevance learned by recording programmer activity, is valuable as domain expertise. For example, if someone has to work with legacy issues originally handled by others,&lt;br /&gt;it would be just too nice to have the relevance data available. That is what Mylyn does: relevance data (called &lt;span style="font-style: italic;"&gt;context &lt;/span&gt;of task) can be stored and shared via issue tracking systems (see the next section). We call this type of explicit management of domain expertise &lt;span style="font-style: italic;"&gt;expertise as asset&lt;/span&gt;. It is especially valuable for teamworks (e.g., community driven projects), in which knowledge transfer is expensive.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Tracking Repository Integration&lt;/span&gt;&lt;br /&gt;It is always good to stand on the shoulder of giants. Bug/Issue tracking systems are necessary components of most of the open-source projects today. Mylyn is finely integrated with systems such as Bugzilla, Trac, and JIRA. It provides nice GUI based ticket tracking repository access from IDE. Operations such as query, task submission, automatic notification and offline editing are supported.  According to our experience, integration with IDE not only speed up productivity,  but also encourages use of tracking system in internal projects ( no requirement for public ticket submission). As we stated earlier, Mylyn stores the context (relevance data) in Bugzilla, and allows patches for contexts.  Therefore, expertise is not only shared  but also co-worked on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Lessons Learned&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Separate Concerns&lt;/span&gt;: it is our old friend. From procedures to classes, from scattered crosscutting codes to aspects, we are always employing the divide-and-conquer again and again. Although algorithmically divide-and-conquer does not always lead to better solution, it is almost always good to decompose problems to reasonable sub-tasks in software engineering.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Expertise as Asset&lt;/span&gt;: reuse is really a main issue in improving productivity and reproductivity of a business. For code reuse we have components/libraries; for design reuse we have Model Driven Architecture (model as asset) ; now we have expertise reuse, not for automation but for knowledge transfer or documentation. Code communicates, but easier form of communication is even better.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Integration Is Good&lt;/span&gt;: interoperability between softwares or data repositories is long asking for a solution. The result of successful interoperability usually turns out to be integration. Data Warehouse, Enterprise Application Integration, Service Oriented Architecture can all be deemed as replies to answer such requirements.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;I get excited over the appearance of task-focused UI and believe it will eventually become standard for IDE's to acquire such functionalities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;[1] &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-mylar1/#author"&gt;Mik Kersten&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Task-focused programming with Mylar&lt;/span&gt;. Available at &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-mylar1/"&gt;http://www-128.ibm.com/developerworks/java/library/j-mylar1/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] &lt;span style="font-weight: bold;"&gt;Mylyn User Guide&lt;/span&gt;. Available at &lt;a href="http://wiki.eclipse.org/index.php/Mylyn_User_Guide"&gt;http://wiki.eclipse.org/index.php/Mylyn_User_Guide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[3] Mik Kersten, Rob Elves and Gail Murphy. &lt;span style="font-weight: bold;"&gt;WYSIWYN: Using Task Focus to Ease Collaboration&lt;/span&gt;. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;CSCW Workshop, &lt;/span&gt;&lt;span style="font-size:100%;"&gt; 2006.&lt;br /&gt;&lt;br /&gt;[4] Mylyn Project. &lt;a href="http://www.eclipse.org/mylyn/index.php"&gt;http://www.eclipse.org/mylyn/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[5]  Mik Kersten and Gail Murphy. &lt;/span&gt;&lt;span class="paperTitle"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Mylar: a degree-of-interest model for IDEs&lt;/span&gt;. Aspect Oriented Software Development, 2005.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&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/5252664766554532044-7460104202576147943?l=4remembrance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/7460104202576147943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5252664766554532044&amp;postID=7460104202576147943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/7460104202576147943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/7460104202576147943'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/2007/07/hooray-for-mylyn-task-focused_02.html' title='Hooray For Mylyn : Task-focused Development in Eclipse 3.3 (Europa)'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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-5252664766554532044.post-3078144217943956101</id><published>2007-01-22T14:00:00.000+01:00</published><updated>2007-01-22T14:43:59.684+01:00</updated><title type='text'>A Typical Anti-pattern of using SAX</title><content type='html'>Recently I just  encountered a small problem with parsing XML documents with SAX.  As is well known, the handler interface in SAX has three major call-backs for elements, namely &lt;span style="font-style: italic;"&gt;startElement&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;endElement&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;characters . &lt;/span&gt;&lt;span&gt; The first two methods are called starting/ending a tag, while the third method is aimed at handling character data between tags. The problem lies in the contract of the method &lt;span style="font-style: italic;"&gt;characters(char[] ch, int start, int length)&lt;/span&gt;  . In the specification of SAX 2.0, it is stated that implementations of parsers are &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;required to ensure encapsulating one string between two corresponding tags in one call of this method.&lt;br /&gt;&lt;br /&gt;Thus in order to get the characters between tags, be careful to buffer all the chunks through possibly several calls of &lt;span style="font-style: italic;"&gt;characters()&lt;/span&gt; . What's more,  do build guard boolean variables to collect the characters belonging to one element. Otherwise "\n" between tags might be also collected.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5252664766554532044-3078144217943956101?l=4remembrance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://4remembrance.blogspot.com/feeds/3078144217943956101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5252664766554532044&amp;postID=3078144217943956101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/3078144217943956101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5252664766554532044/posts/default/3078144217943956101'/><link rel='alternate' type='text/html' href='http://4remembrance.blogspot.com/2007/01/migrating-from-sax-10-to-sax-20.html' title='A Typical Anti-pattern of using SAX'/><author><name>Xiang</name><uri>http://www.blogger.com/profile/13023740612959081805</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></feed>
