<?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-1537094750714134446</id><updated>2011-10-12T14:39:58.381+08:00</updated><category term='phoneme'/><category term='mlvm'/><category term='gsoc'/><category term='scala'/><category term='imp'/><category term='java'/><category term='eswt'/><category term='domr'/><category term='continuation'/><category term='jvm'/><category term='swt'/><category term='gae'/><category term='ercp'/><category term='life'/><category term='tshirt'/><category term='rcp'/><category term='db4o'/><category term='jni'/><category term='osgi'/><category term='xquery'/><category term='lpg'/><category term='exquery'/><category term='databinding'/><category term='sdt'/><category term='eclipse'/><category term='cvm'/><category term='ecodebox'/><category term='seed'/><category term='e4'/><category term='bugzilla'/><title type='text'>Being Eclipsed</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-8586831185099404670</id><published>2011-10-06T22:48:00.015+08:00</published><updated>2011-10-06T23:42:02.802+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seed'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>SEED(Scala Eclipse Effort for Development) 1.0M0 Reached</title><content type='html'>&lt;div style="text-align: left;"&gt;SEED(Scala Eclipse Effort for Development) 1.0M0 Reached&lt;/div&gt;&lt;p id="zw-132d9528e63yoPCf0407df9"&gt;&lt;span id="zw-132d95aee4burzZY6407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e63hmb2AC407df9"&gt;&lt;span id="zw-132d9528e34ZX4wB407df9" style=""&gt;Firstly, thanks for your jumping into this entry. The &lt;/span&gt;&lt;a href="https://github.com/jinmingjian/seed" id="zw-132d968bad3UXTqu-407df9" target="_blank" title="SEED"&gt;&lt;span id="zw-132d968bac9dSv7r0407df9" style=""&gt;SEED&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d968bacaAp7hKZ407df9" style=""&gt;(Scala Eclipse Effort for Development) project is my current weekend project. The sources of SEED can be seen in the github: &lt;/span&gt;&lt;a href="https://github.com/jinmingjian/seed" id="zw-132d97af85dUaQEj407df9"&gt;&lt;span id="zw-132d97af85d8yWDj407df9" style=""&gt;https://github.com/jinmingjian/seed&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d97af869B4XEv407df9" style=""&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e63YqaNE2407df9"&gt;&lt;span id="zw-132d952d6dbhrg6F5407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d95ab4855dMuk407df9" style="font-size: 1.0909090909090908em; font-weight: bold; "&gt;&lt;/span&gt;&lt;span id="zw-132d95b21e2EvbxDe407df9"&gt;table of contents&lt;/span&gt;&lt;span id="zw-132d95b21f1yqevM407df9" style="font-size: 1.0909090909090908em; font-weight: bold; "&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e64xkG6dm407df9"&gt;&lt;span id="zw-132d959c3814c7tvn407df9" style="font-weight: bold; font-style: italic; "&gt;Motivation&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64ejwR8407df9"&gt;&lt;span id="zw-132d9528e35iYLVHC407df9" style="font-weight: bold; font-style: italic; "&gt;M0: a clear architecture&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e645yZO0l407df9"&gt;&lt;span id="zw-132d9528e350CcBno407df9" style="font-weight: bold; font-style: italic; "&gt;Incubated in the bleeding edge  &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64ahCb4407df9"&gt;&lt;span id="zw-132d9528e35puS7zx407df9" style="font-weight: bold; font-style: italic; "&gt;Answer to the community&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64jFp2t4407df9"&gt;&lt;span id="zw-132d9528e35rFr6dt407df9" style="font-weight: bold; font-style: italic; "&gt;What’s next&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64d3NE04407df9"&gt;&lt;span id="zw-132d9528e35FeKsN2407df9" style="font-weight: bold; font-style: italic; "&gt;Invite to contribute &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64ijI5Q7407df9"&gt;&lt;span id="zw-132d9528e36Rdqp_R407df9" style="font-weight: bold; font-style: italic; "&gt;Self-introduction&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64Nrtvs3407df9"&gt;&lt;span id="zw-132d959aeb8ia5h94407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e3bHrmXGZ407df9" style=""&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d959f607k-YZX407df9"&gt;​&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e64T4wDDg407df9"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span id="zw-132d959de92fNvGYI407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d95c32a2tFg1PC407df9"&gt;Motivation&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p id="zw-132d9528e66ehvYjq407df9"&gt;&lt;span id="zw-132d95b81bfnLtcZe407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e3cg9yIZB407df9" style=""&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d95bc708XpdvjU407df9"&gt;​&lt;/span&gt;What do you really matter when taking Scala into one large software production instead of Java? the IDE tooling? Yes, the professional Scala Developers need the professional tools to hack engineering. Because Java IDE have set a high bar to the user experience of language IDE, it is hard to think the developers and especially the enterprises will be comfortable with changing into a much worse coding environment although the language itself seem better.&lt;/p&gt;&lt;p id="zw-132d9528e66_lZn53407df9"&gt;&lt;span id="zw-132d95bac64aI1OJO407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e3cUIRCtD407df9" style=""&gt;The basic motivation is to drive the design and implementation of SEED to match the requirements of the professional Scala Developers.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6789hPGD407df9"&gt;&lt;span id="zw-132d95be370hwQh9407df9"&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d963beabQOtssc407df9"&gt;​&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d963beaaAuzcDn407df9"&gt;&lt;span id="zw-132d963beaafvAEYh407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e674rklo407df9"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span id="zw-132d95bd30aICmwa6407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d95c1d32USX6Gu407df9"&gt;M0: a clear architecture&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67caZkdd407df9"&gt;&lt;span id="zw-132d95bd1a3j_Y2fG407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e67FtK5N8407df9"&gt;&lt;span id="zw-132d9528e3e8m2Ssp407df9" style=""&gt;The basic philosophy of the SEED is :&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67zfXCgQ407df9"&gt;&lt;span id="zw-132d9528e3eNDqOJg407df9" style=""&gt;1. stable user experiences is first&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67OLQRXM407df9"&gt;&lt;span id="zw-132d9528e3eJJwMy_407df9" style=""&gt;2. reflect the language characteristics and merits of Scala itself&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e675NZfa6407df9"&gt;&lt;span id="zw-132d9528e3eB5sB4b407df9" style=""&gt;3. do not depend on uncontrolled sources;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67O5zzOk407df9"&gt;&lt;span id="zw-132d9528e3fP4HtBQ407df9" style=""&gt;4. invite community to contribute&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67D7TOPy407df9"&gt;&lt;span id="zw-132d95d30fdKlTj8E407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e40ofRBsm407df9" style=""&gt;The overall architecture and concerns could be seen as follow picture:&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-family: Simsun; font-size: medium; "&gt;&lt;a href="http://3.bp.blogspot.com/-NhYebvQqEi4/To3A7GkTD_I/AAAAAAAAAPk/9ZNGmju5c5w/s1600/SEED_superdaddy.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://3.bp.blogspot.com/-NhYebvQqEi4/To3A7GkTD_I/AAAAAAAAAPk/9ZNGmju5c5w/s320/SEED_superdaddy.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5660392428282253298" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 278px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;p id="zw-132d9528e67NMNB8o407df9"&gt;&lt;span id="zw-132d95d4f28g5edH8407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e42t8BUQ3407df9" style=""&gt;Then, what can we see in the SEED m0? Compare two snapshots  between the SEED m0 and the Scala-IDE(one version in July, 2011):&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e67xQYBv407df9"&gt;&lt;span id="zw-132d9608b17mqyfC407df9"&gt;&lt;span id="pbdiv2" pid="2"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span id="zw-132d9618697mjyAdr407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d96146c8Y2ORA407df9"&gt;&lt;/span&gt;&lt;img align="bottom" alt="" id="zw-132d96146eaHB-ms8407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde08e2d6321377f4d6cfe17de5f5f3abd8" style="opacity: 1; width: 601px; height: 512px; " title="" /&gt;&lt;span id="zw-132d96146eb2L0-3r407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e68xX6GM4407df9"&gt;&lt;span id="zw-132d962dbabzrq8M407df9" style="font-style: italic; "&gt;from Scala-IDE&lt;/span&gt; &lt;span id="zw-132d962e2d94x0lg4407df9"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68X3bAe407df9"&gt;&lt;span id="zw-132d96162aaq_2coA407df9"&gt;&lt;span id="pbdiv3" pid="3"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;img align="bottom" alt="" id="zw-132d96242caMpcOp3407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde1dd68aebc884b347c4c980d4a57a146d" style="opacity: 1; width: 601px; height: 507px; " title="无标题" /&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68X3bAe407df9"&gt;&lt;/p&gt;&lt;div style="display: inline !important; "&gt;&lt;div style="display: inline !important; "&gt;&lt;p id="zw-132d9528e68X3bAe407df9" style="display: inline !important; "&gt;&lt;span style="font-style: italic; "&gt;f&lt;span class="Apple-style-span"&gt;rom SEED&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style="font-family: Simsun; font-size: medium; "&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68lspyn1407df9"&gt;&lt;span id="zw-132d9621bccMT5xO-407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e44y322dt407df9" style=""&gt;from the snapshots, it can been seen that:&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68201dE8407df9"&gt;&lt;span id="zw-132d9528e44Qa5LN8407df9" style=""&gt;1. the packagings are mapped usefully&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68FQIGqq407df9"&gt;&lt;span id="zw-132d9528e44xduvRw407df9" style=""&gt;it will provide the viewpoint of flattening the packaging(collapse empty packagings)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68Ra7Fz3407df9"&gt;&lt;span id="zw-132d9528e440WvBbF407df9" style=""&gt;2. method member's signature only displays the type of parameter, some member's type is missing&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68NUzMxC407df9"&gt;&lt;span id="zw-132d9528e44KD7Ek407df9" style=""&gt;this is by design almostly , except the main(Array) is not full displayed for the unfinished type model. It is decided that the SEED Scala model scanner will not do any inference than the simple syntax scanning. Then, how to get the type infos? The type infos will be decorated in the later when it is resovled by the nsc. The Scala model scanner is not replacement for NSC. It collaborates with NSC.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68S4H6N8407df9"&gt;&lt;span id="zw-132d9528e44JrRHfN407df9" style=""&gt;3. ':', '=' are highlighted as the keyword&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68H8RfEg407df9"&gt;&lt;span id="zw-132d9528e45KZdDmk407df9" style=""&gt;these symbols are reserved words explicitly by the Scala specification[1]. As this is a little different to the Java, the SEED will provide a preferences to configure this in the future.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68GNDhim407df9"&gt;&lt;span id="zw-132d9528e45qWVCoC407df9" style=""&gt;4. expression have been addressed &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68E4b-6u407df9"&gt;&lt;span id="zw-132d9528e45fJE8nB407df9" style=""&gt;this construct is quasi-unique for Scala(but similar to the initialization block ), like the self &lt;/span&gt;&lt;span id="zw-132d961f1derQjiDo407df9" style=""&gt;type, early definition, class parameters, type definition... The SEED will provide the outline item for visualizing them. However, as the reason that I mentioned in &lt;a href="http://jmj-eclipse.blogspot.com/2011/09/blog-post.html"&gt;one previous blog entry&lt;/a&gt;, it is decided that the SEED Scala Model scanner will not do any inference than the simple syntax scanning. So, the Expression, as one kind of temp&lt;/span&gt;&lt;span id="zw-132d961f1dfBS5_hf407df9" style=""&gt;late statement, will be displayed as {...}, FYI. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e68vTr57l407df9"&gt;&lt;span id="zw-132d963529d6wgKYw407df9"&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d9636482Sn27i8407df9"&gt;​&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9636481tFM4-F407df9"&gt;&lt;span id="zw-132d96364818lgd7407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e46vx1tC7407df9" style=""&gt;The internal thought behind the snapshot is:&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6938NMU7407df9"&gt;&lt;span id="zw-132d9528e46ozf4eN407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d96327d5rsXZRE407df9" style=""&gt;1. the SEED have a lightweight Scala Model system which services for the presentation layer &lt;/span&gt;&lt;span id="zw-132d9641514Abbe1407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d965085bvsjzIv407df9" style=""&gt;&lt;span id="pbdiv4" pid="4"&gt;​&lt;/span&gt;and kept in the memory with editor.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69uFYkgX407df9"&gt;&lt;span id="zw-132d9528e46yBu6k407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d9529742A8_PjN407df9" style=""&gt;2. Scala NSC will provide the full semantics and AST of Scala sources as a background service;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69tguxBm407df9"&gt;&lt;span id="zw-132d9528e46CnNW407df9" style=""&gt;3. Scalal NSC nuts (like AST...) considered heavyweight will be discarded by UI immediately&lt;/span&gt;&lt;span id="zw-132d95a2dc1ZoRdkJ407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95b2174SB819g407df9" style=""&gt; after used.(however, it has not right to ask the NSC to do this as well)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69TzpT24407df9"&gt;&lt;span id="zw-132d96371f4pUqMDC407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e692yxjhl407df9"&gt; &lt;/p&gt;&lt;p id="zw-132d9528e69rzFRhD407df9"&gt;&lt;span id="zw-132d9528e47dPfdd8407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95e3a97xGCb3i407df9" style=""&gt;For the time limitation, I do not deep into more aspects of design. Ho&lt;/span&gt;&lt;span id="zw-132d95e3a98bPKQ8y407df9" style=""&gt;wever, heavy investigations and works have been done in the m0. I believe the architecture have given a solid basic editing exprience to the SEED, and will pave the way for cool features like reference navigation in the next.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69OxnCb407df9"&gt;&lt;span id="zw-132d9528e47mroL4p407df9" style=""&gt;In m0, the SEED goes beyond the editor.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69kn_xeh407df9"&gt;&lt;span id="zw-132d9638659Cxwhzf407df9"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69Lo9jA0407df9"&gt;&lt;span id="zw-132d96391c5NLf31Z407df9"&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d963f64cU6xgc407df9"&gt;​&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d963f64bSkTuFp407df9"&gt;&lt;span id="zw-132d963f64bhfifLF407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e692O--4i407df9"&gt;&lt;span id="zw-132d964142eUZPz-A407df9"&gt;&lt;b&gt;Incubated in the bleeding edge  &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69l3l9y9407df9"&gt;&lt;span id="zw-132d96b9c79jh8-eC407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e69ECHKAB407df9"&gt;&lt;span id="zw-132d9528e494lJMV407df9" style=""&gt;This is long topic for the SEED. I pick up some interestings for showing. The SEED adopts two techniques in e4: EMF and DI(Dependency Injection).&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69e6_tud407df9"&gt;&lt;span id="zw-132d96442fePowHyq407df9"&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d9651a55OXZQNv407df9"&gt;​&lt;/span&gt;&lt;span id="zw-132d9651a54VB97Ns407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e491aGOiZ407df9" style=""&gt;These two techniques are just the basestones of the coming Eclipse 4.2 release("&lt;/span&gt;&lt;a href="http://http//wiki.eclipse.org/Juno" id="zw-132d979799ftP7g04407df9" target="_blank" title="Juno"&gt;&lt;span id="zw-132d9797995vc7Kx1407df9" style=""&gt;Juno&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d9797996YUiH8D407df9" style=""&gt;") . However, they are not very known even by Eclipse platform developers.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e69A-SzQI407df9"&gt;&lt;span id="zw-132d9652a49nEK8ds407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4amL4Hu407df9" style=""&gt;&lt;/span&gt;&lt;a href="http://http//www.eclipse.org/emf/" id="zw-132d979c60bqofku407df9" target="_blank" title="EMF"&gt;&lt;span id="zw-132d979c601txLLyw407df9" style=""&gt;EMF&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d979c602SEdqn407df9" style=""&gt; is one effective modeling framework in fact. The big picture of the SEED Scala Model is here:&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9656aabbIPXPQ407df9"&gt;&lt;span id="zw-132d9656aaaYs6NfS407df9" style=""&gt;&lt;span id="pbdiv5" pid="5"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://3.bp.blogspot.com/--AB7t5rOs8E/To3Bwi-55PI/AAAAAAAAAPs/dJQeBE2gh4s/s400/scalamode_v0.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5660393346443109618" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 333px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span id="zw-132d9656aaaYs6NfS407df9" style=""&gt;&lt;span id="pbdiv5" pid="5"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d9656aabIp0PcX407df9"&gt;​&lt;/span&gt;&lt;span id="zw-132d965364czqCHJ407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4bg0byyy407df9" style=""&gt;It shows a early version of model structure in that I drop the ecore graphical tooling later for the obvious sync problem. And the type subsystem is still in the changing.&lt;/span&gt;&lt;/div&gt;&lt;p id="zw-132d9528e6ayMtTN1407df9"&gt;&lt;span id="zw-132d9528e4b7BW-ag407df9" style=""&gt;&lt;span class="z-cursor-spacer" id="zw-132d965485es9prXF407df9"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4bIEEVN407df9" style=""&gt;EMF really makes the SEED deveoplement easier. With it, the SEED model elmenets have the capabilities of notification and navigation when it borns. And I have done the ContentProvider for thirty model elements in thirty lines by just using the EMF reflection. And I predicate that more &lt;/span&gt;&lt;span id="zw-132d962aa06V5eydb407df9" style=""&gt;emf based techniques would contribute to the SEED. This is just the trend shown in Eclipse Juno.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6aE0EUef407df9"&gt;&lt;span id="zw-132d9663628Xk_qM6407df9"&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d96647d7984cXk407df9"&gt;​&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d96647d5O6LUkH407df9"&gt;&lt;span id="zw-132d9528e4cOz7321407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d96415241k5ZE407df9" style=""&gt;The other technique - &lt;/span&gt;&lt;a href="http://http//wiki.eclipse.org/Eclipse4/RCP/Dependency_Injection" id="zw-132d97925d5QQr2QC407df9" target="_blank" title="e4 DI"&gt;&lt;span id="zw-132d97925ccODrle407df9" style=""&gt;e4 DI&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d97925ccZKF9_407df9" style=""&gt;(Dependency Injection)&lt;/span&gt;&lt;span id="zw-132d953bbdbMW3-Iy407df9" style=""&gt;, is relatively new topic in the Eclipse world.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6aaYyat4407df9"&gt;&lt;span id="zw-132d966558dP0Qkyu407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4dPSVYZ3407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95a2dc2Z1M85y407df9" style=""&gt;The OSGI D&lt;/span&gt;&lt;span id="zw-132d95a2dc3bOBeY0407df9" style=""&gt;S spec trys to remove the boilerplate codes in the services' publishing/referencing in the form of one component model. However, the component model itself introduces some new &lt;/span&gt;&lt;span id="zw-132d95c15978yHqN6407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95c5ed88v0tZW407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d960017amhwH18407df9" style=""&gt;boilerplates. One problem is, you need to reference the service in one com&lt;/span&gt;&lt;span id="zw-132d95c15995z9hdh407df9" style=""&gt;ponent in the DS. Even through one component is like one POJO in appearance, its cost is far from that of POJO&lt;/span&gt;&lt;span id="zw-132d95e3a98D2FckZ407df9" style=""&gt; in the bottom. The worse thing is, the component instantiation is under the control of (DS) framework. If some components need to be instantiated by hand or by other frameworks, the own business object can not consume the service directly. It needs to design kinds of auxiliary callback structures to expose the service to the business object(or some services may be designed with &lt;/span&gt;&lt;a href="http://http//www.google.com.hk/webhp?hl=en#hl=en&amp;amp;q=osgi+Whiteboard" id="zw-132d978b2afzOpGuc407df9" target="_blank" title="&amp;quot;Whiteboard&amp;quot; pattern"&gt;&lt;span id="zw-132d978b2a5ZshTPQ407df9" style=""&gt;"Whiteboard" pattern&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d978b2a6VY4KxH407df9" style=""&gt;). (This is by my understanding to the DS spec in the early years. If some one think it is not true, please correct me. I will clear it for DS^_^) The final result is that, we&lt;/span&gt;&lt;span id="zw-132d960f914MSwFpD407df9" style=""&gt; pusblish the serivce in the DS-style, but return to consume it in the ServiceTracker-style in our own business object. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6aYCcYWf407df9"&gt;&lt;span id="zw-132d9528e4dLvlVHM407df9" style=""&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-132d9667013gL4vn5407df9"&gt;​&lt;/span&gt;&lt;span id="zw-132d9528e4dTBeN8407df9" style=""&gt;The e4 DI is one technique which could solve all these problem . We can use the e4 DI to inject the service directly. The contexts should/can maintain the boiledplates for service consumers.  &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6ae3IxX3407df9"&gt;&lt;span id="zw-132d9667647CkFz-K407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4de7uxo7407df9" style=""&gt;For the Eclipse 4.2's ugly face and a little bad experiences, I still use the Eclipse 3.8 milestone. After some investigation into sources, I have successfully integrate the e4 DI in the 3.8 enviroment. There are some tricks for doing this. However, still for the time limitation, I can write another blog to address these tricks. If you want to do similar things just now, you can consult the usage of ILexingService in the com.github.seed.core here. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6aCnrTaY407df9"&gt;&lt;span id="zw-132d968def8QJHOU407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e4e1ZL1Pz407df9" style=""&gt;In a word, the SEED, as the Eclipse-based IDE, have aligned with the newest Eclipse techniques. Futhermore, the SEED will follow the rhythm of Eclipse, but not the Scala(however, the internal of SEED will depends on the svn head of Scala after bootstrap). The SEED definitely should support to choose your favorite Scala system library(I leave the Scala team to guarantee the compatibility^_^). the SEED R1.0 will come soon after the Eclipse R4.2/3.8. I will definitely consider the compatibility to the Eclipse platform. As for the clear base, the SEED may support the plaftform from R3.6 to R4.2 if it is really needed:)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b-GcJvB407df9"&gt;&lt;span id="zw-132d968f388UtMM-407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6b9dDBpg407df9"&gt;&lt;span id="zw-132d9528e4elHxZRf407df9" style=""&gt;There are many other internal designs and implementations in the SEED not mentioned above. such as how about the Scala Model Scanner, the source Lexer. Some of them are in the changing. The key here is that, all designs and implementations have been thought to conform to the basic philosophy mentioned above. For the limitation of &lt;/span&gt;&lt;span id="zw-132d961f1e0P7_11U407df9" style=""&gt;both time and space, it is hoped it could be covered in the future.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b9dDBpg407df9"&gt;&lt;span id="zw-132d961f1e0P7_11U407df9" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6bZK0Djy407df9"&gt;&lt;span id="zw-132d968fc684IfBKA407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6bq2NcmG407df9"&gt;&lt;span id="zw-132d96b5d2en3fu6l407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6bryVUWp407df9"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span id="zw-132d9528e4fJoL0ij407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d96b7fa45DFqnA407df9"&gt;What’s next&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6bBM3_So407df9"&gt;&lt;span id="zw-132d9697058Zv-cKu407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6bnOz6O-407df9"&gt;&lt;span id="zw-132d9528e50AFUgh7407df9" style=""&gt;Recent milestone concerns:&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b-oEwtN407df9"&gt;&lt;span id="zw-132d9528e50Xl4Kwc407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d96327e1jljp0X407df9" style=""&gt;M1 theme: bootstrapping&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b9aa1NA407df9"&gt;&lt;span id="zw-132d9528e50l6YJg407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d9529752NQ7Ozd407df9" style=""&gt;type system(index system)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6bIoTcUv407df9"&gt;&lt;span id="zw-132d9528e508XMf9G407df9" style=""&gt;nsc integration(I am planning to do a tweek for NSC to make the integration more more natively)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b0wECJM407df9"&gt;&lt;span id="zw-132d9528e50HheFA407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95a2dde7UZvmI407df9" style=""&gt;build system(fsc?/sbt?)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6bvEKwld407df9"&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6bbYCFZ4407df9"&gt;&lt;span id="zw-132d9528e51vvli9l407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95e3a99PrREU-407df9" style=""&gt;M2 theme: &lt;/span&gt;&lt;span id="zw-132d95e3a99e82GJ9407df9" style=""&gt;self-hosted&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6b9DbO5T407df9"&gt;&lt;span id="zw-132d9528e5112ZUL8407df9" style=""&gt;binary class viewer&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6bqOaiX407df9"&gt;&lt;span id="zw-132d9528e51dXY-5p407df9" style=""&gt;preference to switch your own scala system library &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6biKW-To407df9"&gt;&lt;span id="zw-132d9528e51Dgn7zR407df9" style=""&gt;classpath container support&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cdXCPs_407df9"&gt;&lt;span id="zw-132d9528e51q-z84A407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d960f92e4_yXod407df9" style=""&gt;SEED codes wiill switch to Scala(eat my own dog food)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cJvIqWC407df9"&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6cTkA-Io407df9"&gt;&lt;span id="zw-132d9528e52hF5lS2407df9" style=""&gt;M3-R1.0: &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6c1ALZ7f407df9"&gt;&lt;span id="zw-132d9528e52QCUxlS407df9" style=""&gt;performance&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cNSr4Cc407df9"&gt;&lt;span id="zw-132d9528e52kbVotH407df9" style=""&gt;preferences&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cV1Olcu407df9"&gt;&lt;span id="zw-132d9528e52SW_U-m407df9" style=""&gt;customized CNF-based "Scala Package" view&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6c7gZPbK407df9"&gt;&lt;span id="zw-132d9528e52oeTUjx407df9" style=""&gt;basic mixed Java/Scala integration&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cQPnTHt407df9"&gt;&lt;span id="zw-132d9528e52vAsot_407df9" style=""&gt;basic refactoring support(rename)&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cRYdN3s407df9"&gt;&lt;span id="zw-132d9528e53YtY_Mt407df9" style=""&gt;my implicit highlighting work&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cVIRnfy407df9"&gt;&lt;span id="zw-132d9528e533UR0Nl407df9" style=""&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cA1cCAq407df9"&gt;&lt;span id="zw-132d9528e53ccNDED407df9" style=""&gt;any contributions&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cA1cCAq407df9"&gt;&lt;span id="zw-132d9528e53ccNDED407df9" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cWC0XJO407df9"&gt;&lt;span id="zw-132d96bc23b9JBAoi407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6cha-sjJ407df9"&gt;&lt;span id="zw-132d96bc6b0JkLKaY407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6cFpi8bZ407df9"&gt;&lt;span id="zw-132d96bbec74wF3407df9"&gt;&lt;b&gt;Answer to the community&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cwVLhkV407df9"&gt;&lt;span id="zw-132d96badd2p3LWVz407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6ccBdhpu407df9"&gt;&lt;span id="zw-132d9528e54rpk45k407df9" style=""&gt;I may answer one question to the community: why not contribute to the Scala-IDE project? &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cqM6ih407df9"&gt;&lt;span id="zw-132d9528e54A-VKqb407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d961f1e1IoWiDw407df9" style=""&gt;The answer is: Simply, I can not agree on the base architecture of the Scala-IDE. In fact, the two projects has much different architectures. SEED is a clean-room implementation, even for its icons. All of my ideas are hard to be implemented in the Scala-IDE. Workarounds may exist, but it is definitely ugly. The tooling for Scala should originally be one straight, happy, rhythmical work for developer. But now it becomes the headaches o&lt;/span&gt;&lt;span id="zw-132d961f1e1Zg6aI407df9" style=""&gt;f some hardworker. However, in the future, it could be possible to collaborate if we reach an agreement on the base. I hope the SEED would become a seed for one great Scala IDE.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6cqM6ih407df9"&gt;&lt;span id="zw-132d961f1e1Zg6aI407df9" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dfIlp_B407df9"&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6dfDltN1407df9"&gt;&lt;span id="zw-132d96bdf8a-BweKD407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6d5eyTDn407df9"&gt;&lt;span id="zw-132d96bf264shJTPv407df9"&gt;&lt;b&gt;Invite to contribute &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dviRuNk407df9"&gt;&lt;span id="zw-132d96be353-JJvAn407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6dUAfDuP407df9"&gt;&lt;span id="zw-132d9528e574fAAhn407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d952975bhmpWDg407df9" style=""&gt;For the clear architecture, it is easy and fun to contribute to SEED. The informal prerequisite is the basic knowledge of Java, Scala, Eclipse and/or OSGI. But you can contribute anything even if you are not a programmer.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dVAo7WQ407df9"&gt;&lt;span id="zw-132d96bfe62ulLpIT407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e57lSgOlo407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d95c159aR2-vF0407df9" style=""&gt;Let's say about the feature of "Mark Occurrences", it could be implemented by adding a new &lt;/span&gt;&lt;span id="zw-132d95e3a99V8u6A2407df9" style=""&gt;token based occurrences detection servi&lt;/span&gt;&lt;span id="zw-132d95e3a9aFpHo_c407df9" style=""&gt;ce (like I&lt;/span&gt;&lt;span id="zw-132d95c159at_S8mi407df9" style=""&gt;FetchOccurrencesService) by consuming the LexingService as the backend. As for the frontend(UI), you can mock my token highlighting logic firstly. Or it is better to abstract one token based rendering service for all kinds of things in the future. It may cost hours or days which depends on what you want to do and how much you are familiar with the Eclipse platform. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dlsCf5Y407df9"&gt;&lt;span id="zw-132d96c11b89EWFMp407df9"&gt;&lt;/span&gt;&lt;span id="zw-132d9528e58tfhv407df9" style=""&gt;&lt;/span&gt;&lt;span id="zw-132d960f915VH1ro4407df9" style=""&gt;I will be &lt;/span&gt;&lt;span id="zw-132d960f916F19Fu3407df9" style=""&gt;very glad to see your name &lt;/span&gt;&lt;a href="http://https//github.com/jinmingjian/seed/contributors" id="zw-132d97831a7CK8Xy407df9" target="_blank" title="here"&gt;&lt;span id="zw-132d978319dyWZsR8407df9" style=""&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d978319dJ0slez407df9" style=""&gt;. Or you like to fork or clone to play the codes first.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dlsCf5Y407df9"&gt;&lt;span id="zw-132d978319dJ0slez407df9" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6daEfAkN407df9"&gt;&lt;span id="zw-132d96c1b14yiwcWH407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6dh8SF83407df9"&gt;&lt;span id="zw-132d96c551dw-MMs_407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6dTXHYlZ407df9"&gt;&lt;span id="zw-132d96c73d8dkCipd407df9"&gt;&lt;b&gt;Self-introduction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6d_WQB7407df9"&gt;&lt;span id="zw-132d96c9e3bzX9LHO407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6dlaWWa5407df9"&gt;&lt;span id="zw-132d9528e595XgPoT407df9" style=""&gt;This last section in this blog entry seem odd. I hope this advertisement will not disturb you. I have written &lt;a href="http://jmj-eclipse.blogspot.com/2011/07/call-for-job-opportunities.html"&gt;a blog entry&lt;/a&gt; about myself and my techinical road here in July.  &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dodeCXH407df9"&gt;&lt;span id="zw-132d9528e59gHMnf9407df9" style=""&gt;I have touched several startups for some Scala opportunities. It is interesting that the number of scala opportunities is much less than ruby/python/javascript in the U.S.. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6dV3q0Qo407df9"&gt;&lt;span id="zw-132d9528e59oh81vA407df9" style=""&gt;However, it is found that the main problem for me is that the foreign H1B sponsorship is considered heavy for the startup. So, I decide to widen the seeking range to Eclipse/OSGI(or Java?) now.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6els9Fip407df9"&gt;&lt;span id="zw-132d9528e5947-icQ407df9" style=""&gt;If you read here and your employer are seeking Scala/Eclipse/OSGI work and your employer supports the foreign H1B sponsorship, please help to give me a recommendation if you think I am qualified for your works. What I can promise is, if it fail to apply for the work permit, I can contribute to one project your company pointing in my two month's weekends to compensate your application cost! My current work is about the web serivce component development for an well-known application server. In fact, I have done many backend works as well. &lt;/span&gt;&lt;span id="zw-132d97386a7Tr0bdI407df9"&gt;For the sake of privacy, we can talk about more privately. I &lt;/span&gt;&lt;span id="zw-132d976c1f2sAc17a407df9"&gt;gratefully &lt;/span&gt;&lt;span id="zw-132d976c202kKB0BN407df9"&gt;thank for any &lt;/span&gt;&lt;span id="zw-132d977057axjyxiL407df9"&gt;opportunities&lt;/span&gt;&lt;span id="zw-132d9770589X8pAOW407df9"&gt; &lt;/span&gt;&lt;span id="zw-132d97570a53crESV407df9"&gt;on behalf of my family.&lt;/span&gt;&lt;span id="zw-132d97570b134lj_S407df9"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6e5mwCx3407df9"&gt;&lt;span id="zw-132d9528e5aWzUil_407df9" style=""&gt;I will pause the SEED development in the following several weekends for fully seeking the new&lt;/span&gt;&lt;span id="zw-132d961f1e2ElH-d407df9" style=""&gt; opportunities. But I think it will be finalized quickly. I will be back soon.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6e5mwCx3407df9"&gt;&lt;span id="zw-132d961f1e2ElH-d407df9" style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6e3bGCUz407df9"&gt;&lt;span id="zw-132d9528e5aqpr5l-407df9" style=""&gt; &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6eB7wGG3407df9"&gt;&lt;span id="zw-132d96cda10X354j8407df9"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p id="zw-132d9528e6eeHn7eQ407df9"&gt;&lt;span id="zw-132d9528e5aa18fFo407df9" style=""&gt;Finally, as a rule, the SEED 1.0 should have a codename. I decide to call the R1.0 as the &lt;/span&gt;&lt;span id="zw-132d962aa08bPW6407df9" style=""&gt;"&lt;b&gt;SuperDaddy&lt;/b&gt;"(under the umbrella of Eclipse "&lt;/span&gt;&lt;a href="http://http//wiki.eclipse.org/Juno/Initial_Working_Plan" id="zw-132d96f0868FFMBXX407df9" target="_blank" title="Juno"&gt;&lt;span id="zw-132d96f085eadb88a407df9" style=""&gt;Juno&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-132d96f085efcOnAq407df9" style=""&gt;"^_^) to acknowledge my wife and daughter's support in these weekends. I love you!&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-132d9528e6eKW8pYJ407df9"&gt;&lt;span id="zw-132d96cd63bXe252407df9"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-8586831185099404670?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/8586831185099404670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=8586831185099404670&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8586831185099404670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8586831185099404670'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2011/10/seedscala-eclipse-effort-for.html' title='SEED(Scala Eclipse Effort for Development) 1.0M0 Reached'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-NhYebvQqEi4/To3A7GkTD_I/AAAAAAAAAPk/9ZNGmju5c5w/s72-c/SEED_superdaddy.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-8280856315375747008</id><published>2011-09-06T22:34:00.009+08:00</published><updated>2011-09-07T09:55:49.236+08:00</updated><title type='text'>When is the SEED M0?</title><content type='html'>&lt;meta content="[{'paperheight':'11.69','paperwidth':'8.27','count':'1','gap':'0.5','unit':'inch'}]" id="pageLayoutMeta"&gt;&lt;style id="styletagforeditor"&gt;body{background-color:#ffffff;direction:ltr;font-family:arial;font-size:11pt;line-height:1.2;padding-top:0.5in;padding-right:1in;padding-bottom:0.5in;padding-left:1in;margin:0in;} p{margin-top:0pt;margin-bottom:12pt;}&lt;/style&gt;&lt;style id="styletagtwoforeditor"&gt;table { font-size: 11pt } table p, li p { margin : 0px; }&lt;/style&gt;&lt;link href="/styles/editor.css?BLabel=Sep_02_2011" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;meta content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;p id="zw-1323ee8b08be4r7k7407df9"&gt;&lt;span id="zw-1323ee8b2a0YQ2r7M407df9"&gt;&lt;/span&gt;&lt;span id="zw-1323ee8d6f16RuahT407df9"&gt;When is the SEED M0?&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323ee9a626yQKdtZ407df9"&gt;&lt;span id="zw-1323eec3405bIYBei407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;As recently one Chinese developer have commented about the status of my &lt;/span&gt;&lt;span id="zw-1323eebb66cIgFaFS407df9" style="color: rgb(51, 51, 51); line-height: 16px; background-color: rgb(250, 250, 250); font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;recently blogged &lt;/span&gt;&lt;span id="zw-1323eec0063R9smW6407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;project  about the Scala Eclipse IDE. Because this blog is published without any tags. So I used to think nobody will focus on it. This is my expectation in that I &lt;/span&gt;&lt;span id="zw-1323ef0fbdfHZsjH2407df9"&gt;I have no habit of publishing any toys&lt;/span&gt;&lt;span id="zw-1323ef0fbe3ihVOCc407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;. &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323eee8cd9zn83O8407df9"&gt;&lt;span id="zw-1323ef011e1Bgybeb407df9"&gt;&lt;/span&gt;&lt;span id="zw-1323eee8e24NEhxE407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;I'd like to first &lt;/span&gt;&lt;span id="zw-1323ef1c7b3cLNK0407df9"&gt;announce the name of project is SEED&lt;/span&gt;&lt;span id="zw-1323ef1c7b98JucH0407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt; -  Scala Eclipse Effort for Development":) This project will be hosted in the github. The recent funny thing is &lt;/span&gt;&lt;span id="zw-1323ef60ffdM98qUw407df9"&gt;Linus Torvalds move &lt;/span&gt;&lt;a href="https://github.com/torvalds/linux" id="zw-1323ef76391ear0e407df9" target="_blank" title="the latest linux kernel tree to the github"&gt;&lt;span id="zw-1323ef76387mcSur407df9"&gt;the latest linux kernel tree to the github&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-1323ef76388A8BYJe407df9"&gt;. &lt;/span&gt;&lt;span id="zw-1323ef61002dKq4We407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;  &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323ef7eafaNbh5Or407df9"&gt;&lt;span id="zw-1323ef7eafa53iWZ407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;The biggest hard point of SEED now is the time. I basically have no time to contribute it &lt;/span&gt;&lt;span id="zw-1323ef95a25j-TPzq407df9"&gt;except the weekend&lt;/span&gt;&lt;span id="zw-1323ef95a2cV5LeRw407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;. I have killed two version of the implementation way. Finally, I decided that  there must be one new Scala Model for &lt;/span&gt;&lt;span id="zw-1323efe029dZHsQe407df9"&gt;eclipse-side presentation layer &lt;/span&gt;&lt;span id="zw-1323efedfc3u86s0z407df9" style="font-family: arial, helvetica, sans-serif; "&gt;for putting the SEED into one stable and lightweight tooling&lt;/span&gt;&lt;span id="zw-1323efe02a3buLXbL407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt; in the daily usage(like JDT).  One hand-written recursive descent parser/scanner for members of Scala top template definition is under construction(parser generators are too terrible for use). &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f077359IMpZeJ407df9"&gt;&lt;span id="zw-1323f0773592MNf1-407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;&lt;/span&gt;&lt;span class="z-cursor-spacer" id="zw-1323f077436qPsuUo407df9"&gt;​&lt;/span&gt;&lt;span id="zw-1323f077435aB62iy407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;The harder work is here is the spec of Scala language is complex to fully understand. The EBNF syntax notation of Scala in spec have shown some entanglement.  Like PATH is StableId, but StableId is also the PATH. This may let the notation writer more &lt;/span&gt;&lt;span id="zw-1323f069cf6zfMOYY407df9"&gt;convenient&lt;/span&gt;&lt;span id="zw-1323f05f7f3Lu1iri407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;, but increase the complexity of understanding and implementation.  Some parts of notation is anti-&lt;/span&gt;&lt;span id="zw-1323f0a7359Bg9tmQ407df9"&gt;intuitive. like some one &lt;/span&gt;&lt;a href="http://www.scala-lang.org/node/10730" id="zw-1323f0e1643S5Pj0e407df9" target="_blank" title="pointing out in the official forum"&gt;&lt;span id="zw-1323f0e163672ZrwN407df9"&gt;pointing out in the official forum&lt;/span&gt;&lt;/a&gt;&lt;span id="zw-1323f0e1637J9F80f407df9"&gt;, Scala allows such definition: &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f0cea4dWplIp407df9"&gt;&lt;span id="zw-1323f0cea4d9ljkgh407df9"&gt;val  &lt;/span&gt;&lt;span id="zw-1323f0a735fIxInEf407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;1 = 2&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f0dd2cc0SgbqK407df9"&gt;&lt;span id="zw-1323f0dd2cc5VmocE407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt;from the syntax aspect, this is allowed by the fact that the pattern match style contructs can be used as one way to define variable(s). Some one think it will be kept for &lt;/span&gt;&lt;span id="zw-1323f11617dAVIouL407df9"&gt;symmetry.&lt;/span&gt;&lt;span id="zw-1323f116183ZTD5Pt407df9" style="font-size: 1em; font-family: arial, helvetica, sans-serif; "&gt; But I think there is non-&lt;/span&gt;&lt;span id="zw-1323f11d4afeUbNz0407df9"&gt;symmetric here in fact(like this literal pattern matching). The scope of the semantic of &lt;/span&gt;&lt;span id="zw-1323f124abaUYvPr407df9" style="font-family: arial, helvetica, sans-serif; "&gt;pattern matching is larger than that of variable definition. It is a bad smell in the language! In fact, this allowance is mainly for &lt;/span&gt;&lt;span id="zw-1323f144d62cToarl407df9"&gt;convenience&lt;/span&gt;&lt;span id="zw-1323f144d69HU4BKj407df9" style="font-family: arial, helvetica, sans-serif; "&gt;. In almost cases, we can move the pattern match semantic just to the right of assignment, like:&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f15aaae9HxUPA407df9"&gt;&lt;span id="zw-1323f15aaaelH4Dob407df9" style="font-family: arial, helvetica, sans-serif; "&gt;val x = selector match  { case ....&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f1c1b79D9WJw5407df9"&gt;&lt;span id="zw-1323f1c1b79zFczo407df9" style="font-family: arial, helvetica, sans-serif; "&gt;This kinds of design in the language much increase the &lt;/span&gt;&lt;span id="zw-1323f1d9820yUrfEG407df9"&gt;freedom of&lt;/span&gt;&lt;span id="zw-1323f1d9828QF6kxD407df9" style="font-family: arial, helvetica, sans-serif; "&gt; language. But I think the &lt;/span&gt;&lt;span id="zw-1323f1db97eksbJhK407df9"&gt;freedom is not always the good thing for the developers. If many ways can reach one point, which way we should choose to go?&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f1fe319SlfXFD407df9"&gt;&lt;span id="zw-1323f1fe318EAcXLJ407df9"&gt;&lt;/span&gt;&lt;span id="zw-1323f1db982hVM7F407df9" style="font-family: arial, helvetica, sans-serif; "&gt;And furthermore, the wrost things for the IDE tooling designer is, for parsing such a little constructs, I even need to include almost all the syntax constructs into the parser/scanner. So heavy cost!    &lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f236971LVVpTl407df9"&gt;&lt;span id="zw-1323f236971cHUau407df9" style="font-family: arial, helvetica, sans-serif; "&gt;Some trade-offs have been made in the process. And I think everything is still under the control. It is hope by me, the SEED M0 could be published in two more weekends or so. That is the time! I am seeking some Scala related opportunities. If this can become true, I will have definitely constant daily time to contribute to the SEED. Wait for that day.&lt;/span&gt;&lt;/p&gt;&lt;p id="zw-1323f257b9a9u3Bk407df9"&gt;&lt;span id="zw-1323f257b9arldCr_407df9" style="font-family: arial, helvetica, sans-serif; "&gt;Thanks for all &lt;/span&gt;&lt;span id="zw-1323f263424lQXybS407df9"&gt;the followers&lt;/span&gt;&lt;span id="zw-1323f26342bKvYGRh407df9" style="font-family: arial, helvetica, sans-serif; "&gt;!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-8280856315375747008?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/8280856315375747008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=8280856315375747008&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8280856315375747008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8280856315375747008'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2011/09/blog-post.html' title='When is the SEED M0?'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-4830253751722645335</id><published>2011-07-17T16:01:00.001+08:00</published><updated>2011-07-17T16:01:20.784+08:00</updated><title type='text'>​From Windows to Linux</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body{background-color:#ffffff;direction:ltr;font-family:arial;font-size:11pt;line-height:1.2;padding-top:0.5in;padding-right:1in;padding-bottom:0.5in;padding-left:1in;margin:0in;} p{margin-top:0pt;margin-bottom:12pt;}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 11pt } table p, li p { margin : 0px; }&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Jul_16_2011_1/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-131334bec8174HCP2407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-131334c47c5MXTV_U407df9"&gt;&lt;SPAN height="0" id="z-cursor-start-4226553" width="0"&gt;​&lt;/SPAN&gt;The work of the whole&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-1313277a61emq2s_H407df9"&gt;transfer engineering&lt;/SPAN&gt;&lt;SPAN id="zw-1313277a623a7kNkz407df9"&gt; has been done in this week, even I am still in a busy state. With the Linux Kernel version 3.0 coming soon, I decide to change to the Linux&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-13131a8a8b9gK01iq407df9"&gt;in honor of the 20th anniversary of Linux&lt;/SPAN&gt;&lt;SPAN id="zw-13131a8a8be_SkSvV407df9"&gt; as well. The change is not related to which OS is better for working with. It is related to how do you&amp;nbsp;think what&amp;nbsp;your OS should be like. I were using one version of Red&amp;nbsp;Hat Linux in 1999 or so. In that time, the drivers and applications for Linux is not very rich. I had not enough reasons to&amp;nbsp;stick to the Linux as all others around me were using the Windows. However, there is 20 years from it's birth.&amp;nbsp;It has one&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-13137025ca0cCPeSz407df9"&gt;prosperous&lt;/SPAN&gt;&lt;SPAN id="zw-13137025ca4iKzZyv407df9"&gt;  open source community already.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-13136f49164BvtTs407df9"&gt;&lt;SPAN id="zw-131370340cf1k1-e7407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-1313706172dj3kB3g407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-131370991e9aKJCxD407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde6f75958bfcdf69ae344f86e245058196" style="opacity: 1; width: 960px; height: 600px; " title&gt;&lt;SPAN id="zw-131370991ebNN8I3407df9"&gt;&lt;/SPAN&gt;&lt;SPAN class="z-cursor-spacer" id="zw-13136f4f430pepL6E407df9"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-13136f4f42fhYtOt9407df9"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-131370a28caNxCTBh407df9"&gt;&lt;SPAN id="zw-131370a28cay0sxHe407df9"&gt;Note:&amp;nbsp;Fedora 15 + gnome 3 + GLX-dock&amp;nbsp;+ kinds of&amp;nbsp;extensions makes my&amp;nbsp;life much easier than that in Windows 7 in fact:)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-1313709f598LtxHEr407df9"&gt;&lt;SPAN id="zw-1313709f598Da72bE407df9"&gt;Now I am back as one&amp;nbsp;professional coder,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-13136f4920285GDiJ407df9"&gt;after serveral days's efforts, I am starting to enjoy the life in the world of Linux.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-13136ecacc44UNOQK407df9"&gt;One note to mention here,  to enable the scala's&amp;nbsp;gedit syntax highlighting,&amp;nbsp; you need to put the &lt;/SPAN&gt;&lt;A href="http://lampsvn.epfl.ch/svn-repos/scala/scala-tool-support/trunk/src/gedit/" id="zw-131370ec1d8EdQddc407df9" target="_blank" title="scala.lang config file"&gt;&lt;SPAN id="zw-131370ec1cdLxCN6B407df9"&gt;scala.lang config file&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-131370ec1cd-jkkT407df9"&gt; in to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-131370fb1f2Q9jp63407df9" style="font-style: italic; font-weight: bold; "&gt;/usr/share/gtksourceview-3.0/language-specs/&lt;/SPAN&gt;&lt;SPAN id="zw-131370fab50Bmiq8a407df9"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-131370f84aapUT5x407df9"&gt;if you are using the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-13136ecad78cWIauT407df9"&gt;gnome 3.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-13137108ba5sjSO0C407df9"&gt;&lt;SPAN id="zw-13137108ba5iQENbu407df9"&gt;And one&amp;nbsp;more thing is that, I am deciding to reboot my effort of Scala&amp;nbsp;Eclipse development tools in my spare time from this weekend. It is, in fact,&lt;/SPAN&gt;&lt;SPAN id="zw-13137134979lcsRan407df9"&gt;&amp;nbsp;mainly&amp;nbsp;for earning&amp;nbsp; one matched&amp;nbsp;Scala/Java/Eclipse job in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-1313717ef97AQmdi407df9"&gt;Silicon Valley(or other any possible&amp;nbsp;areas^_^)&lt;/SPAN&gt;&lt;SPAN id="zw-1313717ef9a4183tK407df9"&gt;. But I still has full confident with that it will&amp;nbsp;go beyond for other Scala development IDE tools and as the &lt;/SPAN&gt;&lt;SPAN id="zw-1313715eddeRdkEa_407df9"&gt;defacto tools of every Scala developer. Trust me!:)&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-4830253751722645335?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/4830253751722645335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=4830253751722645335&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4830253751722645335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4830253751722645335'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2011/07/from-windows-to-linux.html' title='​From Windows to Linux'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-5790050499050069908</id><published>2011-07-03T22:21:00.001+08:00</published><updated>2011-07-03T22:21:07.704+08:00</updated><title type='text'>call for job opportunities</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body{background-color:#ffffff;direction:ltr;font-family:arial;font-size:11pt;line-height:1.2;padding-top:0.5in;padding-right:1in;padding-bottom:0.5in;padding-left:1in;margin:0in;} p{margin-top:0pt;margin-bottom:12pt;}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 11pt } table p, li p { margin : 0px; }&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Jul_01_2011_1/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-130ed15dc8biGHhUZ407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ed15dc90fKUyUH407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130ed15dfafihEDn9407df9"&gt;As the title of this blog suggests, I am asking for one appropriate job opporunity globally. &lt;/SPAN&gt;&lt;SPAN id="zw-130ed175c3frvdSMe407df9"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ed160426_lJmPb407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ed15f3c6T9WePO407df9"&gt;The biggest thing in the this year for me is the birth of my daughter. It costs almost of my free time to prepare the birth of my daughter. I hope she has a better growing environment. So I decide that it should be a change now. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ed165431OmypI7407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ed1654318TXDXh407df9"&gt;In&amp;nbsp;this blog I give a summary of my past technical roadmap, my current interests and my thoughts to some technical points. It will be amazing to get the matched position &lt;/SPAN&gt;&lt;SPAN id="zw-130ed5d0a42ncE6tP407df9"&gt;information&lt;/SPAN&gt;&lt;SPAN id="zw-130ed5d0a46pufLDU407df9"&gt;.&amp;nbsp;However, if not, it is hoped you can still get the useful technical informations about the related open source community and some thoughts of people in those communities. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ed25a548MGDRga407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ed25a5478NjfVp407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130ed25a6115bAfd407df9"&gt;&lt;SPAN height="0" id="z-cursor-start-4226553" width="0"&gt;​&lt;/SPAN&gt;My basic and known role in the open source community is an Eclipse enthusiast. Most of early my bloggings are about the Eclipse technology. And obviously this just explains this name of blog. I a little active in the community, but less than some famous ones(see some of these men in &amp;quot;Other Blogs&amp;quot;). One reason for this may be that, they were paid by company, but I were just a part-time phd student in that time. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ed3da8f8wLImSo407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ed3da8f8LT3q_v407df9"&gt;The another reason is that I am also on the road to understand&amp;nbsp;the framework. My very first Eclipse position is the intern of &lt;/SPAN&gt;&lt;A href="http://www-31.ibm.com/cn/crl/en/" id="zw-130ed43adf2BQJW8B407df9" target="_self" title="IBM CRL"&gt;&lt;SPAN id="zw-130ed43ade8XJI2sH407df9"&gt;IBM CRL&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ed43ade98NwkBy407df9"&gt;. In the early stage of Eclipse, not many companys adopt the Eclipse platform in all possible aspects like IBM. Yeah, the blue giant will not waste investment! The basic skill for this intern is about the &lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/modeling/emf/" id="zw-130ed429071brNoFF407df9" target="_blank" title="EMF"&gt;&lt;SPAN id="zw-130ed429066dgmGMc407df9"&gt;EMF&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ed429067U0Fjt407df9"&gt; and the &lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/gef/" id="zw-130ed430ac1UhFkMV407df9" target="_self" title="GEF"&gt;&lt;SPAN id="zw-130ed430ab3-Oem2C407df9"&gt;GEF&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ed430ab5Nr1dPQ407df9"&gt;. Both of them are the traditional and critical for varied tooling projects. The EMF has already became the defacto standard of modelling. I am also one fan of EMF thanks to its simplicity and power. But the most fantastic thing for the EMF community is that the project leader Ed and other committers eliminate the zero response to any question in the official forum(at least in a long run). This is a typical positive-feedback case under the whole umbrella of Eclipse. Opposed to the EMF, one bad case in the ecosystem of Eclipse is the famous Visual Editor project(vep), which has been sentenced to death just recently. The worst thing here is that the existed committers have almostly no response to the community even I shows great intensity of feeling. Maybe they are busy for their business. But is this case still qualified for being a committer? Oh, forget the answer, it has gone with the death of the project... &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eee5f17aDq_1R9407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130eef711c4gsktjX407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130eee5f2521yhuD407df9"&gt;After the intern period, there is one greater opporunity. One private boss wants to provide a tooling product for &lt;/SPAN&gt;&lt;A href="http://​http://www.actionsoft.com.cn/bpc/welcome/samhome/" id="zw-130f05eb840zGDss407df9" target="_blank" title="his workflow product"&gt;&lt;SPAN id="zw-130f05eb836geu058407df9"&gt;his workflow product&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f05eb8362HUTG4407df9"&gt; based on the Eclipse. The challenge of this project is that I am the sole coder and I decide to use the &lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/gmf" id="zw-130f05dccfckGB6KU407df9" target="_blank" title="GMF"&gt;&lt;SPAN id="zw-130f05dccf3FkWdN7407df9"&gt;GMF&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f05dccf4km_mRL407df9"&gt; as the base of product. The extremely hard thing is, in fact, the GMF has not released yet even with its 1.0 version in 2005. Two main reasons drive me to decide this adventure: first, the combination of EMF+GEF is boring to code the naive editor for me;second, the agility has sink into my mind. I like to embrace the change already. The final result is still nice: I implement the main features in 1.5-2 month and the code base migrate from 1.0M3 to 1.0M6(which is much closer to the formal R1.0). After four years in 2009, I have a chance to talk with that Chinese private boss. He told me that he has releasd the tool freely and there are about 10000 users using this tool(in 2009). Champagne! Now there are many workflow/BPMN editors to do such things using GMF, like the &lt;/SPAN&gt;&lt;A href="http://​http://www.eclipse.org/bpmn/" id="zw-130f05e3cc6TySJ4m407df9" target="_blank" title="official BPMN Modeler"&gt;&lt;SPAN id="zw-130f05e3cbckHDeqv407df9"&gt;official BPMN Modeler&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f05e3cbdhoAy2T407df9"&gt;. But I am proud to create the first one globally. It is much wise to use right tool to do right things. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eee68a1cuNOn2K407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130eee68a1cgntFb407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-130eee74327vhXYzJ407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde2a7a2b95222e5d97dcfd671d708c3e35" style="opacity: 1; width: 557px; height: 181px; " title&gt;&lt;SPAN id="zw-130eee74329GvO9b1407df9"&gt;&lt;/SPAN&gt;&lt;SPAN class="z-cursor-spacer" id="zw-130eee68afaqcKUl4407df9"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eee68af91a2TSF407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130eeea958ap9W5KV407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;NOTE: The two editors demonstrate the same basic BPM notations(But my &lt;/SPAN&gt;&lt;SPAN id="zw-130eef28557-0Dbv407df9" style&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-130eef285580Aj6jH407df9" style="font-size: 0.8181818181818182em; font-style: italic; line-height: 14px; "&gt;created&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130eef28561WolBFV407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;editor is based on the&amp;nbsp;BPMN 1.0 in 2005). However, my BPMN editor add more vendor-specific functionalities behind the face.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eee68c57tugAJ407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130eee68c57ruHAg407df9"&gt;With deeping into the  framework,  many Eclipse-hosted projects have been investigated by me. I have joined several &lt;/SPAN&gt;&lt;SPAN id="zw-130f016aff4RJcb4C407df9"&gt;commercial&lt;/SPAN&gt;&lt;SPAN id="zw-130f016affaLdjmyG407df9"&gt; plugins development for coding or training in Beijing, China. And I have shared&amp;nbsp;a little open source projects and knowledge from the community&amp;nbsp;to the&amp;nbsp;community.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0b32d09AE7VJ407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f01784e19F4Gzo407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-130ef0bb71dtvtXVG407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde7820130fcbc44fcbc52a545afadfe053" style="opacity: 1; width: 470px; height: 463px; " title&gt;&lt;/P&gt;&lt;P id="zw-130ef0da633cAZkXS407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef1806d7-jWYTm407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;NOTE: this is one of&amp;nbsp;my&lt;/SPAN&gt;&lt;SPAN id="zw-130ef108571hSk6nE407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; open source&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef1157efJmb5HU407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;projects&amp;nbsp;- DOMR(Db4o Object Ma&lt;/SPAN&gt;&lt;SPAN id="zw-130ef16b4150S7Oo4407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;nager Rcp), whic&lt;/SPAN&gt;&lt;SPAN id="zw-130ef182c3bgX1vD407df9" style="font-size: 0.9090909090909091em; font-style: italic; "&gt;h &lt;/SPAN&gt;&lt;SPAN id="zw-130ef17bbcfyHzArJ407df9" style="font-size: 0.9090909090909091em; font-style: italic; "&gt;nominated&lt;/SPAN&gt;&lt;SPAN id="zw-130ef17bbd2jJYdTF407df9" style="font-size: 0.9090909090909091em; font-style: italic; "&gt; m&lt;/SPAN&gt;&lt;SPAN id="zw-130ef180551VTP_y407df9" style="font-size: 0.9090909090909091em; font-style: italic; "&gt;e&lt;/SPAN&gt;&lt;SPAN id="zw-130ef181fa8fKICD7407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt; as one of &lt;/SPAN&gt;&lt;A href="http://developer.db4o.com/Resources/ProfessionalCommunity/db4oMostValuedProfessional/dVPDirectory2010.aspx" id="zw-130ef167e67frg8YL407df9" target="_blank" title="the&amp;nbsp;db4o dVPs 2010"&gt;&lt;SPAN id="zw-130ef167e5eqY1NoL407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef143cc4gur68E407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;db4o dVPs 2010&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef167e5fy0Ats407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;.&lt;/SPAN&gt;&lt;SPAN id="zw-130ef1157f4bMOKQn407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt; The work done&amp;nbsp;in&amp;nbsp;this project is trivial actually. The great thing here is that the company behind the db40 is very community-oriented, which drives the &lt;/SPAN&gt;&lt;SPAN id="zw-130ef23ee713nvAf4407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;db4o be&lt;/SPAN&gt;&lt;SPAN id="zw-130ef24ee1eNrmPc407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;come one&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef2488a3P3pgPO407df9" style="font-style: italic; "&gt;popular&lt;/SPAN&gt;&lt;SPAN id="zw-130ef2488a8hWBEW7407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef23c2df2H1sL7407df9" style="font-style: italic; "&gt;object database fi&lt;/SPAN&gt;&lt;SPAN id="zw-130ef268674Oj_7oL407df9" style="font-style: italic; "&gt;nally&lt;/SPAN&gt;&lt;SPAN id="zw-130ef24eb1bphS1Ue407df9" style="font-style: italic; "&gt;. It is also o&lt;/SPAN&gt;&lt;SPAN id="zw-130ef26719bMZSFK-407df9" style="font-style: italic; "&gt;ne good case for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef264a14bnYwUY407df9" style="font-style: italic; "&gt;embracing community.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0dad37jspuaX407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef0dad37O9e6AM407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-130ef0de50cStT1vJ407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde3691f350d207dc6d362a2d575a45695d" style="opacity: 1; width: 385px; height: 557px; " title="no title"&gt;&lt;SPAN id="zw-130ef0de50dPHD8cD407df9"&gt;&lt;/SPAN&gt;&lt;SPAN class="z-cursor-spacer" id="zw-130ef0daddc_CZi7f407df9"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-130ef0daddbNmUdRZ407df9"&gt;&lt;/SPAN&gt;&lt;SPAN class="z-cursor-spacer" id="zw-130ef0daddcdFVGh407df9"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0b33d4S8dsXD407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef3f21ea3Jqo7n407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;NOTE: This is also one my RCP spare application.&amp;nbsp;The application aims to demonstrate the power of Eclipse platform. It has one unique customized shelf control, of which style is much&amp;nbsp;different from that of the common Eclpse/Java desktop software. The idea is same to one topic of &lt;/SPAN&gt;&lt;A href="http://wiki.eclipse.org/E4" id="zw-130ef3d5deeEQPbQG407df9" target="_blank" title="e4"&gt;&lt;SPAN id="zw-130ef3d5de5wnv2a-407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;e4&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef3d5de5OrAMFO407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt; -&amp;nbsp;CSS styling, in fact.&lt;/SPAN&gt;&lt;SPAN id="zw-130ef3f1aaaacyoON407df9"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0ebcb5XAQcPa407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef3d2fc2KRgReN407df9"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0b3539fqoMxl407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130efcd73d6HcSDck407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1873kUm7af407df9" style&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187br6zUXJ407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e18730aGb8T407df9" style&gt;Futhermore,&amp;nbsp;I have played with the OSGI implementation in the actual Google App Engine spot firstly&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187bGWpUJk407df9" style&gt;&lt;/SPAN&gt;&lt;A href="http://jmj-eclipse.blogspot.com/2009/08/osgi-r3-implementation-running-on.html" id="zw-130f00e1873xG2EGk407df9" target="_blank" title="here"&gt;&lt;SPAN id="zw-130f00e1873GNDVD407df9" style&gt;here&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f00e187cjhPVFR407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1874CvyQnr407df9" style&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187c81JvHg407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1874WnnOVM407df9" style&gt;I have played with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187d2-_ZEH407df9" style&gt;&lt;/SPAN&gt;&lt;A href="http://activemq.apache.org/" id="zw-130f00e1874-kVBUy407df9" target="_blank" title="ActiveMQ"&gt;&lt;SPAN id="zw-130f00e1874I16mTq407df9" style&gt;ActiveMQ&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f00e187dikWfrt407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1874mMq6Z407df9" style&gt;&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187ezKk0dB407df9" style&gt;&lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/osgi/" id="zw-130f00e1875QbNwxp407df9" target="_blank" title="OSGI"&gt;&lt;SPAN id="zw-130f00e1875LEzb6V407df9" style&gt;OSGI&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f00e187epHWQxu407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1875FBaxHF407df9" style&gt;&amp;nbsp;to construct a modular parallel messaging prototype system for finance(banking) transaction data monitoring.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187e1XoDK-407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1875uP46PD407df9" style&gt;I have played with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e187f-KUAR2407df9" style&gt;&lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/eclipselink/" id="zw-130f00e1875k0xvu407df9" target="_blank" title="Eclipselink"&gt;&lt;SPAN id="zw-130f00e1875kFEx3407df9" style&gt;Eclipselink&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130f00e187fESDPKZ407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e1876uz_uhF407df9" style&gt;&amp;nbsp;to integrate JPA2 to one Eclipse-based application development platform to alleviate the burden of app developers to SQL. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130f011b615u0PSB6407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f011b615aVe_GQ407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f011b6cfZgdhI407df9" style&gt;Eclipse has merged into the system of my business and my life.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130f00e0368AFmymd407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f00e0367QsBl10407df9" style&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f00e04c1RRuDUu407df9" style&gt;After &lt;/SPAN&gt;&lt;SPAN id="zw-130efcd73d6LXLdW-407df9"&gt;graspping the essences of the whole picture&lt;/SPAN&gt;&lt;SPAN id="zw-130efcd73dfRu3HlS407df9"&gt;,&amp;nbsp;the application aspect development is not my concern any more. More language and (business-)system level experiments have happened. Eclipse is not my unique working area any more as well. I have investigated several language tooling projects in the field of Eclipse: LPG, which is the effective parser generator behind the JDT/CDT, however, more people lieke to use the ANTLR;IMP, which is one wise language meta-tooling platform, however the project seems in its silent period;not mention the DLTK or other xDTs... I have studied several dynamic/functional language Javascript, Ruby, Lua and Scala more or less, with the status of IDE support definitely. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef508523KU-k4P407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef508523dArfJ407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-130ef62cedeax3ze-407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde00f9d429efa0448c81b152273ccfa739" style="opacity: 1; width: 648px; height: 332px; " title&gt;&lt;SPAN id="zw-130ef62cedfsLsrn4407df9"&gt;&lt;/SPAN&gt;&lt;SPAN class="z-cursor-spacer" id="zw-130ef50864460Jcif407df9"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef5086448F6esS407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130efc83a3diI7oPM407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;NOTE: This project trys to provide one editing enviroment for &lt;/SPAN&gt;&lt;A href="http://flatassembler.net/" id="zw-130ef6950f2YAb1Ha407df9" target="_blank" title="FASM"&gt;&lt;SPAN id="zw-130ef6950e8O0jMig407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;FASM&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef6816dbDtev5407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;. The parser is based on the &lt;/SPAN&gt;&lt;A href="http://sourceforge.net/projects/lpg/" id="zw-130ef690817vktlM407df9" target="_blank" title="LPG"&gt;&lt;SPAN id="zw-130ef69080cpUvbZ6407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;LPG&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef69080dMazTGw407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;. The rest part is based on one&amp;nbsp;Eclipse project - &lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/imp/" id="zw-130ef722bae4P9hsX407df9" target="_blank" title="IMP"&gt;&lt;SPAN id="zw-130ef722ba3DbT1WF407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;IMP&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef722ba4nASoOe407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;. IMP is competive potentially to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef7310e8yfWru407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;another Eclipse - &lt;/SPAN&gt;&lt;A href="http://www.eclipse.org/dltk/" id="zw-130ef73d13cBQ-tv407df9" target="_blank" title="DLTK"&gt;&lt;SPAN id="zw-130ef73d132V5Twf9407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;DLTK&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef73d1338O5d-4407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;.  The two&amp;nbsp;projects share some common ideas. However, I like IMP more for my&amp;nbsp;personal taste in 2009 or so(in order to avoid another&amp;nbsp;war^_^). I have another similar open source&amp;nbsp;project &lt;/SPAN&gt;&lt;A href="http://code.google.com/p/exquery/" id="zw-130ef89ad9dP__TSJ407df9" target="_blank" title="exquery"&gt;&lt;SPAN id="zw-130ef89ad92x7uZmI407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;exquery&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130ef89ad93Wg7qEd407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt; to use both LPG and IMP(I think,&amp;nbsp;it is also a good demo of&amp;nbsp;two projects for all learners!).&amp;nbsp; Based on the framework, I complete the IDE protoype&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef8b849fIV1ZIi407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;in one or two day(after the parser ready). &lt;/SPAN&gt;&lt;SPAN id="zw-130ef8ca0f8Gm4gWq407df9" style="font-style: italic; font-size: 0.8181818181818182em; "&gt;Extreme programming! Premise is that you can handle all bugs of your&amp;nbsp; dependencies:)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef5086efzuyzVJ407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef9f5a3296aSqD407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130ef5089a1E9olsb407df9"&gt;The final decision for me is that the Scala is the next language I will stick with. I usually select the language by the conciseness, the expressive force(powerful language constructs) and the contract-ness(Strong type). Oh, bingo! Scala reachs the best balance. In 2010, &amp;nbsp;it is my great honor to be &lt;/SPAN&gt;&lt;A href="http://www.scala-lang.org/gsoc2010#" id="zw-130efd37c66-FJhJ6407df9" target="_blank" title="selected by"&gt;&lt;SPAN id="zw-130efd37c5cCHVKFL407df9"&gt;selected by&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130efd37c5dEwaYgL407df9"&gt; GSoC(Google Summer of Code) and Scala team to participate in the development of the Scala Eclipse IDE. Unfortunately, I have not time to join the development from this year for preparing the birth of my daughter. The community is still very active. You can even see &lt;/SPAN&gt;&lt;A href="http://en.wikipedia.org/wiki/Martin_Odersky" id="zw-130efd503c88dY2mm407df9" target="_blank" title="Martin Odersky"&gt;&lt;SPAN id="zw-130efd503beBGnXA407df9"&gt;Martin Odersky&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-130efd503bfIEIlh407df9"&gt;  throw out some new methods for the presentation compiler&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130efd0b9deyPxcQ407df9"&gt;now and then&lt;/SPAN&gt;&lt;SPAN id="zw-130efd0b9e6_lMgxv407df9"&gt;. I love this community really and hope to come back soon. &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eef5055arkdv_W407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f040e6a6sDdUqr407df9"&gt;&lt;/SPAN&gt;&lt;IMG align="bottom" alt id="zw-130ef45332aAKhuIP407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde941c6623e1ff98f43ff4b4ac29e8a033" style="opacity: 1; width: 553px; height: 630px; " title="no title"&gt;&lt;SPAN id="zw-130ef45332bcOjF14407df9"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0ad952LYFqo407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130effff782fZKefR407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;NOTE: this is one screenshot for showing some works in my GSoC. The basic idea is to provide the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130efd59c98lhbyfS407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;corresponding&lt;/SPAN&gt;&lt;SPAN id="zw-130efd59c9daJrZ407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; to&amp;nbsp;JDT for Scala. However,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130efd6abc5A-Qfrs407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;frankly, I do not&amp;nbsp;think the dependency to AspectJ is must. The coupling working&amp;nbsp;way&amp;nbsp;has set a high&amp;nbsp;bar for the potential contributors and have caused some wired bugs. Scala is not Java.&amp;nbsp;C&lt;/SPAN&gt;&lt;SPAN id="zw-130efe4dafbldkupA407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;ollaboration&lt;/SPAN&gt;&lt;SPAN id="zw-130efe4db00TNHw3x407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; do not mean Coupling.&amp;nbsp; If&amp;nbsp;abstracting one small piece of JDT core&amp;nbsp;(binary&amp;nbsp;class model mainly, UI parts of JDT have many&amp;nbsp;low-&lt;/SPAN&gt;&lt;SPAN id="zw-130efeeef8fWpQvnm407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;quality&lt;/SPAN&gt;&lt;SPAN id="zw-130efeeef97gDQFbg407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; codes and designs&amp;nbsp;far away from the best practice indeed) into Scala IDE&amp;nbsp;as an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130efecbe987wgbPG407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;independent base&lt;/SPAN&gt;&lt;SPAN id="zw-130efecbe9egrSiu407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;, I believe the&amp;nbsp;IDE can iterate&lt;/SPAN&gt;&lt;SPAN id="zw-130efebaf638g2evt407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; fastly&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130efead070DtdgtS407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;and&amp;nbsp;go beyond the&amp;nbsp;JDT soon.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130ef0adb3aNAH2Y5407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130ef0adb3ao3BAks407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f007db7bOTZU01407df9"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130eef569b1TW6cqR407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130eef569b0e0P7Y407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130eef56a6eXfbOES407df9"&gt;Recently, I have some interests to adopt some bleeding edge enterprise best practices to the android development. The key technologies I have done in the android system is that: DI + NoSQL. This seems not very fresh thing for the android development community. But my way is to re-invent the wheel according to my experiences of the&amp;nbsp;best practices. For DI, I have constructed one JSR330-compatible DI engine, which is 1/10 of Guice in size, and has passed 80%+ JSR330-TCK tests, and beats the Guice&amp;nbsp;in performance by using the Guice's mini bench test. For NoSQL, I used the stripped orientdb with unfinished query DSL. The whole thing is under the development from one weekend to another weekend if the time is allowed. And, I do not know when my first application will come out. The best practice here is that, &amp;quot;do not adopt the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f04365a84xJrm407df9"&gt;not-understanding&lt;/SPAN&gt;&lt;SPAN id="zw-130f04365ad-x2zR407df9"&gt; technologies even through all&amp;nbsp;others use these technologies&amp;quot;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130f03ee882vzan_H407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f03ee880mM_34Q407df9"&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f040ee89R-9JbN407df9" style&gt; &lt;/SPAN&gt;&lt;IMG id="zw-130f040ee8aYPRvfh407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde46c71ef390cb992e9365df3f507a42ab" style="width: 378px; height: 511px; " title&gt;&lt;/P&gt;&lt;P id="zw-130eef65933ESVDy2407df9" style="margin-left: 0in; "&gt;&lt;/P&gt;&lt;P id="zw-130f01f899dSyC3Rr407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f01f899dUt0sYU407df9"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-130f052d6c09pL4dW407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;NOTE: the jw.di is my own DI engine. The 9&amp;nbsp;failures in JSR330TCK tests are all about uncompleted&amp;nbsp;overridden &lt;/SPAN&gt;&lt;SPAN id="zw-130f0467e97GyALH8407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;behavior, which is forgot in the design phase of the egine. The original goal trys to implement one JSR330 lightweight engine run in android(or other lightweight enviroments) opposed to the relatively&amp;nbsp;fat&amp;nbsp;Guice. In the latter of coding phase, I introduce several CDI features like event support&amp;nbsp;and &lt;/SPAN&gt;&lt;SPAN id="zw-130f04cb9f6hpZqUu407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;binding with&amp;nbsp;annotation instance&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f052519dlyEdkQ407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;literal&lt;/SPAN&gt;&lt;SPAN id="zw-130f05251a2zBmsu407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;(not like just binding with annotation class,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f04e1c49hS0KfO407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-130f04e1c49tgqbPt407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;binding with&amp;nbsp;annotation instance supports specify the value of the&amp;nbsp;annotation's&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f0518078gGnLrA407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;element&lt;/SPAN&gt;&lt;SPAN id="zw-130f04e1c4f3eznyq407df9" style="font-size: 0.8181818181818182em; font-style: italic; "&gt;). That's still cool, right?:)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130f047ea22hLd4-0407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f0525709QQOj5v407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f0447169jUZTCa407df9"&gt;That's all basically. To take care of my&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130f05817f60pSIrY407df9"&gt;daughter&lt;/SPAN&gt;&lt;SPAN id="zw-130f05817fdPP3QtD407df9"&gt;, this blogging has caused me two weekend days to finish. No time to add more!&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-130eef65afdLRLBhK407df9"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-130f01f845fYTKud407df9"&gt;If you have the position involved above technologies, it is possible to consider me as one candidate. Contact me if you just&amp;nbsp;think so by email jin.phd at gmail.com. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130f05c1a06IovppJ407df9" style="margin-left: 0in; "&gt;&lt;SPAN id="zw-130f05c1a05wFtof9407df9"&gt;Heartfelt thanks!&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-5790050499050069908?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/5790050499050069908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=5790050499050069908&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/5790050499050069908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/5790050499050069908'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2011/07/call-for-job-opportunities.html' title='call for job opportunities'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-8109102886068127275</id><published>2010-07-18T11:08:00.002+08:00</published><updated>2010-07-18T11:18:09.835+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sdt'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Implicits, Scala-IDE and my mid GSOC evaluation</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&lt;/TITLE&gt;&lt;META content="[{'paperheight':'11.693055555555555','paperwidth':'8.268055555555556','count':'1','gap':'0.5'}]" id="pageLayoutMeta"&gt; &lt;STYLE id="styletagforeditor"&gt;BODY { 	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; LINE-HEIGHT: 1.2; BACKGROUND-COLOR: #ffffff; MARGIN: 4% 10%; FONT-FAMILY: verdana; DIRECTION: ltr; FONT-SIZE: 10pt; BORDER-TOP: 0px; BORDER-RIGHT: 0px } &lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;TABLE { 	FONT-SIZE: 10pt } &lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Jul_16_2010_3/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-1" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-2" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Implicits, Scala-IDE and my mid GSOC evaluation&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-3" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-4" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-5" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-6" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;It is far long from my last blog entry. I even have not announced my acceptance of this year GSOC&amp;nbsp; by Scala team. It is my honor! One reason is that it will be more useful if I put these time into solving practical problems.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-7" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-8" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-9" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-10" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Another big reason for the absence in June, is that several big things for me have happened in June.&amp;nbsp; So most of them can not be expected or controlled. You would find helpless when the external force drived you to the different direction. After one influenza, I am back to gsoc to carry out my promise to community. The community trust that I can finish the project, so then give me the precious slot. I should show the feedback to the community and tell them the trust bear fruit. It is the spirit of community. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-11" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-12" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-13" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-14" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Now back to my mid gsoc evaluation topic. What my project do can be understanded here [1] at scala-ide wiki. If you are a new comer to Scala, you can read the official site[2]. One recent big news, we release the Scala 2.8.0 final[3]. The version is in high production-quality, and has many new features. Don't hesitate to join our party, especially if you are Java developer. Privately I were planned to write a series like &amp;quot;Step into Scala by Scala Eclipse IDE&amp;quot; at May, however, the idea now can not be picked up&amp;nbsp;for the time limit. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-15" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-16" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-17" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-18" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Feature#1 in [1] is a long awaited feature in Scala IDE. It is involved with one cool Scala feature, that is the implicit conversion. This feature, as hinted by the name, can convert one object from one type to another type. The feature is similiar to the idea of Adapter pattern [4] in Java. The wonderful magic is this conversion happens implicitly(and can be controlled). So, something like follows can happen: &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-19" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-20" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-21" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-129e379290fG5dqaX407df9" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;aVector + aInt&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; aInt be converted to a Vectot implicitly&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-23" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-24" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Map(1-&amp;gt;&amp;quot;one&amp;quot;)&amp;nbsp; // 1 or something else object will have not &amp;quot;-&amp;gt;&amp;quot; method, we can convert any type to&amp;nbsp;one type who has the&amp;nbsp; &amp;quot;-&amp;gt;&amp;quot; method&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-25" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-26" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-27" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-28" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;The implicit functionality &amp;quot;let you dress up existing libraries&amp;quot; [5], and make the code compact and clear. However, it will also be danger if it is abused. Because you do not know the conversion explicitly. Some potential unwanted implicit conversions may happen, but you are unaware of them. This will lead to unexpected result of your codes. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-29" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-30" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-31" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-32" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Although, the designer of Scala has given some rules to the usage of implicits(see PIS to get more detail explanation[5]). But you can not get hints&amp;nbsp; when your editing sources. IDE tooling support will come to rescue you! Our feature#1 is just for this rescue!&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-33" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-34" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-35" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-36" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Now, I finish the prototype of feature#1. Consider one simple source like follow:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-37" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-38" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-39" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-40" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;object&lt;/SPAN&gt;&lt;SPAN id="zw-41" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; String2Int {&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-42" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-43" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-44" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;val&lt;/SPAN&gt;&lt;SPAN id="zw-45" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; a = &lt;/SPAN&gt;&lt;SPAN id="zw-46" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;1&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-47" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-48" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-49" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-50" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;val&lt;/SPAN&gt;&lt;SPAN id="zw-51" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; b = &lt;/SPAN&gt;&lt;SPAN id="zw-52" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;2&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-53" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-54" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-55" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-56" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;var&lt;/SPAN&gt;&lt;SPAN id="zw-57" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; c = &lt;/SPAN&gt;&lt;SPAN id="zw-58" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;3&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-59" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-60" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-61" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-62" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;implicit&lt;/SPAN&gt;&lt;SPAN id="zw-63" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-64" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;val&lt;/SPAN&gt;&lt;SPAN id="zw-65" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; somewords = &lt;/SPAN&gt;&lt;SPAN id="zw-66" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;new&lt;/SPAN&gt;&lt;SPAN id="zw-67" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; SomeWords(&lt;/SPAN&gt;&lt;SPAN id="zw-68" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;yeah!&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-69" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-70" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-71" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-72" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-73" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-74" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;implicit&lt;/SPAN&gt;&lt;SPAN id="zw-75" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-76" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;def&lt;/SPAN&gt;&lt;SPAN id="zw-77" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; string2Int(s: String) =&amp;nbsp; { &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-78" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-79" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-80" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;((s.toInt)+2)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-81" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-82" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-83" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-84" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-85" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-86" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-87" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-88" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;def&lt;/SPAN&gt;&lt;SPAN id="zw-89" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; main(args:&lt;/SPAN&gt;&lt;SPAN id="zw-90" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;Array&lt;/SPAN&gt;&lt;SPAN id="zw-91" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;[String]) {&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-92" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-93" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-94" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-95" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;printInt(&lt;/SPAN&gt;&lt;SPAN id="zw-96" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;3&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-97" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-98" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-99" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-100" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-101" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;printInt(a+b+c)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-102" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-103" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-104" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-105" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;printIntWithSomeWords(&lt;/SPAN&gt;&lt;SPAN id="zw-106" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;5&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-107" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)(&lt;/SPAN&gt;&lt;SPAN id="zw-108" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;new&lt;/SPAN&gt;&lt;SPAN id="zw-109" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; SomeWords(&lt;/SPAN&gt;&lt;SPAN id="zw-110" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;...&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-111" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;))&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-112" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-113" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-114" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-115" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;printIntWithSomeWords(&lt;/SPAN&gt;&lt;SPAN id="zw-116" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;6&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-117" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-118" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-119" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-120" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-121" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-122" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-123" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-124" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;val&lt;/SPAN&gt;&lt;SPAN id="zw-125" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; map = Map(1-&amp;gt;&lt;/SPAN&gt;&lt;SPAN id="zw-126" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;one&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-127" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;,2-&amp;gt;&lt;/SPAN&gt;&lt;SPAN id="zw-128" style="FONT-FAMILY: 'Courier New'; COLOR: #2a00ff; FONT-SIZE: 1em"&gt;&amp;quot;two&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-129" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-130" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-131" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-132" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-133" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-134" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-135" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-136" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-137" style="FONT-FAMILY: 'Courier New'; COLOR: #3f7f5f; FONT-SIZE: 1em"&gt;//implicit &lt;/SPAN&gt;&lt;SPAN id="zw-138" style="FONT-FAMILY: 'Courier New'; COLOR: #3f7f5f; FONT-SIZE: 1em; TEXT-DECORATION: underline"&gt;def&lt;/SPAN&gt;&lt;SPAN id="zw-139" style="FONT-FAMILY: 'Courier New'; COLOR: #3f7f5f; FONT-SIZE: 1em"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-140" style="FONT-FAMILY: 'Courier New'; COLOR: #3f7f5f; FONT-SIZE: 1em; TEXT-DECORATION: underline"&gt;otherwords&lt;/SPAN&gt;&lt;SPAN id="zw-141" style="FONT-FAMILY: 'Courier New'; COLOR: #3f7f5f; FONT-SIZE: 1em"&gt;: SomeWords = new SomeWords(&amp;quot;Oh, yeah!&amp;quot;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-142" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-143" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-144" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-145" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-146" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;def&lt;/SPAN&gt;&lt;SPAN id="zw-147" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; printInt(a:&lt;/SPAN&gt;&lt;SPAN id="zw-148" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;Int&lt;/SPAN&gt;&lt;SPAN id="zw-149" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;) { &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-150" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-151" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-152" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;println(a)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-153" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-154" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-155" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-156" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-157" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-158" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-159" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-160" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;def&lt;/SPAN&gt;&lt;SPAN id="zw-161" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; printIntWithSomeWords(a: &lt;/SPAN&gt;&lt;SPAN id="zw-162" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;Int&lt;/SPAN&gt;&lt;SPAN id="zw-163" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;)(&lt;/SPAN&gt;&lt;SPAN id="zw-164" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;implicit&lt;/SPAN&gt;&lt;SPAN id="zw-165" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; sw: SomeWords) { &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-166" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-167" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-168" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;println(a)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-169" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-170" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-171" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;println(sw.words)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-172" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-173" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-174" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-175" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-176" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-177" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-178" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-179" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN id="zw-180" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;class&lt;/SPAN&gt;&lt;SPAN id="zw-181" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; SomeWords(&lt;/SPAN&gt;&lt;SPAN id="zw-182" style="FONT-FAMILY: 'Courier New'; COLOR: #7f0055; FONT-SIZE: 1em; FONT-WEIGHT: bold"&gt;val&lt;/SPAN&gt;&lt;SPAN id="zw-183" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt; words: String)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-184" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-185" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-186" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-187" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-188" style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 1em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-189" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-190" style="FONT-FAMILY: 'Courier New'; COLOR: #000000; FONT-SIZE: 1em"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-191" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-192" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-193" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-194" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Can you recognize that this simple source has seven implicit conversion happened?:) &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-195" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-196" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-197" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-198" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;The follows sreenshot shows:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-199" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;BR id="zw-200"&gt;&lt;IMG alt height="542" id="zw-201" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde0d49fbdb285ae45831d2094d0d943ed3" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" width="619"&gt;&lt;BR id="zw-202"&gt;&lt;/P&gt;&lt;P id="zw-203" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-204" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-205" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Three implicit conversion are based on the in-file implicit string2Int, but other fours are based on the implicits from the implicitly imported scala.Predef. I use the squiggle underlines to indicate them. This will be allowed to be customized after this feature being fully implemented.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-206" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-207" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-208" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-209" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;So, to use our Scala-IDE, now you can see all the implicit conversion happened. I try one code exmaple vectors at official site[6], which shown like this.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-210" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;IMG alt height="174" id="zw-212" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1ddee42fff148ac3d2fbf0514bdf2d383b68" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" width="642"&gt;&lt;BR id="zw-213"&gt;&lt;/P&gt;&lt;P id="zw-214" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-215" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P id="zw-129e38107bdjangAz407df9" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-129e3855b37YY0ccj407df9" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;One thing&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-129e3855c73ouqjho407df9" style="FONT-FAMILY: Times New Roman; FONT-SIZE: 1.2em"&gt;in UI &lt;/SPAN&gt;&lt;SPAN id="zw-129e3855b41PXFTG407df9" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;here is that the hover has not been finished now. I am planning to use the Jface indepent annonation hover for this functionalites, not continue the current apsectJ-hooked version. As my opinion, hooking way is the double-edged sword.&amp;nbsp; Hooking means you depend your works on the&amp;nbsp; things out of your control. I suggest only using the AspectJ technique when the Eclipse and JDT have not left the door for your extension. However, this idea has not discussed with Miles:) I will discuss these to him in these days.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-216" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-217" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-218" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-219" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;I used the Scala Eclipse IDE monthly. Frankly speaking, the current&amp;nbsp; Scala Eclipse IDE is not very production-ready. I am forced to use one poor atom itx pc to power the development in one span recently. However, the performence is crazy crazy&amp;nbsp;crazy...On the contrary, JDT works much fluently even on this pc. I do some profile on the current Scala Eclipse IDE, some cases shown as follows:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-222" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;IMG alt height="225" id="zw-224" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1ddeeac96a40ad402acc5163f73c53feb24e" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" width="324"&gt;&lt;BR id="zw-225"&gt;&lt;SPAN id="zw-227" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;This screenshot shows the number of thread bump up to 59 suddenly&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-228" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-229" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-230" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-231" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;IMG alt height="482" id="zw-246" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1ddec9845df3f1987aac81bbe5a7d9b457c4" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" width="358"&gt;&lt;BR id="zw-247"&gt;&lt;SPAN id="zw-129e37c361fscFyJ407df9" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;This screenshot shows this short lived threads are not collaborative. Almost of they are blocked. &lt;/SPAN&gt;&lt;BR id="zw-129e37c3629NIUyKy407df9"&gt;&lt;BR id="zw-129e37c34b7yfEfLL407df9"&gt;&lt;IMG alt height="130" id="zw-129e37c34c67-Wv8q407df9" src="https://writer.zoho.com/image.do?imgurl=e30661bd00166769ef43cf690cfc0030701f43d1d99437e6dceabe33b22e1dde087993ea866b052ef9658888b4f5eed0" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" width="521"&gt;&lt;SPAN id="zw-256" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-257" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-258" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-260" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;The main thread(UI thread) are blocked in several minutes by Scala Presentation Compiler thread(this is a background thread in Scala IDE). &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-261" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-262" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-263" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-264" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;From the primary eye, I&amp;nbsp;think, the problem may be in the abused usage of SycVar. However, I am not to much time to verify it till now. The main thread shoud be kept unblocked in most cases, because it is the UI thread. Some problems seemly exist in the compiler library. That means, other IDE using the new presentation compiler, like Netbeans, may live in the same dilemma.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-265" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-266" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-267" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-268" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;In one other core-duo notebook, I give the nice feedbeek, the stop feeling only happens with short time(seconds). However, I still find many other bugs, some of my cared bugs&amp;nbsp;listed on my note here:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-269" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-270" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-271" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-129e3826ad3e0rm6F407df9" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;1. perfromance&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-273" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-274" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;memory consumaption is huge!(this cause that the full gc acitivities are heavy in some cases?)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-275" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-276" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;index/build &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-277" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-278" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;leak?&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-279" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-280" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;2. code folding only for fisrt level function&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-281" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-282" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;(local function def is not folded)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-283" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-284" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;3. local function def/call can not be displayed correctly&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-285" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-286" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;4.override doese not show the override indicator in outline&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-287" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-288" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;5. ScalaElement extends JavaElement is not elegant&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-289" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-290" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;6. icons for var and private var in the outline are the same&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-291" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-292" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;7. F2 or hover is not always available&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-293" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-294" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;8. building at the unnecessary time&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-295" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-296" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;9. Do not hook when that extensibilities has been supported by platform(or JDT).&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-297" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-298" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;SDT is expensively dependent on the AOP. hookings are done by AspectsJ. This technique is advanced, complex and not elegant when the framework has left the space to be extended.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-299" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-300" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;10.hover in SDT is not consistent with JDT???&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-301" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-302" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;abd the default type hover is a little expensive for SDT&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-303" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-304" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;11. compilation error in one source stop all other sources compiling and clear /bin&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-305" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-306" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;12. scala.tools.eclipse.javaelements -&amp;gt; scala.tools.eclipse.scalaelements ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-307" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-308" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;13. sdt can not compile the nsc(that is the so-called &amp;quot;presentation compiler&amp;quot; of scala) &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-309" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-310" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;one problem is, the package.scala(package object in 2.8?) can not be seen as a scala source file. (package is a keyword in Java?)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-311" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-312" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;14. auto completion is not well-behavoired.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-313" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-314" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;15. scala class file editor don't support the debug?&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-315" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-316" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;16. hyperlink nagivations are not always available&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-317" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-318" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;like:class EclipseTyperRun extends TyperRun &amp;lt;--&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-319" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-320" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;17. override method hover show usefulless things.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-321" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-322" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;18. reference nagviation(concurrent marking) does not work&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-323" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-324" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;19. sometimes compiler has been broken without any error indication in the editor. (sometimes shows unuseful things in the error log of eclipse)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-325" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-326" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;20. quick fix(ctrl+1) is broken really.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-327" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-328" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;21. long time sources error at IDESettings.scala?:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-329" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-330" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;error: not found: value Xwarnfatal&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-331" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-332" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;error: not found: value Ywarndeadcode&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-333" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-334" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;22. open type does not match the full qualified class Type&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-335" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-336" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;23. Builder does not begin to work when the modification of source has been saved soemtimes&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-337" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-338" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;24. coding conventions are not coherent in the sources.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-339" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-340" style="FONT-STYLE: italic; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;25. why not Scala-IDE SDK download?(I have one home-made&amp;nbsp;sdk, it is easy^_^)&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-129e37e2ac5oKNt5G407df9" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-129e37e2ac6z-6cyH407df9" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P id="zw-341" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-342" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Don't be scared! Some are&amp;nbsp;enhancement requests. And someone may have been fixed now. I will&amp;nbsp;tell you&amp;nbsp;when the above problems have been solved. If you have some interesting to help us, you can reach&amp;nbsp;us at [7]. &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-343" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-344" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-345" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-346" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;Let close the this reporting first. I will be back soon. Have a good night!&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-347" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-348" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-349" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-350" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;References:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-351" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-352" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[1] &lt;/SPAN&gt;&lt;A href="https://www.assembla.com/wiki/show/scala-ide/Google_Summer_of_Code" id="zw-353"&gt;&lt;SPAN id="zw-354" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;https://www.assembla.com/wiki/show/scala-ide/Google_Summer_of_Code&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-355" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-356" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-357" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[2] &lt;/SPAN&gt;&lt;A href="http://www.scala-lang.org/" id="zw-358"&gt;&lt;SPAN id="zw-359" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;http://www.scala-lang.org/&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-360" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-361" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-362" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[3] &lt;/SPAN&gt;&lt;A href="http://www.scala-lang.org/node/7009" id="zw-363"&gt;&lt;SPAN id="zw-364" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;http://www.scala-lang.org/node/7009&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-365" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-366" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-367" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[4] &lt;/SPAN&gt;&lt;A href="http://en.wikipedia.org/wiki/Adapter_pattern" id="zw-368"&gt;&lt;SPAN id="zw-369" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;http://en.wikipedia.org/wiki/Adapter_pattern&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-370" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-371" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-372" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[5] &lt;/SPAN&gt;&lt;A href="http://www.artima.com/shop/programming_in_scala" id="zw-373"&gt;&lt;SPAN id="zw-374" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;http://www.artima.com/shop/programming_in_scala&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-375" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-376" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-377" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[6] &lt;/SPAN&gt;&lt;A href="http://www.scala-lang.org/node/60" id="zw-378"&gt;&lt;SPAN id="zw-379" style="FONT-FAMILY: 'Times New Roman'; COLOR: #000080; FONT-SIZE: 1.2em; TEXT-DECORATION: underline"&gt;http://www.scala-lang.org/node/60&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-380" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-381" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-382" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;[7] http://groups.google.com/group/scala-ide-dev&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-383" style="WIDOWS: 0; MARGIN: 0pt; ORPHANS: 0"&gt;&lt;SPAN id="zw-384" style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 1.2em"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-8109102886068127275?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/8109102886068127275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=8109102886068127275&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8109102886068127275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8109102886068127275'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2010/07/implicits-scala-ide-and-my-mid-gsoc.html' title='Implicits, Scala-IDE and my mid GSOC evaluation'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-3019605062673607141</id><published>2010-04-03T13:00:00.002+08:00</published><updated>2010-04-03T13:05:51.163+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sdt'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Align the Scala Development Tools with the Bleeding Edge of Eclip</title><content type='html'>&lt;div&gt;Align the Scala Development Tools with the Bleeding Edge of Eclipse&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Too long time for me to blog anything here. In this long time, I’ve received three important offers(one small company, one big big company and one institute). Although I have not decided which to go finally, this these days are and will be impressive in my life:) &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Recently, I’m beginning to prepare the defense of my Phd thesis. I accidentally found I received one email to ask whether I'd like to continue one of my 2009 GSOC[1] proposals in this year. After some browsing, I find that I am really eligible to participate in the 2010's program[2]. So, I decide to prepare this year’s GSOC for the real last time. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;As an Eclipse guy, that you know, I will stick around the community. This year I raise my hands over the topic of language support using Eclipse technology, which is my best point of interest in recent years. In this year’s program, I will submit Scala Eclipse-sided enhancement proposals to promote both communities deeply into each other:) &lt;/div&gt;&lt;br /&gt;&lt;div&gt;One BIG picture! Scala is really one nice and natural language choice for one Java programmer, after I have learned some other dynamic languages like JRuby/Javascript/Lua. All the languages have their values in the appropriate places. So, in the this blogging, I don't like to fire the language WAR. I just record things about Scala and mainly SDT (Scala Development Tools, formally called Scala IDE for Eclipse[3]). This blogging could be considered as the starting point of my adventure.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Scala have three mainstream IDE supports currently. Without doubt, the enirovement of them are Eclipse, Netbeans and IntelliJ IDEA respectly. Some of Scala developers will use some of them. Among them, the SDT(I use SDT as the synonym to the "Scala IDE for Eclipse", it is my favorite name) seemly has the best integration with Java development tools(yeah, that is, JDT). I will not fire another IDE WAR...But, I predict that, the future belongs to Eclipse:) &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Thanks to Miles Sabin, the SDT have one good body and have provided many nice basic functionalities, such as the wizards, highlighting, hyperlink navigation, builder, and recent code completion [4]. However, many advanced features still have not been included in the current SDT. One much inconvenient thing for me is that, the latest SDT only works with Eclipse Galileo(R3.5). The milestone of Eclipse release train has been already relatively stable for coding. Nobody will wait one year to taste the latest cool Eclipse functionalities by milestones:) &lt;/div&gt;&lt;br /&gt;&lt;div&gt;I spent about three non-fulltime days to review the SDT codes(and knowledges about the Scala and AspectJ). Finally I make the SDT avaiable under the 3.6M6[5], the latest milestone of Eclipse Helios. Cool!:) All of the basic functionalities work finely. Yeah, now the latest Scala 2.8, latest SDT(SVN) and the latest Eclipse 3.6 are in the same box now. &lt;/div&gt;&lt;br /&gt;&lt;div id="wn77" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_214dpnzr9f3_b" style="height:457.294px;width:648px" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Some thoughts about the SDT as follows:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;1. The current architecture of SDT is much nice.&lt;/div&gt;&lt;div&gt;This makes JDT infrastructure reusable and makes JDT integration natural. AOP/AspectJ is another cool technology. AOP/AspectJ was one of hottest topic in some days. After many new technlogies(like DI?) or frameworks appear, the people go to forgot this technology. The SDT demonstrate the power of AOP/AspectJ.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;2. many codes highly depend on the Java reflection and Class.forName.&lt;/div&gt;&lt;div&gt;This is a little against to the OSGI best practice. And this cause one HyperlinkDetector bug when my porting. I suggest every man in the community read BJ Hargrave's "Why Class.forName sucks!" at EclipseCon 2008[6]. There are many reasons and ways to refute using the Class.forName. I rewrite the HyperlinkDetector related part in codes, and remove Class.forName statement. No problem here. (I will describe some details in my proposal.)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;3. some aspects codes can be updated for new Equinox Apsects runtime.&lt;/div&gt;&lt;div&gt;I rewrite the aop.xml to mf.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;4. the Java&amp;lt;-&amp;gt;Scala collection interoperability is a little problem for newcomer.&lt;/div&gt;&lt;div&gt;I met some Map type checking problems when I overrided one class from one existed Java framework(Eclipse indeed). Scala has the concept of "Existential Types". I think I need more deeply lookups in this field to see what is the best practice. This is a language level problem indeed, not related to SDT. But this gives the Eclipse tooling more space to be improved as well:) &lt;/div&gt;&lt;br /&gt;&lt;div&gt;5. The build process of SDT can be simplified into small and easy pieces.&lt;/div&gt;&lt;div&gt;My original thought is that, bootstrapping the SDT form plain Eclipse enirvonment.That is, I can not use the SDT to build SDT at the very beginning. Miles has written one great document to show how to build the SDT[7]. But, frankly, I have not the courage to read through the document. This will be more serious for the Eclipse newcomers.&lt;/div&gt;&lt;div&gt;As my testing, the Eclipse PDE build tooling workflow fits the SDT as well in fact. (need a little trick:)) After some targeting and layouting, I even can run and debug the plugins in the workspace directly without any packaging, deploying or the prerequisite SDT installing step. This aslo makes SDT development's life easier.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;6. naming of the version of scala-plugin-aspects is a little not consistent.&lt;/div&gt;&lt;div&gt;The version of bundle in the svn is 1.0.0. But the name of the scala-plugin-aspects jar is like "ch.epfl.lamp.sdt.aspects_2.8.0.r21304-b20100331125642.jar". It is the product of the ant build scripts. It is not an error strictly. However, I think it is not the best practice in Eclipse world. Just a note here:)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;7. SDT in svn seem not much stable.&lt;/div&gt;&lt;div&gt;I meet several wired bugs, however they can not be repeatened...&lt;/div&gt;&lt;br /&gt;Oh, here, I add one pciture to show the code completion is ready-for-use now:)&lt;br /&gt;&lt;div id="zj_s" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_215d99zx6hc_b" style="height:457.294px;width:648px" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;At the end of this blogging, some immediate suggestions for the current SDT, IMHO&lt;div&gt;1. re-arrange the build flow&lt;/div&gt;&lt;div&gt;Beside the above mentioned, SDT building artifacts can depend on the binary snapshots of latest Scala and Eclipse instance. Re-build sources of Scala is time-cost and not convenient/necessary in common cases.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;2. "Release early, Release often"&lt;/div&gt;&lt;div&gt;align the head of SDT with the latest Eclipse and latest Scala(latest Scala is said to be used for SDT development, not SDT user)&lt;/div&gt;&lt;div&gt;The SDT is a tooling under the umbrella of Eclipse, so keeping its release rhythm synchronous with Eclipse(JDT) will a killing reason for the acceptance of SDT. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;3. add the dist of standalone SDT installment package for downloading&lt;/div&gt;&lt;div&gt;The SDT needs some bootstrapping hackings in the configuration of Eclipse instance. Although it is easy for old men, it is not cheap for newcomer. I guess many people would not configure the SDT correctly. This would highly block the acceptance of the SDT and, of course, Scala itself.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I will contact Miles/scala-plugin team to see whether he/they like to accept my codes or some of it. Of course, it can be hoped that Scala will have one more bright future with the help of Eclipse:)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I have one little idea about the Scala language for e4, although I am afraid whether this will be supported by our voters. But I think I will start/push this idea some day. It will not be long...&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I am planning to write more things about Scala and SDT recently. I wonder if there are some collaboration efforts about these in the community. If you are, let me know!:)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;[1] http://socghop.appspot.com/&lt;/div&gt;&lt;div&gt;[2] http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/faqs#graduate&lt;/div&gt;&lt;div&gt;[3] http://www.scala-lang.org/node/94&lt;/div&gt;&lt;div&gt;[4] http://old.nabble.com/IntelliJ-and-Eclipse-Plugins---Scala-2.8.0.Beta1-td28035792.html&lt;/div&gt;&lt;div&gt;[5] http://download.eclipse.org/eclipse/downloads/drops/S-3.6M6-201003121448/index.php&lt;/div&gt;&lt;div&gt;[6] http://www.eclipsecon.org/2008/?page=sub/&amp;amp;id=377&lt;/div&gt;&lt;div&gt;[7] http://lampsvn.epfl.ch/trac/scala/wiki/EclipsePlugin#CreatingAndSubmittingPatches&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-3019605062673607141?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/3019605062673607141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=3019605062673607141&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/3019605062673607141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/3019605062673607141'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2010/04/align-scala-development-tools-with.html' title='Align the Scala Development Tools with the Bleeding Edge of Eclip'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-6828332309093978903</id><published>2009-10-16T17:25:00.003+08:00</published><updated>2009-10-16T17:28:48.752+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tshirt'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Eclipse POLO T-Shirt Come!</title><content type='html'>Eclipse POLO T-Shirt Come!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have received my second POLO T-Shirt today. Thanks for Eclipse Foundation and Eclipse Community. Yes, this autumn is warm for me:) Great!:)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="uab_"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_197dpcthfvr_b" style="width: 648px; height: 486.236px" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;Recently, I am reading the CVM and &lt;a id="hoos" href="http://llvm.org/" target="_blank" title="LLVM"&gt;LLVM&lt;/a&gt; related references. They are really both great really. And I have a plan to combine the &lt;a id="kmq9" href="http://clang.llvm.org/" target="_blank" title="clang"&gt;clang&lt;/a&gt; with eclipse. Maybe, it could be called "ClangDT" or "CLDT" or "eclipse-clang" or "eClang"... Yes, that is a replace to CDT in current eye. Because clang has its own static analysis tools, I think this combination will be not hard. And this will introduce a windows-friendly CDT. However, I have no budget to complete it recently before I got a formal job. Hope that I can come into the work soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-6828332309093978903?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/6828332309093978903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=6828332309093978903&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/6828332309093978903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/6828332309093978903'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/10/eclipse-polo-t-shirt-come.html' title='Eclipse POLO T-Shirt Come!'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-7834233267631912673</id><published>2009-10-03T12:20:00.002+08:00</published><updated>2009-10-03T12:21:49.071+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jni'/><category scheme='http://www.blogger.com/atom/ns#' term='eswt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ercp'/><category scheme='http://www.blogger.com/atom/ns#' term='cvm'/><category scheme='http://www.blogger.com/atom/ns#' term='phoneme'/><title type='text'>Running eRCP with Phoneme Advanced on your mobile phone</title><content type='html'>&lt;div&gt;Running eRCP with Phoneme Advanced on your mobile phone&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Originally, I don't think this is a problem. Because I have run the eRCP with J9 VM successfullly 4 years ago. However, when I revisit this topic recently, I found that this thought was not true. You google some posts about this problem, like &lt;a id="hd4_" href="http://forums.java.net/jive/thread.jspa?threadID=63667&amp;amp;tstart=30" target="_blank" title="here"&gt;here&lt;/a&gt; or &lt;a id="m1vr" href="http://dev.eclipse.org/newslists/news.eclipse.dsdp.ercp/msg00825.html" target="_blank" title="here"&gt;here&lt;/a&gt; recently, or old post &lt;a id="e2-o" href="http://dev.eclipse.org/newslists/news.eclipse.dsdp.ercp/msg00825.html" target="_blank" title="here"&gt;here&lt;/a&gt; at 2007.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now the status of JVM on mobile phone is that J9 CDC VM is not available to non-linux platform mobile users for free any more.(maybe binded with some IBM products like IBM JRE6? If I am not right, you correct me^_^). And some benchmark show that the phoneme advanced is faster thant the J9 embed.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now, I think I should fix this problem for our community. I take out my old HP 1940, and try to find some clues. And yes, I get the crash as well. One convenient thing for Equinox(or other OSGI RI) is that you can find some logs at the %eRCP_ROOT%/configuration/ directory. I find one thing like,&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;...&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;!MESSAGE&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;!STACK 0&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;org.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(Unknown Source)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(Unknown Source)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Unknown Source)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(Unknown&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;...&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Yeah, "Missing Constraint: Bundle-RequiredExecutionEnvironment" error. So, we know that the Equinox OSGI framework can not recognize the phoneme advanced execution environment. After quickly sourcing, the best fixing solution appears. Using the follow .ink file to lanuch the eRCP,&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;37#"\phoneme\bin\cvm.exe" -Djava.specification.name="J2ME Foundation Specification" -cp \eRCP\startup.jar org.eclipse.core.launcher.Main -application org.eclipse.ercp.swt.demo.eSWTDemoApp -console&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The reason is that the Equinox osgi use "&lt;i&gt;java.specification.name&lt;/i&gt;" property to recognize the cdc execution environment, and they just accept the "J2ME Foundation Specification" as the value of property &lt;i&gt;java.specification.name&lt;/i&gt;. However, in the Phoneme Advanced, this value is set to the "Foundation Profile Specification" in default. There are many ways to fix this problem, such as modifying the makefile of phoneme, modifying the config.ini to include this property, or modifying the source of osgi. However, the best way now is as my suggestion. I will open a bug to Equinox to see if they want to do something:)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now you will see the exciting screen on your mobile phone.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="qqy."&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_179fff9gzf4_b" style="width: 240px; height: 320px"&gt;&lt;/div&gt;eRCP HelloWorld&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="tp40"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_180n2jf6rww_b" style="width: 240px; height: 320px"&gt;&lt;/div&gt;eRCP Canvas&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="vtrh"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_181cw2rcpg5_b" style="width: 240px; height: 320px"&gt;&lt;/div&gt;eRCP eWorkbench&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="l8sw"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_182djnf87gp_b" style="width: 240px; height: 320px"&gt;&lt;/div&gt;OSGI(Equinox) console&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The feeling of eRCP has still been awesome from my last try several years ago. The fact eRCP can run on mobile has demonstrated the success of&amp;nbsp;&lt;a id="tgr4" href="http://eclipse.org/rt/" target="_blank" title="Eclipse RT project"&gt;Eclipse RT project&lt;/a&gt;. (Surely, OSGi Minimum Execution Environment is JavaME Foundation).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;One interesting for me is that the eSWT widgets can work with Phoneme Advanced without any modification. As I have pointed out at &lt;a id="ut_t" href="http://jmj-eclipse.blogspot.com/2009/09/phoneme-advanced-and-eswt-running-under.html" target="_blank" title="the previous post"&gt;the previous post&lt;/a&gt;, the JNI application should be compiled with CVM's JNI headers. In win32/x86 platform, this re-compilation is a "must". However, direct eSWT supporting for CVM is not perfect. The screenshots, like "eRCP eWorkbench", has shown some appended unreadable characters on the menu item. That is a eSWT bug (seemly just for CVM) as I mentioned at &lt;a id="zvjp" href="http://jmj-eclipse.blogspot.com/2009/09/phoneme-advanced-and-eswt-running-under.html" target="_blank" title="the previous post"&gt;the previous post&lt;/a&gt; as well. It needs times to fix this problem.&amp;nbsp;&lt;span style="font-family: Arial"&gt;Stay tuned...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Let's do a summary as follows:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1. full eRCP can be run with Phoneme Advanced&lt;/div&gt;&lt;div&gt;2. full OSGI 4.x RI can be run with Phoneme Advanced&lt;/div&gt;&lt;div&gt;3. if you run the native(JNI) codes and meet some errors, please do not forget to re-compile your JNI codes against CVM's JNI headers.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-7834233267631912673?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/7834233267631912673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=7834233267631912673&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7834233267631912673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7834233267631912673'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/10/running-ercp-with-phoneme-advanced-on.html' title='Running eRCP with Phoneme Advanced on your mobile phone'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-4707352047608372599</id><published>2009-09-20T20:26:00.002+08:00</published><updated>2009-09-20T20:34:55.358+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eswt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ercp'/><category scheme='http://www.blogger.com/atom/ns#' term='cvm'/><category scheme='http://www.blogger.com/atom/ns#' term='swt'/><category scheme='http://www.blogger.com/atom/ns#' term='phoneme'/><category scheme='http://www.blogger.com/atom/ns#' term='jvm'/><title type='text'>Phoneme advanced and eSWT Running Under x86 Windows</title><content type='html'>&lt;div&gt;Phoneme advanced and eSWT Running Under x86 Windows&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Recently I still try to find interesting things to explore freely. One thing is that I mention I'd like to contribute the Eclipse in some projects, like &lt;a id="mvo0" href="http://dev.eclipse.org/mhonarc/lists/e4-dev/msg01627.html" target="_blank" title="e4 language"&gt;e4 language&lt;/a&gt; or &lt;a id="p9lc" href="http://www.eclipse.org/forums/index.php?t=msg&amp;amp;th=154245&amp;amp;start=0&amp;amp;S=6c549087a5559e1525c6869ae25edaac" target="_blank" title="VE"&gt;VE&lt;/a&gt;(I avoid contributing to the projects full of employees). However, the feedbacks seem not active. In my view, the reason that Eclipse is the current Eclipse is just the gigantic, passionate, dream-filled community.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Oh, come to the right topic.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;There are many research JVMs under the linux. All of them are much not friendly to Windows users(the fact is that almost of them even do not consider the problem of porting to Windows). Although the linux environment is better for some programmers, it is very dangerous to think only from the programmer's perspective as a programmer. This behavior could kill your community.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;"&lt;a id="qhp_" href="https://phoneme.dev.java.net/" target="_blank" title="Phoneme advanced"&gt;Phoneme advanced&lt;/a&gt;" is one CDC target Java platform(JavaME, academically. And, I will call the "Phoneme advanced" JVM as "CVM" as follow), which is opensourced from Sun's product(after the OpenJDK borning) under the GPLv2.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The attractive thing for me is that CVM could be seen as the compact version of J2SE 1.4(yes, that is, CVM fully complies with the JVM Specification, 2rd). That is, we can do many useful things on it.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;It is easy to get the source of Phoneme. However, like all other research VMs, the build system of Phoneme is based on the sh/make of Linux. This is not easy to Windows users. To find , We need Cygwin, which provide a linux-like enirvonment for Windows. A little inconvenience for Cygwin is that it needs to be installed via internet connection.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The good news is that the phoneme adv. provide make files for win32-x86 platform and VC build toolchain. The bad news is that the the default building scripts are not fully matched with your actual options. If your VC or SDK was installed into non-default directory, you need to carefully examine the output infos to find what the enirvoment variables are wrong and you should redefine those variable. Two detail clues here,&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;i&gt;1. the path for Windows is not valid for Cygwin, modify it like c:\xxx -&amp;gt; /cygdrive/c/xxx&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;2. for the Vs8 build script, the variable "PLATFORM_SDK_DIR" can not be overrided(a bug?). You should modify it by hand.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_167hsmr2vfp_b" style="width: 548px; height: 303px"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After more or less tweaking, I get the CVM into running successfully, Cool! The coolest thing is not that the CVM could be run, but that the packed size of the runnable CVM with the foundation runtime library is just about 1.1MB. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="tdc_"&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="text-align: left" id="kua."&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_1644t9z6ffj_b" style="width: 503px; height: 18px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The next big is the capability of UI application for cvm. One thing here is, you need to rebuild the native codes against with CVM' JNI headers. Don't try to use existed native library directly. Firstly, I test the SWT. But I get errors when compiling the sources under VC++2005EE and MS Platform SDK. Error logs like as follow,&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;...\MicrosoftSDK\Include\exdisp.h(39) : error C2061: syntax error : identifie&lt;/div&gt;&lt;div&gt;r 'IWebBrowser'&lt;/div&gt;&lt;div&gt;...\MicrosoftSDK\Include\exdisp.h(39) : error C2059: syntax error : ';'&amp;nbsp;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I can not figure out how to solve this problem. If you know, please let me know:)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Then, I remember the &lt;a id="q_af" href="http://www.eclipse.org/ercp/" target="_blank" title="eRCP"&gt;eRCP&lt;/a&gt; again. In my eye, it's a lightweight RCP implementation even for desktop. The &lt;a id="ewot" href="http://www.eclipse.org/ercp/eswt/gallery/gallery.php" target="_blank" title="eSWT"&gt;eSWT&lt;/a&gt; is the base of eRCP. I fetch the eSWT sources. But frankly, bugs in the eSWT win32 codes is not rare. I have some years not to touch the C/C++ codes.Otherwise, this is a good chance for me to play with JNI deeply. After a while, I get them compiled successfully again. Cong!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="ozcz"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_166ghq2jcc9_b" style="width: 475px; height: 326px"&gt;&lt;/div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The above sreenshot is a sample code shipped with VE, called "SimpleSWTTextEditor". I do a little modifications to the text to test UI(JNI) and Unicode support of CVM. As you say, the basic aspect of UI is nice. However, the text of widgets has been append unreadable characters.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After intensively debugging, I find the problem exists in the #GetStringChars() method. This method return the jchar* which is called by #convertToNativeString, however this implementation in CVM seem has a non-standard behavior. (I am not sure to open this bug to eswt? or cvm?). Then after fixing this problem, I get the nearly perfect solution. The Unicode support is nice for both English and Chinese.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;div style="text-align: left" id="am2j"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_165ffh9njgj_b" style="width: 476px; height: 281px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Cong! You can dream the next story...&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="sh6o"&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-4707352047608372599?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/4707352047608372599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=4707352047608372599&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4707352047608372599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4707352047608372599'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/09/phoneme-advanced-and-eswt-running-under.html' title='Phoneme advanced and eSWT Running Under x86 Windows'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-2207095294479162495</id><published>2009-08-31T14:12:00.002+08:00</published><updated>2009-08-31T14:13:46.106+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>e4 0.9 review - 02 - How to write a Helloworld JavaScript Bundle</title><content type='html'>e4 0.9 review - 02 - How to write a Helloworld JavaScript Bundle&lt;br /&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Go on the next e4 .9 review blogging.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="s8p4"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_152gs7fzpd6_b" style="width: 648px; height: 444px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The e4 has introduced the "JavaScript framework" to demonstrate the flexibility of e4 language support. In the meantime, this e4 component makes the Eclipse much similar to the internet browser(like FF,Chrome,IE...). Yeah, it can be imagined that we get a heavy but high-performance internet client. The GEF/GEF3D with Javascript should beat mainstream Javascript libraries easily. Cool...Oh, it is a little unfair to compare the C/S structure to B/S...&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;One thing worried by me is that, in the JS framework diagram, one flow "e4 JS-&amp;gt;Rhino-&amp;gt;JVM" pass by the OSGI framework. It is a smell in the aspect of security. Because the OSGI is a thin modular layer on the JVM to some extent. I can not figure out why this design is a must.(Rhino problem?)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;This Javascript language support in Eclipse is a especially interesting topic for me recently. I am also doing some EPLed ecmascript 5 experiments privately. The basic idea is using the Eclipse related technologies and JDK7 MLVM to refresh the status of "JavaScript on JVM"(new Rhino?). Is there someone in the community interesting this effort? Collaboration?&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Oh, a little away from the point:) In fact, one big reason for this article is that, I find no one know how to write a JavaScript Bundle and run it in the e4. Simon Kaegi &lt;a id="vs03" href="http://dev.eclipse.org/mhonarc/lists/e4-dev/msg01609.html" target="_blank" title="said in the mail list"&gt;said in the mail list&lt;/a&gt;&amp;nbsp;that, they are busy doing tooling support, and "a&lt;span style="font-family: arial, sans-serif"&gt;&lt;font class="Apple-style-span" face="Verdana"&gt;t the moment information is hard to come by other than the wiki page".&lt;/font&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&amp;nbsp;As one of the most important features of e4, the missing of "Get Started" docs really blocks the passion of community. However, I think they just want to show the perfect achievement to the community when they are ready.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After quickly sources reviewing yesterday, I find that it is possible to uncover the tip of the iceberg. Maybe there are many potential contributors to take part in the evolvement of the e4 language support.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="u22u"&gt;Firstly, you can read basic infos from &lt;a id="mwnw" href="http://wiki.eclipse.org/E4/JavaScript" target="_blank" title="the e4/Javascript wiki page"&gt;the e4/Javascript wiki page&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I demonstrate how to code one co-located JavaScript bundles in a host OSGi bundle.(I doubt the usefulness of the semantics of the pure Javascript bundle.)&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="y89b"&gt;&lt;br&gt;&lt;/div&gt;This kind of JS bundle consists of three key parts: "JavaScript-Bundle&lt;span style="font-family: Verdana, sans-serif"&gt;" header in manifes.mf, manifest.json(equivalent to the osgi manifes.mf), test.js(the name is arbitrary, however, you put the logic of bundle here). Some srceenshots seen as follow:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="jfdf"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_160f54xm6ch_b" style="width: 595px; height: 302px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;"JavaScript-Bundle&lt;span style="font-family: Verdana, sans-serif"&gt;" header in &lt;i&gt;manifes.mf&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="lbzr"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_156gw968zds_b" style="width: 544px; height: 307px"&gt;&lt;/div&gt;&lt;i&gt;manifest.json&lt;/i&gt;, note the name "Activator" should match with the constructor function in &lt;i&gt;test.js&lt;/i&gt;(&lt;i&gt;test0.js here&lt;/i&gt;&lt;span style="font-style: normal"&gt;&amp;nbsp;is a bug-like script I found accidently, it seem a rhino bug. However, more dependencies cause more security problem...)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="u2qj"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_157c8sp7jgc_b" style="width: 479px; height: 216px"&gt;&lt;/div&gt;add "-console" arguments, and set the "auto-start" into true if you want to get the same screenshots below(orz, you can do it by hand)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="z3s."&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_158pjjksxdd_b" style="width: 575px; height: 351px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;the content of &lt;i&gt;test.js&lt;/i&gt;(not use the rhino &lt;i&gt;"print",&lt;/i&gt;&amp;nbsp;you should borrow the "&lt;i&gt;println"&lt;/i&gt; from Java&lt;i&gt;)&lt;/i&gt;, and we get the "Hello..." when start osgi(yeah, all wanted-to-be-started bundles will be started)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="xd-1"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_159d8mxxsfx_b" style="width: 569px; height: 357px"&gt;&lt;/div&gt;we get the "Goodbye..." when stop osgi(yeah,all started bundles will be stopped)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, sans-serif"&gt;Congrats! You've got your first trusted Javascript bundles in e4!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Although this is a Helloworld Javascript bundle, I make sure that you can get more exciting things if you dig into the world of e4 language.&amp;nbsp;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-2207095294479162495?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/2207095294479162495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=2207095294479162495&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/2207095294479162495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/2207095294479162495'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/08/e4-09-review-02-how-to-write-helloworld.html' title='e4 0.9 review - 02 - How to write a Helloworld JavaScript Bundle'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1537094750714134446.post-7182613902609449297</id><published>2009-08-30T18:01:00.002+08:00</published><updated>2009-08-30T18:06:34.049+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>e4 0.9 review - 01 - on the road</title><content type='html'>&lt;div&gt;e4 0.9 review - 01 - on the road&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After some recent job interviews and ecmascript 5 specification(final draft) reading, I have the breathing time in this weekend to come back to our Eclipse community. I find that there is one trend for me to do a lengthy blogging. One reason for this is that I'd like to discuss the useful, not trivial technical aspects of Eclipse evolvement in our community at least. However, this need a long time to prepare the contents usually in the span of one week or more. Maybe I can break one lengthy blog article into more short ones to make my life easier?:)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;To my surprise, there are &lt;a id="r.:u" href="http://www.eclipse.org/community/e4contest/reviews.php" target="_blank" title="only several pieces"&gt;only several pieces&lt;/a&gt; of blogging targetted to &lt;a id="wcr9" href="http://www.eclipse.org/org/press-release/20090806_e4cb.php" target="_blank" title="the&amp;nbsp;e4 Feedback Contest"&gt;the e4 Feedback Contest&lt;/a&gt;, compared to the huge number of reviews in &lt;a id="txcu" href="http://www.eclipse.org/galileo/blogathon/reviews.php" target="_blank" title="the Galileo blogathon"&gt;the recent Galileo blogathon&lt;/a&gt;. Maybe the prize of the contest is not big? I have got one Eclipse shirt in the past. Yeah, it's great. To make me to write this review(oh, maybe a series), it is the &lt;a id="o2-k" href="http://dev.eclipse.org/blogs/mcqjustmcq/2009/07/25/eclipse-has-a-future/" target="_blank" title="McQ's words"&gt;McQ's words&lt;/a&gt;. This blog article is the longest one I've seen in our Planet, which address the current status of e4 and how the committer think the e4. As a healthy ecosystem, it is the responsibility for the committers to discuss the big changes before they made with the community. &amp;nbsp;I really appreciate the McQ's work. So, he hope to get the feedback from the community, and I hope to give the feedback to him.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Like my Galileo review, I will not repeat the common basic informations about the e4 here. You can find enough stuffs at [1][2][3].&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I review as the follow,&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;Compatibility:&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I test the templates binding with the plugin creation wizard. For the plugin, the compatibility for 3.x plugins seem nice. Because the main existed concepts of framework have not been changed. However, all of the 3.x RCP application templates can not run on the e4 platform directly. That is a question: the 3.x application is a e4 application as well? The answer is "YES". The e4 has a provide &lt;a id="ymx." href="http://wiki.eclipse.org/E4/Compatibility" target="_blank" title="a&amp;nbsp;compatibility layer"&gt;a compatibility layer&lt;/a&gt;. The problem is, why we can not run the 3.x RCP application. After simply browsing the sources, I get the key to solve this problem: you can add a "applicationCSS" property to the product extension to guide the legacy workbench environment working for you. Here is the "RCPMail" product.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="w.-i"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_146ffq5r3cf_b" style="width: 648px; height: 487.98px"&gt;&lt;/div&gt;However, there seem a bug(or two bugs) in the plugin "&lt;i&gt;org.eclipse.e4.ui.workbench.fragment&lt;/i&gt;". It seem odd in some aspects. So, I just mention the class "&lt;i&gt;org.eclipse.e4.workbench.ui.menus.MenuHelper&lt;/i&gt;". If you meet some errors, you can consult this class. One thing here is, the "applicationCSS" property just serves as a dummy placeholder. This is another story. As one ongoing project, it's acceptable.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;Usability&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;General&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The default legacy workbench inherit the main face of recent Galileo platform. So, you can not see more wisdom from the a bit ugly face. In fact, there are some common but trivial unfinished parts in the e4 0.9(said by McQ's blog).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_147cnn7gjgb_b" style="width: 248px; height: 78px"&gt;&lt;/div&gt;&lt;div&gt;odd "Design" top menu&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;No toolbar for workbench&lt;/li&gt;&lt;li&gt;views don't support the layout&lt;/li&gt;&lt;li&gt;no saved last preference&lt;/li&gt;&lt;li&gt;clicking the current breakpointed statement in "Debug" View will not &amp;nbsp;location of the sources when debugging ...&lt;/li&gt;&lt;li&gt;hard to close one editor if there are many opened editors&lt;/li&gt;&lt;li&gt;bad performance when the running time become long&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;Modeled UI&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;The Modeled UI capabilities could be played with "UI " in the top menu "e4". This is my interesting part. One reason is that I am a EMF fan. The EMF has many designs to make you happy at the Eclipse world. The dependency is one kind of responsibility. Although great &lt;a id="xf5n" href="http://ed-merks.blogspot.com/" target="_blank" title="Ed"&gt;Ed&lt;/a&gt; is still there, I hope the whole of platform with &lt;a id="dtl_" href="http://www.eclipse.org/org/press-release/Eclipse_Survey_2009_final.pdf" target="_blank" title="million of users"&gt;million of users&lt;/a&gt;&amp;nbsp;dependency will not be too heavy for EMF.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Still, one obvious bug for the attribut "visible" existed.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="vyt_"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_148f3cx48dm_b" style="width: 369px; height: 329px"&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Declarative UI&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The eye-catcher of e4 is the capability of the declarative UI. There are two demo products shipped with e4. They are the standard e4 products. If you want to see how to code one new e4 powered application, see those demos. I am not a UI fan, I don't use any UI theme in my Windows desktop environment. So, I just enjoy the photos of our committers:)&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="uuqs"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_149f5g5mbzh_b" style="width: 379px; height: 439px"&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;font size="3"&gt;Wisdom behind the e4&lt;/font&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The most important things are the back-end ideas behind the shining or ugly face. The programming model(new?) and thus the different language support is the next milestone of Eclipse as a Utopian platform. These topics will be addressed next. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;font size="3"&gt;Summary&lt;/font&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Yeah, the e4 is on the wonderful road. As a platform, I agree with the direction of e4. &amp;nbsp;However, please carefully choose e4 dependencies. Hopefully, make all additions in e4 optional as possible. If one user don't like to change the skin or model something(he just want to edit his Java codes), will we force the 200+MB bulk to his disk? &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;[1]&amp;nbsp;&lt;a href="http://www.eclipse.org/e4/resources/e4-whitepaper.php"&gt;http://www.eclipse.org/e4/resources/e4-whitepaper.php&lt;/a&gt;&lt;/div&gt;&lt;div&gt;[2]&amp;nbsp;&lt;a href="http://download.eclipse.org/e4/downloads/drops/R-0.9-200907291930/e4-news-all.html"&gt;http://download.eclipse.org/e4/downloads/drops/R-0.9-200907291930/e4-news-all.html&lt;/a&gt;&lt;/div&gt;[3]&amp;nbsp;&lt;a href="http://wiki.eclipse.org/E4"&gt;http://wiki.eclipse.org/E4&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-7182613902609449297?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/7182613902609449297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=7182613902609449297&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7182613902609449297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7182613902609449297'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/08/e4-09-review-01-on-road.html' title='e4 0.9 review - 01 - on the road'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-8271371198319978522</id><published>2009-08-11T19:09:00.002+08:00</published><updated>2009-08-11T19:23:42.011+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><category scheme='http://www.blogger.com/atom/ns#' term='continuation'/><title type='text'>OSGI R3 Implementation Running on Google App Engine Now</title><content type='html'>OSGI R3&amp;nbsp;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;Implementation Running&amp;nbsp;&lt;/font&gt;&lt;/span&gt;on Google App Engine Now&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;"OSGI on Google App Engine", this seem a little older topic now? When &lt;a id="jabt" href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html" target="_blank" title="the first&amp;nbsp;announcement&amp;nbsp;of GAE/J"&gt;the first announcement of GAE/J&lt;/a&gt;, I just think whether it is possible to post the &amp;nbsp;newest effort about this topic to the community by me. However, the poor time prohibited me from conducting more things at that time. It was&amp;nbsp;&lt;i&gt;ZX&lt;/i&gt; who posted &lt;a id="ejz3" href="http://eclipsesource.com/blogs/2009/04/10/osgi-on-appengine/" target="_blank" title="the local test result"&gt;the local test result&lt;/a&gt;&amp;nbsp;in the community.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Time has been moving into the August, nothing new happened. I decided to revisit the little older topic.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;It is known that&amp;nbsp;&lt;a id="rx8e" href="http://code.google.com/appengine/docs/java/runtime.html" target="_blank" title="the&amp;nbsp;&amp;quot;sandboxed&amp;quot; environment"&gt;the "sandboxed" environment&lt;/a&gt;&amp;nbsp;of GAE/J has blocked the main OSGI running efforts. I try to rethink the real obstacle from having fun in this sandbox. For the simplicity, I do not choose the Equinox or Felix. Because they have been optimized for the full J2SE&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;&amp;nbsp;platform in a long time. I choose the framework optimized for size, that is the "&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;b&gt;Concierge&lt;/b&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;". It is one of four&amp;nbsp;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;implementations listed in the&lt;span style="font-family: Verdana, sans-serif"&gt;&amp;nbsp;“See also” section in &lt;a id="u_8n" href="http://en.wikipedia.org/wiki/OSGi" target="_blank" title="the OSGI wikipedia"&gt;the OSGI wikipedia&lt;/a&gt;.&amp;nbsp;&lt;font size="2"&gt;The&amp;nbsp;&lt;/font&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;Concierge is a OSGi R3 framework implementation. It is still a little nice for no-trivial bundles(back to the Eclipse R3.0?).&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;My adventure is below...&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;The Filesystem&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;This is one main problem mentioned in the zx's blog post. However, this is just one small problem for running OSGI on GAE/J. One suggestion has been &amp;nbsp;proposed by zx. That is, writing a custom storage adaptor hook. My suggestion is to take use of or consult the &lt;a id="creb" href="http://code.google.com/p/gaevfs/" target="_blank" title="GaeVFS"&gt;GaeVFS&lt;/a&gt;. Most of work about File-system-like GAE storage have been done in this project. I have tested some small file data storage testings. It works fine. I do no more attempt here. Because demonstrating running OSGI on the GAE/J does &lt;i&gt;not&lt;/i&gt; need the storage. Most demands for data storage in OSGI is related to the efficiency or configuration of framework. Go ahead!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif"&gt;&lt;p&gt;&lt;font class="Apple-style-span" face="Verdana"&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;Customized Class Loading(and Reflection)&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;More problems will happen in this section:) In the local GAE/J, all classes are load by the &lt;i&gt;IsolatedAppClassLoader&lt;/i&gt;. And, this class is hidden behind the API. However, in the&amp;nbsp;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;Concierge(and other OSGI implementation), all classes in the different bundles are loaded by different bundle classloaders, which is customized from the &lt;i&gt;Classloader&lt;/i&gt;. Definitely, the first bundle of core framework or launching core framework must be loaded by the Google runtime. If we want to cast some classes in the bundle into the class in the core system bundle, we will meet the runtime ClassNoFoundException error. The only workaround is using the launching framework to load the core framework by its customized classloader. I find that zx has found this workaround as well. The magic is in the Class &lt;i&gt;FrameworkLauncher&lt;/i&gt;&amp;nbsp;of the Equinox servletbridge.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;However, the customized class loading infrastructure of GAE/J has another bug - GAE &lt;a id="rwfg" href="http://code.google.com/p/googleappengine/issues/detail?id=1503&amp;amp;q=access%20denied%20classloader&amp;amp;colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component" target="_blank" title="Issue 1503"&gt;Issue 1503&lt;/a&gt;. Briefly speaking, the issue said that we can not read the bundles from the war-rooted file system although the reading action is alllowed by the GAE server(yeah, should/must be allowed). As we mentioned below, the GaeVFS can give a solution. But this workaround will make the debugging and deployment work very complex. And tobyr(from google?) said, "&lt;font size="2"&gt;&lt;i&gt;Unfortunately there is no workaround&lt;br /&gt;for this at the moment&lt;/i&gt;". Interestingly, I find that ZX has found this workaround as well. That is, you give the AllPermission to the classloader. I list the compact version here,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;div&gt;static final PermissionCollection allPermissions = new PermissionCollection() {&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;  public void add(Permission permission) {&lt;/div&gt;&lt;div&gt;  }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;  public boolean implies(Permission permission) {&lt;/div&gt;&lt;div&gt;   return true;&lt;/div&gt;&lt;div&gt;  }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;  public Enumeration elements() {&lt;/div&gt;&lt;div&gt;   return new Enumeration() {&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;    private boolean hasMore = true;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;    public boolean hasMoreElements() {&lt;/div&gt;&lt;div&gt;     return hasMore;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;    public Object nextElement() {&lt;/div&gt;&lt;div&gt;     if (hasMore)&lt;/div&gt;&lt;div&gt;      hasMore = false;&lt;/div&gt;&lt;div&gt;     return new AllPermission();&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;   };&lt;/div&gt;&lt;div&gt;  }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; };&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;...&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;using the&amp;nbsp;&lt;i&gt;allPermissions &lt;/i&gt;in the your classloaders like,&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Verdana, Helvetica, Arial, sans-serif"&gt;&lt;div&gt;&lt;font size="2"&gt;&lt;i&gt;protected PermissionCollection getPermissions(CodeSource codesource) {&lt;/i&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;     &lt;font size="2"&gt;&lt;i&gt;return allPermissions;&lt;/i&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;    &lt;font size="2"&gt;&lt;i&gt;}&lt;/i&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;...&lt;/font&gt;&lt;/div&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif"&gt;&lt;font size="2"&gt;If you'd like to use the customzied classloaders&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-style: normal"&gt;&lt;font size="2"&gt;, some reflection codes need to be written in your sources at least in the launch framework. My whole impression is that the GAE/J reflection support is much nice. &amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;To arrive here, in fact, we can running the non blocking bundle or using the non blocking services if we can build one osgi runtime against with the GAE/J. Yeah!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;Threads&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;The sandbox adheres to said "NO" to the thread creation till now. The &lt;/font&gt;&lt;a id="m3bh" href="http://code.google.com/appengine/docs/java/config/cron.html" target="_blank" title="Cron jobs"&gt;&lt;font size="2"&gt;Cron jobs&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; in the GAE/J is not the substitute for the Java thread apparently. I have tried to find the lightweight thread(or called "Green Thread", "Fiber"...)for the threadless environment.&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;The defective solution is using the existed event-based concurrent mechanism. &amp;nbsp;Some implementations are using the&amp;nbsp;&lt;/font&gt;&lt;a id="hzii" href="http://en.wikipedia.org/wiki/Actor_model" target="_blank" title="Actor model"&gt;&lt;font size="2"&gt;Actor model&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, like the Scala. After digging into the implementation, I found that almost of them take use of the thread pool(they need to use the scheduling algorithms in the java.util.concurrent). So, all of them failed in the GAE/J sandbox. However, I must say, I like the idea behind the lightweight thread framework. They are still very useful for the performance tunning of the common serve. If the GAE/J allow the limited thread/threadpool creation someday, I think we will be infinitely close to full&amp;nbsp;&lt;/font&gt;&lt;span style="font-family: Arial, sans-serif"&gt;&lt;font size="2"&gt;full-fledged platform.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;There is no workable solution here?...One (maybe only) workable and a little elegant solution which could be run on GAE/J, is the&amp;nbsp;&lt;/font&gt;&lt;span style="font-family: Arial, sans-serif"&gt;&lt;a id="g5ps" href="http://en.wikipedia.org/wiki/Continuation" target="_blank" title="continuation" style="color: rgb(85, 26, 139)"&gt;&lt;font size="2"&gt;continuation&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&amp;nbsp;based&lt;/font&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;&amp;nbsp;coroutine. Continuation is another big topic. There is no room to write many interesting contents of continuation here. I just show some efforts and results. I spend half a day to develop a &lt;i&gt;Fiber&lt;/i&gt;&amp;nbsp;and a simple &lt;i&gt;Scheduler&lt;/i&gt; based on the &lt;a id="lyqh" href="http://commons.apache.org/sandbox/javaflow/" target="_blank" title="Javaflow"&gt;Javaflow&lt;/a&gt;. I can run the 1000 simple Fibers in on the local app engine sdk server. Cong! However, the Javaflow is still in the unofficial phase. There are bugs in the bytecode weaving course for one complicate method. This badly limit the usage of whole concurrent system in one production platform like GAE. There is not actual meaningfulness for this Javaflow based Fiber system now. Fortunately, in the &lt;a id="p1l8" href="http://openjdk.java.net/projects/mlvm/" target="_blank" title="MLVM"&gt;MLVM&lt;/a&gt;, the native continuation support for Java has been proposed and &lt;a id="e-n4" href="http://hg.openjdk.java.net/mlvm/mlvm/jdk/file/tip/callcc.patch" target="_blank" title="an initial patch"&gt;an initial patch&lt;/a&gt;&amp;nbsp;is available. I hope a high performance implementation of&amp;nbsp;&lt;font size="2"&gt;continuation tools will&amp;nbsp;&lt;/font&gt;appear.&amp;nbsp;&lt;font size="2"&gt;Unfortunately, we will not see the native continuation support in the JDK7. What's the time of JDK8?...&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The basic conclusion of this section is, that no workaround for the threads.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="3"&gt;Piece Together&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Based on the above exploring, it is still possible to run the OSGI platform if the OSGI runtime and its bundles do not block the thread. I show this right! The below screenshots show my initial efforts:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="rcp9"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_133g7r3wx97_b" style="width: 486px; height: 438px"&gt;&lt;/div&gt;Welcome page&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="fiox"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_134w28jvrgw_b" style="width: 517px; height: 577px"&gt;&lt;/div&gt;Initialization of the modified Concierge OSGI framework&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="s5-m"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_135hrbs4tgf_b" style="width: 525px; height: 475px"&gt;&lt;/div&gt;bundles command in Concierge, see the bundle 1 is just in the resolved state&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="h:2y"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_136hcqg6nhr_b" style="width: 533px; height: 381px"&gt;&lt;/div&gt;start the bundle 1 (a simple bundle: simple.test-1.0.0.jar )&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="dzwa"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_137cwjkn6hm_b" style="width: 532px; height: 473px"&gt;&lt;/div&gt;bundles command, to see the bundle 1 is in the active state&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="v831"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_138dfs3q8f2_b" style="width: 530px; height: 368px"&gt;&lt;/div&gt;stop the bundle 1&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="yw1m"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_139gwdvzggf_b" style="width: 529px; height: 363px"&gt;&lt;/div&gt;bundles Command, to see the bundle 1 is back to the resolved state&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="q.ro"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_140g5zhttdt_b" style="width: 531px; height: 386px"&gt;&lt;/div&gt;headers command&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The screenshots show the dynamic cycle of one dummy bundles in the OSGI platform. Cong! I hope to upload the sources to &lt;a id="by-c" href="http://code.google.com/p/gequinox/" target="_blank" title="my personal project"&gt;my personal project&lt;/a&gt; after some cleaning. However, I provide the web accessing in &lt;a id="ucx1" href="http://fullosgi.appspot.com/" target="_blank" title="this appspot site"&gt;this appspot site&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;After the successful running of the OSGI R3, is the OSGI R4 far away?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;About the Google Eclispe plugin for app engine&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;The newest plugin for 3.5 is nice for the small project in my test(without GWT. I hope RAP could be run the GAE/J someday. yeah^_^). The size of whole plugin is a liitle large(300M+ on my disk, google plugin depends on some of WPT/WST). If some custom works can be done to GAE/J support, the plugin will be more bright.&amp;nbsp;&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-8271371198319978522?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/8271371198319978522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=8271371198319978522&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8271371198319978522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/8271371198319978522'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/08/osgi-r3-implementation-running-on.html' title='OSGI R3 Implementation Running on Google App Engine Now'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-7460151239530764040</id><published>2009-07-24T22:50:00.002+08:00</published><updated>2009-07-24T22:54:56.502+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ecodebox'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='databinding'/><title type='text'>Binding or not binding. It's a problem.</title><content type='html'>Binding or not binding. It's a problem.&lt;br /&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Recently, I'm finishing my one personal RCP project. I decide to touch the &lt;a id="g:se" href="http://wiki.eclipse.org/JFace_Data_Binding" target="_blank" title="JFace data binding framework"&gt;JFace data binding framework&lt;/a&gt;. To be &lt;span class="heighlight"&gt;exact,&lt;/span&gt;&amp;nbsp;it now should be called the "Eclipse data binding" framework. The data binding stuffs have been one part in the core of Eclipse, and the JFace data binding is just one application of the Eclipse data binding. I have not played with the data binding since it's born. One main reason is that I don't think the listener boilerplate codes are hard to write or error-prone, however the databinding introduce many new concepts.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;With the entrance of the databinding to the core of Eclipse and, of course, RCP, I should put it into my toolbox if I don't waste some functionalities and hard disk space.&lt;/div&gt;&lt;br&gt;&lt;div&gt;Now, the target of my adventure is to customize a databinding implementation for &lt;a id="dku4" href="http://www.eclipse.org/nebula/widgets/pshelf/pshelf.php" target="_blank" title="Nebula PShelf"&gt;Nebula PShelf&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Firstly, I take 2 days to read the most of materials from Eclipsepedia, EclipseCon, blogging or anything else. Frankly speaking, I don't like almost of them. Because they don't take care of the the customization of databinding which is just interesting for me. However, for newcomers, I'd like to suggest two reading - the &lt;a id="db3l" href="http://wiki.eclipse.org/JFace_Data_Binding" target="_blank" title="old Eclipsepedia page"&gt;old Eclipsepedia page&lt;/a&gt;,&amp;nbsp;&lt;a id="njyr" href="http://www.eclipsecon.org/2009/sessions?id=641" target="_blank" title="RCP Mail 2.0"&gt;RCP Mail 2.0&lt;/a&gt;. And don't forget the &lt;a id="zick" href="http://fire-change-event.blogspot.com/" target="_blank" title="offical databinding blog"&gt;offical databinding blog&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Then, I start to dig into the source of databinding. After my familiarity with the databinding boilerplate codes and others(how the framework works), &amp;nbsp;the properties API appears. The properties API&amp;nbsp;&lt;a id="axoq" href="http://fire-change-event.blogspot.com/2009/02/introducing-properties-api.html" target="_blank" title="has been introduced"&gt;has been introduced&lt;/a&gt; into the Eclipse data binding framework from 3.5M5 to solve some hard coupling(then "Observables are hard to implement") in the framework. The properties API use the "&lt;a id="kwjp" href="http://en.wikipedia.org/wiki/Fluent_interface" target="_blank" title="Fluent Interface"&gt;Fluent Interface&lt;/a&gt;" which is one nice API style thought by me. Cong! With the help of the properties API, I succeed in finishing my PShelf databinding customization adventure.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="ez8z"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_126z2t88mzg_b" style="width: 200px; height: 555px"&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Lastly, I just drop a few comments on the Eclipse Data Binding framework from my eye,&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1. The framework seem a little over-designed.&lt;/div&gt;&lt;div&gt;In the runtime, the call stack will be much long even in the simple case compared to the traditional listener pattern.&lt;/div&gt;&lt;div&gt;And, many APIs are just delegates to other APIs. Like,&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;div&gt;public static IObservableValue observeValue(Realm realm, Object bean,&lt;/div&gt;&lt;div&gt;   String propertyName) {&lt;/div&gt;&lt;div&gt;  return BeanProperties.value(bean.getClass(), propertyName).observe(&lt;/div&gt;&lt;div&gt;    realm, bean);&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;public static IObservableValue detailValue(IObservableValue master,&lt;/div&gt;&lt;div&gt;IObservableFactory detailFactory, Object detailType) {&lt;/div&gt;&lt;div&gt;return new DetailObservableValue(master, detailFactory, detailType);&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;...&lt;br&gt;&lt;div&gt;Thats means, many different APIs get into the same functionality. Facade? For the newcomers, this causes many confusions(schizophrenia?^_^). I just stick to use the properties API and see no side-effect. I suggest to making the old API "deprecated"(Orz, for the compatibility, they will be still live in a short or long term.) &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;2. org.eclipse.jface.examples.databinding.snippets are a little out of date.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Some demos use the new APIs. Some others use the old APIs or mixed ones. Even some ones are confused for newcomers. &amp;nbsp;For instance, in the snippet class "Snippet002UpdateComboRetainSelection":&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;IObservableList list = MasterDetailObservables.detailList(&lt;/div&gt;&lt;div&gt;&amp;nbsp;BeansObservables.observeValue(viewModel, "choices"),&lt;/div&gt;&lt;div&gt;&amp;nbsp;getListDetailFactory(), String.class);&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;div&gt; &amp;nbsp;private static IObservableFactory getListDetailFactory() {&lt;/div&gt;&lt;div&gt;  return new IObservableFactory() {&lt;/div&gt;&lt;div&gt;  public IObservable createObservable(Object target) {&lt;/div&gt;&lt;div&gt;  WritableList list = WritableList.withElementType(String.class);&lt;/div&gt;&lt;div&gt;  list.addAll((Collection) target);&lt;/div&gt;&lt;div&gt;  return list;&lt;/div&gt;&lt;div&gt;  }&lt;/div&gt;&lt;div&gt;  };&lt;/div&gt;&lt;div&gt;  }&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;/div&gt;&lt;div&gt;This demo seem not related to the Master-Detail pattern. This bulk codes are workable, but not elegant. I modify them like the below,&lt;/div&gt;&lt;div&gt;--&amp;gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;   IObservableList list = BeansObservables.observeList(viewModel,"choices", String.class);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;Everything is still nice:)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;3. Some API classes can provide more convenient APIs.&amp;nbsp;&lt;/div&gt;&lt;div&gt;One example is the newcoming helper, ViewerSupport.bind(...), &amp;nbsp;you can see the compact usage in &lt;a id="jymm" href="http://fire-change-event.blogspot.com/2009/02/bind-viewer-in-one-statement-with.html" target="_blank" title="this Matthew Hall blogging entry"&gt;this Matthew Hall blogging entry&lt;/a&gt;. For the default condition, we are happy to use this shortcut method. However, when we want to customize every providers, we are forced to use the old boilerplate codes. &amp;nbsp;It's hoped that, we can add some provider accessor/mutator method in the ViewerSupport, like, get/setContentProvider, get/setLabelProvider. After that, we can live in a more concise room more happily.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;4. Databinding framework has been mature to use in mainstream development(oh, some companies have done this long long ago^_^)&lt;/div&gt;&lt;div&gt;Although it still needs the the listeners to implement some functionalities under some complex scenarios, the databinding have covered most common UI usages. With the R3.5 properties API, we can code in a concise style from the UI application to the databinding customization. However, the databinding framework has a relatively high learning curve, in comparison to the traditional listener pattern. The listener pattern is more straight and debuggable. You can stay in the traditional listener codes if you think it is enough. &amp;nbsp;Indeed, the Eclipse Databinding seemly provide more advanced features such as the before/after validation, which need a careful design if you try to code from scratch. The learning time is the price of any framework. The only thing is whether we choose a right framework. The Eclipse data binding framework is just the right framework.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Next, I'm considering to taste the EMF Data binding API (with the new properties API) some time.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-7460151239530764040?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/7460151239530764040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=7460151239530764040&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7460151239530764040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7460151239530764040'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/07/binding-or-not-binding-it-problem.html' title='Binding or not binding. It&amp;#39;s a problem.'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-4043558554160970162</id><published>2009-07-15T10:25:00.002+08:00</published><updated>2009-07-15T10:27:35.393+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><title type='text'>When the PDE(JDT) met the Jar-in-Jar bundle</title><content type='html'>When the PDE(JDT) met the Jar-in-Jar bundle &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Jar-in-Jar" is a word using in the &lt;a id="vr_5" title="3.5M5 new and noteworthy page" style="COLOR: rgb(85,26,139)" href="http://archive.eclipse.org/eclipse/downloads/drops/S-3.5M5-200902021535/eclipse-news-M5.html" target="_blank"&gt;3.5M5 new and noteworthy page&lt;/a&gt;. A Jar-in-Jar bundle is just the jarred bundle which contains other jars. (sometimes, called "nested Jar".)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently, when I use the db4o osgi bundle, I met a compilation problem. It said,&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;i&gt;"the type com.db4o.ObjectContainer cannot be resolved. It is indirectly referenced from required .class files".&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From &lt;a id="r_5j" title="one entry in its forum" href="http://developers.db4o.com/forums/thread/42103.aspx" target="_blank"&gt;one entry in its forum&lt;/a&gt;, I know that, it is an old problem after the db4o get into the world of osgi.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a simple inspection, I find the reason. That is, the PDE can not resolve the Jar-in-Jar bundle. The old &lt;a id="akpb" title="Bug157375" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157375" target="_blank"&gt;Bug157375&lt;/a&gt;(and &lt;a id="gaj5" title="Bug 111238" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=111238" target="_blank"&gt;Bug 111238&lt;/a&gt; as well) addressed this problem. As &lt;a id="wl4l" title="Jeff suggested in the comments" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157375#c47" target="_blank"&gt;Jeff suggested in the comments&lt;/a&gt;, the best practice for this is "packaging each JAR as a bundle and not nesting JARs at all".&lt;/div&gt;&lt;div&gt;However, as Jeff said as well, "Equionx(and other OSGi implementation?) will run JAR'd bundles with nested bundles just fine". So, this just causes a compilation error, but not a runtime problem. I think this bug is still a bug. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As &lt;a id="un4p" title="Thomas Watson said" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157375#c19" target="_blank"&gt;Thomas Watson said&lt;/a&gt;, this bug "well actually is JDT" bug&lt;span style="font-family:Verdana, sans-serif;"&gt;. Jeff simply &lt;a id="wkzw" title="suggested a fixing idea" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157375#c47" target="_blank"&gt;suggested a bug-fixing idea&lt;/a&gt;: "basically if the bundle has JARs on the classpath then unzip in a temp spot and us the temp location for classpath computations". But the &lt;a id="nm6b" title="Bug 111238" style="COLOR: rgb(85,26,139)" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=111238" target="_blank"&gt;Bug 111238&lt;/a&gt; seemly said more problems with extraction method. I have one idea, like using some detecting codes just to check the correct dependency of the jar-in-jar on the fly and to avoid the compilation blocking. In the other aspects, we can still use the original bundle.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly, two workaround for this bug: 1. using the best practice pointed by Jeff; 2. unzipping the jar, then using the directory-style bundle. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;Warning&lt;/b&gt;: If you are the man &lt;/i&gt;&lt;span class="heighlight"&gt;&lt;i&gt;responsible&lt;/i&gt;&lt;/span&gt;&lt;i&gt; for building your osgi bundle, please keep the best practice. "nested jars are evil&lt;/i&gt;&lt;span style="font-family:Verdana, sans-serif;"&gt;&lt;i&gt;"(&lt;/i&gt;&lt;a id="q-ou" title="zx" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=111238#c11" target="_blank"&gt;&lt;i&gt;zx&lt;/i&gt;&lt;/a&gt;&lt;i&gt;^_^).&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&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/1537094750714134446-4043558554160970162?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/4043558554160970162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=4043558554160970162&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4043558554160970162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4043558554160970162'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/07/when-pdejdt-met-jar-in-jar-bundle.html' title='When the PDE(JDT) met the Jar-in-Jar bundle'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-7244783293073783155</id><published>2009-07-14T13:15:00.002+08:00</published><updated>2009-07-14T13:18:38.242+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>My Eclipse Galileo Review: from one eye in the community</title><content type='html'>My Eclipse Galileo Review: from one eye in the community&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;p.s.:&amp;nbsp;&lt;/i&gt;&lt;a id="vzto" href="http://en.wikipedia.org/wiki/Galileo_Galilei" target="_blank" title="Galileo"&gt;&lt;i&gt;Galileo&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;is has a special position in my heart for his cool scientific contribution to our human being.&lt;/i&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The annual simultaneous release &lt;a id="vlx9" href="http://eclipse.org/galileo/" target="_blank" title="Galileo"&gt;Galileo&lt;/a&gt; has grown to 33 projects. There are &lt;a id="dfqq" href="http://www.eclipse.org/galileo/blogathon/reviews.php" target="_blank" title="many articles"&gt;many articles&lt;/a&gt; about the tips and tricks of Galileo in the planet of Eclipse. So, in this article, I will not review the common tips in the Galileo, however, I will try to review some tracks of development and community process from my eye when the Galileo train are being developed. And, so, I will not cover everything in Galileo, and just show some interesting things in my eye.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="5"&gt;1. Eclipse platform&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Not mention the R3.5 &lt;a id="h8s9" href="http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/eclipse-news.html" target="_blank" title="News and Northwory"&gt;News and Northwory&lt;/a&gt;:)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;p2&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;"p2 is great", the words often appear in the planet of Eclipse. As a common provisioning platform in the osgi, the p2 introduce many new concepts and designs than old old "&lt;font size="2"&gt;Update Manager". And P2 is the&amp;nbsp;&lt;font size="2"&gt;successor of old update manager. In fact, I much like the idea behind the p2.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;However, as an old Eclipse guy, I am not very satisfied with the current state of p2. P2 seem not cover all the functionality of&amp;nbsp;&lt;font size="2"&gt;old&amp;nbsp;&lt;/font&gt;&lt;font size="2"&gt;update manager. One bug, we fight for, is the&amp;nbsp;&lt;a id="yc7s" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=224145" target="_blank" title="Bug 224145"&gt;Bug 224145&lt;/a&gt;. As an active Eclipse developer, we often have many different projects. For instance, one project is based on EMF, one other project based on CDT, one other project based on BIRT, still one other project based on WTP...As all we known, the startup time difference between booting from 50 plugins and booting from 500 plugins is very very obvious. Does anybody want to wait 30s to get one Eclipse instance to just writte an simple ant script or xml config file?. In the world of "old update manager", we are easy to use different configurations to achieve it. &lt;a id="t0o:" href="http://michaelscharf.blogspot.com/2009/02/p2-how-i-install-plugins-in-extension.html" target="_blank" title="Here"&gt;Here&lt;/a&gt; is a useful tip by Michael Scharf. &amp;nbsp;I guess p2 could do this as well, however, who knows how to?&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Here, I do a unexact small statistics about the p2 problem(and update problem) in the recent equinox group(eclipse.technology.equinox, from 2009/06/01 to 2009/07/10): 27(p2 related)/77(equinox all) =35%. Now is the age of R3.5, and the p2 is just the one small component of the whole Equinox. Even now, I often hear the complaint from newcomers in my BBS, such as, "the auto-upgrade does not work", "updating crash my Eclipse"... So, p2 is great, but there is a (long or short?) way to make most people in the community to accept it.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;git&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Git is coming into Eclipse. &amp;nbsp;Yes, CVS, SVN and GIT are in parallel use in the development process of Eclipse projects. you can find the hot discussion &lt;a id="xyoz" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257706" target="_blank" title="here"&gt;here&lt;/a&gt;, and more &lt;a id="kdbf" href="http://wiki.eclipse.org/Git_for_Committers" target="_blank" title="here"&gt;here&lt;/a&gt;. Git, as one kind of&amp;nbsp;&lt;font size="2"&gt;DVCSs, provides many new improvements and features. I guess more and more projects will transfer to the git when the next iteration. However, if some projects have played finely with the current svn/cvs server, they may stay with it in a long period.&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;bugzilla search engine&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Bugs searching in bugzilla is not much cleverer as we expected. It is a little pain for our developers or users. Hence, Gunnar Wagenknecht fire a bug, i.e.&amp;nbsp;&lt;a id="olpa" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=214067" target="_blank" title="Bug 214067"&gt;Bug 214067&lt;/a&gt;. Yes, we wanna let Google index the Eclipse.org Bugzilla. Google engine can rank the search result in a better relevancy. &lt;span style="font-family: Verdana, sans-serif"&gt;However, it is reported that the direct google indexing will cause some potential spamming problem. So, this&amp;nbsp;&lt;span style="font-family: sans-serif"&gt;enhancement&lt;/span&gt;&amp;nbsp;has not resolved. Now, we can taste &lt;a id="c__l" href="http://eclipsebugsearch.labs.ageto.net/" target="_blank" title="one experimental indexing bugzilla search engine"&gt;one experimental indexing bugzilla search engine&lt;/a&gt;&amp;nbsp;provided by Gunnar Wagenknecht(seemly does not work recently). Nice work, Gunnar!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;font size="4"&gt;Eclipse weather&lt;/font&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;a id="s8jr" href="http://www.eclipse.org/membership/weather/2009/Current.php" target="_blank" title="Eclipse Weather Forecast"&gt;Eclipse Weather Forecast&lt;/a&gt;, is a new column in the Eclipse.org site during the period of Galileo. I like it!&amp;nbsp; For instance, you can know the next &lt;font size="2"&gt;release of&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;Eclipse train is called "&lt;a id="uv0t" href="http://en.wikipedia.org/wiki/Helios" target="_blank" title="Helios"&gt;Helios&lt;/a&gt;"(Yep, not e4). Funny^_^ This column really make Eclipse community more interactive, especially between the committers and the end users. I hope that this forecast could be updated more actively:) If you like it, you can add it to your favorites. One problem is, the address of its RSS seem re-directed to another news Eclipse rss...&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="5"&gt;2. Modeling&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The EMF seem already the defacto standard of modeling. Many new and kinds of projects, such as &lt;a id="v8d_" href="http://www.eclipse.org/proposals/emf-index/" target="_blank" title="EMF Index"&gt;EMF Index&lt;/a&gt;, &lt;a id="fsv1" href="http://www.eclipse.org/proposals/eef/" target="_blank" title="EEF"&gt;EEF&lt;/a&gt;,&amp;nbsp;&lt;a id="px8." href="http://www.eclipse.org/proposals/egf/" target="_blank" title="EGF"&gt;EGF&lt;/a&gt;,&amp;nbsp;&lt;a id="xu:3" href="http://www.eclipse.org/proposals/edapt/" target="_blank" title="Edapt"&gt;Edapt&lt;/a&gt;, has poured into the EMF ecosystem during the period of Galileo train. Some is cool. For instance, for EMF index, we can dream a modeling object database will appear in some day. Other new projects, I am not much familiar with those. I Hope they can pay attention to the collaboration in the whole modeling ecosystem. However, EMF is a must for an Eclipse guy! Even the coolest&amp;nbsp;&lt;a id="xbzw" href="http://wiki.eclipse.org/E4" target="_blank" title="e4"&gt;e4&lt;/a&gt; has been depended on the EMF:) You can image that, in some day, you can't survive in the Eclipse world without modeling things!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="5"&gt;3. Graphical&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In the field of graphical editing, there are not many news. The GMF and the GEF still control the world. Zest in GEF &lt;a id="pwg9" href="http://eclipsesource.com/blogs/2009/07/10/a-zesty-summer/" target="_blank" title="get some funds"&gt;get some funds&lt;/a&gt; at this summer. Cong! One project, I like to mention, is &lt;a id="lruu" href="http://www.eclipse.org/gef3d/" target="_blank" title="GEF3D"&gt;GEF3D&lt;/a&gt;, which could be considered as the 3D version of GEF. GEF3D is not listed in the Galileo packages and is considered as an incubation project. However, I like the idea of GEF+OpenGL behind it. There is a old bug, &lt;a id="s4hu" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68724" target="_blank" title="Bug 68724"&gt;Bug 68724&lt;/a&gt;, in the Bugzilla addressed this requirement. In fact, the GMF team(yep, they are also maintenancing the GEF) have introduced some animation effects into the field of graphical editing. However, as we know, OpenGL (or like things) is more professional in all kinds of graphical effects. It can be seen that, Thomas Crockett, a NASA guy, has given&amp;nbsp;&lt;a id="d35:" href="http://www.eclipsecon.org/2007/index.php?page=sub/&amp;amp;id=4138" target="_blank" title="the wonderful experience"&gt;the wonderful experience&lt;/a&gt; in&amp;nbsp;&lt;span style="color: rgb(51, 51, 51)"&gt;&lt;font size="2"&gt;the Mars rovers&amp;nbsp;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0)"&gt;&lt;font size="2"&gt;the with the GEF+OpenGL. &amp;nbsp;Do you like do a overhauling to your graphical editor? Ask the GEF3D now!&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;(P.S.: I have an idea about GEF3D + Zest, maybe this can be a next years' gsoc topic^_^)&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;font size="5"&gt;4. Web&lt;/font&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;(p.s.:I am not a web side guy now. )&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;RAP&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a id="ah20" href="http://www.eclipse.org/rap/" target="_blank" title="This projec"&gt;This projec&lt;/a&gt;t provides a web presentation layer on RWT API + a runtime server layer on Equinox. Cool! After that, a plugin developer can easily develop a web site(Yep, that's called "Single Sourcing"). I much like this kinds of technologies. Yes, you can dream doing everything using Eclipse. This is just an &lt;b&gt;eclipsed&lt;/b&gt; life, advocated by me.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;XML Tools&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On the planet, we has one diligent blogger, &lt;a id="l0c5" href="http://intellectualcramps.blogspot.com/" target="_blank" title="David Carver"&gt;David Carver&lt;/a&gt;. He is just responsible for the XML related tooling development in &lt;a id="gp31" href="http://www.eclipse.org/webtools/" target="_blank" title="WTP"&gt;WTP&lt;/a&gt;. If you want to grasp the main progress of XML related things in the Eclipse/WTP, you can rss his blog:) &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The WTP has provided many mainstream XML tools although there are many XML plugins provided by other commercial companies. Frankly, the user experience of WTP/XML editor is not very good in my limited tests. One main problem is the bad memory consumption. Several old is or new bugs(&lt;a id="deqc" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=156564" target="_blank" title="bug 156564"&gt;Bug 156564&lt;/a&gt;,&amp;nbsp;&lt;a id="ssce" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=136935" target="_blank" title="bug 136935"&gt;Bug 136935&lt;/a&gt;, &lt;a id="y2-2" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142692" target="_blank" title="Bug 142692"&gt;Bug 142692&lt;/a&gt;) addressed this problem. &amp;nbsp;It is quite a relief when I heard &lt;a id="z.:s" href="http://intellectualcramps.blogspot.com/2009/03/eclipse-xml-editor-gets-major.html" target="_blank" title="some work have been done"&gt;some work have been done&lt;/a&gt; when the Galileo although I have not tested the effect of improvement.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;I had involved with XQuery work in the near past several months. This is the one of some unfinished works in WTP/XML. For some reasons, I have not finished my effort. In my personal opinion, it seems the best choice to follow the way of XQDT 2.0(http://www.xqdt.org/) or to collaborate with it. However, there are still some problems existed.&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="5"&gt;5. Others&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I just mention one hot topic DSL(language) IDE support in Eclipse. The &lt;a id="n.81" href="http://www.eclipse.org/Xtext/" target="_blank" title="Xtext"&gt;Xtext&lt;/a&gt; and &lt;a id="book" href="http://www.eclipse.org/dltk/" target="_blank" title="DLTK"&gt;DLTK&lt;/a&gt; has joint the Galileo train. And the Xtext has shown &lt;a id="n9u4" href="http://www.peterfriese.de/" target="_blank" title="its face"&gt;its face&lt;/a&gt; at the planet of Eclipse. I've written down a funny entry:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;IMP &amp;nbsp;V.S. &amp;nbsp;DLTK. &amp;nbsp;V.S. &amp;nbsp;SSE &amp;nbsp;V.S. Xtext V.S. &amp;nbsp;JTF &amp;nbsp;V.S. &amp;nbsp;LTK(in Eclipse) V.S. ...&lt;/div&gt;&lt;div&gt;There is a highly overlapped area in the language IDE support, and nobody intend to do some collaboration work:) So, here, I don't comment on the pros or cons of each ones. I just recommend one newborn project:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;IMP&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a id="qf2c" href="http://www.eclipse.org/imp/" target="_blank" title="IMP"&gt;IMP&lt;/a&gt; is based on the idea of "meta-tooling"(Yeah, you may associate it with meta-model in your brain...). That is, based on some meta descriptive languages (such as English?) or components, we can get(generate) our wanted tooling(IDE). Some awesome abstractions have been done in IMP. IMP can provide many IDE-level supports, such as outline view, content assistant, preference construction... IMP is general tooling support platform. IMP supports general language(reinvent the JDT using IMP have been domonstrated in IMP. Cooling! ). IMP supports debug functionility construction. IMP supports refactoring functionility construction. And IMP supports "embedded language"(thinking, JavaDoc in Java done by JDT).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Although the IMP is in the incubation phase, as my recent tests, the basic runtime is stable relatively. One thing, I love, the IMP with &lt;a id="g1i3" href="http://sourceforge.net/projects/lpg/" target="_blank" title="LPG"&gt;LPG&lt;/a&gt;(LALR Parser Generator) could provide a full-&lt;a id="do72" href="http://www.eclipse.org/legal/epl-v10.html" target="_blank" title="EPL"&gt;EPL&lt;/a&gt;ed solution to language IDE support. Cool! If you plan to develop a language IDE support, you can considered to take use of the IMP. You will get a clear framework, little-size dependency, grammar development tooling and advanced analysis features supports. And I am also planning to write some articles about the IMP and LPG:)(to compete with the current Xtext series?) Oh, come on!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="5"&gt;6. Future&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;font size="4"&gt;e4&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The &lt;a id="pcgf" href="http://www.eclipse.org/e4/" target="_blank" title="e4"&gt;e4&lt;/a&gt; is the coolest thing in the platform evolvement. The e4 has released the &lt;a id="am9g" href="http://dev.eclipse.org/mhonarc/lists/e4-dev/msg01410.html" target="_blank" title="0.9M5"&gt;0.9M5&lt;/a&gt;&amp;nbsp;recently and is moving into the 0.9RC1. As I mentioned above, the next train release of Eclipse is called Helios, not e4. However, the e4 is our future(Eclipse 4.0?). I don't repeat anything. If you like to try, you can get more infos from &lt;a id="lop_" href="http://www.eclipse.org/e4/" target="_blank" title="the e4 web site"&gt;the e4 web site&lt;/a&gt;. I just say that, the e4 is&amp;nbsp;&lt;span class="heighlight"&gt;worth&lt;/span&gt; a &lt;span class="heighlight"&gt;try!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;We should thank all Eclipse committers to push the Eclipse into a higher-level milestone when the Galileo. We are living in a technically dreaming community...&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-7244783293073783155?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/7244783293073783155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=7244783293073783155&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7244783293073783155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7244783293073783155'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/07/my-eclipse-galileo-review-from-one-eye.html' title='My Eclipse Galileo Review: from one eye in the community'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-1613498330041235807</id><published>2009-07-11T14:20:00.002+08:00</published><updated>2009-07-11T14:22:10.277+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='db4o'/><category scheme='http://www.blogger.com/atom/ns#' term='domr'/><title type='text'>Db4o Object Manager Rcp 1.0.0 released</title><content type='html'>&lt;span style="font-family: arial, sans-serif"&gt;&lt;i&gt;Db4o Object Manager RCP version&lt;/i&gt;&lt;/span&gt;&amp;nbsp;1.0.0 released&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Today I have released the first DOMR(&lt;span style="font-family: arial, sans-serif"&gt;&lt;i&gt;Db&lt;font size="2"&gt;4o Object Manager RCP&lt;/font&gt;&lt;/i&gt;&lt;span style="font-family: Verdana, sans-serif; font-style: normal"&gt;&lt;font size="2"&gt;) release at &lt;/font&gt;&lt;a id="j4cx" href="http://code.google.com/p/domr/" target="_blank" title="the project site"&gt;&lt;font size="2"&gt;the project site&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;. I include two platform version in the release: win32.win32.x86 and linux.gtk.x86. I have tested the win32 version, but not the linux version. If there is some bug, please fire a bug issue&amp;nbsp;&lt;a id="fb4s" href="http://code.google.com/p/domr/issues/list" target="_blank" title="here" style="color: rgb(85, 26, 139)"&gt;here&lt;/a&gt;.. In fact, it is easy to export 16 platform versions under eclipse. If some bodies like to provide some tests work, please also fire a bug issue &lt;a id="r-cn" href="http://code.google.com/p/domr/issues/list" target="_blank" title="here"&gt;here&lt;/a&gt;. I'd like to provide new platform version.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="imwp"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_123fzhwvmcr_b" style="width: 648px; height: 486px"&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;The current DOMR is based on the OMJ svn codes. &amp;nbsp;I just mainly fixed a little irrational UI flow(I think^_^). Some codes I've seen are not written in a good style. So my modification is not very elegant as well. But, it works:)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;As the project page said,&amp;nbsp;&lt;/font&gt;&lt;span style="font-family: arial, sans-serif"&gt;&lt;font size="2"&gt;It will be a lightweight, standalone db4o object management tool. For the time-limiting,&amp;nbsp;&lt;/font&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;I may foucs on the bug-fixing work. If you have found bugs, don't&amp;nbsp;&lt;span class="heighlight"&gt;&lt;font size="2"&gt;hesitate&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt; to submit issue &lt;a id="z28b" href="http://code.google.com/p/domr/issues/list" target="_blank" title="here"&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;It is my pleasure to fix it for you:)&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: arial, sans-serif"&gt;&lt;span style="font-family: Verdana, sans-serif"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;However, I hope this project will go into its own way in the future. I'm considering to do more clean work to the current code base. And there are some potential directions in the DOMR, such as more professional Eclipse-integrated UI, db4o-java code generation. graphical db4o visualization, db4o DSL. If some ones in the community have interesting in this project, you can drop a &lt;a id="s31a" href="mailto:jin.phd@gmail.com" target="_blank" title="email"&gt;email&lt;/a&gt; to me. I will add your account to the project member list, then you can contribute to the code base:)&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;br /&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-1613498330041235807?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/1613498330041235807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=1613498330041235807&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1613498330041235807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1613498330041235807'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/07/db4o-object-manager-rcp-100-released.html' title='Db4o Object Manager Rcp 1.0.0 released'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-1148012631453042652</id><published>2009-06-08T21:01:00.004+08:00</published><updated>2009-06-08T21:12:13.394+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Da Vinci Machine(MLVM) Ready for Hacking</title><content type='html'>Da Vinci Machine/MLVM, as said in the &lt;a id="iirh" title="website" style="COLOR: rgb(85,26,139)" href="http://openjdk.java.net/projects/mlvm/" target="_blank"&gt;website&lt;/a&gt; , is a multi-language renaissance for the JVM, which is under the umbrella of &lt;a id="r3yj" title="JSR 292" href="http://jcp.org/en/jsr/detail?id=292" target="_blank"&gt;JSR 292&lt;/a&gt;. Some dynamic languages on JVM like JRuby(and Groovy?) have played with those cool MLVM functionalities some times ago in some limited scope. Because the MLVM need to be built from the source, and because on some platforms OpenJDK could not be built easily.&lt;br /&gt;In recent days, the OpenJDK/JDK milestone 3 released, and the MLVM is one of the coolest features targeted in the milestone 3. So, I think it is the time to try how the MLVM tastes in the midst of my busy schedule:)&lt;br /&gt;I download the &lt;a id="m77f" title="JDK  binary snapshot b59" style="COLOR: rgb(85,26,139)" href="http://download.java.net/jdk7/binaries/" target="_blank"&gt;JDK binary snapshot b59&lt;/a&gt; for my windows. Install and re-setup my path. Then, copy below helloworld codes(shameless got from the repo of MLVM, thanks for John Rose, leader of MLVM/JSR292):&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;import java.dyn.*;&lt;br /&gt;public class Hello {&lt;br /&gt;public static void main(String... av) {&lt;br /&gt;if (av.length == 0) av = new String[] { "world" };&lt;br /&gt;greeter(av[0] + " (from a statically linked call site)");&lt;br /&gt;for (String whom : av) {&lt;br /&gt;greeter.&lt;void&gt;invoke(whom); // strongly typed direct call&lt;br /&gt;// previous line generates invokevirtual MethodHandle.invoke(String)void&lt;br /&gt;Object x = whom;&lt;br /&gt;InvokeDynamic.hail(x); // weakly typed invokedynamic&lt;br /&gt;// previous line generates invokedynamic MethodHandle.invoke(Dynamic)Dynamic&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;static void greeter(String x) { System.out.println("Hello, "+x); }&lt;br /&gt;// intentionally pun between the method and its reified handle:&lt;br /&gt;static MethodHandle greeter&lt;br /&gt;= MethodHandles.lookup().findStatic(Hello.class, "greeter",&lt;br /&gt;MethodType.make(void.class, String.class));&lt;br /&gt;// Set up a class-local bootstrap method.&lt;br /&gt;static { Linkage.registerBootstrapMethod("bootstrapDynamic"); }&lt;br /&gt;private static CallSite bootstrapDynamic(Class caller, String name, MethodType type) {&lt;br /&gt;assert(type.parameterCount() == 1 &amp;amp;&amp;amp; (Object)name == "hail"); // in lieu of MOP&lt;br /&gt;System.out.println("set target to adapt "+greeter);&lt;br /&gt;MethodHandle target = MethodHandles.convertArguments(greeter, type);&lt;br /&gt;CallSite site = new CallSite(caller, name, type);&lt;br /&gt;site.setTarget(target);&lt;br /&gt;return site;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&gt;&gt;javac Hello.java&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;Oh, Error! Yes., that seem "a bug in the 1.7 compiler " discussed &lt;a id="eh-z" title="here" style="COLOR: rgb(85,26,139)" href="http://groups.google.com/group/jvm-languages/browse_thread/thread/47b4423aa99be008?hl=ZH-cn" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;try again,&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&gt;&gt;javac -source 1.7 Hello.java&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Cong!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&gt;&gt;java -XX:+EnableInvokeDynamic Hello&lt;br /&gt;Hello, world (from a statically linked call site)&lt;br /&gt;Hello, world&lt;br /&gt;set target to adapt greeter(java.lang.String)void&lt;br /&gt;Exception in thread "main" java.lang.UnsupportedOperationException: NYI&lt;br /&gt;at sun.dyn.FromGeneric.buildAdapterFromBytecodes(FromGeneric.java:238)&lt;br /&gt;at sun.dyn.FromGeneric.&lt;init&gt;(FromGeneric.java:98)&lt;br /&gt;at sun.dyn.FromGeneric.of(FromGeneric.java:185)&lt;br /&gt;at sun.dyn.FromGeneric.make(FromGeneric.java:177)&lt;br /&gt;at sun.dyn.MethodHandleImpl.convertArguments(MethodHandleImpl.java:247)&lt;br /&gt;at java.dyn.MethodHandles.convertArguments(MethodHandles.java:764)&lt;br /&gt;at Hello.bootstrapDynamic(Hello.java:58)&lt;br /&gt;at sun.dyn.CallSiteImpl.makeSite(CallSiteImpl.java:64)&lt;br /&gt;at Hello.main(Hello.java:42)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Cong too! Although the weakly typed invokedynamic entry seem throw the UnsupportedOperationException. (although it is odd why the helloworld example can not pass the test^_^)&lt;br /&gt;It is super-cool! I guess some concepts such as MethodHandle will affect the implementation of the proposal of "closure" in Java.&lt;br /&gt;&lt;br /&gt;One natural question is, how do our Eclipse get ready to work with MLVM?&lt;br /&gt;&lt;br /&gt;Can ECJ emit the invokedynamic bytecode?&lt;br /&gt;Can Equinox(OSGI) benifit from from the new dynamic behavior?&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Come on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-1148012631453042652?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/1148012631453042652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=1148012631453042652&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1148012631453042652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1148012631453042652'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/06/da-vinci-machinemlvm-ready-for-hacking.html' title='Da Vinci Machine(MLVM) Ready for Hacking'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-1130665590802219319</id><published>2009-04-16T16:36:00.007+08:00</published><updated>2009-04-17T18:08:54.706+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='db4o'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>db4o OME into RCP easily</title><content type='html'>&lt;div&gt;Recently I pick up my old idea about the &lt;a id="k7h-" href="http://code.google.com/p/ecodebox/" target="_blank" title="code snippets management tool"&gt;code snippets management tool&lt;/a&gt;. For a personal project, I would like to use a lightweight and easily-used db for store my codes. &lt;a id="dcxc" href="http://www.db4o.com/" target="_blank" title="Db4o"&gt;Db4o&lt;/a&gt;  is a nice candidate for me. After making db4o work for me, I try to see what and how the db4o store it . One good news is that, db4o has provide an O&lt;span&gt;bject Manager(OM) to explore the local/remote db storages. One bad news is that, the OM now is only available to a little big Eclipse and very very much big MSVS. No reason I need to install an IDE if I just want to see or query one little db.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;i&gt;Ample food and clothing by working with our own hands&lt;/i&gt;":) I quickly add an RCP cloth to the db4o OME(OM for Eclipse plugin) in a non-invasive way. It seem delicious!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="xnnk"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_111fq77h3fs_b" style="width: 470px; height: 463px" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After converting ICU plugin into a "base mode", the size of packed OME RCP have been reduced to about 15.4M. Cong!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left" id="dvo6"&gt;&lt;img src="http://docs.google.com/File?id=dcjtz9tq_112dv9gt2fr_b" style="width: 303px; height: 106px" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;I wonder whether the db4o has QA for its product? Because  the current OME shipped with db4o-7.9-java has &lt;span&gt;obvious critical bugs when connecting with local db files! But, &lt;i&gt;a little is better &lt;/i&gt;&lt;span class="heighlight"&gt;&lt;i&gt;than&lt;/i&gt;&lt;/span&gt;&lt;i&gt; none&lt;/i&gt;... Hope they can fix these bugs soon.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ps: From limited eye, db4o seem an enhanced version of Java object &lt;span&gt;serialization mechanism. So, Is it easy to implement a db for oject? No. There are too many considerations for storing objects(object graph indeed) in the db style. Using db4o will make your life much easy:)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-1130665590802219319?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/1130665590802219319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=1130665590802219319&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1130665590802219319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/1130665590802219319'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/04/db4o-ome-into-rcp-easily.html' title='db4o OME into RCP easily'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-4210702457331614439</id><published>2009-04-03T17:23:00.005+08:00</published><updated>2009-04-03T17:28:13.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipsed Sun?</title><content type='html'>&lt;div&gt;There are some &lt;a id="mmm0" href="http://dealbook.blogs.nytimes.com/2009/04/02/ibm-said-to-be-near-deal-for-sun/?ref=technology" target="_blank" title="interesting news"&gt;interesting news&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If IBM acquire Sun? &lt;/div&gt;&lt;div&gt;Some interesting brainstorming,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Netbeans will fuse into Eclipse?&lt;/div&gt;&lt;div&gt;SWT will take place with Swing in Java?&lt;/div&gt;&lt;div&gt;JDK will be under some APL-friendly license? &lt;/div&gt;&lt;div&gt;Java will be osgized?&lt;/div&gt;&lt;div&gt;Java will be faster?&lt;/div&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/1537094750714134446-4210702457331614439?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/4210702457331614439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=4210702457331614439&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4210702457331614439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/4210702457331614439'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/04/eclipsed-sun.html' title='Eclipsed Sun?'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-7252745709830957271</id><published>2009-03-28T16:53:00.005+08:00</published><updated>2009-04-03T17:27:10.959+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='exquery'/><title type='text'>Proposal is out too</title><content type='html'>&lt;div&gt;After the business of writing and some modification, I release my one proposal. Some bodies may read it, if you like to know some current XQuery and related tooling knowledge, and even if you do not use eclipse. I think it is a good reading(shamelessly)^_^ &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The blogspot's blog page is difficult to use. I try to blog and post by the google docs. Hope it will give me a better user experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For next M0a, I will do some bug-fixing jobs, and push the parser to 90-95% satisfaction. I re-examine &lt;span style="font-size:85%;"&gt;the dis&lt;/span&gt;&lt;span style="font-size:85%;"&gt;ambiguity condition&lt;/span&gt;&lt;span style="font-size:85%;"&gt; mentioned in &lt;/span&gt;&lt;a id="d8-e" href="http://jmj-eclipse.blogspot.com/2009/03/exquery-m0-is-out-cheers-for-eclipsecon.html" target="_blank" title="my former post"&gt;my former post&lt;/a&gt;&lt;span style="font-size:85%;"&gt;. And I find the precedence of my expression is in reverse. It is interesting work to try to fix the problem in next days.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-7252745709830957271?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/7252745709830957271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=7252745709830957271&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7252745709830957271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/7252745709830957271'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/03/proposal-is-out-too.html' title='Proposal is out too'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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-1537094750714134446.post-2156073761727041721</id><published>2009-03-26T12:17:00.015+08:00</published><updated>2009-04-03T17:26:33.681+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='imp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='exquery'/><category scheme='http://www.blogger.com/atom/ns#' term='lpg'/><title type='text'>eXQuery M0 is out! Cheers for EclipseCon 2009!</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;After 5-day rush, I release the &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a href="http://code.google.com/p/exquery/"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;eXQuery&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" white-space: normal; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;M0 today. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Cheers &lt;/b&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;or &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 19px; "&gt;&lt;em style="font-style: normal; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a href="http://www.eclipsecon.org/2009/"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EclipseCon 2009&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;!&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre; "&gt;&lt;span class="Apple-style-span" style=" white-space: normal; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;img src="http://4.bp.blogspot.com/_oQlD5wd86_A/ScsEvBrmbZI/AAAAAAAAAJk/vxgpnh22aE8/s320/m0_snapshot.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 271px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5317348990992674194" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;                               M0 - Snapshot&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;The snapshot demonstrates two features, simple token coloring, and multiple errors reporting.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre; font-family:'courier new';font-size:13px;"&gt;The man behind the nice face of IDE is the nice parser.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new';font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new';font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;The shown snapshot is one script that comes form the w3c XQuery test suite. We can see the errors such as "item_tuple", is not really a error. In fact, the reason is that the "item" is a keyword in the XQuery spec, but the parser treat the keywords and the general variable-style words differently. This will be fixed in M0a recently:)(as done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;in OCL^_^) The other hard problem is the XQuery grammar is not the full LALR(k) grammar(?). t&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;here are some &lt;span class="Apple-style-span" style="white-space: normal;"&gt;ambiguities&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; when using the '+' and '*' operators mentioned in &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;a href="http://www.w3.org/TR/xquery/"&gt;w3c &lt;/a&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new';color:#551A8B;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;a href="http://www.w3.org/TR/xquery/"&gt;recommendation&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;. One solution is to use the backtracking parser, which has been&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; done &lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;in the eXQuery and CDT.(the w3c recommendation use a &lt;span class="Apple-style-span"  style=" white-space: normal; font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;disambiguity rule to solve this problem. It could be considered how to add or we need this&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" white-space: pre; font-family:'courier new';"&gt; rule?) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Frankly, I have underestimated the complexity of the XQuery grammar. I said to &lt;/span&gt;&lt;a href="http://intellectualcramps.blogspot.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Dave&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; the words like "the grammar seem simple" in some communicating email &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;shamelessly^_^&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;. In fact, there are many many tricks in the grammar. To seek the reason, you can see the &lt;/span&gt;&lt;a href="http://www.martin-probst.com/blog"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Martin Probst&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; blog. I've read more and more...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre; font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;The eXQuery project is a pre-exploring project for my last gsoc effect. The basic goal &lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;has been &lt;/span&gt;&lt;span class="Apple-style-span"  style=" white-space: normal; font-size:16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;achieved. Now I'm a veteran with XQuery:) Cong!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" white-space: pre; font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;I &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="  white-space: normal; "&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;feels 70% pleased with the &lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;semi-ugly XQuery parser. But I feels 95% pleased with the working &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="  white-space: normal; "&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;combination of&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="  white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;a href="http://www.eclipse.org/imp/"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LPG&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;span class="Apple-style-span"  style=" ;font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;and &lt;/span&gt;&lt;a href="http://www.eclipse.org/imp/"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;IMP&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;. Isn't it cool if you can get one simple IDE for a working language(not toy language!) in one week?!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new';font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1537094750714134446-2156073761727041721?l=jmj-eclipse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmj-eclipse.blogspot.com/feeds/2156073761727041721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1537094750714134446&amp;postID=2156073761727041721&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/2156073761727041721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1537094750714134446/posts/default/2156073761727041721'/><link rel='alternate' type='text/html' href='http://jmj-eclipse.blogspot.com/2009/03/exquery-m0-is-out-cheers-for-eclipsecon.html' title='eXQuery M0 is out! Cheers for EclipseCon 2009!'/><author><name>Jin Mingjian</name><uri>http://www.blogger.com/profile/06873013116031066205</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oQlD5wd86_A/ScsEvBrmbZI/AAAAAAAAAJk/vxgpnh22aE8/s72-c/m0_snapshot.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
