<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkcBR3kyfyp7ImA9WhRaEk8.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455</id><updated>2012-02-14T15:00:56.797+01:00</updated><category term="atlassian" /><category term="ruby" /><category term="managerial" /><category term="book reviews" /><category term="ui" /><category term="agile scrum tool php java code review continuous integration" /><category term="idea" /><category term="office" /><category term="agile" /><category term="java" /><category term="funny" /><category term="python" /><category term="plugin" /><category term="swing" /><category term="unix" /><category term="security" /><category term="microsoft" /><category term="employee time tracking" /><category term=".net" /><category term="idea plugin java" /><category term="eclipse" /><category term="open source" /><category term="confluence" /><category term="google" /><title>Unimplemented</title><subtitle type="html">Unsorted thoughts from minds of &lt;a href="http://www.spartez.com/"&gt;SPARTEZ&lt;/a&gt;.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://unimplemented.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>169</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Unimplemented" /><feedburner:info uri="unimplemented" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkECSHc-eyp7ImA9WhdbEk4.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-363301395190258490</id><published>2011-10-10T10:21:00.002+01:00</published><updated>2011-10-10T10:24:29.953+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T10:24:29.953+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="confluence" /><category scheme="http://www.blogger.com/atom/ns#" term="atlassian" /><title>Approver Plugin For Confluence</title><content type="html">&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/--hIN8AYKHvE/TpK0r9uM49I/AAAAAAAABQc/rNUDz8A1xEU/s1600/thumbsup-80.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--hIN8AYKHvE/TpK0r9uM49I/AAAAAAAABQc/rNUDz8A1xEU/s1600/thumbsup-80.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
Atlassian Confluence is a fine product, but so far it &amp;nbsp;has been lacking an important feature - there was no way to show your approciation of somebody's contributions (pages, blog posts, even comments), other than by commenting on them. This was in stark contract with places like Google+ or Facebook, where you can simply click a "+1" or "Like" button to quickly say that you like what somebody said.&lt;/div&gt;
&lt;div class="" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
To address that, we have created a simple, but powerful Confluence plugin - &lt;a href="http://approver.spartez.com/"&gt;the Approver&lt;/a&gt;.&lt;/div&gt;
&lt;div class="" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
This plugin adds a widget to your Confluence pages, in a form of a "Thumbs up" button with a small counter. When you click this button, you annnounce to everybody that can read the page that you "approve" ("like", "+1")&amp;nbsp;the content just above it. The widget appears at the bottom of every page, as well as next to each comment. Whan you click the button, it turns to blue, so that you know whether or not you already "approved". When you click the counter, you are shown a list of everybody who also "approved"&lt;/div&gt;
&lt;div class="" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
But wait, there is more. In addition to this button, Approver can optionally add Google+'s "+1" and Facebook's "Like" buttons to every page or comment. This lets you share your opinions about the content with the whole world. Enable and use these with caution though - they expose your Confluence URLs (but not the content) to everybody on Google+ or Facebook. So if you consider these URLs secret, you should disable this option.&lt;/div&gt;
&lt;div class="" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
Approver can be downloaded from our web page at&amp;nbsp;&lt;a href="http://approver.spartez.com/"&gt;http://approver.spartez.com/&lt;/a&gt;, or from &lt;a href="https://plugins.atlassian.com/plugin/details/638974"&gt;Atlassian Plugin Exchange&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
Here are some screenshots of Approver in action&lt;/div&gt;
&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-M__q48urEyM/TpK0mJLrrQI/AAAAAAAABQY/-t-BW7Dl2_I/s1600/approver-small.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="153" src="http://1.bp.blogspot.com/-M__q48urEyM/TpK0mJLrrQI/AAAAAAAABQY/-t-BW7Dl2_I/s320/approver-small.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;closeup of all buttons on a page&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KoHRaHuKfeg/TpK3go9sSXI/AAAAAAAABQg/7ORps-qhDJw/s1600/approver-full.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="315" src="http://3.bp.blogspot.com/-KoHRaHuKfeg/TpK3go9sSXI/AAAAAAAABQg/7ORps-qhDJw/s400/approver-full.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;full page with Approver buttons and approvers list&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;a href="http://1.bp.blogspot.com/-M__q48urEyM/TpK0mJLrrQI/AAAAAAAABQY/-t-BW7Dl2_I/s1600/approver-small.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-363301395190258490?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/qZDU3Gq7qHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/363301395190258490/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/10/approver-plugin-for-confluence.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/363301395190258490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/363301395190258490?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/qZDU3Gq7qHw/approver-plugin-for-confluence.html" title="Approver Plugin For Confluence" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/--hIN8AYKHvE/TpK0r9uM49I/AAAAAAAABQc/rNUDz8A1xEU/s72-c/thumbsup-80.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/10/approver-plugin-for-confluence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAHRnY5fyp7ImA9WhdSEEg.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-5564246590936312532</id><published>2011-07-18T14:13:00.004+01:00</published><updated>2011-07-19T07:25:37.827+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T07:25:37.827+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>Eclipse mysteries</title><content type="html">Do you use Eclipse? Have you faced below error and don't know what is going on? Google does not help?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;!ENTRY org.eclipse.osgi 2 0 2011-07-15 05:06:39.766&lt;br /&gt;!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:&lt;br /&gt;!SUBENTRY 1 org.eclipse.osgi 2 0 2011-07-15 05:06:39.766&lt;br /&gt;!MESSAGE Bundle org.eclipse.jdt.apt.pluggable.core_1.0.400.v20110305-1450 [107] was not resolved.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2011-07-15 05:06:39.766&lt;br /&gt;!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.tool_0.0.0.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.dispatch_0.0.0.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.model_0.0.0.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.apt.pluggable.core 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Missing imported package org.eclipse.jdt.internal.compiler.apt.util_0.0.0.&lt;br /&gt;!SUBENTRY 1 org.eclipse.osgi 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Bundle org.eclipse.jdt.compiler.apt_1.0.400.v0110509-1300 [109] was not resolved.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.compiler.apt 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Missing optionally imported package org.eclipse.jdt.internal.compiler.tool_0.0.0.&lt;br /&gt;!SUBENTRY 1 org.eclipse.osgi 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Bundle org.eclipse.jdt.compiler.tool_1.0.100.v_B61 [110] was not resolved.&lt;br /&gt;!SUBENTRY 2 org.eclipse.jdt.compiler.tool 2 0 2011-07-15 05:06:39.767&lt;br /&gt;!MESSAGE Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.6&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Stay calm and do not try to solve above dependency problem. In 99.99% it is a side effect of another problem, even if you can't see anything special in your log at first sight. &lt;br /&gt;&lt;br /&gt;Have a cup of coffee or bottle of beer if you can and relax. &lt;br /&gt;&lt;br /&gt;Next go through your log again. Look for some suspicious warnings as well as innocent info messages located in the nearby. It may be everything, file system permission problem, ant issue or any other stuff totally unrelated to the org.eclipse.jdt imports and dependencies.&lt;br /&gt;&lt;br /&gt;Write a comment if my post helped to solve your case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-5564246590936312532?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/3cgP5dMwGS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/5564246590936312532/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/07/eclipse-mysteries.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/5564246590936312532?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/5564246590936312532?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/3cgP5dMwGS4/eclipse-mysteries.html" title="Eclipse mysteries" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/07/eclipse-mysteries.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEDRn88fCp7ImA9WhdTF0g.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-832900183764186506</id><published>2011-07-15T08:29:00.016+01:00</published><updated>2011-07-15T20:21:17.174+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-15T20:21:17.174+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="employee time tracking" /><title>Simple web based time reporting with MrTickTock 1.3</title><content type="html">MrTickTock 1.3 has been released and published at &lt;a href="http://mrticktock.com/"&gt;http://mrticktock.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-size:130%;" &gt;What's new?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this version we have added comprehensive &lt;span style="font-weight:bold;"&gt;time reports creation&lt;/span&gt; capability to our cool and small agile time tracker.&lt;br /&gt;&lt;br /&gt;The previous &lt;span style="font-style:italic;"&gt;Reports&lt;/span&gt; section was very simple and limited and many users complained about it. Therefore we have added several enhancements and now users can create a report in three easy steps:&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Select date range&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There are several predefined items like current week/month/year, previous week/month/year, last 7 days, etc. as well as custom date range selection.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Select projects&lt;/span&gt; which should be included in the report.&lt;br /&gt;&lt;br /&gt;All tasks from the selected projects are included in the report. In version 1.7 we will introduce &lt;span style="font-style:italic;"&gt;billable&lt;/span&gt; task concept and allow to create reports for all the tasks or only for the billable ones.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Select type of grouping&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It is a crucial setting which defines how the report will look like. There are several options available which we believe covers 99% of use cases. Users can group report entries by date, tasks, projects and customers. Combined options are also available.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;There is no &lt;span style="font-weight:bold;"&gt;users selection&lt;/span&gt; as we decided it would be a redundant step. Report automatically contains all users involved in the selected project in the selected date range.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Export to CSV&lt;/span&gt; is another useful part of &lt;span style="font-style:italic;"&gt;Reports&lt;/span&gt; section. It works fine with MS Office, Open Office and other office tools. It is really helpful for users who want to decorate report with their own comments and calculations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Other changes&lt;/span&gt; in MrTickTock 1.3:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First created task (for new users) is automatically set as &lt;span style="font-weight:bold;"&gt;Default Task&lt;/span&gt; and marked wit yellow star (default task is used by Windows Sidebar gadget and will be used by mobile applications for automatic time tracking).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Windows Sidebar gadget&lt;/span&gt; has now auto-refresh feature (set to 5 minutes) and clickable logo which opens online time sheet in the browser.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Several other small improvements and bug fixes.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-size:130%;" &gt;What's next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Version 1.4 will bring &lt;span style="font-weight:bold;"&gt;Remote Stand-up&lt;/span&gt; feature. There will be possibility to add public comment to every time report as well as a sick leave and a day off. We will introduce separate view to present all of that nicely as a daily time report for a project. It should be extremely useful for team collaboration.&lt;br /&gt;It will also work for managers who are not familiar with Scrum and Agile practices but care about team progress and project condition on a daily basis.&lt;br /&gt;&lt;br /&gt;That's all for today folks. I hope you will like MrTickTock as much as I do. It is getting more and more useful and awesome every release.&lt;br /&gt;&lt;br /&gt;You can check the road-map and backlog in our &lt;a href="https://loft.spartez.com/jira/browse/TT"&gt;JIRA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We publish most recent news via &lt;a href="http://www.twitter.com/mrticktock_com"&gt;Twitter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;MrTickTock team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-832900183764186506?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/pJOTQJG5ukQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/832900183764186506/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/07/simple-web-based-time-reporting-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/832900183764186506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/832900183764186506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/pJOTQJG5ukQ/simple-web-based-time-reporting-with.html" title="Simple web based time reporting with MrTickTock 1.3" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/07/simple-web-based-time-reporting-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkECR305cSp7ImA9WhZUE0U.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-8170192452839752155</id><published>2011-06-06T13:48:00.006+01:00</published><updated>2011-06-06T20:31:06.329+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-06T20:31:06.329+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="employee time tracking" /><title>Simple web based time tracking with MrTickTock 1.2</title><content type="html">MrTickTock 1.2 has been released. As usually it brings bunch of useful features and improvements. It is published at &lt;a href="http://mrticktock.com"&gt;http://mrticktock.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's new?&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Track time with 'Start Work' and 'Stop Work' buttons&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;The most expected feature is now live. If you constantly forget your work start time or you switch tasks quite often you will like this feature. Simply press 'Start Work' button at the beginning of your work and 'Stop Work' at the end. MrTickTock will automatically save your exact work time. You will be able to edit calculated time report if you need.&lt;br /&gt;&lt;br /&gt;You don't have to keep your browser open as the start work time is saved on the server side. You can freely restart your computer or open MrTickTok page in another browser and your start work time will be there.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Change task order with drag &amp; drop&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;It is really awesome feature. We haven't seen it in any other time reporting tool. You can simply drag your task, move it up or down on the list and drop in the position you like. It is a cool way to have your favourite tasks at the top of the list.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Windows desktop gadget&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Do you use Windows 7 or Vista? Do you like desktop gadgets? If yes then install our new gadget which allows to report time in a second right from your Windows desktop. &lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Simple UI improvements and bug fixes&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;We constantly apply small changes to our application to make it more user friendly, more obvious and easier to use. &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Version 1.3 will focus on reports. We plan to make them really usable by adding grouping and CSV export. It should be released in the middle of June.&lt;br /&gt;&lt;br /&gt;Remote stand-up feature will appear in the version 1.4 scheduled for the beginning of July. &lt;br /&gt;We practice SCRUM a lot (also in remote teams) and having an agile time tracker with remote stand-up support could be really beneficial. &lt;br /&gt;We will also create Confluence plugin to show all the stand-up entries on the wiki page.&lt;br /&gt;&lt;br /&gt;You can check the road-map and backlog in our &lt;a href="https://loft.spartez.com/jira/browse/TT"&gt;JIRA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We publish most recent news via &lt;a href="http://www.twitter.com/mrticktock_com"&gt;Twitter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;MrTickTock team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-8170192452839752155?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/T5VonkOwSWY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/8170192452839752155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/06/simple-web-based-time-tracking-with.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8170192452839752155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8170192452839752155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/T5VonkOwSWY/simple-web-based-time-tracking-with.html" title="Simple web based time tracking with MrTickTock 1.2" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/06/simple-web-based-time-tracking-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRnw4fCp7ImA9WhZQEUQ.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-6189955246764930184</id><published>2011-04-16T12:09:00.017+01:00</published><updated>2011-04-19T07:45:17.234+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T07:45:17.234+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="employee time tracking" /><title>Simple web based vacation tracking with MrTickTock 1.1</title><content type="html">MrTickTock 1.1 has been released. It brings bunch of useful features and improvements. Everything is available at &lt;a href="http://mrticktock.com"&gt;http://mrticktock.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's new?&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Vacation tracking&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;Our small time tracker is now also a vacation tracker. Users can easily set day and week as Off or Sick which is marked on a time sheet with a nice background color. Light yellow color together with small sun icon means that user is off and hopefully has a sunny vacation time. Light pink color together with small red cross icon means that user is sick.&lt;br /&gt;&lt;br /&gt;List of absent team mates for the current day and week is visible right below the time sheet table.&lt;br /&gt;&lt;br /&gt;There is no integration with Google calendar at the time but it is still on our road-map and should appear quite soon. We will also add support for vacation request-approve process which is often used in larger companies.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Gravatar integration&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;It allows users to see their avatar pictures across the application.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Reminder emails&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Users can get email message at the end of day if they forget to report time. We do not send reminders on weekends and days marked as Off. Reminder emails can be completely disabled.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Time zone support&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Current day on the time sheet page is highlighted according to the user's time zone and reminder emails are sent at 6pm of user's time.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Version 1.1 contains few other improvements and fixes. As usually the full list of changes can be found in our JIRA.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Version 1.2 will bring additional improvements on the time sheet page, mobile view and possibility to track time with start and stop buttons (asked by few customers). It should be released at the end of the May.&lt;br /&gt;&lt;br /&gt;Remote stand-up feature will appear in the version 1.3 scheduled for the middle of June.&lt;br /&gt;&lt;br /&gt;You can check the road-map and backlog in our &lt;a href="https://loft.spartez.com/jira/browse/TT"&gt;JIRA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We publish most recent news via &lt;a href="http://www.twitter.com/mrticktock_com"&gt;Twitter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;MrTickTock team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-6189955246764930184?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/jZ-W6pwRzmM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/6189955246764930184/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/04/simple-web-based-vacation-tracking-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/6189955246764930184?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/6189955246764930184?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/jZ-W6pwRzmM/simple-web-based-vacation-tracking-with.html" title="Simple web based vacation tracking with MrTickTock 1.1" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/04/simple-web-based-vacation-tracking-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNSXk8fCp7ImA9WhZRFUk.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-5099441832348791302</id><published>2011-04-11T17:30:00.003+01:00</published><updated>2011-04-11T17:43:18.774+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T17:43:18.774+01:00</app:edited><title>My take on 33degree - a new software conference which may soon rule the world</title><content type="html">&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;   &lt;p style="margin-bottom: 0in"&gt;Last week I attended a new software development conference – &lt;a href="http://33degree.org"&gt;33degree&lt;/a&gt; which took place in wonderful Krakow – home city of the organizer – &lt;a href="http://www.dworld.pl/"&gt;Grzegorz Duda&lt;/a&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Executive summary:&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Awesome conference. The best in Poland I've ever been to.&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Here is why:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Speakers&lt;/p&gt;  &lt;p style="margin-bottom: 0in"&gt;Great names, great presentations (I am  not talking here about the slides), energetic, well prepared, but  spontaneous. Neal Ford, Ted Neward, awesome Venkat Subramaniam,  Simon Ritter, Michael Nygard, Nathanial Schutta and many more –  hall of fame.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Keynotes&lt;/p&gt;  &lt;p style="margin-bottom: 0in"&gt;Most of the talks were great. Great  thing about keynotes was that half of them were at the end of the  conference – on Friday afternoon. Contrary to Devoxx, where Friday  is usually a wasted day and everyone thinks how to reach home,  33degree.org was culminating to the very end. Everyone who left the  conference before 6:30 PM is a loser.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;The level of abstraction&lt;/p&gt;  &lt;p style="margin-bottom: 0in"&gt;Probably one of the biggest positive  astonishments for me. I was afraid that the conference will be yet  another place where most of sessions will treat about some APIs,  libraries, fancy tools – things which come and go and in  a year  or two few will remember about it. However Grzesiek did an awesome  thing – a lot of sessions were more universal. They were about  fundamental things like the brain, common sense, self-development,  hygiene, values, methodologies – things which are useful for years  (if not entire life).&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Venue&lt;/p&gt;  &lt;p style="margin-bottom: 0in"&gt;Best Western Premium Krakow hotel,  where the conference took place was the exact place needed.  Configurable rooms of the appropriate size, a lot of comfortable  space (sofas) to rest and talk, good hallway were the sponsor's  booths and the bookstore were located. There is one problem with  this place – I suspect that next year 33degree, due to its  awesomeness, will attract far more attendees (than about 400 this  year) and the venue may be too small...&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Bookstore&lt;/p&gt;  &lt;p style="margin-bottom: 0in"&gt;A lot of great books with 40%  discount. Damn, they were cheaper than on Amazon :)&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal"&gt;The sessions which I attended:&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Deception and Estimation by Linda Rising&lt;/b&gt; – quite good talk, but a little bit too slow. Several good observations about human nature and why people underestimate tasks.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Comparing JVM Web Frameworks by Matt Raible&lt;/b&gt; – an interesting comparison about currently available web frameworks. Not all, but the most popular ones. The author gathered a lot of statistics about the activity, job trends and usage of each framework. Spring MVC, Rails and GWT lead. Conclusions: there is no best framework – it depends on what you need. However don't use dinosaurs like Struts 1.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Hacking Your Brain for Fun and Profit by Nathaniel Schutta&lt;/b&gt; – definitely one of the best talks at the conference. A lof ot universal wisdom about our brain, our nature, our biology.&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;A CEOs hearing this talk would probably introduce mandatory naps :). Main points: every person have different biological rhythm. Try to accept it. Some are most productive in the day, some in the morning, some in the night. Having even a short afternoon nap (25 minutes) can improve your effectiveness by 1/3. People who exercise have significantly better performance and their brains work better.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Ideas: how about introducing walking meets or even a walking working place (think about a threadmill under your table fixed and the standing position).&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Advice: Avoid meetings at around 3 PM. That's the worst time for most of the people.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Nathaniel wrapped up his talk with great points about distractions, information overlead and the need of focusing. Your attention (this your time) is your most precious resource. Don't waste it. Be selective. Don't try to know everything and be everything (selective ignorance). Be shallow horizontally, but select a subject which you are passionate about it and be deep about it. All interruptions kill you. Respect this fact when you interrupt your colleagues.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Get 'em before they get you by Hamlet D'Arcy&lt;/b&gt;. Good talk by a passionate guy. The problem was that I probably knew too well IntelliJ (IntelliJ rocks!) and I didn't learn there anything new but an awesome @Language annotation supported by IntelliJ which allows you to write you code snippets (auto completion, syntax highlighting work) in other languages in your Java file.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in"&gt;The official schedule of the first day was wrapped up with beer served by ZeroTurnaround. Big thanks folks!&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;State of Scala&lt;/b&gt; by &lt;b&gt;Venkat Subramaniam –&lt;/b&gt;&lt;span style="font-weight: normal"&gt; live coding demos were really convincing. Scala is great, but I am afraid it may suffer from C++ syndrome – the language too powerful complicated for an average mortal to master. Stream as lazy collections and views look awesome. Venkat made a great job showing just the peak of the iceberg of the whole power of Scala.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Fractal TDD: Using tests to drive system design by Steve Freeman&lt;/b&gt;&lt;span style="font-weight: normal"&gt; was the only session which disappointed me at this conference. Slow, boring with unclear goal. I left it after 30 minutes, so perhaps I missed something important and I my evaluation is to harsh.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;I moved to &lt;/span&gt;&lt;b&gt;Dan Allen's talk about Arquillian&lt;/b&gt;&lt;span style="font-weight: normal"&gt; and it was the right decision. That tool/library really intrigued me. Putting your tests (writing like unit tests but with the power of being integration or system-level tests) easily inside any container – that looks great. I am going to give it a try. Also JBoss ShinkWrap looks like an awesome tool to make your tests really isolated.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;HTML 5 Fact and Fiction by Nathaniel Schutta&lt;/b&gt;&lt;span style="font-weight: normal"&gt; was another flawless session by this speaker. Entertaining, interesting, energetic. HTML 5 is coming, it has already come. Mobile devices need it and embraced it. When desktop web browsers will fully pick it up, the Internet world we know will change. And Adobe should be afraid of this change as there is no place for it's Flash there...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Advice: use modernizr.com and feature detection (instead of user agent sniffing) to selectively support HTML5 features until they are ubiquitous.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Programming Clojure&lt;/b&gt;&lt;span style="font-weight: normal"&gt; by &lt;/span&gt;&lt;b&gt;Venkat Subramaniam –&lt;/b&gt;&lt;span style="font-weight: normal"&gt; more live coding demos – this time in Clojure. I felt good again immersed into Lisp world, which I haven't used since my university time. A great introduction to this language. Again Venkat was awesome – the best part of this presentation.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Agile UI by Nathaniel Shutta&lt;/b&gt;&lt;span style="font-weight: normal"&gt; – the 3&lt;/span&gt;&lt;sup&gt;&lt;span style="font-weight: normal"&gt;rd&lt;/span&gt;&lt;/sup&gt;&lt;span style="font-weight: normal"&gt; great performance by Nathaniel. Not sure if he or Venkat was top speaker at the conference. But never mind, both were truly awesome. World class. Devoxx or JavaOne do not have better speakers. Main points taken: focus groups suck wrt designing UI/UX. Don't trust what customers say they do. Observe what they really do with the software. UI is the system for the end user. The back-end/middleware does not count. Customers deserve better Uis.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;3&lt;sup&gt;rd&lt;/sup&gt; day started from &lt;b&gt;Karl Rehmer's &lt;/b&gt;talk about &lt;b&gt;How Debuggers Work&lt;/b&gt;&lt;span style="font-weight: normal"&gt;. I was late a little bit, so I cannot honestly rate the entire talk. However I left a little bit unsatiated. The part about Java debugger was to shallow. I hoped to learn more about it – especial some practical hints, whereas the author admitted that he did not have the practical experience with Java.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Simon Ritter &lt;/b&gt;&lt;span style="font-weight: normal"&gt;again did not disappoint. He made an excellent talk even from such theoretically boring subject like &lt;/span&gt;&lt;b&gt;The Future of the Java Platform&lt;/b&gt;&lt;span style="font-weight: normal"&gt; – about incoming and ever-promised Java 7 and 8. They are finally coming. Java 7 this year. Java 8  at the end of 2011. Having eaten lunch with Simon I even know the exact dates :) It's good that finally Oracle improves the language. Most of the changes around project Coin are good. However I feel disappointed how Closeable will work when you decide to add your own finally block. We will see in practice though how they are used. With Java 6 being EOLed early next year, I hope that Java 7 features will be picked up quickly.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Simon convincingly explained the general strategy about Java as a language and why it will never have some features which are being added to other sexy languages like Groovy or Scala. Java is to be a simple, comprehensible and clear language for masses. Where reading is more important than writing, thus being succinct is not an important asset (but often a drawback – like in Perl)&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;The last session before lunch and ending keynotes was &lt;/span&gt;&lt;b&gt;Matthew McCullough&lt;/b&gt;&lt;span style="font-weight: normal"&gt; introduction to &lt;/span&gt;&lt;b&gt;Hadoop&lt;/b&gt;&lt;span style="font-weight: normal"&gt;. Good, informative session. Matthew honestly explained what Hadoop is good for and what it's not. Technologies like Hadoop is definitely something and experienced software developer should be aware of and be ready to apply it when the need arises.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;The conference was wrapped up with 3 awesome keynotes keeping you breathless till the very end.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Firstly, &lt;/span&gt;&lt;b&gt;Neal Ford in his Abstraction Distractions &lt;/b&gt;&lt;span style="font-weight: normal"&gt;analyzed why all abstractions leak and what we should do with it (i.e. accept it and move elsewhere if it hurts us too badly). He explained how and why composable and onionskin APIs are a great way to handle abstractions.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Abstractions, when internalized, are very difficult to fight with (e.g. think about floppy icon used for saving file/document – when most of the people have not used floppies for years now).&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Neal explained also why so many people hate Maven whereas some of people still love it. The abstraction introduced by Maven is great for a lot of people (especially initially), until they needs get very sophisticated and the abstraction starts leaking tremendously. Then you start fiercely to hate it. And then you should move to another solution which provides a good abstraction for your current needs.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;The same goes for Hibernate and a lot of other technologies trying to abstract away some concepts.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Very good and deep talk.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;b&gt;Michael Nygard &lt;/b&gt;&lt;span style="font-weight: normal"&gt;with a more scientific approach talked about &lt;/span&gt;&lt;b&gt;architecting for scale&lt;/b&gt;&lt;span style="font-weight: normal"&gt;. Amdahl's Law extended by including the time/cost needed to reconcile the state of the parallel tasks may actually lead to decreasing the overall performance when adding more computing nodes. Michael explained what kind of approach typical medium and high-scale systems (millions+ transactions per second) need to use to cope with the scale. He also explained the tradeoff between Consistency, Availability and Partition-Tolerance in high-scale systems, where usually the consistency is something which is the most reasonable to sacrifice. Summing up: there is no best architecture. Everything depends on the context.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Probably the most entertaining and energetic talk was delivered by &lt;b&gt;Venkat Subramaniam &lt;/b&gt;in his session about &lt;b&gt;Polyglot Programmer&lt;/b&gt;. For Venkat being a polyglot is mostly about extending the perspective and the toolbox of a developer while working even on another language (boring like Java). You should learn not another similar language to the one you already know (e.g. C# when you know Java), but hurt yourself with mastering completely different language (with a different paradigm) like Closure or Scala. Only then you really extend your capabilities and the perception. Venkat made a great point about why everyone thinks that unit testing is vital, but so few daily practice it (or TDD). It's like exercising. We suck at things which require discipline and which do not have immediate consequences.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;Venkat, you rock!&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;span style="font-weight: normal"&gt;The conference was closed by &lt;/span&gt;&lt;b&gt;Ted's Neward&lt;/b&gt; show about&lt;b&gt; Rethinking Enterprise&lt;/b&gt;&lt;span style="font-weight: normal"&gt;. There a lot of fun there and mockery wrt meritocracy. Main point: do not follow best practices. Best practices are switching off your brain. A best practice is meaningless without the context and every project is different and has a different context. You have to think. Otherwise you suck! It's stupid to quarrel that one technology rocks and the other sucks. Everything has its place and depends on the situation. We are paid to think and to apply our judgment after understanding the problem and not by merely following good practices (which should become a “vomit word”.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Personally I gave &lt;a href="http://prezi.com/yli8bxzjwobs/so-you-think-agile-software-development-and-building-houses-have-nothing-in-common/"&gt;a talk&lt;/a&gt; about using agile values and practices in a non-software project – like a house building. I also hosted a BoF about agile contracts. Both sessions attracted around 40 – 50 people. Drop me a comment if you like it and how I could improve it.&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;A few things which could be improved (there is always some space for improvement):&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Adding sessions shorter than 1 hour –  some sessions could easily fit into 45 minutes or less. I find 45 minutes  more challenging for the speaker and yet more existing and dense for  most of the sessions. Perhaps more variety in the schedule (also including 5 - 15 min lightning talks) could farther improve the essence of the conference.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Having more non-Polish attendees  would make Polish less ubiquitous during the break. I heard from  non-Polish attendees that it was somewhat intimidating. And this  conference definitely deserves to be seen as an international event  – great and affordable for people from Germany, Austria, Czech,  Slovakia, Russia, Ukraine and many more. Krakow has awesome net of  direct connections (operated by low cost airlines) with a lot of  cities (including London) so it's a great destination for most  people from Europe. I hope that we will all market this conference next year outside Polish borders too.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Award/prize drawing was quite  messy. Usually absent people are excluded if they are drafted. Here  they were not. It definitely would help to maintain the focus till  the very end of the conference. &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;The name and logo: 33degree.org  has a name not related to Java or software development. Actually I  turned out that it's a highest level of mastery for masons.  Personally I'd rather leave masons where they are. I really think  that it's easier to convince a boss to send you to a conference  whose name relates to software concepts. The logo also sucked a little bit – offending (in terms of religion) to some people&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Some logistics quirks – like no  timetable at the door to each conference room, not printed rooms for  last day in the brochure&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in"&gt;Unconference hours competing with  keynotes. Keynotes were too good. I love unconferences but it was  really difficult to attend them when keynotes were taking place.&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p style="margin-bottom: 0in"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;To sum up:&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;33degree is a place you &lt;b&gt;have to &lt;/b&gt;be next year. I have already heard that awesome speakers are coming next year too. Will we have in Poland a conference which may successfully compete with Devoxx. I hope!&lt;/p&gt; &lt;p style="margin-bottom: 0in"&gt;Standing ovation for Grzegorz Duda, all the awesome speakers and all the crowd which made this conference happen!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-5099441832348791302?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/-zlka6WY3ak" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/5099441832348791302/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/04/my-take-on-33degree-new-software.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/5099441832348791302?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/5099441832348791302?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/-zlka6WY3ak/my-take-on-33degree-new-software.html" title="My take on 33degree - a new software conference which may soon rule the world" /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/04/my-take-on-33degree-new-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYCQ3o4eip7ImA9WhZSGEQ.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-4262235029973850596</id><published>2011-03-12T08:55:00.016+01:00</published><updated>2011-04-04T07:22:42.432+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T07:22:42.432+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="employee time tracking" /><title>Simple web based time tracking with MrTickTock 1.0</title><content type="html">MrTickTock 1.0 has been released. After 2 months of coding we moved from the beta to final version. Actually it is a new version which contains much more improvements and new features than fixes. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's new?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We improved UX significantly, mostly on the time sheet page where users spend most of the time: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;It has a new layout with highlighted current day.&lt;br /&gt;&lt;li&gt;We use AJAX there to make interaction with the page very natural. Time entries are saved automatically so there is no need for Save button and no chance to loose unsaved time entries. &lt;br /&gt;&lt;li&gt;Changed and recalculated values on the page are nicely highlighted with yellow and slowly faded to their original color so you will not miss them.&lt;br /&gt;&lt;li&gt;Shortcut keys allow to go from day to day and from task to task in an easy way. You can also jump to the current day and move week forward and backward quickly. &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Task Manager has been also significantly improved. It is much easier now to manage customers, projects and tasks.&lt;br /&gt;&lt;br /&gt;We have a totally new home page for MrTickTock. It contains our latest tweets and brief overview of the project. More detailed description is available on the features page. You can find there not only list of the main features but also information on the coming stuff. &lt;br /&gt;&lt;br /&gt;Version 1.0 contains several other improvements which you may like. In order to get the full list of changes you can visit our JIRA installation or simply take a look how new MrTickTock looks in real at &lt;a href="http://mrticktock.com"&gt;http://mrticktock.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What's next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The next release will bring vacation tracking (possibly integrated with Google Calendar), gravatar integration, reminder emails and few other improvements. The release of MrTickTock 1.1 is scheduled for the middle of April.&lt;br /&gt;&lt;br /&gt;Version 1.2 will bring additional improvements on the time sheet page, mobile view and possibility to track time with start and stop buttons (asked by few customers). &lt;br /&gt;Another important feature will be a remote stand-up facility. It will allow users to add a public note to every time report and share that information as a SCRUM stand-up to their peers and customers. We want to make MrTickTock much more usable than just simple time tracker. We would love to support agile practices and help people conduct their business. &lt;br /&gt;Version 1.2 should be available at the beginning of June.&lt;br /&gt;&lt;br /&gt;Version 1.3 will focus on Reports.&lt;br /&gt;&lt;br /&gt;You can check the roadmap and backlog at our &lt;a href="https://loft.spartez.com/jira/browse/TT"&gt;JIRA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We publish most recent news via &lt;a href="http://www.twitter.com/mrticktock_com"&gt;Twitter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;MrTickTock team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-4262235029973850596?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/uifp_M7s5uA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/4262235029973850596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/03/simple-web-based-time-tracking-with.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4262235029973850596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4262235029973850596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/uifp_M7s5uA/simple-web-based-time-tracking-with.html" title="Simple web based time tracking with MrTickTock 1.0" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/03/simple-web-based-time-tracking-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYARnkyfCp7ImA9Wx9XE0k.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-1123680802435818277</id><published>2011-01-06T19:53:00.010+01:00</published><updated>2011-01-06T19:55:47.794+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T19:55:47.794+01:00</app:edited><title>Blog post about MetingRoom at Atlassian Blog Site</title><content type="html">&lt;div style="text-align: left;"&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TSYPQ3b6Y0I/AAAAAAAABGo/m2GNu4hz8ik/s1600/logo-thumb-600x222-5787.png" /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
Atlassian has posted a guest&amp;nbsp;&lt;a href="http://blogs.atlassian.com/confluence/2011/01/spartez-meetingroom-virtual-meeting-space-for-your-team.html"&gt;blog written by us&lt;/a&gt; about MeetingRoom and how it integrates with their JIRA and Confluence. Go read it&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-1123680802435818277?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/0-y5ouRkTPI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/1123680802435818277/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/01/blog-post-about-metingroom-at-atlassian.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/1123680802435818277?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/1123680802435818277?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/0-y5ouRkTPI/blog-post-about-metingroom-at-atlassian.html" title="Blog post about MetingRoom at Atlassian Blog Site" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TSYPQ3b6Y0I/AAAAAAAABGo/m2GNu4hz8ik/s72-c/logo-thumb-600x222-5787.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/01/blog-post-about-metingroom-at-atlassian.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04CQn0ycCp7ImA9Wx9QGEQ.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-7980429481117307269</id><published>2011-01-01T15:26:00.000+01:00</published><updated>2011-01-01T15:26:03.398+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-01T15:26:03.398+01:00</app:edited><title>Internationalizing Atlassian Plugin - Fun With Javascript And REST</title><content type="html">&lt;h2&gt;The Problem&lt;/h2&gt;
Internationalization has always been a bit of a challenge. Internationalizing plugins for Atlassian products is
no exception, even though Atlassian developers devoted quite a lot of thought and effort to making your job easy.
If your plugin only exposes "static" user interface through velocity templates, you are mostly in luck.
The situation is worse if you want to do the modern thing and go wild with javascript and ajax to make your plugin look
and feel modern and sexy.

