<?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-7131917596625047485</id><updated>2012-01-22T10:49:34.445-08:00</updated><category term='atf'/><category term='android'/><category term='eclipse'/><category term='orion'/><category term='testing'/><category term='javascript'/><category term='java'/><category term='geecon'/><category term='php'/><title type='text'>Jacek on things</title><subtitle type='html'>Lessons learned and other things I couldn't google.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-1792043999017302065</id><published>2011-12-29T00:36:00.000-08:00</published><updated>2011-12-29T00:44:02.637-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>No error dialogs in eclipse headless test</title><content type='html'>Here's a small funny thing I learned a while ago while running GUI tests of Eclipse application and now stumbled upon it again.&lt;br /&gt;When running Eclipse tests headlessly, certain dialogs don't show up as they would normally (e.g. when writing/recording the test). This is because of flags:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;org.eclipse.jface.dialogsErrorDialog.AUTOMATED_MODE = false;&lt;br /&gt;org.eclipse.jface.util.SafeRunnable.setIgnoreErrors(true);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So if you for example have a test scenario that DOES expect an error dialog to show up, make sure you have above flags set correctly, or find out a different assertion than waiting for an error dialog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-1792043999017302065?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/1792043999017302065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/12/no-error-dialogs-in-eclipse-headless.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/1792043999017302065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/1792043999017302065'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/12/no-error-dialogs-in-eclipse-headless.html' title='No error dialogs in eclipse headless test'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-1225400237823391373</id><published>2011-07-25T14:34:00.000-07:00</published><updated>2011-07-25T15:51:31.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='orion'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Orion PHP Support demo</title><content type='html'>If you're following &lt;a href="http://planet.eclipse.org"&gt;Eclipse planet&lt;/a&gt;, you couldn't have missed &lt;a href="http://orion.gusak.eu/2011/07/gsoc-2011-%E2%80%93-status-report-%E2%80%93-july-24th/"&gt;Karol Gusak's weekly status reports&lt;/a&gt; about PHP support that's being built for Orion.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-fSB8zbdSiIo/Ti3u0gisAnI/AAAAAAAADuY/FqJUL9osbvo/s1600/screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 228px;" src="http://2.bp.blogspot.com/-fSB8zbdSiIo/Ti3u0gisAnI/AAAAAAAADuY/FqJUL9osbvo/s320/screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5633421294766391922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you still haven't tried PHP in Orion yourself, here's a little demo now on YouTube that nicely shows syntax highlighting, content-assist as well as overall PHP experience in Orion. Click below to check it now.&lt;br /&gt;&lt;br /&gt;&lt;iframe width="425" height="349" src="http://www.youtube.com/embed/Cs7JK7bPeIo" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-1225400237823391373?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/1225400237823391373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/orion-php-support-demo.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/1225400237823391373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/1225400237823391373'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/orion-php-support-demo.html' title='Orion PHP Support demo'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-fSB8zbdSiIo/Ti3u0gisAnI/AAAAAAAADuY/FqJUL9osbvo/s72-c/screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-8112054694413665461</id><published>2011-07-21T02:08:00.000-07:00</published><updated>2011-07-21T02:57:13.385-07: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'>Making extensible GUI with org.eclipse.ui.menus</title><content type='html'>It's actually first time I had to make a custom part of GUI extensible. In an Eclipse forms editor like following, we wanted custom actions to come from various plugins:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-X1rb7uharhM/Tift718AtZI/AAAAAAAADuI/2UAZr0OI3Xg/s1600/screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 119px;" src="http://1.bp.blogspot.com/-X1rb7uharhM/Tift718AtZI/AAAAAAAADuI/2UAZr0OI3Xg/s320/screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5631731471396943250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since eclipse APIs provides this sort of extensibility with their org.eclipse.ui.menus extension point, I looked at how to reuse that mechanism. It turns simple. All you need to do is, while creating the editable area, add:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre name="orion"&gt;&lt;br /&gt;final Composite parent = ... // that's the area we want to make extensible&lt;br /&gt;&lt;br /&gt;ContributionManager contributionManager = new ContributionManager() {&lt;br /&gt;  public void update(boolean force) {&lt;br /&gt;    for (IContributionItem item : items) {&lt;br /&gt;      item.fill(parent);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;IMenuService service = (IMenuService) getSite().getService(IMenuService.class);&lt;br /&gt;contributionManager.add(new GroupMarker("testing"));&lt;br /&gt;service.populateContributionManager(contributionManager, "toolbar:org.zend.editor1?after=testing");&lt;br /&gt;contributionManager.update(false);&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now to contribute something to that area, you need to extend org.eclipse.ui.menus extension point:&lt;br /&gt;&lt;div&gt;&lt;pre name="orion"&gt;&lt;br /&gt;&amp;lt;extension point="org.eclipse.ui.menus"&amp;gt;&lt;br /&gt;      &amp;lt;menuContribution allPopups="false"&lt;br /&gt;        locationURI="toolbar:org.zend.editor1?after=testing"&amp;gt;&lt;br /&gt;   … Your contributions here …&lt;br /&gt;       &amp;lt;/menuContribution&amp;gt;&lt;br /&gt;&amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;So now, if you for example prepared some commands in advance, you can easily link them without any extra coding. Since I wanted some nice looking link, I used control contribution. It let's you create entirely custom widget. &lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://code.google.com/p/zend-sdk/source/detail?r=843"&gt;end result&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-GT9m5mO4GSY/TifxEQSH56I/AAAAAAAADuQ/Ny9sOPrkHos/s1600/screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 97px;" src="http://2.bp.blogspot.com/-GT9m5mO4GSY/TifxEQSH56I/AAAAAAAADuQ/Ny9sOPrkHos/s320/screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5631734914442848162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lessons learned:&lt;br /&gt;1. When specifying locationURI, it's worth choosing 'toolbar', over 'menu' or others because only 'toolbar' locations support custom control contributions. &lt;br /&gt;2. Only supported URI parameters are 'after', 'before' and 'endof'. When using different parameters, I'm not sure how (if at all) it will be handled and where exactly your contribution will be landed.&lt;br /&gt;3. Not quite sure why, but all the existing docs that I have come accross, only say how to use menus extension point in standard places like view menubar, window toolbar, etc. Nothing about re-using whole mechanism..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-8112054694413665461?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/8112054694413665461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/making-extensible-gui-with-help-of.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8112054694413665461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8112054694413665461'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/making-extensible-gui-with-help-of.html' title='Making extensible GUI with org.eclipse.ui.menus'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-X1rb7uharhM/Tift718AtZI/AAAAAAAADuI/2UAZr0OI3Xg/s72-c/screenshot.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-4631802390621909227</id><published>2011-07-14T03:29:00.001-07:00</published><updated>2011-07-14T03:57:10.244-07:00</updated><title type='text'>Starting and immediately using OSGi bundle: possible?</title><content type='html'>Lately I had this little thing to do: an OSGi bundle (SuperTool) comes with some other OSGi bundle (GreatSdk) included.&lt;br /&gt;SuperTool depends on logic in GreatSdk so the first thing it needs to do during activation is to install GreatSdk and immediately after that start loading classes from GreatSdk.&lt;br /&gt;&lt;br /&gt;At first thought it seems logical to make SuperTool-GreatSdk dependency optional, to let SuperTool install and start safely without GreatSdk. Once installed, during startup SuperTool should install GreatSdk and start using it, for example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;BundleActivator.start(BundleContext context) {&lt;br /&gt;greatSdk = context.installBundle("file:///path/to/great.sdk_1.0.0.jar");&lt;br /&gt;greatSdk.start();&lt;br /&gt;&lt;br /&gt;GreatSdkStarter gss = new GreatSdkStarter(); // separate class in SuperTool that references some classes from GreatSdk&lt;br /&gt;gss.start(); // creates some GreatSdk classes&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately this fails in gss.start() with ClassNotFoundException:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;java.lang.ClassNotFoundException: greatSdk.Sdk&lt;br /&gt;at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)&lt;br /&gt;at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)&lt;br /&gt;at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)&lt;br /&gt;at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)&lt;br /&gt;at java.lang.ClassLoader.loadClass(ClassLoader.java:247)&lt;br /&gt;at supertool.GreatSdkStarter.start(GreatSdkStarter.java:8)&lt;br /&gt;at supertool.Activator.start(Activator.java:63)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What does work is reflectively creating GreatSdk class instance via obtained Bundle:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// again in superTool activator.start()&lt;br /&gt;Class&lt;?&gt; clazz = b.loadClass("greatSdk.Sdk");&lt;br /&gt;Object ob = clazz.newInstance();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So problem seems to be in the SuperTool information about the world. It looks like SuperTool is not yet aware that greatSdk was installed in the meantime.&lt;br /&gt;&lt;br /&gt;Another thing that works is refreshing SuperTool via OSGi console:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;osgi&gt; start superTool &lt;br /&gt;// loads greatSdk, but fails with ClassNotFoundException for classes referenced in GreatSdk&lt;br /&gt;java.lang.ClassNotFoundException: greatSdk.Sdk....&lt;br /&gt;osgi&gt; ss&lt;br /&gt;,,,&lt;br /&gt;1 ACTIVE greatSdk&lt;br /&gt;2. RESOLVED superTool&lt;br /&gt;&lt;br /&gt;osgi&gt; refresh superTool // magic&lt;br /&gt;osgi &gt; start superTool&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After the refresh, starting superTool again makes it properly see greatSdk. Unfortunately doing refresh from within superTool activator.start() doesn't work so sweet. PackageAdmin.refreshBundles(superTool) terminates successfully, but CNFE is still thrown.&lt;br /&gt;&lt;br /&gt;What's other way to activate and immediately use optional dependencies in an OSGi bundle?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Except 'don't do it' :-) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-4631802390621909227?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/4631802390621909227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/starting-and-immediately-using-osgi.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4631802390621909227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4631802390621909227'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/starting-and-immediately-using-osgi.html' title='Starting and immediately using OSGi bundle: possible?'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-6682414054338248450</id><published>2011-07-13T05:03:00.000-07:00</published><updated>2011-07-16T11:20:31.716-07:00</updated><title type='text'>Installing V8Cgi on Mac</title><content type='html'>V8CGI is a very thin Apache module encapsulating V8 - Google's JavaScript engine that's used e.g. in Google Chrome. Those concerned with NodeJS stability may consider V8CGI a better choice, thanks to stability provided by Apache base.&lt;br /&gt;&lt;br /&gt;A short while ago, on DevMeetings.pl &lt;a href="http://devcamps.pl"&gt;DevCamp&lt;/a&gt; we've been playing with V8CGI, RingoJS and Node. Thanks to &lt;a href="http://devcamps.pl/topics/perf_io_cpu"&gt;good performance&lt;/a&gt;, intuitive and high quality &lt;a href="http://www.commonjs.org/"&gt;APIs&lt;/a&gt;, V8CGI turned out to be the black horse of the whole event, although installing it on Macs was little tricky.&lt;br /&gt;&lt;br /&gt;Readers with Windows and Linux should follow to V8CGI&lt;a href="http://code.google.com/p/v8cgi/"&gt; home page&lt;/a&gt;, where they can get precompiled Windows binary and learn how to &lt;a href="http://code.google.com/p/v8cgi/wiki/InstallationUbuntu"&gt;install binary on Ubuntu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mac users, let's open terminal and try to build the V8 apache module ourselves.&lt;br /&gt;&lt;br /&gt;Getting V8CGI to work is four steps:&lt;br /&gt;1. Getting the source code&lt;br /&gt;2. Building it&lt;br /&gt;3. Configuration&lt;br /&gt;4. Test drive&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Getting the source code&lt;/span&gt;&lt;br /&gt;When checking out sources from SVN, we actually need two packages V8 and V8CGI:&lt;br /&gt;a) svn checkout http://v8cgi.googlecode.com/svn/trunk/ v8cgi&lt;br /&gt;b) svn checkout http://v8.googlecode.com/svn/trunk/ v8&lt;br /&gt;&lt;br /&gt;You should end up with two new directories: v8 and v8cgi. When downloading a ready package from V8CGI home page, V8 sources are already included.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Build V8 and V8CGI&lt;/span&gt;&lt;br /&gt;We'll use &lt;code&gt;scons&lt;/code&gt; - a software construction tool. A good way to get started with &lt;code&gt;scons&lt;/code&gt; is:&lt;br /&gt;&lt;pre&gt;scons -Q -h&lt;/pre&gt;&lt;br /&gt;It gets you a list of available build configuration options. Worth visiting when you hit a wall compilation errors.&lt;br /&gt;&lt;br /&gt;Let's first build V8:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd v8&lt;br /&gt;scons library=shared arch=x64&lt;br /&gt;sudo cp libv8.dylib /usr/lib/libv8.dylib&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We need x64 arch, as that's default Mac's Apache architecture. As a result your newly built libv8.dylib should be now available in /usr/lib directory.&lt;br /&gt;&lt;br /&gt;Now let's build V8CGI.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd ../v8cgi&lt;br /&gt;scons module=1 mysql=0 gd=0 apache_path=/usr/include/apache2/ apr_path=/usr/include/apr-1/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that I added some extra options (run &lt;code&gt;scons -Q -h&lt;/code&gt; for list of all options):&lt;br /&gt;&lt;code&gt;mysql=0&lt;/code&gt; - disabled mysql support, that is on by default. Not quite sure if all I need to enable this option is on my Mac, and I don't need mysql for now, so let's just disable it.&lt;br /&gt;&lt;code&gt;gd=0&lt;/code&gt; - disabled image-processing library 'gd', that is on by default. Same as with mysql, let's try without gd for start.&lt;br /&gt;&lt;code&gt;apache_path and apr_path&lt;/code&gt; - that's the path to Apache header files. Necessary to build against our HTTP server.&lt;br /&gt;&lt;br /&gt;For me this command ends up with following error:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Undefined symbols for architecture x86_64:&lt;br /&gt;  "_iconv_open", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;  "_iconv", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;  "_iconv_close", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;ld: symbol(s) not found for architecture x86_64&lt;br /&gt;collect2: ld returned 1 exit status&lt;br /&gt;scons: *** [mod_v8cgi.dylib] Error 1&lt;br /&gt;scons: building terminated because of errors.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Above error message says that 'iconv' library is missing for our architecture x86_64. Iconv is used for converting different character set encodings, like UTF to ISO, ISO to ASCII, etc. It's not critical part of V8CGI, specially if you only want to evaluate that technology.&lt;br /&gt;&lt;br /&gt;For evaluation purposes, we could just rip out the iconv calls from v8cgi source code but let's build iconv ourselves. Create another directory "iconv" next to v8 and v8cgi and execute following steps there:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;curl -O http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz&lt;br /&gt;tar -zxvf libiconv-1.11.tar.gz&lt;br /&gt;cd libiconv-1.11&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that latest iconv library is 1.13.1. We're using 1.11, because that one is compatible with iconv version included by default on Mac. Building with 1.13 you will end up with following error when trying to start apache next time:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;httpd: Syntax error on line 118 of /private/etc/apache2/httpd.conf: &lt;br /&gt;Cannot load /usr/local/apache2/modules/mod_v8cgi.dylib into server: &lt;br /&gt;dlopen(/usr/local/apache2/modules/mod_v8cgi.dylib, 10): &lt;br /&gt;Library not loaded: /usr/local/lib/libiconv.2.dylib\n  &lt;br /&gt;Referenced from: /usr/local/apache2/modules/mod_v8cgi.dylib\n  &lt;br /&gt;Reason: Incompatible library version: mod_v8cgi.dylib requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's go back to v8cgi directory and continue it's build. We need two extra params to link our new iconv module:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;scons module=1 mysql=0 gd=0 \&lt;br /&gt;   apache_path=/usr/include/apache2/ \&lt;br /&gt;   apr_path=/usr/include/apr-1/ \&lt;br /&gt;   &lt;b&gt; libpath=/usr/local/lib cpppath=/usr/local/include&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The build proceeds few steps forward and fails again with:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;g++ -o mod_v8cgi.dylib -bundle -bundle_loader /usr/sbin/httpd src/common.os src/system.os src/cache.os src/gc.os src/app.os src/path.os src/lib/binary/bytestorage.os src/mod_v8cgi.os -L/Users/jacek/Downloads/aa/v8 -L/usr/local/lib -lv8 -lv8 -lapr-1 -laprutil-1&lt;br /&gt;Undefined symbols for architecture x86_64:&lt;br /&gt;  "_libiconv_open", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;  "_libiconv", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;  "_libiconv_close", referenced from:&lt;br /&gt;      ByteStorage::transcode(char const*, char const*)in bytestorage.os&lt;br /&gt;ld: symbol(s) not found for architecture x86_64&lt;br /&gt;collect2: ld returned 1 exit status&lt;br /&gt;scons: *** [mod_v8cgi.dylib] Error 1&lt;br /&gt;scons: building terminated because of errors.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This time, compilation of v8cgi library is almost done, but breaks on gluing everything together. Let's invoke the same command adding &lt;b&gt;-liconv&lt;/b&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;g++ -o mod_v8cgi.dylib -bundle -bundle_loader /usr/sbin/httpd src/common.os src/system.os \&lt;br /&gt;   src/cache.os src/gc.os src/app.os src/path.os src/lib/binary/bytestorage.os src/mod_v8cgi.os \&lt;br /&gt;   -L/Users/jacek/Downloads/aa/v8 -L/usr/local/lib -lv8 -lv8 -lapr-1 -laprutil-1 &lt;b&gt;-liconv&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And success! No errors and your mod_v8cgi.dylib is out there, ready to try.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Configuration&lt;/span&gt;&lt;br /&gt;Configuration is pretty well described in v8cgi/INSTALL text file so I'll just copy it here:&lt;br /&gt;&lt;quote&gt;&lt;br /&gt;sudo cp v8cgi.conf.posix /etc/v8cgi.conf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- configure /etc/v8cgi.config&lt;br /&gt;sudo vi /etc/v8cgi.conf&lt;br /&gt;require.paths.push('~/src/v8cgi/lib');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- configure the apache module:&lt;br /&gt;sudo vi /etc/apache2/mods-available/v8cgi.load&lt;br /&gt;* The only line in the file should be:&lt;br /&gt;LoadModule v8cgi_module ~/src/v8cgi/mod_v8cgi.so&lt;br /&gt;--&lt;br /&gt;sudo vi /etc/apache2/mods-available/v8cgi.conf&lt;br /&gt;* The only line in the file should be:&lt;br /&gt;AddHandler v8cgi-script .sjs .ssjs .jst&lt;br /&gt;&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;Restart Apache and you're ready to go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-6682414054338248450?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/6682414054338248450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/installing-v8cgi-on-mac.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/6682414054338248450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/6682414054338248450'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/07/installing-v8cgi-on-mac.html' title='Installing V8Cgi on Mac'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-5027070299884644001</id><published>2011-04-28T02:05:00.000-07:00</published><updated>2011-04-28T02:20:23.194-07:00</updated><title type='text'>Signing firefox extensions</title><content type='html'>Signing FF extensions is pretty straightforward. Lately I've been going through some strains related to them, so I thought I'd share lesson learned.&lt;br /&gt;&lt;br /&gt;You have two sides that need to match with each other: online update URL and extension itself. Online update URL is a single file - update.rdf. Extension is an XPI file, with install.rdf file inside.&lt;br /&gt;&lt;br /&gt;Update.rdf contains a list of available extensions. Each extension should have checksum information, e.g. in sha1 algorithm.&lt;br /&gt;Once update.rdf is complete with all information and checksums, it must be signed with signer key.&lt;br /&gt;Note that, every time you change any of extension, it's checksum will likely change and so you need to update and re-sign update.rdf as well.&lt;br /&gt;&lt;br /&gt;On the other side, the install.rdf included in our XPI file needs to have our public key. Once you create install.rdf and put public key there, you can forget about it. XPI file does not have any checksum or signing.&lt;br /&gt;&lt;br /&gt;This all sounds nice and well but sometimes it doesn't go as well. Let's suppose public key included in XPI file was wrong and the file is already in the public. Every update attempt will fail with error about &lt;b&gt;malformed signature or updateKey&lt;/b&gt;. That's because during update, Firefox tries to match public key in XPI to signature in update.rdf.&lt;br /&gt;The only solution is to manually install extension again, with correct public key. It's necessary to clear browser cache before performing manual install, because FF uses cache first if the extension is already there.&lt;br /&gt;&lt;br /&gt;Detailed information about RDF file formats is &lt;a href="https://developer.mozilla.org/en/Extension_Versioning,_Update_and_Compatibility"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-5027070299884644001?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/5027070299884644001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/04/signing-firefox-extensions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5027070299884644001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5027070299884644001'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/04/signing-firefox-extensions.html' title='Signing firefox extensions'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-8734988134669164179</id><published>2011-02-18T17:07:00.000-08:00</published><updated>2011-02-18T11:04:20.108-08:00</updated><title type='text'>Building Windows installer with WiX</title><content type='html'>WiX is Windows Installer XML (WIX) Toolset. It's an open source project coming from Microsoft. Actually, it was the first project that Microsoft has officially published under Open Source license. Initially it appeared on SF.NET, but recently has moved to Microsoft's owned CodePlex.com. Half of the internet still points to SF though.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This tool let's you pack a bunch of files into a user-friendly MSI installer, including GUI, silent install, repair, windows registry editing and Start menu customizations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WiX is a bunch of cool ideas. The first one goes with the each tools names. There's Heat, Candle and Light. They act as preprocessor, linker and compiler. So no matter whether you know everything about compilers, or you always left it to the IDE - tools seem friendly from the very first look.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As name says it, the spine of the toolset is XML. To turn on the heat, developer needs to specify files to install, user interface, user interactions, install steps, resources and custom actions. All this lands in one or more XML documents following provided XML Schemas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Microsoft Visual Studio users are lucky, as there's GUI in VS that hides WiX to some extent. However I'm not sure how much flexible it is, i.e. how far can you go without having to manually edit XMLs. I was working on plain XML file in Eclipse IDE. Thanks to XSD Eclipse was able to provide content assist. This saved me from many typo-like bugs and helped find right tags faster, than by looking at the docs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The installer to build had some requirements. It had to be good-looking, native user experience. Some 3rd-party artifacts needed to be installed in the system as well: a dll, another product msi, and an exe to invoke in install time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;User interface&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Installers are typically wizards, built of couple of pages. WiX provides several default pages for standard operations. They're easily customizable with some space for branding. Unfortunately some predefined pages look bad. For example features selection dialog uses ugly drop-downs, rather than checkboxes. Maybe it's useful in some scenarios, but for 99% cases they're confusing.&lt;/div&gt;&lt;div&gt;Those not happy with default GUIs can implement their own by putting basic widgets (Button, Text, Label) together. All in XML. That's a bit of work for a beginner who previously built GUIs only in HTML or Java. There are also little caveats here and there, that can turn simple changes into a whole day of work. For example,  there's no support for transparent background in checkboxes, or background color is different on various Windows versions. So good luck, if you're planning for many customizations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall, user interface looks nice. It's simple, minimal, doesn't hurt an eye. But at the same time, it's not something impressive, not eye catching.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Installing 3rd party stuff&lt;/b&gt;&lt;/div&gt;&lt;div&gt;It's very simple to invoke any system command from WIX. If system command is not enough, then a DLL or VB script can be called as well.  Unfortunately it get's more complicated starting with Windows Vista and Windows 7. They have UAC (User Account Control) which denies pretty much all activity that was not explicitly accepted by user - e.g. blocks write access in some areas, disallows some programs. This is not really WIX issue, but being closely coupled to underlying MSI technology, WIX exposes some difficulties that we usually don't want to see or understand. So, any custom action (e.g. custom command invocation), that requires UAC signoff (or "privileges elevation") must be ran deferred. So in fact, it will be ran separately after the installer. Unfortunately deferred command does not see any properties or variables set during install process. So for example, if you want to remove extra files on uninstall, you need to think about communication mechanism, that will tell remove command the location to be removed and then run remove command deferred. That's much more than "rm -rf $DIR". The advantage is that you decide what privileges are used for which step (it's not so obvious with other 'advanced' tools).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Installing files&lt;/b&gt;&lt;/div&gt;&lt;div&gt;When installing the files, MSI maintains extra bookkeeping for rollback support. Unfortunately this is quite time consuming. In our case, whole application was 500M which meant extra precious minutes of  installation time (and first impression) only for ability to click "Cancel"/"Repair". Disabling this bookkeeping is supported only in more recent MSI versions. This makes MSI technology look very bad when compared to any Archive/ZIP-based installers.  The good side is, that latest MSI (e.g. included in Win7) is pretty fast, and it's only Windows XP where things are slow. During uninstall, naturally, only the installed files are removed. This is usually advantage, but if application generates any files, like cache, or stores files in many locations, then we want that removed as well. There's no out-of-the-box "remove dir" functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Updates&lt;/b&gt;&lt;/div&gt;&lt;div&gt;MSI supports updates. Update can replace particular files in install. This time, our tool was managing updates by itself and there was no easy way to automatically map those updates to certain files. So we didn't use this functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's pretty much my first top five thoughts about WIX. At the end, it's also worth mentioning the community. WIX has extremely lively forum. Only rare questions pass without an answer. Unfortunately not many people make an effort to dig a bit into archives, so many basic questions get asked all the time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've got some other installer tooling to blog about as well. So for next entry, I need to decide whether to get deeper into WIX or give an overview of it's alternative. Don't hesitate to comment, if you'd like to hear anything in particular about WIX.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-8734988134669164179?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/8734988134669164179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/11/building-windows-installer-with-wix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8734988134669164179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8734988134669164179'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/11/building-windows-installer-with-wix.html' title='Building Windows installer with WiX'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-5755220078442048309</id><published>2011-01-14T01:11:00.000-08:00</published><updated>2011-07-14T07:22:46.980-07:00</updated><title type='text'>Two Eclipse p2 repository operations to make you happy</title><content type='html'>On the integrations side of the Eclipse business I often happen to need two things:&lt;br /&gt;1. add a random OSGi jar to repository&lt;br /&gt;2. copy from one repository to another&lt;br /&gt;&lt;br /&gt;Looking thru p2 manual it's not always entirely obvious how to do it, so here goes my take on the subject.&lt;br /&gt;All my automation uses Ant, so I'll speak a bit of Ant now:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Add a random OSGi jar to repository&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;p2.publish.featuresAndBundles&lt;br /&gt;  repository="file:/path/to/destination/repository"      e.g. ${buildDirectory}/repo&lt;br /&gt;  publishArtifacts="true"&lt;br /&gt;  compress="true"&lt;br /&gt;  append="true"&lt;br /&gt;  source="/absolute/path/to/folder/with/jar" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Few notes:&lt;br /&gt;1. source attribute must be an absolute path.&lt;br /&gt;2. source path must contain "features" and "plugins" directories. So if you have only one bundle, make sure to put it under plugins dir first.&lt;br /&gt;3. make sure repository attribute is a URL, not plain path&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Copy from one repository to another&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;p2.mirror verbose="true"&amp;gt;&lt;br /&gt;  &amp;lt;repository location="file:/path/to/destination/repository" /&amp;gt;&lt;br /&gt;  &amp;lt;source&amp;gt;&lt;br /&gt;    &amp;lt;repository location="file:/path/to/source/repository" /&amp;gt;&lt;br /&gt;  &amp;lt;/source&amp;gt;&lt;br /&gt;  &amp;lt;iu id="pluginName" version="" /&amp;gt;&lt;br /&gt;&amp;lt;/p2.mirror&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Notes:&lt;br /&gt;1. Why not use p2.director? It copies only bundles for current architecture&lt;br /&gt;2. Mirror task is still not perfect, but enough for most copying operations, it has some extra options, worth looking into.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-5755220078442048309?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/5755220078442048309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/01/two-eclipse-p2-repository-operations-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5755220078442048309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5755220078442048309'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/01/two-eclipse-p2-repository-operations-to.html' title='Two Eclipse p2 repository operations to make you happy'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-115603626945215004</id><published>2011-01-12T01:06:00.001-08:00</published><updated>2011-01-12T06:15:48.192-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Extending Eclipse Orion</title><content type='html'>Yesterday Eclipse E4 team &lt;a href="http://borisoneclipse.blogspot.com/2011/01/orion.html"&gt;announced&lt;/a&gt; Orion - an experimental Eclipse Web IDE. There's plenty of information about the project on &lt;a href="http://www.blogger.com/wiki.eclipse.org/Orion"&gt;Orion wiki&lt;/a&gt;. &lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Orion is a set of JavaScript and HTTP APIs that simplify common development part of rich applications, like file storage, preferences, authentication, dialogs, selection. Since it's coming from Eclipse, Orion is skewed towards IDE development, so from start it also includes text editor with some decent features, like JavaScript syntax highlighting and JSLint integration.&lt;/div&gt;&lt;div&gt;The project may go towards strengthening it's JS IDE feature set, as well as enhancing it's core side - extensibility, client APIs ...or do it all at once. In any case it's going to be fascinating journey!&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So how to extend Orion? One can re-implement existing HTTP API in language other than Java; add more HTTP APIs, e.g. for task management, calendar, etc. Same with JavaScript API - it seems fairly easy to add more. Looking at this from classic Eclipse adopter point of view, I tried to add some GUI contribution that brings new functionality to existing Orion - let's say a PHP editor to complement the JS one. Naturally all without leaving Orion. I took following steps:&lt;/div&gt;&lt;div&gt;1. create new Orion bundle with new editor&lt;/div&gt;&lt;div&gt;2. install on Orion server&lt;/div&gt;&lt;div&gt;3. test and improve the contribution&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Creating new bundle for Orion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Orion is technically a simple Equinox http server, so it's pretty straightforward. We need MANIFEST.MF with bundle description, plugin.xml that describes what web content should be published and the content itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;New bundle structure, looking at it from Orion:&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_WymYeMz82WE/TS2mQ2L7f3I/AAAAAAAADlQ/86GLh7zLwLA/s320/bundle.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 183px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5561283923226099570" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;META-INF/MANIFEST.MF&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Pretty much ,standard Eclipse plugin manifest.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/_WymYeMz82WE/TS2mjc9XPrI/AAAAAAAADlY/N0vorvjD-0o/s320/manifest.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5561284242871631538" /&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;plugin.xml&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This one specifies that our bundle contains some static web content under /web directory and that it should be accessible in the container under /simple alias. Straightforward, thanks to Equinox.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://1.bp.blogspot.com/_WymYeMz82WE/TS2m3IaNCpI/AAAAAAAADlg/SQRyof8UFjA/s320/pluginxml.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5561284580952836754" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interestingly, at the moment Orion team decided to put all configuration in one bundle, so e.g. webeditor or webide JS code currently doesn't decide on it's own where will it appear, but instead a separate configuration bundle defines that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Installing bundle into Orion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;To install just created bundle, we need to figure out where is it stored and install it. By default Orion stores files in serverworkspace directory in it's home dir. On Mac this happens to be &lt;eclipse-orion&gt;\Eclipse.app\Contents\MacOS\serverworkspace&lt;/eclipse-orion&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to install bundle, it's best to use equinox osgi console - available in Orion thanks to the fact that it's equinox application. Orion docs mention something about server console, but I'm not entirely sure if this is the same, or some other console.&lt;/div&gt;&lt;div&gt;So first start Orion with osgi console:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;./eclipse -console&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and then, install the bundle:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;osgi&gt; install file:/Users/jacek/Downloads/eclipse-orion/eclipse.app/Contents/MacOS/serverworkspace/A&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Bundle id is 75&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;osgi&gt; start 75&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I used absolute path from Orion workspace, to easily make updates later. Surprisingly my project dir is named "A" instead of it's real name. Another interesting thing is that there's no all the well known .project and .settings files. Web developers are going to like it, and I'm wondering where is this information stored currently.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Test and improve the contribution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;So now that our bits are installed, let's see them:&lt;/div&gt;&lt;div&gt;http://localhost:8080/sample/index.html and yes! It works!&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WymYeMz82WE/TS2qK3Fp1lI/AAAAAAAADlo/81hQPMHJtHk/s1600/seeit.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 184px;" src="http://4.bp.blogspot.com/_WymYeMz82WE/TS2qK3Fp1lI/AAAAAAAADlo/81hQPMHJtHk/s320/seeit.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5561288218435507794" /&gt;&lt;/a&gt;Curious mind would be interested what was the source of the index.html, that generated such nice "Hello [object Object]" message. I included some Orion Client API to check if it's available and yes, it is! From now on, further documentation can be found at &lt;a href="http://wiki.eclipse.org/Orion/Client_API"&gt;Orion Client API&lt;/a&gt; wiki.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The source is following:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WymYeMz82WE/TS23CLY4jpI/AAAAAAAADlw/ECSr6kwVld8/s1600/source.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 114px;" src="http://4.bp.blogspot.com/_WymYeMz82WE/TS23CLY4jpI/AAAAAAAADlw/ECSr6kwVld8/s320/source.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5561302362917211794" /&gt;&lt;/a&gt;&lt;div&gt;After updating the bundle contents - e.g. to turn this sample to real new PHP editor - there's another command required to make Orion see our changes. From osgi console type:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;osgi&gt; update org.eclipse.sample&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;The only thing that I was not able to figure out is how to actually add a link or other UI contribution to code editor, files navigator, or other existing UIs. At the moment user has to manually enter the URL to see my contribution. I'd be happy to hear how to do this, if you happen to know.&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/7131917596625047485-115603626945215004?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/115603626945215004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2011/01/extending-eclipse-orion.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/115603626945215004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/115603626945215004'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2011/01/extending-eclipse-orion.html' title='Extending Eclipse Orion'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WymYeMz82WE/TS2mQ2L7f3I/AAAAAAAADlQ/86GLh7zLwLA/s72-c/bundle.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-2158877273284075544</id><published>2010-07-14T00:55:00.000-07:00</published><updated>2010-07-14T01:06:03.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atf'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Google App Inventor Eclipse Plugin</title><content type='html'>Hey, in case you missed it, here it is - the App Inventor plugin for easily making Android apps straight from your favourite IDE.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WymYeMz82WE/TD1tzVpUSAI/AAAAAAAADV4/0paFTRxIzD4/s1600/Untitled.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 233px;" src="http://1.bp.blogspot.com/_WymYeMz82WE/TD1tzVpUSAI/AAAAAAAADV4/0paFTRxIzD4/s320/Untitled.png" alt="" id="BLOGGER_PHOTO_ID_5493667849213069314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Together with git, task management and debugger now you can make not only silly kitty apps, but something bigger too :-)&lt;br /&gt;&lt;br /&gt;See it in action: (embedded Youtube video below)&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8ADwPLSFeY8&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/8ADwPLSFeY8&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="385" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;..hm so wouldn't that be easy with &lt;a href="http://jacekonthings.blogspot.com/2010/07/extend-eclipse-in-javascript-or-php.html"&gt;web plugins&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-2158877273284075544?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/2158877273284075544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/07/google-app-inventor-eclipse-plugin.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/2158877273284075544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/2158877273284075544'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/07/google-app-inventor-eclipse-plugin.html' title='Google App Inventor Eclipse Plugin'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WymYeMz82WE/TD1tzVpUSAI/AAAAAAAADV4/0paFTRxIzD4/s72-c/Untitled.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-5324786207807951128</id><published>2010-07-04T06:05:00.000-07:00</published><updated>2010-07-04T23:25:47.675-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Extend Eclipse in JavaScript... or PHP :-)</title><content type='html'>&lt;a href="http://jacekonthings.blogspot.com/2010/06/javascript-unit-tests-in-eclipse.html"&gt;The JavaScript unit tests view for Eclipse&lt;/a&gt; I blogged last time, wouldn't be anything special, unless you're JavaScript guy. Except the fact that it's implemented in plain HTML+JavaScript for GUI part and business logic.&lt;br /&gt;Ah.. and it uses jQuery too, so I think I can label the view as an example of jQuery plugins for Eclipse :-)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WymYeMz82WE/TDCUgKc9BdI/AAAAAAAADVk/s6viiY6NXx4/s1600/js_testunits_eclipse_gui2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://4.bp.blogspot.com/_WymYeMz82WE/TDCUgKc9BdI/AAAAAAAADVk/s6viiY6NXx4/s320/js_testunits_eclipse_gui2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490051226047153618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This has several advantages:&lt;br /&gt;- I don't need to know Java to extend Eclipse. This is great for such Eclipse IDE users as JavaScript, or PHP developers.&lt;br /&gt;- many things are easier to calculate in web languages, than Java. E.g. (running JS tests, running a web poll, etc.)&lt;br /&gt;- writing simple UI in HTML is dead easy. and you can use CSS :-)&lt;br /&gt;&lt;br /&gt;The main disadvantage is difficult communication with workbench. Java APIs are complicated and hard to map 1:1 in JavaScript, however for start I'm looking at exposing only few most useful features, like selection service.&lt;br /&gt;&lt;br /&gt;The inner workings are pretty simple. Some HTML is rendered by browser widget embedded in traditonal Java Eclipse view. Additionally, JSON and Ajax are used to keep HTML view informed what's going on in the Eclipse workbench.&lt;br /&gt;&lt;br /&gt;I know that e4 open social is working on something similar, however how do the gadgets communicate with Workbench?&lt;br /&gt;&lt;br /&gt;Wish me luck with final efforts on releasing Zend Studio, and you'll see more of this HTML/JS/PHP plugins  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-5324786207807951128?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/5324786207807951128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/07/extend-eclipse-in-javascript-or-php.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5324786207807951128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5324786207807951128'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/07/extend-eclipse-in-javascript-or-php.html' title='Extend Eclipse in JavaScript... or PHP :-)'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WymYeMz82WE/TDCUgKc9BdI/AAAAAAAADVk/s6viiY6NXx4/s72-c/js_testunits_eclipse_gui2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-5210591626577095109</id><published>2010-06-26T02:32:00.001-07:00</published><updated>2010-06-26T02:43:38.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>JavaScript unit tests in Eclipse</title><content type='html'>Anybody knows what's currently the most popular tool for javascript unit testing?&lt;br /&gt;&lt;br /&gt;While figuring this out, I made up a simple javascript unit tests integration with Eclipse to easily run precious tests from my favourite environment :-)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WymYeMz82WE/TCXKYp9dUYI/AAAAAAAADVM/lZf-fCtYCAE/s1600/js_testunits_eclipse_gui.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://3.bp.blogspot.com/_WymYeMz82WE/TCXKYp9dUYI/AAAAAAAADVM/lZf-fCtYCAE/s320/js_testunits_eclipse_gui.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5487014245950116226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unit tests are simple objects with functions to test and there's a couple of JUnit-style assertions. I wonder if the above view could be integrated with some real JS unit test tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-5210591626577095109?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/5210591626577095109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/06/javascript-unit-tests-in-eclipse.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5210591626577095109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/5210591626577095109'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/06/javascript-unit-tests-in-eclipse.html' title='JavaScript unit tests in Eclipse'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WymYeMz82WE/TCXKYp9dUYI/AAAAAAAADVM/lZf-fCtYCAE/s72-c/js_testunits_eclipse_gui.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-3767240605246321942</id><published>2010-05-28T03:53:00.000-07:00</published><updated>2010-05-28T04:09:15.123-07:00</updated><title type='text'>Understanding JavaScript libraries</title><content type='html'>I'd like to share with you some thoughts on supporting javascript libraries in an IDE. I found it quite interesting so far and I hope you'll enjoy the read :-)&lt;br /&gt;&lt;br /&gt;Let's assume we have to add content-assist for popular javascript libraries, like jQuery or Prototype, etc, there's dozens of those.&lt;br /&gt;&lt;br /&gt;First of all, if those libraries are written entierly in JavaScript, why do we have to add anything special? Can't some JS parser (e.g. JSDT) just take care of understanding those libraries, like it's done for Java or other languages?&lt;br /&gt;&lt;br /&gt;Unfortunately no. Most popular convention in JavaScript world is to write libraries that self-expand themselves in runtime. For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/** this function adds all fields and functions to given object&lt;br /&gt; */&lt;br /&gt;jQuery.extend = function(object, fields) {&lt;br /&gt;   for (var field in fields) {&lt;br /&gt;      object.prototype[field] = fields[field];&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;jQuery.extend(Array, {&lt;br /&gt;&lt;br /&gt;    /** Removes an object from array&lt;br /&gt;     */&lt;br /&gt;    remove : function(obj) {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** Prints JSON string of an object&lt;br /&gt;     */&lt;br /&gt;    toJSON : function() {&lt;br /&gt;    }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So statically analyzing above code, compiler could guess only that extend(objects, fields) function is defined and added to jQuery object. For the other functions - remove(obj) and toJSON(), we can only assume, based on some comments (and code), that they'll be added to Array object after invoking the extend() method. This extending pattern is the fundament behind jQuery plugins, Prototype and ExtJS.&lt;br /&gt;&lt;br /&gt;Before going further into details with possible solutions, let's see what  does typical static analyzer (e.g JSDT) understand. It understands basic JavaScript structures, like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/** jQuery.function1 jsdoc&lt;br /&gt; */&lt;br /&gt;jQuery.prototype.extend = function(object, object) {}&lt;br /&gt;&lt;br /&gt;/** jQuery function jsdoc&lt;br /&gt; */&lt;br /&gt;Array.remove = function(object) {}&lt;br /&gt;Array.toJSON = function() {}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Based on above code, JSDT can provide content assist for functions and fields and properly match jsdoc to them. So maybe all that is needed is some convertion between original library source code and understandable code?&lt;br /&gt;&lt;br /&gt;Ok so what are possible solutions to build proper JSDT data?&lt;br /&gt;There's several options:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; improve static analysis to understand popular JavaScript patterns, such as extend patten.&lt;br /&gt;&lt;li&gt; forget about source code and use libraries provided API documentation to derive JSDT documentation&lt;br /&gt;&lt;li&gt; run the source code in real environment and capture it's behavior&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AD1. Improve static analysis with knowledge of popular JavaScript patterns, such as extend patten.&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;It's possible to extend JSDT with extra logic that understands what extend() function does. Then, whenever static analyzer finds call to extend(), it can easily apply the pattern. The drawback is that there's more patterns, for example extendIf(boolean, object, fields) (in ExtJS),&lt;br /&gt;or code is more complicated, for example the features to be added to object are computed in a non-trivial way. For example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;features = { // an object with various features that should be added to&lt;br /&gt;various objects&lt;br /&gt;  objectAdditions : { object : Object, extend : function(), id :&lt;br /&gt;function() },&lt;br /&gt;  domAdditions : { object : Element, toHTML : function() },&lt;br /&gt;  docuAdditions : ( object : Document, connect : function() }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for (var featureSet in features) {&lt;br /&gt;  Lib.extend(features[featureSet].object, features[featureSet]);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Libraries authors have a lot of invention: they either optimize their libraries for JS file size, or try to make it as human-readable as possible by adding more JS structures. In both cases we can find either more functions, similar to extend() or more JavaScript code used&lt;br /&gt;to build new API.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AD2. Forget about source code and use libraries provided API documentation to derive JSDT documentation&lt;/b&gt;&lt;br&gt;&lt;br /&gt;The most successful libraries have excellent documentation. JQuery has it's own in XML, which is then converted to HTML. ExtJS and Prototype have greatly commented source code. It's worth mentioning that JS libraries source code can be found in several formats. First as a&lt;br /&gt;development source code - single library is split into many separate files of logically-related stuff. Second format is the debugging source code - library in it's final single file shape, but with formatting and comments included. Finally, there's minified source code - typically a&lt;br /&gt;single line, with all whitespaces and comments ripped off.&lt;br /&gt;&lt;br /&gt;The main advantage is that everything that is officially documented/supported in the docs, will be correctly reflected in JSDT. The main drawback is that for each library a separate converter is needed. Additionally, XML and HTML structure are subject to change, so there's a risk that each new version of library will also need a new converter. Documents may also show API in ways that are not possible to encode in JavaScript stubs. For example use overloading to describe&lt;br /&gt;different kinds of the same function, whereas in fact in JavaScript this is just a single function with variable number of arguments:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/** jsdoc1 */&lt;br /&gt;jQuery(selector) {}&lt;br /&gt;/** jsdoc2 */&lt;br /&gt;jQuery(element, expr)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Finally, while parsing XML is relatively painless, the HTML is often a subject to many XML parser errors, so regular expressions may be better tool than XML parser.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AD3. Run the source code in real environment and capture it's behavior&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;This sounds like WIN, because after all, all javascript libraries are written to be run, so it's only matter of capturing the result. &lt;br /&gt;&lt;br /&gt;There's two ways to capture the JavaScript structures. One way is by using Mozilla Rhino. It's a JavaScript engine written completely in Java. Rhino also has excellent debugging facility that let's easily inspect the memory state. Being Java-based has another advantage, that it's relatively easy to integrate. &lt;br /&gt;&lt;br /&gt;Another solution is one of standard JavaScript engines, e.g IE or Mozilla - those are supported by all libraries. Natively in JavaScript, it's fairly easy to capture the result of above examples, because all objects in JavaScript are hashmaps, so reading an object API is as easy as iterating over it's members with a for loop. The drawback is that it's impossible to read API of objects that have not been created yet. For example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;AnEvent = function(name, time, source) {&lt;br /&gt;  this.eventName = name;&lt;br /&gt;  this.time = time;&lt;br /&gt;  this.source = source;&lt;br /&gt;  this.send = function(object) {...};&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So until someone calls new AnEvent(name, time, source), it's impossible to figure out the structure of the AnEvent type. The other problem with this solution is that only trusted code can be run. Any infinite loop would break it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-3767240605246321942?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/3767240605246321942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/05/understanding-javascript-libraries.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3767240605246321942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3767240605246321942'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/05/understanding-javascript-libraries.html' title='Understanding JavaScript libraries'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-4032935425870354367</id><published>2010-02-02T01:42:00.000-08:00</published><updated>2010-02-03T12:40:23.374-08:00</updated><title type='text'>Looking thru the mirror</title><content type='html'>After a loaf of Java, bite of JavaScript and little bit of PHP in my most recent career, last week I headed to Poznan .Net Group meeting to see what are this guys doing up there.&lt;br /&gt;&lt;br /&gt;Assuming you're a Java guy, you know who is who in Java world, you know what's JEE, you wait for Java7, can tell why NetBeans sucks. You meet a Java friend and together whine about Maven, Eclipse, EJB, then have a beer and next day all again.&lt;br /&gt;&lt;br /&gt;And now there are those .Net folks. What are they up to? One guy there was from company of approx. 200 Java engineers. Only his (10 person?) team does .Net there. Oh my, are this two groups talking with each other during a lunch? That's what I was wondering on my way there.&lt;br /&gt;&lt;br /&gt;And the meeting was fun. At first look, just as I had passed a magic mirror with applied "s/Java/.Net/". About 10 people in the room (quite like on our Java group), tense air, two topics: S#arp Architecture and PowerPivot review. I especially liked S#arp because it's kind of framework. PowerPivot on the other hand is actually a tool, powerful and good to know about, but I'm not going to use it or work on anything similar in near future.&lt;br /&gt;&lt;br /&gt;The first speaker, started with a little history background of web applications, then did quick breakdown of all S#arp parts and finally small demo of what it does.&lt;br /&gt;&lt;br /&gt;S#arp, as it was said, is a bunch of nice tools glued together, adhering to common conventions. There's NHibernate, TweetSharp, NUnit, N4, jQuery and couple more Nthings that I don't remember. It's a generative approach, where you customize prefabricated templates to produce some C# code. Generated stuff uses bunch of custom code based on various popular small tools.&lt;br /&gt;&lt;br /&gt;So while you could basically do all of this by yourself, learn NUnit, N4, etc. etc., you can just focus on describing your model, and then get very basic unit tests, web application, data layer abtraction and something more with just one click.&lt;br /&gt;&lt;br /&gt;So I'd be interested to learn about Java solution, where you edit a model, and get ready web application. I know I can use EMF, to easily get running Eclipse application, it generates tests skeleton, can customize templates. But fundamental difference between EMF and S#arp is that in EMF you have to buy everything (validation, data persistence, etc.) from one source, whereas S#arp adapts to already existing technologies and is mere MVC integration layer. Second, standard EMF doesn't generate web apps. Third, some JEE folks just don't buy code generation and EMF so maybe there are more arguments which such non-JEE guy as me doesn't understand.&lt;br /&gt;&lt;br /&gt;The other intersting observation was IDE. There's no problem, like we once had on Java meeting where speaker nearly refused to show example, because we had only Eclipse and he works on NetBeans. Everyone uses VisualStudio. And actually some of the mentioned small tools integrates with VS if you copy one or two dlls here and there.&lt;br /&gt;&lt;br /&gt;It's pretty much like joining JEE knowledge, JEE tools, EMF Runtime and EMF tools to work together. You get EMF tooling to create a model and then generate a standard JEE application, adhering to conventions, best practices, etc. This is what tons of JEE developers could like. With little knowledge of patterns, conventions, practices they'd be quickly making standard JEE apps adhering to best practices, conventions and patterns.&lt;br /&gt;&lt;br /&gt;That's just a highlight of the meeting compared vs. my little Java knowledge. But there were also many little differences in group governance, people motivation, focus on trends and so on. I encourage anyone to try this excercise and look thru the mirror too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-4032935425870354367?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/4032935425870354367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/02/looking-thru-mirror.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4032935425870354367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4032935425870354367'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/02/looking-thru-mirror.html' title='Looking thru the mirror'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-7947856750569135141</id><published>2010-01-30T07:42:00.000-08:00</published><updated>2010-01-30T07:56:20.841-08:00</updated><title type='text'>Wspólna lista poznańskich forów IT już jest</title><content type='html'>Już jest jedna wspólna lista poznańskich grup informatyków! Wszystkie wpisy są ładnie posegregowane by łatwo się zorientować, który pochodzi z JUGu, .Netu, itp. Na pierwszy rzut oka wygląda że największy ruch jest na grupie Javowej, ale może to tylko zbieg okoliczności.&lt;br /&gt;&lt;br /&gt;Oczywiście nie wszystko jeszcze się udało. Np. poznańskim Linuksowcom szwankuje strona, adobowcy nie mają forum a jedynie bloga, grupy uczelniane (Politechniczne Booboo i Uniwersysteckie KINO) korzystają z uczelnianych list dyskusyjnych, gdzie jedynym sposobem nadążania za dyskusją jest zapisanie swojego e-maila - o RSS jeszcze nikt tam nie słyszał.&lt;br /&gt;&lt;br /&gt;Link RSS: &lt;a href="http://pipes.yahoo.com/pipes/pipe.run?_id=7b29ea61f5495d30b153714ff0c36cf3&amp;_render=rss"&gt;Poznan IT Groups&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dla ciekawskich jest też &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=7b29ea61f5495d30b153714ff0c36cf3"&gt;jak to tam sobie działa&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-7947856750569135141?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/7947856750569135141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/wspolna-lista-poznanskich-forow-it-juz.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7947856750569135141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7947856750569135141'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/wspolna-lista-poznanskich-forow-it-juz.html' title='Wspólna lista poznańskich forów IT już jest'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-7594485319668615874</id><published>2010-01-24T06:17:00.000-08:00</published><updated>2010-01-24T06:49:00.727-08:00</updated><title type='text'>Co tam ciekawego w Poznaniu!?</title><content type='html'>Odkąd bardziej interesuję się javascriptem, odkrywam nową cechę społeczności javowej. Jest ona najbardziej zorganizowaną grupą programistów regularnie spotykających się w wielu miastach tylko po to by zdradzać kilka technicznych sekretów swoich warsztatów. Są ludzie z korporacji, studenci, konsultanci, startupowcy, naukowcy - niemal wszyscy. Większości nikt za przychodzenie nie płaci, czasem można zgarnąć książkę ale najczęściej jedynym plusem ze spotkania jest kilka nowych ciekawostek i znajomości.&lt;br /&gt;&lt;br /&gt;A co wśród wyznawców innych języków? .Net-owcy, php-owcy, erlang-owcy (mieliby co gadać o nktalku:-), dynamiczni, itp, itp. a potem bazodanowcy, flaszowcy, linuksowcy (tu wiem: PLUG)? Powiedzmy, że wchodzę w nowy język/temat i mam setkę pytań - jak tu zacząć? Najprościej oczywiście na starych dobrych grupach dyskusyjnych, ale jak tu znaleźć kogoś w okolicy?&lt;br /&gt;&lt;br /&gt;Stąd wpadł mi pomysł by zebrać do kupy wszystkich programistów i grupy z Poznania i okolicy. Docelowo chciałbym widzieć kalendarz ze wszystkimi techniczno/technologicznymi wydarzeniami w Poznaniu, listę wszystkich tweetererów z Poznania, zagregowany blog okolicznych bloggerów i na koniec, choć wg. mnie najważniejsze, łatwą nawigację do wszystkich lokalnych forów (przynajmniej w trybie read-only).&lt;br /&gt;&lt;br /&gt;Na początek wstawiam listę wszystkich znanych mi grup dyskusyjnych z Poznania:&lt;br /&gt;&lt;br /&gt;Poznan-JUG: www.jug.poznan.pl&lt;br /&gt;Poznan .Net Users Group: http://ms-groups.pl/pg.net/default.aspx&lt;br /&gt;Poznan Linux User Group: http://www.poznan.linux.org.pl/ (Nie działa)&lt;br /&gt;Poznan Adobe User Group: http://augpoznan.eu/ (btw. kilka dni temu mieli spotkanie!)&lt;br /&gt;KINO: http://kino.wmi.amu.edu.pl/&lt;br /&gt;BOOBOO: http://booboo.cs.put.poznan.pl/&lt;br /&gt;GIK: (tu niestety nie ma żadnej listy dyskusyjnej)&lt;br /&gt;&lt;br /&gt;Następne w kolejności będzie zagregowanie forów, by łatwo śledzić co się na nich dzieje. (Może wystarczy odszukać adresy RSS?)&lt;br /&gt;&lt;br /&gt;Pozostaje tylko pytanie do Was, drodzy czytelnicy. Znacie jeszcze jakieś fora w Poznaniu/okolicach? Czekam na linki w komentarzach!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-7594485319668615874?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/7594485319668615874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/co-tam-ciekawego-w-poznaniu.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7594485319668615874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7594485319668615874'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/co-tam-ciekawego-w-poznaniu.html' title='Co tam ciekawego w Poznaniu!?'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-7375565288462952142</id><published>2010-01-17T00:54:00.000-08:00</published><updated>2010-01-17T02:49:54.233-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geecon'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>GeeCON 2010 - Call for papers</title><content type='html'>May will be great month to be in Poznan. We'll be having a biggest Java conference in Poland and eastern Europe. The list of &lt;a href="http://2010.geecon.org/main/speakers"&gt;speakers&lt;/a&gt; is already getting very interesting. If you will be around, consider visiting us. Below I'll paste the call for papers, specially that there's not much OSGi or Eclipse speakers yet.&lt;br /&gt;&lt;br /&gt;There are also cool vids from last year, you might like to &lt;a href="http://2009.geecon.org/site/movie"&gt;see&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GeeCON 2010 - Call for papers&lt;/span&gt;&lt;br /&gt;We want you to share your knowledge with others during GeeCON!&lt;br /&gt;&lt;br /&gt;We are interested in hosting lectures on subjects associated with Java&lt;br /&gt;and software engineering, such as:&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Java EE, OSGi, enterprise architecture patterns and best practices&lt;br /&gt;&lt;li&gt; rich internet applications (Flex, JavaFX) and Java Desktop applications&lt;br /&gt;&lt;li&gt; modern web frameworks (Wicket, Grails, JSF etc.)&lt;br /&gt;&lt;li&gt; domain specific languages&lt;br /&gt;&lt;li&gt; languages on the JVM (Groovy, JRuby, Scala, Clojure ...)&lt;br /&gt;&lt;li&gt; mobile computing (Android, Java ME)&lt;br /&gt;&lt;li&gt; JVM performance tuning&lt;br /&gt;&lt;li&gt; distributed computing&lt;br /&gt;&lt;li&gt; software quality assurance in the Java world (refactoring, automated tests, mutational test verification, static code analysis)&lt;br /&gt;&lt;li&gt; software configuration management (including tools like Maven, Gradle, Ant, Ivy)&lt;br /&gt;&lt;li&gt; agile methodologies&lt;br /&gt;&lt;li&gt; cloud computing&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;If you:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;have experience in an interesting subject or a cutting-edge&lt;br /&gt;technology,&lt;br /&gt;&lt;li&gt;want to share knowledge,&lt;br /&gt;&lt;li&gt;have good presentation skills,&lt;br /&gt;&lt;/ul&gt;don't hesitate! Prepare a short abstract about the topic you would&lt;br /&gt;like to present during GeeCON and send it to us!&lt;br /&gt;&lt;br /&gt;There are only a few rules:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;call for papers starts on 2010-01-06 and ends 2010-02-28,&lt;br /&gt;&lt;li&gt;abstract should be about 250 words long and describe what you are&lt;br /&gt;willing to present,&lt;br /&gt;&lt;li&gt;abstract must be accompanied by a short technical and presentational&lt;br /&gt;resume,&lt;br /&gt;&lt;li&gt;lecture will be 50 minutes long and will be given in English&lt;br /&gt;&lt;li&gt;presentation will be prepared using a provided GeeCON template,&lt;br /&gt;&lt;li&gt;use &lt;a href="http://2010.geecon.org/cfpSubmission/create"&gt;this&lt;/a&gt;  form to send your submission (don't send it via email)&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;in case you have any questions, contact us at call-for-&lt;br /&gt;papers@geecon.org.&lt;br /&gt;&lt;br /&gt;Feel free to send as many proposals as you see fit. Please, contact us&lt;br /&gt;if you have any questions or doubts regarding your submission.&lt;br /&gt;&lt;br /&gt;See you at GeeCON!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-7375565288462952142?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/7375565288462952142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/geecon-2010-call-for-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7375565288462952142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/7375565288462952142'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2010/01/geecon-2010-call-for-papers.html' title='GeeCON 2010 - Call for papers'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-8313207259124492474</id><published>2009-11-07T02:20:00.000-08:00</published><updated>2009-11-07T01:31:45.052-08:00</updated><title type='text'>Web Yacht Sails Simulator</title><content type='html'>Recently I'm fascinated with sailing. Some time ago I've finished a sailing course that will enable me to sail on some most popular tourist sail boats. The more I'm learning the more things are getting interesting. For example, it sounds obvious that moving a boat involves many forces that all interfere with each other, however the way in which this all works makes you can move not only with the wind but also by the wind. Of course sailor has to do a plenty of math (aka experiance) to get some decent speed.&lt;br /&gt;&lt;br /&gt;Sailing makes for a wonderful subject in programming scenarios that I have in &lt;a href="http://wwww.eclipse.org/atf"&gt;Eclipse Ajax Tooling (ATF) project&lt;/a&gt;, so I've started building a web yacht sails simulation. It will present a virtual boat that user can steer and put under various weather conditions.&lt;br /&gt;&lt;br /&gt;First thing I had to do was refreshing my knowledge about vectors. There will be vector for wind, water stream, vectors for sails, rudder and various resistances. The other story is making it all visible. I chose to make an Ajax application running in the browser.  HTML5 canvas is used to do all the drawing, this &lt;a href="https://developer.mozilla.org/en/Canvas_tutorial"&gt;excellent tutorial&lt;/a&gt; makes it really easy to learn.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WymYeMz82WE/SvU38H--2WI/AAAAAAAAC8c/etc7OusXM1U/s1600-h/vector_math.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_WymYeMz82WE/SvU38H--2WI/AAAAAAAAC8c/etc7OusXM1U/s320/vector_math.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401284834175670626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see first results &lt;a href="http://www.eclipse.org/atf/samples/vector_math.html"&gt;here&lt;/a&gt;. A couple of vectors on HTML5 canvas. Drag and drop vector arrows to move them around. Some vectors are 'read-only' because they're dynamically calculated from others.&lt;br /&gt;&lt;br /&gt;There's also short screencast embeded below, which might be not visible in RSS reader:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7484435&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7484435&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7484435"&gt;Vector Math&lt;/a&gt; from &lt;a href="http://vimeo.com/user2429550"&gt;Jacek Pospychala&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Next to do: draw boat and model some physics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-8313207259124492474?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/8313207259124492474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/10/web-yacht-sails-simulator.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8313207259124492474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/8313207259124492474'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/10/web-yacht-sails-simulator.html' title='Web Yacht Sails Simulator'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WymYeMz82WE/SvU38H--2WI/AAAAAAAAC8c/etc7OusXM1U/s72-c/vector_math.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-4245999033060546816</id><published>2009-11-04T04:09:00.000-08:00</published><updated>2009-11-04T04:45:57.221-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse Ajax tools help is on wiki!</title><content type='html'>When Eclipse Ajax Tools Framework (&lt;a href="http://www.eclipse.org"&gt;ATF&lt;/a&gt;) re-started delivering builds some time ago, we scored some negative feedback that it's hard to find what actually ATF does, and how it should be used.&lt;br /&gt;&lt;br /&gt;This information, initially located in ATF help plug-in, was simply too hard to find. Now it's available at &lt;a href="http://wiki.eclipse.org/ATF/Help"&gt;wiki&lt;/a&gt; and hopefull we'll be able to keep maintaining it both in wiki and eclipse help format.&lt;br /&gt;&lt;br /&gt;Check out sexy ATF help :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.eclipse.org/ATF/Help"&gt;&lt;img src="http://lh6.ggpht.com/_WymYeMz82WE/SvF0_LtQKOI/AAAAAAAAC78/l8z7TgsA_6w/moollage.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;btw. missed the Movember story? &lt;a href="http://eclipsesource.com/blogs/2009/10/31/come-on-eclipse-lets-grow-a-mo/"&gt;Ian explains&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-4245999033060546816?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/4245999033060546816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/11/ajax-tools-help-is-on-wiki.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4245999033060546816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4245999033060546816'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/11/ajax-tools-help-is-on-wiki.html' title='Eclipse Ajax tools help is on wiki!'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_WymYeMz82WE/SvF0_LtQKOI/AAAAAAAAC78/l8z7TgsA_6w/s72-c/moollage.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-4436083416540295541</id><published>2009-08-27T03:44:00.000-07:00</published><updated>2009-08-27T04:07:52.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>ATF needs a logo!</title><content type='html'>If you feel you can fit javascript, XML, asynchroniousness, XMLHttpRequests, dynamics and web 2.0 into small colourful picture, namely an icon or logo - read on!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287779"&gt;ATF is looking for really cool logo&lt;/a&gt; to show up in such places as &lt;a href="http://tools.mozilla.com/"&gt;Open Web Tools Directory&lt;/a&gt; (Thanks to Mike for sharing this link).&lt;br /&gt;&lt;br /&gt;How about these proposals?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://bugs.eclipse.org/bugs/attachment.cgi?id=145761"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px;" src="https://bugs.eclipse.org/bugs/attachment.cgi?id=145761" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-4436083416540295541?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/4436083416540295541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/08/atf-needs-logo.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4436083416540295541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4436083416540295541'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/08/atf-needs-logo.html' title='ATF needs a logo!'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-3933590216115549052</id><published>2009-08-19T07:33:00.000-07:00</published><updated>2009-11-06T23:28:25.166-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>PDE Plug-in registry to query your Equinox install</title><content type='html'>This year's Google Summer of Code is nearing the end so it's high time to see some results. Under PDE umbrella Wojciech Galanciak is working on making PDE Plug-in registry view able to show you contents of your Equinox/Eclipse/any OSGi application (&lt;a href="http://wiki.eclipse.org/OSGi_Remote_Management_Tool"&gt;project details here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;It's like OSGi console, except that you can easily browse all extension point details, services details, bundles details, use filtering, easily scroll and so on.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WymYeMz82WE/Sowe--HhI_I/AAAAAAAAC5M/qrGTwIRz9E0/s1600-h/holymolypde.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 217px;" src="http://3.bp.blogspot.com/_WymYeMz82WE/Sowe--HhI_I/AAAAAAAAC5M/qrGTwIRz9E0/s320/holymolypde.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5371702522721412082" /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today he posted some demos:&lt;br /&gt;&lt;a href="http://www.szymonnowacki.pl/wojtek/connect.htm"&gt;First demo&lt;/a&gt; shows how to connect with remote applicaiton (or local in other JVM).&lt;br /&gt;&lt;a href="http://www.szymonnowacki.pl/wojtek/selfhosting.htm"&gt;The second one&lt;/a&gt; how to use self-hosting mode in plugin registry view.&lt;br /&gt;&lt;br /&gt;Check them out and share your thoughts either on &lt;a href="https://dev.eclipse.org/mailman/listinfo/pde-dev"&gt;pde-dev&lt;/a&gt; or directly in &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243439"&gt;bugzilla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-3933590216115549052?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/3933590216115549052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/08/pde-plug-in-registry-to-query-your.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3933590216115549052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3933590216115549052'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/08/pde-plug-in-registry-to-query-your.html' title='PDE Plug-in registry to query your Equinox install'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WymYeMz82WE/Sowe--HhI_I/AAAAAAAAC5M/qrGTwIRz9E0/s72-c/holymolypde.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-3312016477234096741</id><published>2009-07-24T11:10:00.000-07:00</published><updated>2009-07-24T11:59:03.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Ajax-heavy development, Javascript debugging for anyone?</title><content type='html'>After busy week at my new &lt;a href="http://www.zend.com"&gt;job&lt;/a&gt;, today I was really happy to post an &lt;a href="http://dev.eclipse.org/mhonarc/lists/atf-dev/msg00557.html"&gt;announcement&lt;/a&gt; that &lt;a href="http://www.eclipse.org/atf"&gt;Ajax Tools Framework&lt;/a&gt; is getting new life. In last days it was updated and reorganized a bit to work with Eclipse Galileo and now is available for &lt;a href="http://wiki.eclipse.org/ATF/Installing"&gt;install&lt;/a&gt; from nightly builds update site.&lt;br /&gt;&lt;br /&gt;ATF, was home for JavaScript Developer Tools (JSDT) and couple other features that later found their place in WebTools project. Unfortunately not all cool stuff had this luck.&lt;br /&gt;&lt;br /&gt;Probably the best features still there in incubation are Mozilla IDE and Javascript debugging. &lt;a href="http://www.eclipse.org/atf/flash/index8.php"&gt;Mozilla IDE&lt;/a&gt; brings lots of tools to x-ray your webpage. Among others, you can live edit page DOM model and see how the page look changes, play with CSS details or monitor HTTP requests. &lt;a href="http://www.eclipse.org/atf/flash/index4.php"&gt;Javascript debugger&lt;/a&gt; is, as you guess, the reincarnation of everyone's favourite Debug perspective but for JS language.&lt;br /&gt;&lt;br /&gt;Some of those features work well, while other still need some love, so our plan for next weeks is to make Mozilla IDE and Javascript debugging really strong and robust. &lt;br /&gt;&lt;br /&gt;Let's try ATF and share your thoughts on &lt;a href="https://dev.eclipse.org/mailman/listinfo/atf-dev"&gt;mailing list&lt;/a&gt; or &lt;a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.tools.atf"&gt;newsgroup&lt;/a&gt;! ... or &lt;a href="http://twitter.com/eclipseatf"&gt;tweeeter&lt;/a&gt; :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-3312016477234096741?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/3312016477234096741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/07/ajax-heavy-development-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3312016477234096741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/3312016477234096741'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/07/ajax-heavy-development-javascript.html' title='Ajax-heavy development, Javascript debugging for anyone?'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7131917596625047485.post-4155556164193412994</id><published>2009-07-22T23:45:00.000-07:00</published><updated>2009-07-23T00:19:37.498-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Stretching target platform</title><content type='html'>I'd like to share with you the target platform for my new &lt;a href="http://www.eclipse.org/atf"&gt;project&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WymYeMz82WE/SmgIjKqGh6I/AAAAAAAAC4U/Axpo5V3-YoU/s1600-h/atftargetplatform.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 312px;" src="http://1.bp.blogspot.com/_WymYeMz82WE/SmgIjKqGh6I/AAAAAAAAC4U/Axpo5V3-YoU/s320/atftargetplatform.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5361544756633962402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You see it's not something typical one would have installed in Eclipse - there's a bunch of plug-ins from Mozilla or WTP repositories. Wouldn't it be troublesome for a newcomer willing to contribute? Install this and that from here and there... Oh and yes, then install their dependencies... Nooo!&lt;br /&gt;&lt;br /&gt;But now, since Target Platforms can contain any repositories, I just configured all the dependencies there and posted the atf.target file next to the PSF file.&lt;br /&gt;Now setting up the whole environment is as simple as &lt;a href="http://wiki.eclipse.org/ATF/Workspace"&gt;importing two tiny files&lt;/a&gt; :-)&lt;br /&gt;Horey! Thank you &lt;a href="http://www.eclipse.org/pde"&gt;PDE&lt;/a&gt; (btw. what a new tasty home page :-))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7131917596625047485-4155556164193412994?l=jacekonthings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekonthings.blogspot.com/feeds/4155556164193412994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jacekonthings.blogspot.com/2009/07/stretching-target-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4155556164193412994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7131917596625047485/posts/default/4155556164193412994'/><link rel='alternate' type='text/html' href='http://jacekonthings.blogspot.com/2009/07/stretching-target-platform.html' title='Stretching target platform'/><author><name>Jacek Pospychala</name><uri>http://www.blogger.com/profile/16627298669538613040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_WymYeMz82WE/R3GCcWRdyEI/AAAAAAAAA1M/O_pFmGsIBOA/S220/Jacek-black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WymYeMz82WE/SmgIjKqGh6I/AAAAAAAAC4U/Axpo5V3-YoU/s72-c/atftargetplatform.PNG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