&lt;p&gt;
Javascript support for i18n in Atlassian plugins is still a bit of a hack.
You typically have to perform the following steps to internationalize your texts:
&lt;ol&gt;
    &lt;li&gt;define all your texts in property files,
        then translate these texts into whatever language you want your plugin be available in&lt;/li&gt;
    &lt;li&gt;put all these strings as hidden &lt;tt&gt;&amp;ltinput type="hidden"&amp;gt;&lt;/tt&gt; in a &lt;tt&gt;&amp;ltfieldset&amp;gt;&lt;/tt&gt; in your velocity template&lt;/li&gt;
    &lt;li&gt;refer to these hidden input fields in your javascript code using &lt;tt&gt;AJS.params()&lt;/tt&gt;&lt;/li&gt;
&lt;/ol&gt;

There are quite a few problems with this:
&lt;ul&gt;
    &lt;li&gt;it is a pretty ugly hack, requiring double lookups - first from a text to its property key,
        then (in another place in code) from the property key to hidden input field name&lt;/li&gt;
    &lt;li&gt;the hidden input fields unnecessarily clutter your velocity template and the resulting HTML file&lt;/li&gt;
    &lt;li&gt;sometimes you have no velocity template to put strings in, because you are not invoking javascript from
        any static file that you control. Instead, you attach your javascript as a resource through a context
        (&lt;tt&gt;web-resource&lt;/tt&gt;), or using a filter (&lt;tt&gt;servlet-filter&lt;/tt&gt;). In this case, there is no way
        to create hidden input fields you could refer to&lt;/li&gt;
&lt;/ul&gt;

Fortunately, there is a better way. Not only it lets you get rid of the ugly "hidden input" hack, but also allows
referring to texts using their property file key - just like in Java code.

&lt;h2&gt;The Solution&lt;/h2&gt;

My solution to the problem consists of the following steps:
&lt;ol&gt;
    &lt;li&gt;define all your texts in property files - just as before&lt;/li&gt;
    &lt;li&gt;expose your internationalized property file from a REST resource&lt;/li&gt;
    &lt;li&gt;in your javascript, retrieve the property file into a hashtable using REST call&lt;/li&gt;
    &lt;li&gt;refer to the texts in javascript by their property file key&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;Property file&lt;/h4&gt;

Then add a &lt;tt&gt;js.properties&lt;/tt&gt; file somewhile in your plugin's resources and add your strings to it, as usual:

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
first.key=First text
second.key=Second text
&lt;/pre&gt;

You will use localized version of this file to internationalize your plugin -
e.g. &lt;tt&gt;js_pl_PL.properties&lt;/tt&gt; file will be used for for Polish locale.

&lt;h4&gt;REST Part&lt;/h4&gt;

First create a REST component in your &lt;tt&gt;atlassian-plugin.xml&lt;/tt&gt; file:

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
&amp;lt;rest key="rest-endpoint"
      name="REST Component"
      path="/path-to-rest"
      version="1.0"&amp;gt;
     &amp;lt;description&gt;Provides the REST resource for my plugin.&amp;lt;/description&amp;gt;
&amp;lt;/rest&amp;gt;
&lt;/pre&gt;

Now it is time to expose the contents of the properties file from your REST component.
&lt;p&gt;
You need REST resource class:

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
@Path("endpoint")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class MyRestResource {
    private static final ResourceBundle bundle
        = ResourceBundle.getBundle("path.to.properties.file.js");

    @GET
    @Path("i18n")
    @Consumes({MediaType.WILDCARD})
    @Produces({MediaType.APPLICATION_JSON})
    public Response getI18n() {
        List&amp;lt;I18NStringRepresentation&amp;gt; result =
           new ArrayList&amp;lt;I18NStringRepresentation&amp;gt;();
        for (String key : bundle.keySet()) {
            result.add(new I18NStringRepresentation(key, bundle.getString(key)));
        }
        return Response.ok(new I18NStringsRepresentation(result)).build();
    }
}
&lt;/pre&gt;

and two classes to wrap internationalized strings:

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
@XmlRootElement
public class I18NStringsRepresentation {
    @XmlElement private List&amp;lt;I18NStringRepresentation&amp;gt; strings
       = new ArrayList&amp;lt;I18NStringRepresentation&amp;gt;();

    public I18NStringsRepresentation() {}
    public I18NStringsRepresentation(List&amp;lt;I18NStringRepresentation&amp;gt; strings) {
        this.strings = strings;
    }
}

@XmlRootElement
public class I18NStringRepresentation {
    @XmlElement private String key;
    @XmlElement private String value;

    public I18NStringRepresentation() {}
    public I18NStringRepresentation(String key, String value) {
        this.key = key;
        this.value = value;
    }
}
&lt;/pre&gt;

&lt;h4&gt;And now the javascript part&lt;/h4&gt;

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
(function() {
    var i18n_strings = [];

    AJS.$(document).ready(function() {
        var endpoint =
            contextPath
            + '/rest/rest-endpoint/1.0/endpoint/i18n'
            + '?dummy=' + new Date().getTime(); // make IE not cache responses
        AJS.$.ajax({
            type: "GET",
            url: endpoint,
            success: function(data, status, xhr) {
                for (var i = 0; i &lt; data.strings.length; ++i) {
                    i18n_strings[data.strings[i].key] = data.strings[i].value;
                }
                continueWithYourJavascriptStartupTasks();
            },
        });
    });
}());
&lt;/pre&gt;

After this bit of initialization, you are able to refer to internationalized strings from your javascript
by their propert file key, just as you do in your Java code or in your velocity template:

&lt;pre style="padding:1em;padding-left:2em;font-size:small;border:dotted 1px black"&gt;
    alert(i18n_strings['first.key']); 
    AJS.$('#somediv').html(i18n_strings['second.key']);
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-7980429481117307269?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/EHjGxtiEwOc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/7980429481117307269/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2011/01/internationalizing-atlassian-plugin-fun.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/7980429481117307269?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/7980429481117307269?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/EHjGxtiEwOc/internationalizing-atlassian-plugin-fun.html" title="Internationalizing Atlassian Plugin - Fun With Javascript And REST" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2011/01/internationalizing-atlassian-plugin-fun.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMASXo7eip7ImA9WhZRFkw.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-1397985560853838970</id><published>2010-12-27T09:04:00.011+01:00</published><updated>2011-04-12T14:04:08.402+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-12T14:04:08.402+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="employee time tracking" /><title>Simple web based time and vacation tracking with MrTickTock</title><content type="html">&lt;span style="font-weight:bold;"&gt;Prologue&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;We finally did it. After three months of coding we are proud to announce that MrTickTock 1.0-Beta has been released (one week ago) and is ready to track your time at &lt;a href="http://mrticktock.com"&gt;mrticktock.com&lt;/a&gt;. Although it is in beta condition we consider it a stable and production ready system and we use it to track our internal time. Therefore you may ask why we released it as a beta version. There are two reasons:&lt;br /&gt;* we still want to improve set of stuff and make MrTickTock even more user friendly and awesome,&lt;br /&gt;* we would love people use it, test it and share their ideas on what we should change before 1.0-Final release.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why MrTickTock?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We observed lack of simple, decent and affordable employee time tracking solutions. Most of them require user to download piece of software and install it locally which is not the way small and agile company wants to go (not to mention startups). The existing online solutions are either expensive or have really poor UX and all of them lack of the key feature: vacation tracking :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What is MrTickTock?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MrTickTock is designed to be simple, fast and secure online solution to track employee time in an efficient way. It is completely free. You don't have to download, install or configure anything. Just &lt;a href="https://mrticktock.com/app/sign_up"&gt;sing up&lt;/a&gt; in less then 20 seconds and start tracking your time.&lt;br /&gt;We may introduce affordable paid plans for bigger groups and companies some day in the future but don't worry.  It will be still free for small companies, individuals and freelancers. Paid accounts will also stay free for already signed users for at least one year. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Evolution?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We know that there are number of people and companies still using Excel as a substitute for dedicated time tracking software. We even know big companies (thousands of employees) using Excel to track vacation time. Isn't it ridiculous? This is why we work so hard to improve MrTickTock UX and add extra features to make their life easier. Here is what we want to release soon:&lt;br /&gt;* save/report time with ajax (no more save button and lost entries),&lt;br /&gt;* new look &amp; feel for customer/project/task structure,&lt;br /&gt;* mobile view, &lt;br /&gt;* vacation tracking, &lt;br /&gt;* billing/invoice,&lt;br /&gt;* IM time tracking,&lt;br /&gt;* improved reports,&lt;br /&gt;* remote SCRUM stand-ups.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Epilogue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you read this blog post it probably means that you are looking for a decent web based time tracker. Therefore you should give MrTickTock a try at &lt;a href="http://mrticktock.com"&gt;mrticktock.com&lt;/a&gt;. The next release in January will bring new prime quality - you will love it. &lt;br /&gt;&lt;br /&gt;Stay in touch with MrTickTock and follow us on Twitter: &lt;a href="http://www.twitter.com/mrticktock_com"&gt;&lt;img src="http://twitter-badges.s3.amazonaws.com/t_small-c.png" alt="Follow mrticktock_com on Twitter" align ="top" /&gt;&lt;/a&gt;&lt;br /&gt;We will post there news of improvements, new features and releases.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;MrTickTock team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-1397985560853838970?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/KHwMAGeJtQU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/1397985560853838970/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/12/simple-web-based-time-tracking-with.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/1397985560853838970?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/1397985560853838970?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/KHwMAGeJtQU/simple-web-based-time-tracking-with.html" title="Simple web based time and vacation tracking with MrTickTock" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/12/simple-web-based-time-tracking-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECRn04fCp7ImA9Wx9TFE8.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-3151439821433169765</id><published>2010-11-22T12:29:00.002+01:00</published><updated>2010-11-22T13:41:07.334+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-22T13:41:07.334+01:00</app:edited><title>Devoxx 2010 Impressions</title><content type="html">Devoxx 2010 took place in Metropolis centre in Antwerp, as usual.&lt;br /&gt;&lt;br /&gt;We stayed in the same hotel as 2 years ago, took the same route there, helped Atlassians distribute beer during &lt;a href="http://javaposse.com"&gt;Java Posse&lt;/a&gt; live session (again), listened to talks about what is coming to the Java 7 that is supposed to be "real soon now (tm)" (&lt;span style="font-weight:bold;"&gt;again&lt;/span&gt;) - it really felt like it was a few days since I was at Devoxx last time, not 2 years :-)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Buzz&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;It might be just my impression, but the focus seems to have changed from Agile and Testing (2 years ago) to Cloud and friends.&lt;br /&gt;&lt;br /&gt;I haven't seen any talk about how important it is to be agile, test first, pair program etc. No new and exciting testing frameworks, methodologies, ideas to share.&lt;br /&gt;Either it's just not trendy any more or it has become so mainstream that nobody bothers to talk about it.&lt;br /&gt;Personally I think it's the latter, especially having IBM give away books about '&lt;a href="http://www-01.ibm.com/software/rational/agile/"&gt;Rational Agile&lt;/a&gt;' :-)&lt;br /&gt;&lt;br /&gt;This year every other talk was either about writing software for the cloud, different flavours of the cloud itself (IaaS, PaaS, SaaS) or NoSQL databases that you would like to use on your cloud.&lt;br /&gt;&lt;br /&gt;If you judged by the topics of the talks, you might come to conclusion that nobody uses desktop computers any more - neither for native apps nor for the Web.&lt;br /&gt;It seems that the only choice you need to make is whether you write your app as a native iOS/Android/RIM/Symbian/Whatever app or you decide to go for HTML5 or similar solution.&lt;br /&gt;The vote during one of the talks indicated that if you were one of the persons present at the talk, you either have a smartphone and raised your hand or were too busy checking your email on your phone and didn't notice the question.&lt;br /&gt;The developer community at the conference might not be the best statistical population, but the trend indicates that very soon the smartphones will be the primary computation and communication platform - probably more important than the desktops or dumb phones.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Java 7/8&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;I wonder if it was the fact that Sun was bought by Oracle the cause of so huge delay in release of new Java or was it the other way round - Sun's inability to produce any progress caused Oracle to buy them out.&lt;br /&gt;&lt;br /&gt;The next generation of Java was divided to 2 stages:&lt;br /&gt;- Java 7, due early 2011&lt;br /&gt;- Java 8, due late 2013 (if I remember the dates correctly)&lt;br /&gt;&lt;br /&gt;Java 7 would contain all stuff that is feature complete already, all the other stuff goes to Java 8.&lt;br /&gt;&lt;br /&gt;The most important announcement (for me) was Lambda methods and Single Abstract Method pattern to solve closures in Java.&lt;br /&gt;It's simple and elegant enough to reduce code verbosity, still clever enough not to break backward compatibility at all. You can actually start writing your closure-enabled APIs right away (if you haven't already at the time of Java 1.0 :-) )&lt;br /&gt;&lt;br /&gt;Google for "openjdk project lambda" or see this &lt;a href="http://www.zenbi.nl/en/blog_a_talk_with_brian_goetz_on_the_future_of_java.php"&gt;blogpost&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The bad news is that if it finally goes to Java 8 in 2013, and the adoption rate will be similar to what we see now (I still need to write code for JDK1.5, and I'm happily not supporting JDK1.4 for 2 years...), it won't really matter. I will either be using some other language (Scala maybe?) or be already retired ;-)&lt;br /&gt;&lt;br /&gt;All I hope is that when I go to Devoxx in 2 years, I won't be attending the "What is coming in the Java 7 soon" sessions again.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Parleys&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;I wasn't able to attend all sessions that I wanted to see, so &lt;a href="http://parleys.com"&gt;parleys.com&lt;/a&gt; is the place for me to go.&lt;br /&gt;If you don't know the site yet, you definitely need to see it. It contains all the Devoxx talks (and a few other) for free if you don't mind waiting some time to see them, or right after the conference for a relatively small subscription fee.&lt;br /&gt;It seems to be overloaded now, maybe everybody who haven't managed to fit in the room for Josh Bloch "Performance Anxiety" talk are hammering the page to see it :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-3151439821433169765?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/r4aS1eGIlPw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/3151439821433169765/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/11/devoxx-2010-impressions.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/3151439821433169765?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/3151439821433169765?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/r4aS1eGIlPw/devoxx-2010-impressions.html" title="Devoxx 2010 Impressions" /><author><name>Sławomir Ginter</name><uri>http://www.blogger.com/profile/14860455895099811406</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_PipM-FTshUY/TES7kyDx2kI/AAAAAAAABYA/OOmu1g8rNdk/S220/sginter+small.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/11/devoxx-2010-impressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08ASX47cSp7ImA9Wx5bF0Q.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-7610190782124088196</id><published>2010-11-03T13:20:00.002+01:00</published><updated>2010-11-03T16:57:28.009+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-03T16:57:28.009+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><title>Daily Scrum Standups for Distributed Teams with Spartez MeetingRoom</title><content type="html">&lt;a href="http://3.bp.blogspot.com/_QaPmc_Nvx5A/TNBToqt-D4I/AAAAAAAABFM/dHD_64SlGGA/s1600/logo-400-faded.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_QaPmc_Nvx5A/TNBToqt-D4I/AAAAAAAABFM/dHD_64SlGGA/s200/logo-400-faded.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;W&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;ith the raise of Agile methodologiles, pretty much every development team &amp;nbsp;these days practices daily standup meetings.&amp;nbsp;&lt;/span&gt;And not just development teams do that - for example I have seen standups being used successfully by marketing teams.&amp;nbsp;Which is a good thing, as standup meeting is one of the most powerful tools for improving team efficiency, sense of common goals, sharing knowledge and maintaining team spirit.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Just as everything in agile world, daily standups are short, timeboxed, to the point and lightweight. Every team member basically answers three simple questions:&lt;/div&gt;&lt;div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;what have I done since the last standup?&lt;/li&gt;
&lt;li&gt;what am I going to do in the immediate future?&lt;/li&gt;
&lt;li&gt;what obstacles are in my way?&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Plain and simple. Three questions, one minute per person, awesome way to kick-off the team every morning.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;There is a problem though. Even though agile methodologies suggest that teams should not be distributed, a lot of teams are. Team members are scattered around the globe, in multiple and distant time zones. This makes setting up a daily face-to-face meeting quite a complicated task. Teleconferencing systems (or even simple solutions like Skype) help a bit, but they are not perfect. For one, the time zone problem is difficult to overcome - the meeting that is a start-of-a-day event for some is a let's-have-it-done-and-go-home thing for others. Some team members are tired, others are fresh. Expectations vary, team members do not concentrate on the same thing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here is where our &lt;a href="http://mr.spartez.com/"&gt;MeetingRoom&lt;/a&gt; application can help. If you set up a chatroom for the team in MeetingRoom, team members get a &lt;a href="http://loft.spartez.com/confluence/display/VE/Stand-up"&gt;convenient way to answer the three standup questions&lt;/a&gt;, using a simple &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;/standup&lt;/b&gt;&lt;/span&gt; command. When a team member is done with a task, they can go to MeetingRoom's IM interface and type something along the lines of:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;/standup short description of the completed task&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This broadcasts the message to all other team members, and also stores the entry in the MeetingRoom's database. You can also use &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;/standup todo&lt;/b&gt;&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;/standup obstacle&lt;/b&gt;&lt;/span&gt;, to report intended work and obstacles respectively.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;You can report your work multiple times a day and your reports will be aggregated.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you prefer web browser to IM clients, you can also answer standup questions using MeetingRoom's web interface.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Of course, reporting is possible. You can view daily standup reports (using multiple criteria to select reports you are interested in) in the IM windows well as in the MeetingRoom's web interface. And with a minimum amount of additional setup, you can &lt;a href="http://loft.spartez.com/confluence/display/VE/standup+confluence"&gt;export your reports to Atlassian Confluence&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: justify;"&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/8813074174707015455-7610190782124088196?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/TwM7q2yrQ84" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/7610190782124088196/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/11/daily-scrum-standups-for-distributed.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/7610190782124088196?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/7610190782124088196?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/TwM7q2yrQ84/daily-scrum-standups-for-distributed.html" title="Daily Scrum Standups for Distributed Teams with Spartez MeetingRoom" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_QaPmc_Nvx5A/TNBToqt-D4I/AAAAAAAABFM/dHD_64SlGGA/s72-c/logo-400-faded.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/11/daily-scrum-standups-for-distributed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cFQnYzcCp7ImA9Wx5UFUw.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-2504129566626082515</id><published>2010-10-19T18:56:00.000+01:00</published><updated>2010-10-19T18:56:53.888+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T18:56:53.888+01:00</app:edited><title>Need to embed chat in Confluence - MeetingRoom Lite to the rescue</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TL3VhdG_UQI/AAAAAAAABE0/bXgV2aa_sXA/s1600/30619.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TL3VhdG_UQI/AAAAAAAABE0/bXgV2aa_sXA/s400/30619.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;If you are a user of Atlassian Confluence, you might have wished every now and then to be able to augment a Confluence page or a blog post with a chat service.&lt;br /&gt;
&lt;br /&gt;
Because sometimes, the discussion in the&amp;nbsp;blog post&amp;nbsp;comments resembles more a quick and dirty IM session than a disciplined exchange of thoughts, worthy of permament storage on the server.&lt;br /&gt;
&lt;br /&gt;
Or maybe you are using some Confluence pages as workspace area, where a real-time collaboration occurs? A chat service would also be extremely handy in such circumstances.&lt;br /&gt;
&lt;br /&gt;
Well, now you can do all of the above. We have just released a &lt;a href="https://plugins.atlassian.com/plugin/details/30610"&gt;MeetingRoom Lite&lt;/a&gt;&amp;nbsp;Confluence plugin that provides an &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;mrjr&lt;/b&gt;&lt;/span&gt; macro, letting you embed a chat widget anywhere you wish on a page or a blog post.&lt;br /&gt;
&lt;br /&gt;
While not as feature-rich and powerful as its older brother, &lt;a href="http://mr.spartez.com/"&gt;MeetingRoom&lt;/a&gt;&amp;nbsp;(which by the way&amp;nbsp;&lt;a href="https://plugins.atlassian.com/plugin/details/29300"&gt;also provides&lt;/a&gt; a Confluence macro), it is extremely simple to use (all parameters are optional) and requires zero configuration.&lt;br /&gt;
&lt;br /&gt;
And best of all - you don't have to pay a penny for it, it is absolutely free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-2504129566626082515?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/k4Z9eAVSEUw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/2504129566626082515/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/10/need-to-embed-chat-in-confluence.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2504129566626082515?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2504129566626082515?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/k4Z9eAVSEUw/need-to-embed-chat-in-confluence.html" title="Need to embed chat in Confluence - MeetingRoom Lite to the rescue" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TL3VhdG_UQI/AAAAAAAABE0/bXgV2aa_sXA/s72-c/30619.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/10/need-to-embed-chat-in-confluence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQNQHc8fip7ImA9Wx5bF0o.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-8332046443422806714</id><published>2010-09-30T19:45:00.001+01:00</published><updated>2010-11-03T09:53:11.976+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-03T09:53:11.976+01:00</app:edited><title>Happy Customers</title><content type="html">It seems like people from all over the world are interested in &lt;a href="http://mr.spartez.com/"&gt;MeetingRoom&lt;/a&gt;&amp;nbsp;group chat server. Sometimes they come from places where you would never expect to get customers. And they seem to like it a lot.&lt;br /&gt;
&lt;br /&gt;
Yesterday, we received this testimonial from &lt;a href="http://www.iscosoft.com/"&gt;Isra Software &amp;amp; Computer&lt;/a&gt;, located in Nablus, Palestine:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;Many thanks for you, and your company. We are now enjoying our teams business chat. [...]&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Teams communication was one of our major needs&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;We wish you all the best&lt;/i&gt;&lt;/blockquote&gt;So why don't you also become our customer? We still have free MeetingRoom licenses left! Send us an email to apply for a license at&amp;nbsp;&lt;a href="mailto:mr-freelicense@spartez.com"&gt;mr-freelicense@spartez.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-8332046443422806714?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/g0rMJcTFxS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/8332046443422806714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/09/it-seems-like-people-from-all-over.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8332046443422806714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8332046443422806714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/g0rMJcTFxS4/it-seems-like-people-from-all-over.html" title="Happy Customers" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/09/it-seems-like-people-from-all-over.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMSX4_fip7ImA9Wx5WEEU.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-2112472552764015171</id><published>2010-09-21T15:02:00.010+01:00</published><updated>2010-09-21T18:23:08.046+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-21T18:23:08.046+01:00</app:edited><title>Need advanced group chat solution? Try MeetingRoom 1.1</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TJivdAP-eGI/AAAAAAAABCw/FUFyFbPk7Ik/s1600/mr-chatroom.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img border="0" height="310" src="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TJivdAP-eGI/AAAAAAAABCw/FUFyFbPk7Ik/s400/mr-chatroom.png" width="400" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;It all started very simple. At Spartez, we wanted to have some means of group communication that would not involve shouting across the room and making an awful lot of noise, which distracted everybody. So we came up with a simple solution - we decided to create a Jabber bot that forwarded mesages sent to it to all other users in its roster.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;This was fine for a while and everybody was happy: the noise in the room turned into almost total silence, as everybody was chatting instead of yelling. What's more, people working from home were able to get in touch with their colleagues, which made our office more "virtual", friendly and flexible.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;After a while though, people started chatting not only about work, but exchange jokes, talk about what they did on weeked and so on. This started to resemble the original problem - this time in cyberspace instead of in the physical space. So we added another bot, just for "work stuff". Then we got split into multiple projects, so we added a bot per project, so each project team had one. Of course, this meant that we needed to have more powerful user management, and also required some automation to chatroom bot creation.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Then, people wanted to be able to search past conversations, as they contained valuable group knowledge. This required creation of a web front-end and adding a database to store conversations. While we were at it, we added ability to upload and share files.&amp;nbsp;Then people from outside of the office - hell, from half way across the planet - started using the chartooms.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Then, more and more features were added and one day we decided to turn the project into a commercial application.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And so the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://mr.spartez.com/"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MeetingRoom&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; chat server was born - it is available for a very reasonable money (&lt;/span&gt;&lt;/span&gt;&lt;a href="http://mr.spartez.com/pricing"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;starting from $10&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; for a starter version). It can also be freely evaluated for 30 days from the initial install. And - it is free for open source projects and charity and non-profit organizations.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Some features include:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Integration with any Jabber server - MeetingRoom uses XMPP as transport protocol&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;drag&amp;amp;drop file upload&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;chat from any Jabber client or from web interface&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;advanced chatroom and user management&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;simplified chatroom &amp;nbsp;creation on a federated Jabber server and on Google Talk server&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://loft.spartez.com/confluence/display/VE/Built-In+Commands"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;many commands&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; for enhancing your chatroom conversations&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;integration with external applications and services, such as&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Atlassian JIRA and Confluence&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Wikipedia&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Google maps&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Google translate&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Architecture extensible through plugins&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Embedding MeetingRoom chatrooms into Atlassian Confluence pages and blog posts, using the &lt;/span&gt;&lt;/span&gt;&lt;a href="https://plugins.atlassian.com/plugin/details/29300"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;meetingroom&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; macro&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://4.bp.blogspot.com/_QaPmc_Nvx5A/TJi00gYzCwI/AAAAAAAABC4/BnGLKw75QbI/s1600/smiley.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_QaPmc_Nvx5A/TJi00gYzCwI/AAAAAAAABC4/BnGLKw75QbI/s1600/smiley.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_QaPmc_Nvx5A/TJi00gYzCwI/AAAAAAAABC4/BnGLKw75QbI/s1600/smiley.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_QaPmc_Nvx5A/TJi00gYzCwI/AAAAAAAABC4/BnGLKw75QbI/s320/smiley.png" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
But wait! There is more.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;We have decided to do something a bit crazy.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In order to celebrate the release of &lt;br /&gt;
version 1.1 of MeetingRoom, &lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;we have decided to&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;give away free unlimited licenses&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;br /&gt;
to&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;first 100 (that's one hundred) users who ask for them.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In order to apply, shoot us an email at&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="mailto:mr-freelicense@spartez.com"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;mr-freelicense@spartez.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&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/8813074174707015455-2112472552764015171?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/JhjYP1EAE7s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/2112472552764015171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/09/need-advanced-group-chat-solution-try.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2112472552764015171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2112472552764015171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/JhjYP1EAE7s/need-advanced-group-chat-solution-try.html" title="Need advanced group chat solution? Try MeetingRoom 1.1" /><author><name>Marcin Gorycki</name><uri>http://www.blogger.com/profile/15881673241063551585</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-uqKObpO0ws0/TrLyCpNfsRI/AAAAAAAABTw/c8ItClbmQWQ/s220/DSC02209-cs.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_QaPmc_Nvx5A/TJivdAP-eGI/AAAAAAAABCw/FUFyFbPk7Ik/s72-c/mr-chatroom.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/09/need-advanced-group-chat-solution-try.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UDSXoycCp7ImA9Wx5WEUU.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-6879742487889245894</id><published>2010-09-14T21:20:00.010+01:00</published><updated>2010-09-22T20:54:38.498+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-22T20:54:38.498+01:00</app:edited><title>Skitch for Windows? Not really. But let's go further than that.</title><content type="html">Pretty much every Mac fanboy knows and likes &lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt;. Me too, although I seldom use Mac.&lt;br /&gt;&lt;br /&gt;There is however one major (OK, more than one to be honest ;)) problem with Skitch. It's only for Mac OSX and there is no sight of so desired Windows support. In fact &lt;a href="http://blog.skitch.com/2008/03/13/skitch-windows/skitch-for-windows/"&gt;the original blog&lt;/a&gt; post at Skitch website (dated March 2008) about it has been mysteriously removed - here is &lt;a href="http://webcache.googleusercontent.com/search?q=cache:5BGdU6eYQlAJ:blog.skitch.com/2008/03/13/skitch-windows/skitch-for-windows/+skitch+for+windows"&gt;the cached version&lt;/a&gt; by Google. Not to mention Linux. Another drawback is that you cannot easily access Skitch from anywhere. You have to install it first. Inconvenient.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://screensnipe.com/"&gt;ScreenSnipe&lt;/a&gt; comes to the rescue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9itee73ZiXE/TI_dcwHw4KI/AAAAAAAAAdE/3fecEmoEJd0/s1600/screensnipe-1-small.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 356px; height: 255px;" src="http://1.bp.blogspot.com/_9itee73ZiXE/TI_dcwHw4KI/AAAAAAAAAdE/3fecEmoEJd0/s400/screensnipe-1-small.png" alt="" id="BLOGGER_PHOTO_ID_5516871554575687842" border="0" /&gt;&lt;/a&gt;When I completely switched my development environment to Linux, I missed so much a screenshotting tool which would be as simple and beautiful as Skitch. Gimp made me mad (sure, after years I've finally mastered it, but initially, to draw one stupid arrow and a text, I almost cut myself). Thus I decided to write my own screenshot app. That's how ScreenSnipe was born.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I wanted to go one step further – make it really cross-platform and installation-less. A screenshotting tool for the 21st century and Web 2.0 era.&lt;br /&gt;I think I am getting there. ScreenSnipe is maybe not so snappy (yet) as Skitch, but it has some completely unique features, it evolves quite fast and is really installation-less (directly available from the web browser) for all these 100-million or so PC users who happen to have Java 6 installed on their boxes. It runs on Windows, Mac OSX and Linux (and maybe on other systems which I have not had a chance to test).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9itee73ZiXE/TI_ft_nRGFI/AAAAAAAAAdM/D6nzcJ5iqeI/s1600/screensnipe-3-small.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 386px; height: 262px;" src="http://2.bp.blogspot.com/_9itee73ZiXE/TI_ft_nRGFI/AAAAAAAAAdM/D6nzcJ5iqeI/s400/screensnipe-3-small.png" alt="" id="BLOGGER_PHOTO_ID_5516874049815386194" border="0" /&gt;&lt;/a&gt;A couple of months ago I released a fully integrated &lt;a href="http://www.spartez.com/screensnipe/screensnipe-for-atlassian-jira"&gt;ScreenSnipe with Atlassian JIRA&lt;/a&gt; – my beloved issue tracker. Last weekend I released something which I desired even more – simple yet powerful and collaborative (editable) screenshots directly in Atlassian Confluence – a wiki (or perhaps I should say a collaboration platform) which I love and use every day.&lt;br /&gt;&lt;a href="http://www.spartez.com/screensnipe/screensnipe-for-atlassian-confluence"&gt;ScreenSnipe for Confluence&lt;/a&gt; makes an annotated screenshot a first class citizen of this enterprise collaboration system. Not only you can easily make screenshot and annotate it in many ways, disguise, emphasise, crop, zoom. You can publish your screenshot with a single click in Confluence page (or blog, or comment) and this picture will be editable (as vector graphics) for every person who can modify attachments of this page. You can easily just replace the underlying screenshot, leaving the annotations intact or just slightly modified to match new graphics.&lt;br /&gt;Think about technical documentation (and pictures often not catching up with the evolving UI), release notes, visual discussions, UI and UX reviews, QA. All of these is now hopefully much simpler and more effective.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9itee73ZiXE/TI_lLM_a1yI/AAAAAAAAAdc/rmmqytQvPrQ/s1600/screensnipe-5.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 346px; height: 293px;" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_lLM_a1yI/AAAAAAAAAdc/rmmqytQvPrQ/s400/screensnipe-5.png" alt="" id="BLOGGER_PHOTO_ID_5516880049180694306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ScreenSnipe for Confluence (as well as SS for JIRA) comes with a completely free &lt;a href="http://www.spartez.com/screensnipe/download"&gt;30-day trial&lt;/a&gt;. Installation on the server side is really simple (just upload a single jar file). No need to do anything on the client side.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;br /&gt;P.S. To celebrate the release, ScreenSnipe for Confluence is currently offered with 20% discount.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-6879742487889245894?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/5yAZNnGW89w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/6879742487889245894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/09/skitch-for-windows-not-really-but-lets.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/6879742487889245894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/6879742487889245894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/5yAZNnGW89w/skitch-for-windows-not-really-but-lets.html" title="Skitch for Windows? Not really. But let's go further than that." /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_9itee73ZiXE/TI_dcwHw4KI/AAAAAAAAAdE/3fecEmoEJd0/s72-c/screensnipe-1-small.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/09/skitch-for-windows-not-really-but-lets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8EQns7fSp7ImA9Wx5QEUQ.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-4075243822139402528</id><published>2010-08-30T18:30:00.002+01:00</published><updated>2010-08-30T20:00:03.505+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T20:00:03.505+01:00</app:edited><title>Hardware failure can ruin your schedule</title><content type="html">I am not referring to computer hardware this time.&lt;br /&gt;&lt;br /&gt;I was driving home from a short weekend excursion when the alternator in my car died, 100 kms from home. 40 kms later the battery was dead, my car pulled up at the side of the road, night falling (not fun when you don't even have the hazard flashers) and I only hoped that the battery in my daughter's DVD player will survive.&lt;br /&gt;&lt;br /&gt;Fortunately, my family lives nearby, so we were quickly picked up, stayed for the night and had unplanned one day vacations.&lt;br /&gt;It would be much less fun if it happened somewhere in the middle of Poland, when I was driving back (or towards!) vacations 2 weeks ago. Just calling a towing service is not so obvious option if you travel with a 2-year-old - tow cars are not suited for traveling with small children.&lt;br /&gt;&lt;br /&gt;This event gave me a lot of free time to come up with a few thoughts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's a bad idea to be the only person responsible for generating invoices etc. If you can't do it automatically, at least make some arrangements so that you are not the only person responsible for it. Having somebody that will cover for you when you ask is not enough - you may be unable to ask. Being indispensible is good when you are an employee, not when you run a business.&lt;/li&gt;&lt;li&gt;Have your iPhone battery charged when you travel - recharge it at every opportunity.&lt;/li&gt;&lt;li&gt;We depend on electrical gadgets too much. Electrical-only lock on the trunk hatch is cool until you need to get to the warning triangle stored in your trunk and you can't because the battery is dead (and so are the warning flashers)&lt;/li&gt;&lt;li&gt;Google is a lot less helpful if you qualify your "auto service nearby" query with "open on Sunday evenings"&lt;/li&gt;&lt;li&gt;I am so used to having all sorts of backups on the Internet (mail, documents, pictures, source code, long term memory) that it gets really frightening when I realize that I cannot restore my car engine from any online backup...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Be always prepared that your trip will last a day or two longer than expected. Having a few extra pieces of clothes is one thing, but taking into account that you might not make it to the office on Monday morning is equally important. And always take your laptop with you no matter what your wife says ;-)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-4075243822139402528?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/g8Vbn6l8edw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/4075243822139402528/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/08/hardware-failure-can-ruin-your-schedule.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4075243822139402528?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4075243822139402528?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/g8Vbn6l8edw/hardware-failure-can-ruin-your-schedule.html" title="Hardware failure can ruin your schedule" /><author><name>Sławomir Ginter</name><uri>http://www.blogger.com/profile/14860455895099811406</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_PipM-FTshUY/TES7kyDx2kI/AAAAAAAABYA/OOmu1g8rNdk/S220/sginter+small.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/08/hardware-failure-can-ruin-your-schedule.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04NQ386fyp7ImA9Wx5QF0g.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-4820495362959959648</id><published>2010-08-25T13:00:00.025+01:00</published><updated>2010-09-06T07:53:12.117+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-06T07:53:12.117+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile scrum tool php java code review continuous integration" /><title>Modern Java like development environment for PHP</title><content type="html">Recently (in June 2010 to be precise) I attended &lt;a href="http://phpconference.nl/"&gt;PHP conference in Amsterdam&lt;/a&gt;. I just wanted to refresh my PHP knowledge, look around and get some news what is happening in the community before starting new project with the PHP technology. I did not use PHP for last 6 years so that was necessary to discover new solutions, frameworks and trends which appeared during that time. The most important for me were three things: performance, frameworks and tools used to create code and support agile practices like continuous integration and code review. I focused on these things when choosing tutorials and sessions but also when talking to people I met. This time let me share my thoughts and information I got regarding the PHP tools.&lt;br /&gt;&lt;br /&gt;Last two years I had pleasure of working with Java and excellent tools created for that technology. IDE is the first to name. I had occasion to work with IntelliJ IDEA and Eclipse. IDEA looks not very pretty (it uses SWING in oppose to nice SWT in Eclipse) but as most paid applications is more polished in terms of UX. Nevertheless both of them allow to quickly navigate through the code, go back and forth in the history, switch between files, jump to method callers, superclass or places where class instance is created and what is even more important they allow to fully refactor the code. It is easy to change method name, move the method or class to other place, extract method or variable from the part of the code and much more. After two years spent with such tools it became natural to have all these useful features right under your fingers. This is why the first questions I asked people I met at the conference was "What IDE do you use? Does it support decent refactoring?". I heard several answers for the first question: &lt;span style="font-weight:bold;"&gt;Eclipse&lt;/span&gt; with &lt;span style="font-weight:bold;"&gt;PDT&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;PhpED&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;ZendStudio&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Komodo&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Netbeans&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;PHPEdit&lt;/span&gt;. Unfortunately the answer for second questions was always "no". I checked briefly all of those IDEs and in fact none of them supports "advanced" refactoring like global move or rename which I use quite often after playing two years with Java. &lt;span style="font-weight:bold;"&gt;StormPHP&lt;/span&gt; from JetBrains (the company behind IntelliJ IDEA) was not mentioned by anyone. It is a quite new product and looks very promising but it is still quite new, lacks some features and is not free (but much cheaper than ZendStudio for example).&lt;br /&gt;&lt;br /&gt;The other interesting topic was Continuous Integration. It is almost a standard in Java world but the PHP folks I met there had no experience in that subject at all. I got partial answer attending Sebastian Bergmann tutorial &lt;a href="http://phpconference.nl/schedule/tutorials#quality"&gt;Quality Assurance in PHP Projects&lt;/a&gt;. Sebastian advertised &lt;span style="font-weight:bold;"&gt;Hudson&lt;/span&gt; as his favorite Continuous Integration server tied with set of his own tools like PHPUnit, copy/paste detector and dead code detector. He mentioned also &lt;span style="font-weight:bold;"&gt;Atlassian Bamboo&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;phpUnderControl&lt;/span&gt;. Overall it looked much better than in case of IDE but I promised myself to test at home if any of mentioned tools is really usable in PHP environment.&lt;br /&gt;&lt;br /&gt;The next thing was Code Review. Again no one from the folks I met was able to point any tool. Unfortunately there was no session which covered that subject at the conference so I did a research at home. The only thing I found was another presentation by Sebastian Bergmann which you can find &lt;a href="http://www.slideshare.net/sebastian_bergmann/php-code-review-4488307"&gt;here&lt;/a&gt;. He mentioned &lt;span style="font-weight:bold;"&gt;Atlassian Crucible&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Review Board&lt;/span&gt; there but again without details so like for Continuous Integration I decided to dive into the topic deeper and test the tools. &lt;br /&gt;&lt;br /&gt;Interesting thing is that most of the people at the conference were excited about the continuous integration and code review ideas but they did not use them at work. It looks like PHP community is getting more and more excited about agile approach to software development and tries to follow best Java practices and adapt Java tools or develop their own equivalents. Funny thing is that I met a guy who started to learn Java because he wanted to work with modern, agile environment and mature tools.&lt;br /&gt;&lt;br /&gt;After the conference, at home I started to build my own PHP development environment to check if that is possible to have it at least half as good as for Java. I chose &lt;span style="font-weight:bold;"&gt;Eclipse &lt;/span&gt;and &lt;span style="font-weight:bold;"&gt;PDT&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Bamboo&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Crucible&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Atlassian Connector for Eclipse&lt;/span&gt; as I used most of them for last two years and I was one of the authors of Atlassian Connector for Eclipse. &lt;br /&gt;&lt;br /&gt;Setting up the Eclipse and PDT went smooth. I installed also Atlassian Connector for Eclipse with support for Bamboo, JIRA, Crucible and Subversive.&lt;br /&gt;&lt;br /&gt;Bamboo appeared to support PHPUnit so having the build system in place was not a challenge as well. I found some minor issues and even reported them to Bamboo development team. The guys solved the problems in two weeks or so and the fixes are included in the latest Bamboo milestone build. I did not try but it should not be a challenge to have something more than just PHPUnit run for builds. I can imagine copy/paste detector, dead code detector and even syntax checking run at the build time. Thanks to the Atlassian Connector for Eclipse it is easy to see the build status right in your Eclipse where you can also see the build log, label build, add comment, rerun build and see the list of failed unit tests in JUnit format. Rerun the test locally unfortunately does not work as Atlassian Connector for Eclipse supports only JUnit and there is even no available plugin to run PHPUnit tests inside Eclipse and grab results.&lt;br /&gt;&lt;br /&gt;Crucible is also very mature tool and I had no issues to install it, configure and use with Subversion and PHP source code. Creating and performing reviews is a pleasure with Crucible. I installed also Fisheye which allows to browse and search the SVN repository in an easy way. It supports also CVS, Perforce and bunch of other providers. The last step was to create and perform reviews inside Eclipse using Atlassian Connector for Eclipse. Creating a review from the piece of code or set of files was easy and worked fine. I faced the first serious problem when I tried to perform review. Atlassian Connector was not able to open PHP files from the review inside the Eclipse as they came from the outside of the workspace. It took me some time to debug the problem. As a result I raised few issues for the PDT, org.eclipse.wst.sse and Connector itself. I fixed them on the Connector side so it is now possible to view PHP review files inside the Eclipse, go through the comments, add new comments and replies and more. &lt;br /&gt;&lt;br /&gt;Finally I managed to have all that stuff in place. I was not fully satisfied with the IDE but Continuous Integration and Code Review solutions worked fine. Builds still needed more configuration e.g. create deploy build but that was more scripting than Bamboo related job. &lt;br /&gt;&lt;br /&gt;I hope some of the PHP folks will find this post useful and try to set their own modern Java like development environment for PHP projects. Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-4820495362959959648?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/eO8P_BEokBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/4820495362959959648/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/08/modern-java-like-development.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4820495362959959648?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/4820495362959959648?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/eO8P_BEokBo/modern-java-like-development.html" title="Modern Java like development environment for PHP" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/08/modern-java-like-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFRXk_cCp7ImA9WxFaFUo.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-219208561969714138</id><published>2010-07-14T21:45:00.005+01:00</published><updated>2010-07-19T21:48:34.748+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T21:48:34.748+01:00</app:edited><title>Testing a Million Issues JIRA Performance</title><content type="html">A customer was considering buying JIRA to replace their email-based customer support operations (Call Center / Help Desk).&lt;br /&gt;They asked a simple question:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Can JIRA handle a rate of 2000 - 3000 new issues a day, accumulating to over a &lt;span style="font-weight:bold;"&gt;million&lt;/span&gt; issues after a year or two?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Core requirement that gave any chance of success was amount of active users:&lt;br /&gt;- only about 15 people would have access to the system, plus a robot that would receive issues and comments from email queue and send out replies.&lt;br /&gt;&lt;br /&gt;You can find the answer and how we have come up with it &lt;a href="http://loft.spartez.com/confluence/display/SPARTEZ/Million+Issues+JIRA+-+Performance"&gt;on our page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://loft.spartez.com/confluence/display/SPARTEZ/Million+Issues+JIRA+-+Performance"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 565px; height: 814px;" src="https://loft.spartez.com/confluence/download/attachments/3408327/jira-million-issues.png?version=1&amp;modificationDate=1278428776075" 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/8813074174707015455-219208561969714138?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/uOC7fZbNEYo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/219208561969714138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/07/testing-million-issues-jira-performance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/219208561969714138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/219208561969714138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/uOC7fZbNEYo/testing-million-issues-jira-performance.html" title="Testing a Million Issues JIRA Performance" /><author><name>Slawomir Ginter</name><uri>http://www.blogger.com/profile/11380966944243353645</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_McRGsg1JciM/SQCG-oySANI/AAAAAAAABes/GUkDaUGUIpA/S220/sginter+small.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/07/testing-million-issues-jira-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8GR3s9eCp7ImA9WxFUF0k.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-8686446841936223168</id><published>2010-06-28T17:27:00.002+01:00</published><updated>2010-06-28T17:33:46.560+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T17:33:46.560+01:00</app:edited><title>Javarsovia gets really seriously big</title><content type="html">&lt;p style="margin-bottom: 0in;"&gt;This year I attended for the first time the annual free (!) Java conference organized by couple of great folks from Warsaw. This conference – &lt;a href="http://javarsovia.pl/"&gt;Javarsovia&lt;/a&gt; - more or less doubles (in terms of the number of participants) every year. This year it attracted about 650 people and I bet it could have gathered more, if the organizers had not suggested several days before the conferences on the web page that the registration is closed (and most of folks understood that there is no point in coming, whereas it meant: come at your own risk – there theoretically may be no place for you).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;650 people makes Javarsovia one of the biggest Java conferences in Europe. And a lot of big players already noticed that: Google, Adobe, Oracle, Microsoft – all were sponsors this year. Thanks guys.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;There were 4 parallel tracks. Each had six 45-minutes-long sessions. Drinks and lunch (very satisfiable)  were served too. All free of charge.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;So what I saw and learnt there. Honestly not much, but it was my own fault – please read why. But to the point:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;First I listened to Jakub Nabrdalik who was talking about &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#jakz"&gt;bio-degradation of your code&lt;/a&gt;. A very good speaker (although he claimed it was his first time – it was really really cool). Many people laughing and enjoying his style proved it. The content was also fine – more targeted toward less experienced programmers (coders). I would call it – line-level (or implementation level) code conservation.  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;I missed there more high level things like design consideration, architecture, but overall it was time well spent.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Next, I myself &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#jakm"&gt;talked about agile contracts&lt;/a&gt; (basing on several we have had in last 2.5 years – including our wonderful relationship with Atlassian). About 300 people decided to listen to me. Wow! Thank you guys. Unfortunately I sucked. I was talking about how bad we are at estimation and I proved it myself. I overran the session by 8 or 10 minutes and still had several very important things to say. Shame on me.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;And I was penalized immediately. Many people chased me down outside the main conference room and I have a prolonged discussion (or Q&amp;amp;A session) which lasted for about 1.5 hour.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Which means I missed the session I really wanted to participate in – Gil Tene talking &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#performancec"&gt;about concurrent GC&lt;/a&gt;s. I almost missed my lunch. This is the price of talking for too long. I also wanted to hear Tomasz Kaczanowski &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#gradleo"&gt;talking about Gradle&lt;/a&gt;, but apparently I could not clone myself – it was colliding with my own presentation.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Then I rushed to hear Sławomir Sobótka and &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#softwarec"&gt;his take on Software Craftsmanship&lt;/a&gt; and the patterns. Slawek has been recently considered by many guys as one of the best speakers in Polish Java scene, so my appetite was very big. And that's why I felt somewhat disappointed. Slawek's talk was really good and informative, but I felt that he was quite dispirited and did not demonstrate such energy I had hope he would show. He talked about design patterns, how to apply them wisely and how they apply to software professionalism.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;It's obvious that Uncle Bob inspires this year a lot of people with his craftsmanship quest. I &lt;a href="http://unimplemented.blogspot.com/2009/11/devoxx2009-my-impressions.html"&gt;somewhat predicted it&lt;/a&gt; after &lt;a href="http://www.parleys.com/#id=1491&amp;amp;st=5&amp;amp;sl=1"&gt;Devoxx 2009 Uncle's talk &lt;/a&gt;(awesome BTW – watch it guys).&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;My next stop was Tomasz Łabuz &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#aopt"&gt;talking about AOP, JPA, ThreadLocal&lt;/a&gt; – very decent talk, but I did not learn there anything new. Although it was good to hear the first really technical talk with a lot of Java gore.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;The last session I attended was the one where &lt;a href="http://www.javarsovia.pl/konferencja/prezentacje.html#jedenr"&gt;Jarosław Pałka talked about NoSQL&lt;/a&gt;. Unfortunately it was disappointing for me. I was late 10 minutes or so (talking too long with guys from Javart who happened to use Atlassian products and our Connector). As virtually whole talk I attended was about Neo4J, I initially though I had missed the rest, but then other people complained about it too.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;SPOINA.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;In the evening there was a free (thank you sponsor again) event where we could eat (traditional Polish fat food), drink (beer of course) and socialize – a lot.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;This was probably the best part of the day – I met a few great guys and I could talk to them for hours.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;As usually, such events are most for all about socializing, meeting new people, exchanging ideas and inspiring each other.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Javarsovia definitely met its goals then.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;See you guys hopefully next year. Maybe till then our Polish railway won't suck any more so much (5.5 hours to get to Warsaw from Gdansk – the distance of 340 km).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;But maybe not – as everything in Poland is to be ready only by Euro 2012 ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-8686446841936223168?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/RVetY-dkQZY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/8686446841936223168/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/06/javarsovia-gets-really-seriously-big.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8686446841936223168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/8686446841936223168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/RVetY-dkQZY/javarsovia-gets-really-seriously-big.html" title="Javarsovia gets really seriously big" /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/06/javarsovia-gets-really-seriously-big.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QNRH8yfip7ImA9WxFVFkk.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-451515865841592406</id><published>2010-06-16T00:14:00.002+01:00</published><updated>2010-06-16T00:43:15.196+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T00:43:15.196+01:00</app:edited><title>Atlassian Summit 2010 – random thoughts a few days after the conference</title><content type="html">&lt;p&gt;&lt;br /&gt;Although I am definitely heavily affiliated with Atlassian (as a contractor), here a few my random and maximum unbiased thoughts and observations from Atlassian Summit 2010 which took place last week in San Francisco and I was happy to be there.&lt;/p&gt;  &lt;span style="font-size:140%;"&gt;Location, food and logistics&lt;/span&gt; &lt;p&gt;Location was great – very convenient place, close to many hotels (those expensive but also to those cheap), walking distance from BART and Market Street. Even for a person travelling from quite a distant place (more than 10 000 km in my case) getting to this place was quite fast. Intercontinental hotel itself was good (perhaps one of conference rooms could be bigger), food was awesome, WiFi somehow just worked (very rare thing at such events). Grand ballroom (also when reorganised into smaller rooms) was great. Audio/video was really good. And a lot of graphics (especially prepared by Atlassian folks, but not only) was just purely awesome. Very professional conference. Top class.&lt;/p&gt; &lt;span style="font-size:140%;"&gt;People&lt;/span&gt;&lt;p&gt;People were just awesome. No BS. This is definitely the biggest value of such conference. Atlassian is very special in this regard. It creates a tribe and attracts very special people to it – very friendly, intelligent, skilful, open minded, willing to share their knowledge and most of all genuinely &lt;u&gt;passionate&lt;/u&gt; about what they do. This tribe (contrary to some other tribes – including the one following a black-and-white fruit ;) – which coincidently had their own gathering just in the neighbouring building) is very special – having fun from what they do is the most important thing for it, money comes second. Socialising with this people is just a pleasure. 550 people or so, with many of whom I chatted. No jerk detected. :)&lt;/p&gt;&lt;p&gt;Three evening events (well, if I midnight counts as evening) were great. One thing worth noting: there was a foosball table at Jillian's. Apparently 1+ year of practising 15 minutes a day makes a difference – the team I was on has won all the games. FTW!&lt;/p&gt;&lt;p&gt;And I finally realised this year that after all they have decent beer in SF.&lt;br/&gt;BTW: did I already mention that folks from Minneapolis rock?&lt;/p&gt;&lt;span style="font-size:140%;"&gt;Launchpad&lt;/span&gt;&lt;p&gt;At the Summit several companies had a big announcements (new product releases or services). Most of 5-minutes-long presentation was really interesting. Attendees quickly judged them using live SMS voting (very cool idea although not free from people abroad on roaming). About 20 – 25% of people voted for each entry which was really good I think. The winner – Gliffy – proved that the show itself and how you present something is as important as the content. Good for them! Detailed list of entries is &lt;a href="http://cds43.wordpress.com/2010/06/11/atlassian-summit-2010-day-1-wrapup/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; &lt;span style="font-size:140%;"&gt;Greenhopper&lt;/span&gt;&lt;p&gt;At the Summit GH 5.0 was announced. It looks really sleek: more readable, cleaner, more encouraging. Coloured stripes instead of coloured backgrounds is a great idea. I loved a new marker for release and iteration planning more visual and easier. Also new Kanban features look pretty amazing. Now we have to think how to integrate our Agile Scrum Cards plugin with this cool stuff (so that you can have on your physical post-it cards the same as you see on your screen).&lt;/p&gt;&lt;p&gt;GreenHopper itself has been the fastest growing Atlassian product. Since the acquisition announced last year its customer base has grown more than 10 times!&lt;/p&gt;&lt;span style="font-size:140%;"&gt;JIRA&lt;/span&gt; &lt;p&gt;Mike CB revealed current state of JIRA 4.2 (coming in 1 – 2 months timeframe) – which focuses mostly on UX for power users: a lot of keyboard shortucts, auto-completion, a lot of actions available directly from issue navigator (which becomes even more central place in JIRA). Everything to give us back 15 minutes a day with this feature. As an active JIRA Studio user, I hope that Studio will get this feature quickly too (which BTW was promised: shorter cycle time for Studio and smaller lag behind regular, behind-the-firewall, products).&lt;/p&gt; &lt;p&gt;Another thing which excited a lot of people where &lt;a href="https://plugins.atlassian.com/plugin/details/23983"&gt;JIRA Wallboards&lt;/a&gt;, which by themselves are nothing technically new (just idea of gadget/portlets), but when polished (we all apparently follow Apple) and sold to the team/organisation as information radiators rather than fridges look fantastic. I wonder how many big LCD-s or plasmas will be now purchased thanks to Atlassian. LG, Sumsung or Sony should pay Atlassian a homage ;) JIRA Wallboards nicely play on “project transparency” (so important in agile projects) note too.&lt;/p&gt; &lt;p&gt;Probably the most exciting thing for JIRA admins (which I happen to be too) were 2 announcements:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-weight: normal;"&gt;&lt;a href="https://plugins.atlassian.com/plugin/details/23915"&gt;Universal  Plugin Manager&lt;/a&gt; finally for JIRA (now available as a plugin,  bundled soon). It will not only allow you to browse and install  plugins directly from JIRA (again everyone follows AppStore ;), but  what is the most fantastic: it will help you with planning and  executing your upgrade – showing which plugins are incompatible  with a new planned version.&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Bundling  &lt;a href="http://confluence.atlassian.com/display/Support/Hercules"&gt;Atlassian  Hercules&lt;/a&gt; with JIRA (and Confluence too), so that JIRA admins can  be assisted quickly and warned about problems which have not yet surfaced.&lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Additionally Atlassian mentioned that in the future much focus will be set for improving in JIRA user &amp;amp; group management (including LDAP integration).&lt;/p&gt; &lt;p&gt;&lt;span style="font-weight: normal;"&gt;I got pretty excited about a new project with a code-name JIRAAnywhere: a JavaScript library allowing other web applications to easily connect to JIRA and make use of its information and capabilities: e.g. allowing to build nice hovers for hyperlinks leading to issues which not only show preview of the isssue, but also let you perform operations on them or even create a new issue from within different system. So cool and I expect soon a lot of products (Atlassian and 3&lt;/span&gt;&lt;sup&gt;&lt;span style="font-weight: normal;"&gt;rd&lt;/span&gt;&lt;/sup&gt; party) taking advantage of this lib. Having been deep into JIRA Integration and crying over it quite limited remote APIs, I hope that this project will also help drive new JIRA REST API so much wanted and long awaited by the community.&lt;/p&gt;&lt;p&gt;The last thing: JIRA and GetSatisfaction integration via &lt;a href="http://getsatisfaction.com/getsatisfaction/topics/jira_integration"&gt;just announced&lt;/a&gt; Customware plugin. The time for us to finally set on GetSatisfaction then?&lt;/p&gt;&lt;span style="font-size:140%;"&gt;Confluence&lt;/span&gt; &lt;p&gt;&lt;span style="font-weight: normal;"&gt;The browser technology (think poweful js and phasing out IE 6) finally allows for a relatively painless switch from wiki syntax (which obviously makes adoption of Confluence more difficult in non-purely-technical teams) to a fully fledged rich text editor (WYSIWYG). New Confluence will hopefully do just that. Provided that new editor is at least as good for power users as wiki syntax.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Many people call Confluence as “an awesome enterprise wiki”. How will we call it when there is no more wiki syntax in this wiki? ;)&lt;/p&gt;&lt;span style="font-size:140%;"&gt;Plugins&lt;/span&gt; &lt;p&gt;More than 1 million plugins were downloaded from plugins.atlassian.com within about 1 year since it has been released. It means every 30 second on average someone downloads a plugin. That's pretty impressive knowing that far majority of plugins are server side so that not for the end consumer (like iPhone apps). More than 500 plugins are published on plugins.atlassian.com and it's good to know that our team contributed around 1% of them :) Could be of course more, but knowing rapid growth of the ecosystem (c.a. 100% last year) it will be difficult to maintain this share.&lt;/p&gt; &lt;span style="font-size:140%;"&gt;Bamboo&lt;/span&gt; &lt;p&gt;Bamboo was surprisingly (for me at least) a hot topic. A lot of people asked difficult questions and seemed to use Bamboo as something far beyond just CI tool. It looks like it's becoming more a scheduling and automated task management tool (I saw also crazy integrations with JIRA via custom plugins) rather than a build system. Build chains coming in Bamboo 3.0 should definitely help in this area.&lt;/p&gt; &lt;span style="font-size:140%;"&gt;Other sessions&lt;/span&gt; &lt;p&gt;I attended mostly dev-oriented talks to stay in sync with the ecosystem (that's my role after all being the lead of &lt;a href="http://www.atlassian.com/software/ideconnector/eclipse.jsp"&gt;Atlassian Connector for Eclipse&lt;/a&gt; project). I haven't learnt anything new significant there (but that's OK – I was there also to help others and listen to customers and partners, not just to learn). I was happy to hear Motorola's talk on how creatively they used Mylyn (thanks to its notion of the task context) + JIRA Connector (part of Atlassian Connector suite) + JIRA of course to establish a training/knowledge base for their developers. I believe though that even better results could be achieved with Crucible which additionally can serve &lt;i&gt;the comments&lt;/i&gt; for highlighted code sections.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Anyway big congrats to Mik Karsten (the father of whole idea of the context) and whole &lt;a href="http://tasktop.com/"&gt;Tasktop&lt;/a&gt; team working hard on Mylyn framework which we could build upon.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-weight: normal;"&gt;Craig Smith delivered an interesting presentation (although probably put too much content into one session) about Scrum, Kanban and process improvements (keizen) on agile teams using JIRA and GreenHopper. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;I recommend reading a &lt;a href="http://cds43.wordpress.com/2010/06/11/atlassian-summit-2010-day-1-wrapup/"&gt;very good write-up&lt;/a&gt; from Craig Smith who describes in detail several talks.&lt;/p&gt; &lt;p&gt;It was promised that all talks will be published soon (video) on Atlassian website. Keeping my finger crossed. Otherwise I would have probably killed myself on deciding which session to visit.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Hopefully see you next year at Summit 2011.&lt;/p&gt;  &lt;br /&gt;&lt;br /&gt;&lt;p&gt;P.S. Sorry: no pictures this time. I did not take my Nikon D90 with me and everyone knows that iPhone 3GS sucks wrt taking pictures unless it's very, very bright around.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-451515865841592406?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/L_D9Ftfk_d0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/451515865841592406/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/06/atlassian-summit-2010-random-thoughts.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/451515865841592406?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/451515865841592406?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/L_D9Ftfk_d0/atlassian-summit-2010-random-thoughts.html" title="Atlassian Summit 2010 – random thoughts a few days after the conference" /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/06/atlassian-summit-2010-random-thoughts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFR3s_fyp7ImA9WxFXF0Q.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-224495517400490855</id><published>2010-05-25T15:46:00.003+01:00</published><updated>2010-05-25T15:53:36.547+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-25T15:53:36.547+01:00</app:edited><title>Simple UI, stupid</title><content type="html">&lt;i&gt;Another guest post from Pawel Niewiadomski.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Why programmers create bad UI? They do, you do, I do it too. We all do. It's inevitable. The reason is the curse of knowledge.&lt;br /&gt;&lt;br /&gt;You create a code and know all the corner cases or the nifty things that user can set to optimize it. You know it all, it's obvious to you. &lt;br /&gt;&lt;br /&gt;So you want to be a good guy and let the user decide, right? Users are smart like you, they know what to do and they will happily jump to modify their settings and customize their application.&lt;br /&gt;&lt;br /&gt;WRONG!&lt;br /&gt;&lt;br /&gt;Actually your job is other way around. You know all the details and you should hide them at all cost. You musn't be afraid of having some defaults and guessing some things. As long as your app works in most cases for most users.&lt;br /&gt;&lt;br /&gt;You need to hide all options that are usually not needed. Only leave those that are crucial and often customized by users.&lt;br /&gt;&lt;br /&gt;Remember that allowing users to customize your app is like shooting yourself in the leg - since you allow them, they will do it, and if something goes wrong they blame you.&lt;br /&gt;&lt;br /&gt;Unless your business model is around providing consultancy (like SAP) you need to remove all unnecessary clutter to make your app the simplest one to use even if it means some people will choose different one because of the missing feature XYZ.&lt;br /&gt;&lt;br /&gt;Apple's great on removing features, not adding. And that's their success story.&lt;br /&gt;&lt;br /&gt;And the worse examples you can usually find in tools for developers (see screenshots), because developers are smart and want to control their environment, right?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9itee73ZiXE/S_vkFQGrT5I/AAAAAAAAAbA/xtMH5eUHzrA/s1600/ScreenSnipe.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://2.bp.blogspot.com/_9itee73ZiXE/S_vkFQGrT5I/AAAAAAAAAbA/xtMH5eUHzrA/s400/ScreenSnipe.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5475220550872420242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9itee73ZiXE/S_vkQTdBr7I/AAAAAAAAAbQ/9x9Sh6g4L2E/s1600/ScreenSnipe2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 269px;" src="http://4.bp.blogspot.com/_9itee73ZiXE/S_vkQTdBr7I/AAAAAAAAAbQ/9x9Sh6g4L2E/s400/ScreenSnipe2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5475220740750028722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9itee73ZiXE/S_vkQXigMMI/AAAAAAAAAbI/6KCBv02cuCE/s1600/ScreenSnipe1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://3.bp.blogspot.com/_9itee73ZiXE/S_vkQXigMMI/AAAAAAAAAbI/6KCBv02cuCE/s400/ScreenSnipe1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5475220741846741186" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-224495517400490855?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/-4KDO3gvAjU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/224495517400490855/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/05/simple-ui-stupid.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/224495517400490855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/224495517400490855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/-4KDO3gvAjU/simple-ui-stupid.html" title="Simple UI, stupid" /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_9itee73ZiXE/S_vkFQGrT5I/AAAAAAAAAbA/xtMH5eUHzrA/s72-c/ScreenSnipe.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/05/simple-ui-stupid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICQXk6fCp7ImA9WxFXEUo.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-2741944384980127610</id><published>2010-05-18T08:53:00.002+01:00</published><updated>2010-05-18T09:32:40.714+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T09:32:40.714+01:00</app:edited><title>A few notes from GeeCon 2010</title><content type="html">&lt;i&gt;This is a guest post - a set of random thoughts and observation from Pawel Niewiadomski, our colleague who recently attended &lt;a href="http://2010.geecon.org/main/home"&gt;GeeCon&lt;/a&gt; conference in Poznan, Poland:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Adobe AIR is going after mobile market. Adobe presented pre-beta version of their IDE that will allow to create a mobile apps. They are targeting Android first. Beta will be available soon through their developer channels.&lt;br /&gt;&lt;br /&gt;IBM has a nice tool for memory leak detection and application profiling. It's called &lt;a href="http://www.ibm.com/developerworks/java/jdk/tools/memoryanalyzer/"&gt;Memory Analyzer&lt;/a&gt;. It's free and works with any JVM.&lt;br /&gt;&lt;br /&gt;IBM has a nice suite of performance optimization tools for their JVM - it's called &lt;a href="http://www.ibm.com/developerworks/java/jdk/tools/healthcenter/"&gt;IBM Health Center&lt;/a&gt;. It's free. But they didn't tell how much their JVM costs ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vaadin.com/home"&gt;Vaadin&lt;/a&gt; - interesting combination for RIA on top of GWT. Gives you a lot of power, nice themes. It's server side based RIA model so it's easier to do validation, authentication, and so on. But because of that it puts more load on your servers - everything is kept in user's session on the server (couple houndred kilobytes to megabytes depending on your app). They do a pretty good living from supporting it and consulting other companies though.&lt;br /&gt;&lt;br /&gt;HTML5 WebSockets - a glimpse of the future. WebSockets will allow full-duplex text based and lightweight communication between web browsers and server applications. Limiting unnecessary traffic and decreasing latency. Looks great. You can even try it out today with some proprietriary solution (even IE6 compatible!). Google Chrome supports it already!&lt;br /&gt;&lt;br /&gt;JRuby - if you're tired with Java sth worth checking out. Dynamically typed language that has a pretty decent support. You can run Ruby on Rails apps in JEE container without much of a hassle. But who would want to do that if you have a nice and deterministic Ruby standalone server? :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://doc.akkasource.org/actors"&gt;Akka Software and their Actors&lt;/a&gt; - next attempt to sanitise threads management in JVM. Use queues, signals, asynchronous communication to achieve better performance and scalability. Avoid deadlocks and other thread nightmares.&lt;br /&gt;&lt;br /&gt;These were the most interesting bits I took from my recent attendance to GeeCON held in Poznan, Poland.&lt;br /&gt;&lt;br /&gt;"Let's move the Java world" (their slogan) - well, I haven't felt moved but it was quite interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-2741944384980127610?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/Sn0b23odPjU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/2741944384980127610/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/05/few-notes-from-geecon-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2741944384980127610?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2741944384980127610?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/Sn0b23odPjU/few-notes-from-geecon-2010.html" title="A few notes from GeeCon 2010" /><author><name>Wojciech Seliga</name><uri>http://www.blogger.com/profile/11923347478200368758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_9itee73ZiXE/TI_YqDCmaZI/AAAAAAAAAck/03OZNHNYxMc/S220/wseliga-72x72.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/05/few-notes-from-geecon-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4BQHw9eSp7ImA9WxFREko.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-2610036299582070936</id><published>2010-04-26T10:04:00.003+01:00</published><updated>2010-04-26T11:49:11.261+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-26T11:49:11.261+01:00</app:edited><title>Eclipse: objectContribution and IAdapterFactory</title><content type="html">This blog post will save my time in one year when I will need to use that technique again but won't remember how to do that :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The problem:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I want to contribute new context menu action to Mylyn &lt;span style="font-style:italic;"&gt;Task List&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;Task Editor&lt;/span&gt;. To make it not so simple the action should be available (enabled or visible) only for tasks which come from repository of type JIRA.&lt;br /&gt;This is quite simple to do for Task List. Just add viewer contribution to you plugin.xml, handle &lt;span style="font-style:italic;"&gt;selectionChanged &lt;/span&gt;in your action and that's it.&lt;br /&gt;&lt;br /&gt;Here is the plugin.xml example:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;extension point=&amp;quot;org.eclipse.ui.popupMenus&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;viewerContribution&lt;br /&gt;            id=&amp;quot;org.eclipse.mylyn.tasks.ui.views.tasks&amp;quot;&lt;br /&gt;            targetID=&amp;quot;org.eclipse.mylyn.tasks.ui.views.tasks&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;action&lt;br /&gt;                  class=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.actions.WatchAction&amp;quot;&lt;br /&gt;                id=&amp;quot;com.atlassian.connector.eclipse.jira.ui.actions.WatchAction&amp;quot;&lt;br /&gt;                label=&amp;quot;%Action.Watch.label&amp;quot;&lt;br /&gt;                menubarPath=&amp;quot;additions&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;visibility&amp;gt;&lt;br /&gt;                &amp;lt;systemProperty name=&amp;quot;com.atlassian.connector.eclipse.jira.ui.issue.selected&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;/visibility&amp;gt;&lt;br /&gt;      &amp;lt;/viewerContribution&amp;gt;&lt;br /&gt;   &amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and WatchAction example:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public abstract class AbstractJiraAction extends BaseSelectionListenerAction implements IViewActionDelegate {&lt;br /&gt;...&lt;br /&gt;    public void selectionChanged(IAction action, ISelection selection) {&lt;br /&gt;        // code goes here&lt;br /&gt;        updateVisibility(selection);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void updateVisibility(ISelection selection) {&lt;br /&gt;&lt;br /&gt;        Iterator&amp;lt;?&amp;gt; iter = this.getStructuredSelection().iterator();&lt;br /&gt;        while (iter.hasNext()) {&lt;br /&gt;            Object sel = iter.next();&lt;br /&gt;            if (sel instanceof ITask) {&lt;br /&gt;                ITask task = (ITask) sel;&lt;br /&gt;                if (task.getConnectorKind().equals(JiraCorePlugin.CONNECTOR_KIND)) {&lt;br /&gt;                    System.setProperty(JiraConstants.ISSUE_SELECTED_SYSTEM_PROPERTY, &amp;quot;true&amp;quot;); //$NON-NLS-1$&lt;br /&gt;                    return;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        System.setProperty(JiraConstants.ISSUE_SELECTED_SYSTEM_PROPERTY, &amp;quot;false&amp;quot;); //$NON-NLS-1$&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately there is no simple way to do the same for editor. The problem is that we have no selectionChanged notification when we go to another editor so we have no chance to disable our action or make it invisible. &lt;br /&gt;The bypass here could be to register as a workbench|site|page listener and get notifications when we switch between editors.&lt;br /&gt;But what is the &lt;span style="font-style:italic;"&gt;right&lt;/span&gt; solution here?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution is to use objectContribution instead of viewerContribution. Unfortunately in the current case we can contribute only to ITask object which means the menu will appear for all tasks. This is not what we want to achieve as we want to show menu only for Jira tasks. &lt;br /&gt;To solve the problem just register in the plugin.xml your own IAdapterFactory impelentaton which can translate ITask to your IJiraTask and contribute to the IJiraTask.&lt;br /&gt;&lt;br /&gt;plugin.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;extension point=&amp;quot;org.eclipse.ui.popupMenus&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;objectContribution &lt;br /&gt;           id=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.IJiraTaskObjectContribution&amp;quot; &lt;br /&gt;           objectClass=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.IJiraTask&amp;quot;&lt;br /&gt;           adaptable=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;action&lt;br /&gt;                  class=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.actions.WatchAction&amp;quot;&lt;br /&gt;                id=&amp;quot;com.atlassian.connector.eclipse.jira.ui.actions.WatchAction&amp;quot;&lt;br /&gt;                label=&amp;quot;%Action.Watch.label&amp;quot;&lt;br /&gt;                menubarPath=&amp;quot;additions&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;/objectContribution&amp;gt;&lt;br /&gt;  &amp;lt;/extension&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;extension&lt;br /&gt;         point=&amp;quot;org.eclipse.core.runtime.adapters&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;factory&lt;br /&gt;            adaptableType=&amp;quot;org.eclipse.core.runtime.IAdaptable&amp;quot;&lt;br /&gt;            class=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.JiraTaskAdapterFactory&amp;quot;&amp;gt;&lt;br /&gt;         &amp;lt;adapter&lt;br /&gt;               type=&amp;quot;com.atlassian.connector.eclipse.internal.jira.ui.IJiraTask&amp;quot;&amp;gt;&lt;br /&gt;         &amp;lt;/adapter&amp;gt;&lt;br /&gt;      &amp;lt;/factory&amp;gt;&lt;br /&gt;   &amp;lt;/extension&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Please note that &lt;span style="font-style:italic;"&gt;objectClass &lt;/span&gt;in &lt;span style="font-style:italic;"&gt;objectContribution &lt;/span&gt;points to &lt;span style="font-style:italic;"&gt;IJiraTask &lt;/span&gt;which means that we contribute the action to objects of type &lt;span style="font-style:italic;"&gt;IJiraTask&lt;/span&gt;.&lt;br /&gt;We also register &lt;span style="font-style:italic;"&gt;JiraTaskAdapterFactory &lt;/span&gt;which can try to adapt any object of type &lt;span style="font-style:italic;"&gt;IAdaptable &lt;/span&gt;(&lt;span style="font-style:italic;"&gt;adaptableType&lt;/span&gt;) to &lt;span style="font-style:italic;"&gt;IJiraTask &lt;/span&gt;(&lt;span style="font-style:italic;"&gt;adapter&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Let's look at the &lt;span style="font-style:italic;"&gt;JiraTaskAdapterFactory&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public class JiraTaskAdapterFactory implements IAdapterFactory {&lt;br /&gt;&lt;br /&gt;    private static final class JiraTask implements IJiraTask {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object getAdapter(Object adaptableObject, Class adapterType) {&lt;br /&gt;&lt;br /&gt;        if (!adapterType.equals(IJiraTask.class)) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (adaptableObject instanceof ITask) {&lt;br /&gt;            ITask task = (ITask) adaptableObject;&lt;br /&gt;            if (task.getConnectorKind().equals(JiraCorePlugin.CONNECTOR_KIND)) {&lt;br /&gt;                return new JiraTask((ITask) adaptableObject);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Class[] getAdapterList() {&lt;br /&gt;        return new Class[] { IJiraTask.class };&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;* We have &lt;span style="font-style:italic;"&gt;IJiraTask &lt;/span&gt;implementation here.&lt;br /&gt;* &lt;span style="font-style:italic;"&gt;getAdapterList&lt;/span&gt;() method returns IJiraTask.class which means we can adapt (translate) only to &lt;span style="font-style:italic;"&gt;IJiraTask&lt;/span&gt;.&lt;br /&gt;* &lt;span style="font-style:italic;"&gt;getAdapter &lt;/span&gt;tries to translate &lt;span style="font-style:italic;"&gt;adaptableObject &lt;/span&gt;to &lt;span style="font-style:italic;"&gt;adapterType&lt;/span&gt;. In our case we translate &lt;span style="font-style:italic;"&gt;ITask &lt;/span&gt;to &lt;span style="font-style:italic;"&gt;IJiraTask&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The result is that our menu will appear only for Mylyn tasks which come from JIRA repository.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-2610036299582070936?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/c18F5l2Y314" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/2610036299582070936/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/04/eclipse-objectcontribution-and.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2610036299582070936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2610036299582070936?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/c18F5l2Y314/eclipse-objectcontribution-and.html" title="Eclipse: objectContribution and IAdapterFactory" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/04/eclipse-objectcontribution-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBRX8_cSp7ImA9WxFREko.&quot;"><id>tag:blogger.com,1999:blog-8813074174707015455.post-2931729950978580114</id><published>2010-04-26T09:52:00.002+01:00</published><updated>2010-04-26T10:02:34.149+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-26T10:02:34.149+01:00</app:edited><title>Tip for Eclipse newbies</title><content type="html">Are you frustrated with the class and method names in the 'Project Explorer' view? Have you tried to filter them out with no success? &lt;br /&gt;&lt;br /&gt;If yes, then you should try 'Package Explorer' view. It is much more comfortable if workspace contains plenty of project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8813074174707015455-2931729950978580114?l=unimplemented.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Unimplemented/~4/uEX89MH5vx4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://unimplemented.blogspot.com/feeds/2931729950978580114/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://unimplemented.blogspot.com/2010/04/tip-for-eclipse-newbies.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2931729950978580114?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8813074174707015455/posts/default/2931729950978580114?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Unimplemented/~3/uEX89MH5vx4/tip-for-eclipse-newbies.html" title="Tip for Eclipse newbies" /><author><name>Jacek Jaroczynski</name><uri>https://profiles.google.com/112427208557053285816</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-jVduPOPn23I/AAAAAAAAAAI/AAAAAAAACRE/K5U0F0Fa8NQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://unimplemented.blogspot.com/2010/04/tip-for-eclipse-newbies.html</feedburner:origLink></entry></feed>

