Wow! The Eclipse C/C++ IDE, including the Linux variant, has passed 750,000 downloads for Indigo SR-1, in only 4 months.
— Doug Schaefer (@dougschaefer) February 3, 2012
![]() Doug Schaefer |
Eclipse C/C++ IDE reaches 750,000 downloads for Indigo-SR1
|
![]() Max Rydahl Andersen |
m2e(clipse)-wtp 0.15.0 : New & Noteworthy
Maven Integration for Eclipse WTP 0.15.0, a.k.a m2eclipse-wtp, a.k.a m2e-wtp is available. This release contains mostly bug fixes, but a few improvements managed to slip in. The complete release notes are available here.
m2e-wtp 0.15.0 is compatible with the JavaEE distributions of Eclipse Helios and Indigo, requires at least m2e 1.0 (works with 1.1) and mavenarchiver plugin >= 0.14.0 (0.15.0 should be automatically installed). As usual, m2e-wtp can be installed from :
So let's see what are the highlights of this new release :
Packaging inclusion/exclusion support improvementsFor war project, previous m2e-wtp versions used to use <packagingIncludes> and <packagingExcludes> attributes from the maven-war-plugin config to enable (or not) the deployment of project dependencies to WTP servers. In 0.15.0, the same level of support has been added to EAR projects using maven-ear-plugin 2.7+. However, the problem with this approach is, other resources (web pages, classes ...) are not properly excluded (using the <*SourceInclude> and <*SourceExclude> attributes).
In order to address this problem, Rob Stryker, committer on WTP and lead of JBoss AS tooling in JBoss Tools, provided an implementation for JBoss AS servers that might be generalized to other WTP server adapters (if they decide to do so). Basically, some new metadata is added to the project's .settings/org.eclipse.wst.common.component like :
The patterns are separated with a comma and exclusions take precedence over inclusions : resources matching one of the exclusion patterns are not deployed, even if they match one of the inclusion patterns. That solution is not maven-bound so any other kind of project can benefit from it. Now all m2e-wtp 0.15.0 does is map the maven patterns to their equivalent component metadata. This gives : In the example above, a warning is displayed as both <warSourceIncludes> and <packagingIncludes> are defined. Since both patterns could overlap, it might lead to some weird behavior where WTP would actually deploy more files than a maven CLI build. In order to minimize (we can not totally solve) that potential discrepancy we only keep the packaging patterns in the component files and recommend using <packagingIncludes> only.
Currently, this feature only works in combination with the JBoss AS Tools from JBoss Tools 3.3.0.Beta1 (nightly builds available from http://download.jboss.org/jbosstools/updates/nightly/trunk/), but we'll try to make other WTP Server adapter vendors support it in the future (as part of WTP core API).
Warnings added when unsupported dependency types are detectedAs of today, if a project depends on another workspace project of type ejb-client or test-jar, that specific dependency will not be packaged properly by WTP, as Maven would do in command line. Moreover, you'll experience some class leakage on the compilation and test classpaths in Eclipse (ex: non client classes being visible). The only known workarounds to this issue are to disable workspace resolution, or close the dependent project and rely on the dependencies from the local maven repository. Ideally, in order to make the deployment part work, we would need to introduce new WTP components, but the current WTP API doesn't support it, yet. So, until this is fixed, warning markers are added whenever a project depends on such "unsupported" types. That should hopefully give users an idea of the problem and how to circumvent it. Better handling of dependencies in war projectsPrevious m2e-wtp versions had, in some use cases, some outstanding issues with regard to dependency management of war projects. In particular,
Removal of conflicting facets on packaging changeIf you had a java utility project, that you wanted to upgrade to an EJB project for example, a constraint violation would be raised upon project configuration update (EJB and Utility facets can't be both installed). This has been fixed by removing all conflicting facets when you change the packaging of a Java EE project, making that conversion completely transparent.
What's next?m2e 1.1 introduces a new Eclipse to Maven project conversion API. It means that, in m2e-wtp.next, we will be able to automatically convert existing WTP project configuration to maven's. Dependencies will still need to be set/translated manually but that's a pretty good start IMHO.
|
![]() Markus Knauer |
Eclipse Juno M5 and Indigo SR2 RC2
Two releases of the Eclipse EPP packages today: The packages for Indigo SR2 RC2 (the second release candidate for the second service release of the Indigo release, based on Eclipse Platform 3.7.2) and the packages for this year’s Simultaneous Release Juno M5 (the 5th milestone based on Eclipse Platform 4.2) are available: http://www.eclipse.org/downloads/index-developer.php Please test and report any issues in Bugzilla. Especially the Eclipse 4.x team needs your help! The sooner bugs are found, the sooner they can be fixed! One of the changes is the addition of Eclipse Code Recommenders to the Eclipse for RCP and RAP Developers package. |
![]() Denis Roy |
EclipseCon Poll: What do you think of the location change?
I haven't done a whacky poll in a long time, so there's no better time than now. |
![]() Lars Vogel |
Eclipse Community Awards voting open. Please vote
Just a small reminder, the Eclipse Community Awards is currently open for voting. Please vote: http://eclipse.org/org/press-release/20120130_awardsvote.php I’m also nominated, as Eclipse Top Newcomer Evangelist |
![]() Jonas Helming |
Modeling Symposium Submission Deadline
Hi, |
![]() Blaise Doughan |
JAXB and Inheritance - Using XmlAdapter
In previous posts I have covered how to map inheritance relationships in JAXB. This can be done by element name (via @XmlElementRef), by the xsi:type attribute, or in EclipseLink MOXy using another XML attribute (via @XmlDescriminatorNode/@XmlDescriminatorValue). In this post the type indicator will be an XML attribute/element unique to that type, and we will leverage an XmlAdapter to implement this behaviour. |
![]() Roy Ganor |
How My Wife Drives the Technology World
ok, maybe a better name would be "Cloud-based Social-enabled Service-oriented Mobile-apps development", but that's a long and exhausting name especially for my "Thursday blogging day" :) Mobile App jQueryMobile (version 1.0) is really handy for creating cross-platform mobile interface, it provides easy to use APIs and is really covered well with lots of great examples. I had to use several other libraries like jQueryUrl, Moment.js, Mustache, requireJS and jsPDF. With so many "out-of-the-box" libraries it is super easy to build robust solution on for client side in minutes(!!!) Social-enabled: Facebook JavaScript SDK helped me with giving a more "social look and feel" after creating a Facebook application. I also used Facebook's OAth service authentication and Open Graph integration so users notify their friends about their activities with the "My Doctor Shifts" application. Service-oriented (and Data-centric) Zend Framework provides nice (lightweight) models representation and the MVC was useful to create the HTML view and services. Cloud-based Using phpCloud was easy as always with plenty of slick workflows helping me to easily deploy my application and push updates to staging and testing targets. This way I always kept two versions that represent my Work in Progress and Done apps. I also got packages ready for deployed in case I want to deploy it to another Zend Application Fabric instance. The application is available on github. |
![]() Jordi Böhme López |
Accessing a very large data set with mobile devices
A few months ago my colleague, Ralf Sternberg, wrote an article on “how to access a huge dataset with the web browser“. Now, if it’s possible to access very large datasets with a browser, wouldn’t it be really cool to access it in the same way with mobile devices? As you may have heard, we launched RAP mobile two days ago. And, we did just that. With RAP mobile you can access exactly the same dataset with exactly the same code as in Ralf’s post. The dataset contains over 500,000 emails totaling over 2GB of space. Check out the screencast below and the source code on github. What I find intriguing about this framework is that it is fast. There is no data on the phone. The information displayed in the UI is retrieved asynchronously from the server while the user is scrolling through this enormous set of data. The native iOS client takes care of the proper preloading, caching and memory management.
|
![]() Orion |
Orion Features in Firefox 10 and 11
Firefox 10 was released yesterday, and the release announcement highlighted developer tools such as the Orion-based Scratchpad as key features in the release. At the same time, Firefox 11 moved into their Beta channel. The Mozilla developer tools team released a cool video last week showing upcoming features in Firefox 11, such as a 3D Page Inspector, and a new Orion-based Style Editor. Scratchpad and Style Editor are the result of many months of close collaboration between the Mozilla dev tools team and the Orion Editor team. Congrats to Mihai, Kevin, and the rest of the Firefox team on another great release! |
![]() Jens von Pilgrim |
Dreaming of an Eclipse Plugin-Store...
or how to sell little tools for little money... |
![]() Andrew Overholt |
Eclipse at FOSDEM
This coming weekend is FOSDEM in Brussels, Belgium. It will be my first FOSDEM and I’m really looking forward to it. Lots of my fellow Red Hat, JBoss, and Fedora colleagues will be there, too (list of talks by Red Hatters as a PDF and as HTML). Eclipse content this year includes:
“FOSDEM is the biggest free and non-commercial event organized by and for the community.” There’s no registration required, so if you’re in the area, swing by! There are a lot of people that I’m looking forward to seeing and having a beer with this weekend but I’m especially looking forward to seeing the ever-awesome Alex Kurtakov again and to meeting my new teammate Krzysztof Daniel in person for the first time. Safe travels and see you in Brussels! Update: Gregoire de Hemptinne pointed out his talk on an EMF-based declaritive UI system, Wazaabi. |
![]() Tom Schindl |
e(fx)clipse 0.0.12 released
A little bit later than scheduled here’s the next release. This time the number of new features is smaller than in previous releases but there still some small nice additions. Let’s look into it. Update to latest upstream modulesThe new release comes with Eclipse 4.2M5. I also looked into up-dating the subclipse integration but at the moment the newest version is only provided for win32/64 and so I’m waiting until I can consume it from upstream. All other components (xtext, egit and mercurial) are unchanged. Linux SupportAs promised since the beginning. At the very moment the JavaFX 2.0 team provides builds for Linux e(fx)clipse will provide all in one downloads (one was able to install from the p2-site since the beginning). The JavaFX 2.0 Linux build provided is for 32bit and so is the e(fx)clipse all in one version you can download. The linux support though is still a bit limited – the live preview (JavaFX-SWT-Integration) crashed my Eclipse instance. CSSSupport for CSS 3 SelectorsI’ve added support for CSS 3 selectors as the screenshot below shows: Support for LCD TextI’ve added support for the newly introduced LCD Text support which is done in CSS using “-fx-font-smoothing-type” It’s not really easy to follow which CSS-Attributes are added and sometimes the docs are not correct so if you encounter an attribute you definately know is working but the CSS-Editor marks it as an error file me a ticket. Colors in CSSI’ve added 2 things when it comes to colors inside the CSS-Editor. You can use a color picker instead of entering the rgb-value manually: Thanks to Sebastian Zarnekow’s blog this was a piece of cake. And for already existing colors the hover will display it: FXGraphSupport for @DefaultPropertyElements who mark one for their properties as the @DefaultProperty are now respected and you can omit the attribute-name for them making your the file more readable in many situations – whether you make use of this feature is up to you. Support for Script-Value referencesThe syntax has been expanded to allow referencing of script values: FXMLIn this release it only received bugfixes. If you want to help with it file bugs, send me patches, … . ConvertersI’ve started working on SVG and FXG to FXML-Converters as I already outline in one my last posts my plan was to add them to e(fx)clipse to allow you converting those external formats to JavaFX 2.0 representations. You should not expect a lot for it as of now because they are in a very very early stage and as outlined in the above post JavaFX 2.0/2.1 (at least for SVG which I looked a bit closer) won’t provide enough API to implement a fully compliant convert as of now. The main purpose to add them already today into e(fx)clipse is to receive feedback from you on problems you encounter. I hope you share the source SVG and FXG drawings with me or even provide a patch? An interesting sidenote on this is that technically I’m transforming the source formats into an EMF-Model (there’s a specific one for SVG and one for FXG) and then do the conversion using xtend (a Eclipse and Java-Developer should get started with xtend within 30 minutes because the tooling feels so similar to your JDT-Editor). Just one final sentence on FXG: Adobe if this is really the spec of a format I’m happy I never had work with your stuff – take a look at SVG-Spec on how I expect someone to define a (graphic) format. Community SupportI’ve been receiving more and more mails to my private account and I’m always grateful to help but to not only put the burden on me I decided to open a google-group where people can ask questions, others can help too, … . I’ll try to update the fxgraph-reference as well but you know I’m doing this in my spare time and so things take time. If e.g. you mastered the first steps in fxgraph and want to share your findings, don’t hesitate to send a message to above group. I’ll plan to add an extra page to http://efxclipse.org so that people have a central place to find informations. I’m happy for reviews in blogs (even if there are things you don’t like about e(fx)clipse I want to know them). You can find the new group at: http://groups.google.com/group/efxclipse. Come, join and bring up ideas to make e(fx)clipse a success. What’s cooking for the next releases
|
![]() Orion |
Orion 0.4 M2 – New and Noteworthy
It has been another blockbuster milestone for the Orion project. This milestone brings extensive tooling improvements, including global search and replace, content assist for HTML, template completion for JavaScript, and CSS outline and error checking. The user interface has also had a major facelift with an eye toward giving more pixels to the most important content, and optimizing for mobile devices and touch displays. There is also a brand new user settings page, and a completely redesigned Git user interface. As always, you can give it a spin on OrionHub (sign up), or download your own copy. Read on below for more details. Replace across multiple filesYou can now replace matches across multiple files from the Search Results page. After performing a search, click Replace to open a slideout where the replacement text is entered. After entering the text, click Preview Changes to open a preview of all the matches to be replaced. From this page you can check or uncheck individual files or matches, and use next/previous diff buttons in the compare editor to cycle through your changes. Finally, click Commit to perform the replace. Search results improvementsYou can now navigate through search results using the Up and Down arrow keys on your keyboard. Push Right arrow to open a popup showing additional lines surrounding the search result, and Left arrow to close the popup. Find File dialog improvementsThere have been several improvements to the Find File dialog, accessed via Ctrl+Shift+R in the editor or by pressing ‘t’ on other pages:
JavaScript content assist templatesJavaScript content assist in Orion now provides templates for common control structures. Simply invoke content assist with Ctrl+Space, and select from among the available templates that match your current cursor position. Templates have been added for:
Some templates require you to fill in certain variables such as conditions or other values. Use Tab to iterate through the fields to be completed, and Enter to finish the template. JavaScript content assist variable and argument completionJavaScript content assist will now propose matching local variables and function arguments from all enclosing functions in the current script. HTML content assistContent assist has been added for HTML files. Invoking content assist in an empty file will produce a basic well-formed HTML 5 document. Completion is offered for all elements supported in HTML 5. Closing element tags are inserted where appropriate. For lists and tables, completion will also insert the first list item or table row for you: CSS Lint plug-inOrion CSS Lint integration, previously available as a separate plugin, is now included by default in the set of plug-ins distributed with Orion. In addition, this plug-in now provides an outline view for CSS files. New settings pageA new Settings page has been introduced. The JavaScript Editor tab allows customization of fonts and colors in the JavaScript editor. Note that changes take effect immediately across all editors you currently have open in the current browser. The Plugins tab shows the set of installed plugins, and supports adding and removing plugins. This page will evolve to show further details about each plugin as well. Navigator “Go up” commandA new command has been added to the Navigator page, allowing you to quickly navigate up to the parent of the current folder. Simply click Go Up, or use Alt+Up on your keyboard. Background progress reportingOrion can now report progress on multiple background operations at once, and even report progress on operations occurring in other frames and pages. This sounds simple, but anyone who has tried to do this on the web will realize how amazing this is. Click the progress button in the top right corner of the page to drop down a list of current and recent operations. From this list you can also visit a separate page showing a longer operation history. Related pages menuA new Related Pages menu has been added to the page header. This allows you to quickly navigate between multiple pages that deal with the same file or folder you are currently viewing. For example, from the editor page you can now quickly jump to the Git Log page showing commits involving that file. Revamped Orion headerThe header at the top of each Orion page has been overhauled and cleaned up. Highlights include:
For more information on the Orion UI design philosophy and direction, see the Orion Page Layout wiki page. Customized tablet/mobile presentationOrion styling has been tweaked to work much better on mobile devices. When using a display of 1024 pixels or less, we now pad the checkbox and twistie icons with more hittable breathing room.It is now much easier to check/uncheck boxes and invoke commands on a small touch screen. In addition, an editor problem with automatic uppercasing introduced with a recent iOS update has been addressed. The Orion editor now functions well again on iPad. Fork me on OrionOrion now uses URI templates to invoke commands on an Orion page using a URI. These commands are limited to altering the page layout such as opening input fields and dialogs. For example, you can now create a URL to initiate a clone operation on a particular repository. To see this in action, click Fork me on OrionHub to clone the Orion client code in your OrionHub account. Note you still need to manually click “Submit” after visiting the URL before the clone operation actually starts. New git repository pageA completely new Git Repositories page has been introduced in this milestone. This replaces the previous deep tree structure with a flatter, more web-like presentation. Most basic commands are available at a glance without having to drill down, making the page much easier to use on touch and mobile devices. The Working Directory section shows at a glance what changes you have made that require staging or committing. The Commits sections shows all incoming commits that require merging, and all outgoing commits that have not been pushed to the current branch’s remote repository. There are further sections listing all branches, tags, and remotes for the current repository. New git commit details pageA new Git Commit page has been introduced to accompany the new repositories page. Simply click on any commit from either the Repositories or Git Log page to open the commit details page. From here you can see all information about the commit, including author/committer, link to parent commit, associated tags, and diffs of all files modified by the commit. You can also tag or cherry-picka commit from this page. Save and apply Git patchesYou can now save unstaged changes as a patch to be reapplied later. From the Git Status page, simply select the files to be saved, and click Save Patch. Saved patches can be applied later, or by another user, by clicking Apply Patch on the Git Repositories page. A patch can be applied either from an uploaded file, or from a URL (such as a bugzilla attachment). Remove git tagsGit tags can now be removed. From the Git Repositories page, find the tag you want to remove and click Delete. Tag deletions can be pushed to a remote repository using the Push All command on the same page. Automatic password resetYou can now associate an email address with your Orion account from your Profile page. Once the address is confirmed, it can be used to automatically reset your Orion password if you forget it in the future. Server running Jetty 8We have upgraded the neolithic Jetty version we previously shipped with the Orion Server. We are now running and delivering the most recent Jetty 8.1 from eclipse.org. Enjoy! |
![]() Mickael Istria |
Goodbye PetalsLink, hello JBoss|Red Hat !
Today is my last day working for PetalsLink.
Working for PetalsLink was a quite interesting experience: On the technical side, I enjoyed moving all the XML-based tooling of PetalsStudio to a more powerful EMF-based approach for Petals JBI editor – for those who don’t know JBI, it is a standard that allows to define SOA artifacts in your ESB. Moving to EMF allowed us to provide better tooling faster, because most of the complexity in manipulating JBI can be removed with very few efforts leveraging EMF ExtendedMetaData. That was the first time I faced this part of EMF, and I got pretty impressed of how well it works (working with EMF always gives this impression of “being well”). I also improved the ability to plug new JBI components into the Studio, which is a critical point when you have to deal with connectors for almost everything – Mail, SFTP, Talend, XSLT…. So that was an interesting challenge in term of conception and development. Also, I had the great opportunity to work closely to several Eclipse projects:
The only thing I wish I would be able to do here is to push ahead the usage of Sonar at Eclipse, at least for GMF Tooling and Nebula. But I probably learnt even more things from PetalsLink by discovering another company organisation that is very different from what I could experiment before (OpenWide and BonitaSoft): PetalsLink is focused on the Research about SOA and agility of Systems of Information. It is a wide topic! Petals products are quite good compared to other alternatives in the SOA landscape, but they don’t meet the success they deserve, it was a bit frustrating for a developer. I enjoyed working for PetalsLink, all the expectations are fulfilled, so it is time for me to go ahead, to find a new experience, a new team, new challenges, new issues… I love discovering new things! That’s why I’ll start working for JBoss|Red Hat tomorrow, as part of the team developing JBoss Tools and JBoss Developer Studio. I’ll have the opportunity to work with a great team! My main occupation for the next monthes will be to assist Nick Boldt in making JBoss Tools CI and build infrastructure better and better. I’d also like to open the road towards efficient QA for JBoss Tools, including -among other- usage of Jacoco and Sonar. Then I’ll also work on developing nice stuff for some JBoss Tools modules, most probably on the SOA/BPM part. That’s gonna be a lot of fun! I’m eager to be tomorrow and actually get started for this new team/employer/project/product/users. Let’s keep in touch via this blog and twitter |
![]() David Bosschaert |
Backing up through FTP on a Mac
It's been a little over half a year now that I made the transition to mac. I was more or less forced into it by Dell because they didn't make the 1920x1200 high-res laptops any more that I like working with.
... a backup solution! I was always using Areca in the past which works great and had both Windows and Linux versions available. I guess everybody on Mac simply buys a Time Machine but I wanted to use my existing network storage drive for my backups. I found iBackup and used it for about half a year. It was seemingly able to do the work over a Samba mount to my network drive, although I did notice that I was getting many failure runs, in fact over half of the runs were failures. It might have been caused by the SMB implementation on my NAS drive, I don't really know but I noticed that it was having issues with relatively large files (over a couple of megs). I started looking at using FTP to do the backups instead (my NAS drive supports FTP) but iBackup doesn't support that. After looking around for a while I couldn't find any freely available backup option for Mac that uses FTP. I might have missed one or two, but in the end I started writing a little shell script to do the job. One of the things that I was worried about was the backup speed. My script logs in and out for every directory recursively so I was concerned that it would take much longer to complete than the SMB option. I was very surprised that for my data it took 9 minutes to complete, where the SMB-based option took several hours if it completed at all. So here it is, a simple little bash script to backup any directory on your mac using FTP, I invoke it like this example.. ftp-bku.sh ~/bin ~/docs ~/etc ~/utils Note that I have my FTP credential in my ~/.netrc file so that I don't need to provide them in the script itself... For those who are interested, you can find the script below (btw one thing that isn't completely reliable yet is the return code of the ftp program. It's 0 in some cases when there actually is a problem. Not sure if this can be fixed, although I could grep the output for error messages...) FTPURL=ftp://User@192.168.1.24:2121 function backup-dir {
|
![]() Hendrik Eeckhaut |
Xtext resource caching: loading resources 5 times faster
Those who cannot remember the past are condemned to repeat it (George Santayana). I've always felt ambivalent about that quote. History never ever repeats itself exactly. In computer science on the other hand, it applies very well. In all our collective software applications, we recalculate the same results time and time again and are therefore faced with constant question to remember or not to remember. In this blog series, I'm going to talk about a cache for Xtext resources that we've developed over the past year. |
![]() Philip Wenig |
More than 500 OpenChrom downloads this month!
OpenChrom breaks the 500 download mark today! It’s the first time that OpenChrom has been downloaded more than 500 times in a month since its start in April 2010. Jippie! |
![]() Doug Schaefer |
Change, sometimes it just happens.
Well, it's been almost two weeks since my previous employer decided it was time for me to make a career change. Of course there's more to it than that but that's all I'm going to say about that. "It is what it is," and I'm actually pretty excited to see where my career takes me next. |
![]() Ian Skerrett |
Creating a build you can trust
‘The build is broken’ is something I’ve heard too many times in my software development career. Concepts like continuous delivery and devops make it all that more important to have a build that you can trust. In the Agile ALM Connect session, Build Trust in Your Build to Deployment Flow ,Yoav Landman, founder of Artifactory, is going to demonstrate some of the techniques for using tools like Maven, Gradle and Artifactory to automate builds that release applications which are fully traceable, managed and trusted! Yoav has also participated in my Agile ALM Connect speaker Q&A series. He answers my questions about Artifactory and his company JFrog. 1. You are the founder of the Artifactory open source project. Why did you decide to create Artifactory? I started Artifactory in 2006. I was working as a consultant at the time and migrated a couple of large client projects from Ant to Maven 2. I was frustrated by the absence of good options to manage dependencies and hosting artifacts in house. There were a couple of tools out there, but they all lacked basic features such as searching and artifact uploading and were basically very immature, since the whole domain of Binary Repository Managers, didn’t exist yet. 2. We hear a lot about continuous delivery and devops. How is this effecting the build process and what issues do you think need to be considered? We are dealing a lot with continuous delivery in JFrog as part of our Artifactory on the cloud service, Artifactory Online. For us, the main effect on the build process is that artifacts are deployed much more frequently, which makes good binary management critical. Artifactory, as a repository manager is not just the target to which build results are deployed for usage by dependent builds, but also the source from which applications are deployed to production, and even where RPMs are installed from to newly provisioned machines. We are using the properties feature of Artifactory to tag artifacts that were moved to production so that they can be easily identified. Another important aspect is that snapshots can often be treated as releases, and so traditional staging/release workflows no longer fit the requirements of continuous deployment. 3. If someone wanted to get started with Artifactory where would you suggest they start? I think the best starting point would be downloading Artifactory from jfrog.com and watching this one-minute setup screencast. For someone who has never used a binary repository and wants to understand the benefits of using a tool like Artifactory, I’d suggest looking at this short intro. Other than that, Artifactory is real easy to set up and get up to speed with, and the online help in the UI makes it really useful to understand how to get around. Finally, there is of course the user guide and the users forum for getting more help.
|
![]() Wayne Beaton |
Vendor Neutrality in an Open Project
Imagine that you want to contribute to an open source project. You visit the project to browse the information provided by the project team and make your way to the downloads page. There, you discover that the downloads are hosted at a separate site owned and maintained by one of the project’s contributing organizations. Let’s say that the organization is a competitor of your own employer. Would you still want to contribute to that project? Would you feel invited to join? Would you feel that the project is open to your ideas? Vendor neutrality is a tricky thing to balance. Organizations that contribute to open source deserve some recognition, but if you cross the line from recognition to vendor bias, you may end up turning away potential contributors and their contributions. Splashing a few logos on a project page is a great way to provide recognition. Committer email addresses can very often also provide some amount of recognition. The trick is to stay on the right side of the line that separates “interesting; company X contributes a lot to this project” and “company X obviously owns and runs this project”. It can be very difficult to manage perception. Vendor neutrality is a requirement that’s baked right into the Eclipse Bylaws:
It’s something that we take very seriously. It’s not something, however, for which we have very many hard-and-fast rules. Managing vendor neutrality tends to be a subjective matter that is highly-dependent on perception. For example, it’s generally acceptable for a project to include a link or two on their download page to software that is hosted elsewhere. Some projects do this to provide more complete packages that contain the project code along with value-add software. There’s nothing wrong with doing this, provided that:
Similarly, providing links to services related to a project can be helpful for the adopter community. Again, there’s nothing wrong with doing this, provided that the playing field is level. If a project chooses to provide links to services, it must be done in a vendor-neutral manner: other providers of similar project-related services must have a means of having their links included. It’s often enough to just document a reasonable set of conditions that must be met for another organization to list their services. Or you can just outsource the problem completely and include a link to services listed in the Eclipse Marketplace. The Eclipse wiki provides further guidance concerning links to non-eclipse.org content. Vendor neutrality is a big and important part of project diversity. If you are an Eclipse project, you have to care about project diversity. By extension, you have to care about vendor neutrality. |
![]() Eclipse Announcements |
Voting is Open for the Eclipse Community Awards
Nominations for the Eclipse Community Awards are complete and voting has opened for the individual and project category nominees. Congratulations to all the worthy candidates! Show your appreciation to the people that have made Eclipse a stronger community by casting your vote. |
![]() Chris Daniel |
Life-saving Eclipse functionality
As you know, I am working on Eclipse Fedora Build. Eclipse 3.8 ("almost M5") will get soon into Fedora Rawhide repository very soon. and then, a nice version selector appears: My work was wonderfully resurrected! Thank you, Eclipse! |
![]() Max Rydahl Andersen |
JBoss Source Lookup
The JBoss Tools Source Lookup plugin automatically adds a source attachment when debugging JBoss AS servers. The plugin has been tested with JBoss AS 7.x and JBoss AS 6.1.
Installing the JBoss Source Lookup plugin
Install the JBoss Tools Source Lookup category and restart Eclipse.
Using the JBoss Source Lookup plugin
The use and debugging of this plugin is demonstrated in the following screencast: Debugging JBoss AS server.
The JBoss Source Lookup plugin enhances source attachment in the following way:
You don't have to add any JBoss AS Runtime to the classpath. I have added it in order to ensure the classes within the runtime are included in the Java Search and in order to be easier to add a breakpoint.
Debugging Apache Tomcat and Glassfish servers
The JBoss Source plugin can serve to debug other servers. If a server includes mavenized archives, the JBoss Source container will find, download, and show source files.
If you want to debug Apache Tomcat and/or Glassfish, you have to do the following:
If you debug Tomcat, you can choose $TOMCAT_HOME/lib. When debugging Glassfish, you can choose $GLASSFISH_HOME/lib and $GLASSFISH_HOME/modules.
In a similar way you can debug Apache Tomcat server. The ApplicationFilterChain.java is placed in the Tomcat's catalina.jar archive.
The Source Lookup plugin finds source for a mavenized archive as follows:
The Source Lookup preferences page enables you to add/remove, enable/disable and/or change ordering of Nexus repositories. You can see that the helloworld project I have used in this blog, is not a maven project (it doesn't contain the maven icon).
The plugin doesn't have to be used for debugging only. It will find, download and open a source file for a mavenized archive included in the classpath when double-clicking a class file in the Package Explorer view, opening it using Navigate>Open Type or some other way.
The JBoss Source Lookup plugin can be used for any Java project and any launch configuration.
Note: When starting debugging the first time, it could take some time until m2e updates indexes and the JBoss Source lookup plugin scans the container's directory. |
![]() Ayushman Jain |
Null Analysis for Fields with Eclipse JDT
It is common knowledge that Eclipse has an intra-procedural null analysis capability, augmented recently with null annotations for inter-procedural analysis in Juno M4. However, a big flaw and pain point till now was that the anlsysis would only work for local variables/parameters, and NOT for fields! Strange, innit? Well, a bunch of problems with handling fields prevented the initial null analysis implementation to be generic enough to handle fields as well. Access from different threads, through different objects, initialization of even final fields in different constructors were some of the roadblocks because of which this work was put on the backburner. However, even though we haven't found a holy grail to tackle these problems, we've come out with atleast a basic implementation of null analysis for fields! Rejoice!
A. The Problem Prior to Juno M5, the following code snippet would raise null warnings only on the local variable, but not on the field. B. The Solution See the Juno M5 new and noteworthy page for the new null analysis for fields. Note that for non-constant fields, we only raise "potential NPE" warnings even if the field has been assigned null or compared against null because we assume that there's always a chance of another thread modifying it between the assignment/comaparison and the actual reference. So consider the following snippet C. Not quite there yet? There are a few limitations with the current null analysis for fields:
public Object field1; void foo(Test test) { if (field1 == null) { System.out.println( field1 .toString()); // "potential" NPE warning } else { // do something } System.out.println(field1.toString()); // Potential NPE warning here if (this.field1 == null) { System.out.println( this.field1 .toString()); // "potential" NPE warning } else { // do something } System.out.println(this.field1.toString()); // Potential NPE warning here // access through object 'test' will raise no warnings. See below if (test.field1 == null) { System.out.println( test.field1 .toString()); // no warning } else { // do something } System.out.println(test.field1.toString()); // no warning } } This is a limitation of the current code analysis infrastructure and we hope to address this sometime soon. The soon to be released null annotations support for fields will greatly assuage this problem in the short term. Please do start using this new feature. Even with its limitations, its quite useful and we've found a long list of unsafe code patterns in the Eclipse SDK itself. Deepak's post here presents one such example Apart from this, Juno M5 has more interesting items. See my previous post on pre-built indexes, Stephan's post on Resource leak warnings and the Juno M5 new and noteworthy page for more. Stay tuned! |
![]() Lars Vogel |
Eclipse 4 Application Tutorial available (for Eclipse 4.2 M5)
A while ago I published an Eclipse e4 tutorial. Things have been moving quite a bit in Eclipse 4 since then. I’m pretty excited about the capabilities of Eclipse 4, therefore I re-wrote my tutorial to show the capabilities of Eclipse 4. This tutorial focuses on the application model and the dependency injection capabilities. More Eclipse 4 tutorials are available on http://www.vogella.de/eclipse.html in the category Eclipse 4 Development but I have not yet spend sufficient time to polish their content. I hope you like it. It was a significant amount of work I invested into the description. Please let me know if you find errors. I also would like to thank Brian de Alwis, Tom Schindl, Remy Suen, Paul Webster, John Arthorne and Eric Moffatt for answering my questions. |
![]() Bryan Hunt |
Google Summer of Code 2012 with Xtext, EMF, and MongoDB
The Eclipse Google Summer of Code for 2012 will start coming to life soon, and I have an idea for a project involving Xtext, EMF, and MongoDB. Ed Merks and I have created a project called MongoEMF that allows you to persist EMF objects to MongoDB. MongoEMF has the ability to query objects based on attribute and reference values, but is lacking some functionality and robustness. We think a re-write of the query engine using Xtext and EMF would make for a great Google Summer of Code project. This project has a very well defined scope, is easily unit tested, and involves some pretty cool technology. The project will consist of two major parts. The first will be to define a query grammar (possibly re-using an existing grammar) using Xtext. The result will be an EMF query model that can be serialized and de-serialized to a string. The string will be used as the query portion of a URI, and must be human readable. For example: mongo://host/db/collection/?(tag == ‘java’ || tag == ‘JSON’) && (category == ‘Eclipse’). Clients will be able to specify the query as string or EMF model. The second part of the project will be to create a processing engine that builds a MongoDB query from the EMF query model. The result will be a DBObject that can be sent to MongoDB as a query. An example use-case is as follows: A client constructs an EMF query model. The query model is then serialized to a string and included in a URI. The URI is sent to a server in a HTTP GET call. The server extracts the query string from the URI and re-builds the EMF query model. The query model is passed to the query engine and a DBObject is returned containing a MongoDB specific query. The DBObject is sent to MongoDB resulting in some number of DBObjects returned. The resulting DBObjects are converted into EMF objects and returned to the client. The student is expected to develop extensive unit tests for his / her code as well as end-user documentation. Documentation will be contributed to the UserGuide on the MongoEMF wiki. We also anticipate that the student will become a committer on MongoEMF, and will continue to provide bug fixes and enhancements after the project is complete. We consider this to be an advanced Eclipse project. The student should already be comfortable coding in Java and developing OSGi bundles with Eclipse. A student with working knowledge of EMF will be preferred, but you are not required to already know Xtext or MongoDB. If you are interested in this project, I would recommend forking the MongoEMF project on GitHub and experimenting with the latest code in the master branch. Instructions for setting up your environment can be found on the Development wiki page. If you have any questions, please comment on this post. This project idea will be included on the Eclipse Google Summer of Code wiki soon. |
![]() Annamalai Chockalingam |
Eclipse Spykit V2 Available
Hey Guys |
![]() Jan Kohnlein |
Impressions on GEF
For the Generic Graphical View project I've been digging deep into the Graphical Editing Framework (GEF) lately. GEF is the base technology below almost any graphical framework in the Eclipse environment. I wanted to keep the tool stack as low as possible and have the maximum control on everything so I decided to use GEF directly. Here are my impressions. Pecularities In some areas GEF appears to be kind of rusty. A whole bunch of relevant commercial products has been relying on it for years. Long term backward API compatibility has taken its toll. Some things definitely need a serious overhaul and often a better naming. I am very happy to hear that a 3.0 version is planned. Here is my wishlist for improvements:
Mutable Geometric PrimitivesAs many other graphics frameworks, GEF code tries to create as little new objects as possible. Geometrical primitives such as points, dimensions and rectangles are therefore mutable and reused often. There are even things as a static Rectangle.SINGLETON for temporary calculation. This pretty much reminds me of good old C++. I am not sure whether such optimization is still necessary. It results in pretty unreadable code:Point p = figure.getLocation();You see: As the semantics of the variable changes, it is no surprise you cannot find a more expressive name than p. In addition, you have to be very careful if you are dealing with a reference or a copy. Modifying a Translatable (once again bad name, as Dimension also implements this interface) directly can also circumvent an event mechanism. This is really error prone. I'd strongly advise to introduce immutable primitives. Coordinate TransformationsThe way transformation between local, global and parent coordinates are handled is somehow unsuggestive. I've used various 2D and 3D scenegraph-based frameworks but I never got as confused with coordinates as in GEF. For example, if you have a ScalableLayeredPane showing some scaled content, its translateToAbsolute(Point) method will not take the scaling into account while translateToParent(Point) will.Some Hints Starting with GEF from zero is hard. You will likely spend a serious amount of time debugging why your diagram doesn't show anything at all. Better copy some basic setup from one of the GEF examples. Here are my favorite pitfalls:
|
![]() Ayushman Jain |
Faster Java search using pre-built indexes with Eclipse JDT
JDT indexes referenced libraries (or JARs) in your projects for use in the Java search. However, in most cases these libraries seldom change, and the indexing may be costly and take time when you invoke search for the first time after adding the JAR on the buildpath.
From 3.8M5 onwards, you can avoid this redundant indexing by providing a pre-built index for each classpath entry in the classpath container. This feature was recently implemented in bug 356620. So how do you generate the indexes in the first place? 1. Create the JAR 2. Go to Run Configurations>Eclipse Application. Give a name to the configuration, viz. indexer, and in 'Main' tab choose Run an application, and use the list to select org.eclipse.jdt.core.JavaIndexer 3. Go to the 'Arguments' tab and use the arguments -option <indexFileLocation> <jarFileLocation> in addition to the existing ones. 4. The index file will be generated at the specified location. Now when the JAR in question is being added to the build path of a project, the classpath containers can add the index location to classpath, which will look as follows: <classpathentry kind="lib" path="C:/Users/IBM_ADMIN/Desktop/TestIndex.jar"> <attributes> <attribute name="javadoc_location" value="file://C://abc"/> </attributes> </classpathentry> Voila! JDT will no longer index the JAR and even the first search will be lightning fast! Note: This feature is mainly intended for plug-ins that implement their own classpath container, not for the end user. |
![]() Holger Voormann |
How to use Vex as a Widget – Article in Eclipse Magazine
Florian’s article on how to use Vex as an editor widget has just been published in the German Eclipse Magazin 2.12. In a sample dialog Vex is used to enter Wiki text in the WYSIWYG way. Vex is a pure SWT widget and doesn’t require any web browser. It’s an alternative to the solution FCKEditor in a browser widget which Thomas Kratz recently described in his post. Vex is an acronym for Visual Editor for XML. With Florian’s WYSIWYG Wiki editor we have to rename Vex into Vest: Visual Editor for structured text. |
![]() Ekkehard Gentz |
mobile development – my next sessions + events
here’s an overview of my upcoming sessions and events and I would be glad to meet you there: M-Days – Frankfurt, 2012-02-01: Location Based ServicesAt the Mobile Days in Frankfurt I’m talking about Location Based Services. In many of my customer projects I’m using Location Based Services, have integrated Maps, track GPS etc. I’ll talk about good practices, tips and tricks and demonstrate some of my work. You’ll find me at Developer Stage 1 on Wednesday 2012-02-01 at 13:00. In the night I’ll also attend the Mobile Media Night At M-Days I’ll first time use my new Camholder from Heiko Behrens (@HBehrens) – will later blog about my experiences with heikos awesome new product. BBDevCon Europe – Amsterdam, 2012-02-08: SuperAppsOnly some days later I’ll speak at BlackBerry Developer Conference about developing Super Apps. I’m happy to meet some friends again and looking forward to get the newest informations about BB10 – the future OS for BlackBerry. Mobile Developer Conference – HH, 2012-02-15: Push ServicesMore and more mobile applications are using Push Services. Unfortunately there’s no common API and so you have to know the differences and what’s possible on the different platforms. I’ll talk about PushServices for Apple, Google, Microsoft and RIM. Mobile Tech Con 2012 – Munich 2012 – 2012-03-29: Power Workshop CascadesNext MobileTechCon is in Munich – not far from Rosenheim, where I work and live. I’ll present a full-day Power Workshop about the new UI Framework Cascades from RIM. With Cascades you can write great apps in a short timeframe with awesome animations. Designers and Developers can work hand-in-hand: a PlugIn for Photoshop allows you to easy move graphical work and drag it into your QML Editor. Cascades is one of te reasons why I as a developer am sure, that RIM will came back in 2012. Using Cascades you can develop Applications for PlayBook 2.x and also upcoming BB10. EclipseCon America 2012
|
![]() Birt World |
BIRT Runtime Addition
As part of the 3.7 release BIRT now uses a BIRT POJO runtime. This change was described in the BIRT 3.7 New and Notable. If you are using a version of BIRT prior to 3.7 be sure to check out the Migration Guide. As part of the 3.7.2 release of BIRT which will be released in a couple of weeks, the team has decided to release a second runtime that uses the OSGi runtime. This new download will function similar to the BIRT runtime prior to BIRT 3.7 and is available on the full downloads page. You can try out the 3.7.2 release candidate version of this download by selecting the release candidate on the recent builds page. |
![]() Max Rydahl Andersen |
Getting Started with JBoss Developer Studio 5.0.M5 and JBoss Central - It's Not Just a Welcome Screen
One of the great advantages of working with open source software is the freedom of choice that it provides you. You aren't locked in by vendors or arcane licenses, you can choose the combinations of components that you want to work with. In doing so, however, you will likely have to invest time and effort in integrating these components to work together. Accomplishing these integration tasks can be difficult.
But, luckily, with JBoss Developer Studio, this integration work is already done for you. In JBoss Developer Studio, you have access to a rich JEE development environment that leverages JBoss technologies. JBoss Developer Studio provides graphical editors, integrations with source control systems, and the ability to configure servers and deploy applications to them, all from inside an eclipse-based environment.
In the past, managing all these integrations required you to use multiple tools and actions. You could, however, do all these tasks without shutting down or leaving JBoss Developer Studio. That’s an important point to keep in mind as one of the goals of an IDE is to provide you with an environment in which you can perform development without having to exit the IDE to perform other common tasks such as staying up-to-date with new developments affecting the software with which you are working.
What was missing was a single utility to help you to access and stay up-to-date with JBoss technologies, news, examples and manage the specific plugins that you choose to install and use with JBoss Developer Studio.
The recent M5 ("milestone 5") build for JBoss Developer Studio 5 includes an answer to this problem: JBoss Central.
(Note: This post is written from a Developer Studio perspective. JBoss Central, however, is also included in JBoss Tools.)
By default, JBoss Central is the first view that is displayed when you open JBoss Developer Studio. (OK, it’s really the second, after you get past a welcome view that has only one option - JBoss Central). But, JBoss Central is more than a welcome screen, it is a full featured "center of gravity" to assist you in both getting started with JBoss Developer Studio and in continuing and expanding your use of JBoss Developer Studio.
How is JBoss Central different from a welcome screen? In three important ways:
Let’s take a quick tour of JBoss Central. JBoss Central is divided into two tabs: Getting Started and Software/Update
The Getting Started tab looks like this:
and includes these options:
The other tab, Software/Update, looks like this:
As its name implies, Software/Update enables you to install features into JBoss Developer Studio and then update them. By default, JBoss Developer Studio, is configured to enable you to install and update features for source control, testing, and web development. It’s worth noting that while Eclipse does already include features to install software and keep it up-to-date, Software/Update is a more visual and easier to use.
Now, let’s take a more detailed look at one way JBoss Central is more than a welcome screen. We’ll start by installing one of the quickstarts. We’ll use the simplest quickstart, helloworld:
And, here’s where JBoss Central becomes an active helper, and not a passive bystander. Instead of failing to install the quickstart because of the lack of an installed server runtime, JBoss Central determines which runtime is missing, and will download and install it for us. Note that these quickstarts illustrate features suported by JBoss’ new AS7 server (http://www.jboss.org/as7).
So, let’s be lazy and let JBoss Central downlaod and install the server for us:
Now, it’s a simple matter to deploy and run the quickstart:
We’ll do it through Maven:
Once the quickstart is installed, we start the server, deploy the quickstart, and, in the tradition of all helloworld applications, here’s the minimalist output:
To sum it up, while it’s still a work in progress, JBoss Central is more than a welcome screen or an “on-ramp,” it’s an active and dynamic center of gravity for JBoss Developer Studio and a place that you will want to return to again and again as you use JBoss Developer Studio.
References:
http://docs.jboss.org/tools/whatsnew/central/central-news-1.0.0.M4.html
https://community.jboss.org/wiki/EasyPluginInstallationFromJBossCentral
|
![]() Ian Skerrett |
Dev + Ops = Getting Software Deployed Faster (DevOps)
DevOps is one of those terms you hear a LOT about lately but I am not sure it is really well understood. However, if you are going to be successful at Agile ALM it would seem natural you would want to bring the operations side of IT closer into the development process. Puppet is one example of an open source project that is implementing some of the DevOps concepts. When we put together the program committee for Agile ALM Connect we specifically wanted an expert from the DevOps community to make sure the program had a healthy devops slant. Therefore, I was thrilled to have Lukes Kanies, the founder of Puppet and CEO of PuppetLabs, agree to be on the program committee and also speak at Agile ALM Connect on ‘what is devops’ and introduce Puppet. We will also have Kenn Hussey talk about Geppetto, an Eclipse-based Puppet IDE. In my Q&A series with Agile ALM Connect speakers, Luke answered three questions about DevOps. 1. ‘DevOps’ is a term that is used quite a bit lately. How do you describe the term DevOps and why should developers care? DevOps is in to operations what Agile is to development. Operations needs to be a competitive advantage, adopting new technology quickly and with minimal business interruption, but in many cases the business goals have been lost and the new focus on policy and compliance has allowed IT to become a cost center. DevOps is about operations teams working closely with everyone involved in product delivery to make sure that business needs come first. This often involves a lot of automation, but the main thing is about making sure the customer comes first, just like in agile development. Developers should care because organizations following devops practices will do a better job of supporting them, getting their software deployed faster and more easily. 2. You are the founder of the Puppet open source project. Why did you start Puppet? 3. What advice do you have for people that want to learn how to use Puppet?
|
![]() Dave Carver |
Does Popularity = Success?
Does the current popularity of an open source project, automatically mean that it is successful? It can but how do we define successful for an open source project? Just because a project is popular does not necessarily mean that it is successful. It just means at that point in time and duration it is also getting a lot of attention. I’ve been involved with a wide variety of open source projects over the last 15 years. Several I’ve started. Several I’ve participated in from both as a community member and as a committer. Some I would say have been popular at one point or another, other’s I would say never hit the “High School” popularity meter thresh hold. Popularity is defined by Merriam-Webster’s Learner’s dictionary as, “state of being liked, enjoyed, accepted, or done by a large number of people : the quality or state of being popular”. Successful is defined as “having the correct or desired result.” So being successful does not necessarily equal popularity. A successful open source project is one that has met its desired goals and objectives. One of them could be, to become popular, and blogged about, and tweeted about constantly, but the winds of popularity change at a moments notice. Success lasts for as long as the project is meeting its stated goals. Success is defined by the commiters and the community that forms around the project. Is it meeting its user’s needs? Is it growing its user community and committer base? Is it adapting and changing to meet knew requirements? These are just some of the criteria that a project can be measured on to be successful. Yes, popularity can be one criteria, but it should not be the sole deciding factor. We need to be careful on tying success to popularity alone. There are many projects out there that I would consider successful that have never hit the popularity threshold. Those projects may not be used by Millions of people, but they have built a community around their project, and provide value to that community. How many people are using it, or number of companies that have adopted it, should not take away from the success of the project if it has met its objectives. So success is going to mean different things to different people. There is no one way to measure if project is successful. To me, if your project even gets a handful of people forming a community around it, you are already successful. |
![]() Deepak Azad |
Weird code pattern in Eclipse SDK
In recent Juno milestones JDT has added several new static analysis capabilities - resource leak detection (Juno M3), annotation based null analysis (Juno M4), null analysis for fields (Juno M5). This week I have been testing these new features on the entire Eclipse SDK source code. While there are quite a few 'gems', the following code pattern occurs quite frequently. If the object can be null at the first if condition, how is it magically guaranteed to be non-null at the second if statement? :-) As Stephan mentioned in his blog today - Help the JDT Compiler helping you. Please start using the new static analysis options and report any issues you find. In the process you will certainly make improvements to your code as well. |
![]() Eclipse Announcements |
EclipseCon 2012 Gold Sponsors Announced
The Eclipse Foundation is pleased to announce the Gold sponsors for the upcoming EclipseCon 2012 conference in Reston, Virginia on March 26-29, 2012. Actuate, IBM, Oracle, Red Hat and SAP have all agreed to be the premier sponsors of the annual Eclipse community event. |
![]() Stephan Herrmann |
Help the JDT Compiler helping you! - 1: Resource Leaks
During the Juno cycle a lot of work in the JDT has gone into more sophisticated static analysis, and some more is still in the pipe-line. I truly hope that once Juno is shipped this will help all JDT users to find more bugs immediately while still typing. However, early feedback regarding these features shows that users are starting to expect miracles from the analysis On the one hand seeing this is flattering, but on the other hand it makes me think we should perhaps explain what exactly the analysis can see and what is beyond its vision. If you take a few minutes learning about the concepts behind the analysis you’ll not only understand its limitations, but more importantly you will learn how to write code that’s better readable - in this case for reading by the compiler. Saying: with only slightly rephrasing your programs you can help the compiler to better understand what’s going on, to the effect that the compiler can answer with much more useful error and warning messages. Since there’s a lot of analysis in this JDT compiler I will address just one topic per blog post. This post goes to improvements in the detection of resource leaks. Resource leaks - the basicsRight when everybody believed that Eclipse Indigo RC 4 was ready for the great release, another blocker bug was detected: a simple resource leak basically prevented Eclipse from launching on a typical Linux box if more than 1000 bundles are installed. Coincidentally, at the same time the JDT team was finishing up work on the new try-with-resources statement introduced in Java 7. So I was thinking: shouldn’t the compiler help users to migrate from notoriously brittle handling of resources to the new construct that was designed specifically to facilitate a safe style of working with resources? What’s a resource?So, how can the compiler know about resources? Following the try-with-resources concept, any instance of type Resource life cycleThe expected life cycle of any resource is : allocate—use—close. Simple again. From this we conclude the code pattern we have to look for: where does the code allocate a closeable and no call to close() is seen afterwards. Or perhaps a call is seen but not all execution paths will reach that call, etc. Basic warningsWith Juno M3 we released a first analysis that could now tell you things like:
If the problem occurs only on some execution paths the warnings are softened (saying “potential leak” etc.). Good, but… Signal to noise - part 1It turned out that the analysis was causing significant noise. How come? The concepts are so clear and all code that wouldn’t exhibit the simple allocate—use—close life cycle should indeed by revised, shouldn’t it? In fact we found several patterns, where these warnings were indeed useless. Resource-less resourcesWe learned that not every subtype of Indeed we found a total of 7 classes in
For none of these does it make sense to warn about missing To account for these classes we simply added a white list: if a class is in the list suppress any warnings/errors. This white list consists of exactly those 7 classes listed above. Sub-classes of these classes are not considered. Wrapper resourcesAnother group of classes implementing Well? What’s your answer? The correct answer is: it depends. A few examples:
How many leaks? With same added smartness the compiler will signal only one resource leak: on
Summarizing: wrappers don’t directly hold an OS resource, but delegate to a next closeable. Depending on the nature and state of the nested closeable the wrapper may or may not be responsible for closing. In arbitrary chains of wrappers with a relevant resource at the bottom, closing any closeable in the chain (including the bottom) will suffice to release the single resource. If a wrapper chain is not properly closed the problem will be flagged against the outer-most wrapper, since calling Also for wrappers the question arises: how does the compiler know? Again we set up a white list with all wrapper classes we found in the JRE: 20 classes in Status and outlookYes, a leak can be a stop-ship problem. Starting with Juno M3 we have basic analysis of resource leaks; starting with Juno M5 the analysis uses the two white lists mentioned above: resource-less closeables and resource wrappers. In real code this significantly reduces the number of false positives, which means: for the remaining warnings the signal-to-noise ratio is significantly better. M5 will actually bring more improvements in this analysis, but that will be subject of a next post. |
![]() Chris Daniel |
Fedora Eclipse Build: Introduction
It has been almost a month, since I stared my work for Red Hat. |
![]() Eclipse Announcements |
Program Announced for the OMG/Eclipse Workshop
The Eclipse Foundation and OMG are pleased to announce the program
for the third Eclipse/OMG Workshop on open specifications and open source software. The Workshop will occur on Sunday, March 25 in Reston,
Virginia at the same location as EclipseCon 2012. |
![]() Lars Vogel |
The end of Eclipse 3.x
Currently we have in my option the unfortunate situation that Eclipse did fork itself into a 3.x and 4.x stream. Fortunately this is going to change. I think it is worth to put emphasis on the statement of Mike Milinkovich. Quote: As of the Juno release, Eclipse 4 is going to be the base platform for the Eclipse ecosystem. [SNIP] Eclipse 3.8 will also ship as part of the Juno release, but currently there are no 3.x releases planned after that.. I think its great the the platform gets ride of the two code lines. For users this means that they should give the Eclipse 4.2 milestones a try. For Eclipse projects this means that they should test their plug-ins based on Eclipse 4.2. For vogella.de this mean that I should update my Eclipse RCP tutorials. Both should report bugs in case they find issues. Happy bug hunting! |
![]() Tasktop Team |
Why I joined Tasktop
So rather than admire Tasktop from a distance, I joined it! I first worked with Tasktop last year as a consultant developing the initial implementation of what has become the Mylyn Model Focusing Tools project. That was a great opportunity to get to know some of the team and the Tasktop way. Everything I saw then fit nicely with what I’d already intuited. We have a really great combination of engineering excellence, creativity and lightweight organization. It’s nice to say “we” again — I hadn’t realized just how much I’d missed having colleagues to work together with on challenging problems. The morning I joined Tasktop, I saw a stream of emails from everyone welcoming me to the team. I must admit to some cynicism about the whole “team” thing — like so much else, it can be an empty word that doesn’t match up to reality — but in this case it feels very genuine. So heartfelt thanks to everyone. It’s an exciting time to be building software tools. It might sound funny, but I like to think of software development as a helping profession. That’s because I think that software products really can help people live more fulfilling, interesting and even happy lives. When I tell my family and non-techie friends that I’m working on Automated Lifecycle Management (ALM) tools I get a blank look. So instead I remind them that almost everything we do relies on software and that software programs are by far the the most complex artifact that humans have ever created. And I tell them that software development communities are growing ever more diverse, distributed, interwoven and complex. So what do we do at Tasktop? We build software that embraces those complexities. Tasktop Dev tackles the issue of software complexity. It handles a lot of the repetitive and boring stuff, simplifies and clarifies everything else, and is deeply and imaginatively integrated with other development tools. Tasktop Sync and Code2Cloud — along with other exciting tools that we’re working on — tackle the even more challenging issue of community complexity. Even a relatively small software product might involve code developed by a rich community spanning companies, technologies, continents, and even (think about the Open-Source movement) different economic models and incentive systems. And in larger projects thousands of developers might be collaborating across all of these dimensions. Software development efforts are intimately connected with customers, management, marketing, support, regulators and every other imaginable kind of stakeholder. All of these people need to talk to one another, and it seems that everyone uses different tools to manage the unique aspects of their tasks or work environments. Tasktop builds software that helps those tools to work together so that everyone can focus together on the stuff that matters. In short, we break down boundaries and help people communicate. That’s worth doing. |
![]() Chris Aniszczyk |
Kepler
Just to let everyone know, some members of the eclipse.org community recently voted on naming the next simultaneous release after Juno gets released in June 2012. Taking input from the community, the Eclipse Planning Council finalized the name to be Kepler. Personally, I think it’s a great choice and a nod to Johannes Kepler. |
![]() Felipe Heidrich |
How to load content in your IFRAME
When we started the TextView we used an IFRAME as the top most element.Over the time we changed the way we load the content of the IFRAME a few times, in this blog I will go over what we learnt in the process. This method works on all browsers but is not without limitations. First, it is possible that iframe.contentWindow is undefined. This happens when the parent is not connected to the DOM.Another similar problem is that the parent (or an ancestor of it) can be hidden, in which case the browser can choose to notapply any styling to it.The second problem is using STYLE instead of LINK to include the css files. In order to use STYLE we need to download all the filessynchronously one after the other. Another problem using STYLE is that all the URIs in the CSS are relative to the page base URI, which causes problemsduring deployment. The solution for these problems is to wait for the load event of the iframe to write the html and to use LINK to include the css files: This code is step forward, it solves the problem when iframe.contentWindow is undefined.Using LINK also means that all files are downloaded in parallel and there is no problems with relatives URI inside the CSS.The main problem with the code above is that the CSS are not loaded at the time body is being accessed. The solve this problem our initialsolution was to use the load event for the Here is where things get ugly, there are number of problems:
The version above is almost our current solution. Except that it does not work on Firefox. For some reason, on Firefox the frameDocument.readyState stays permanently set to "interactive" when document.write() is called from the iframe load handler. The only way we found to detected that all CSS are loaded was checking the cssRules of each stylesheet (thank you Mihai).
This is all the code that was needed to load the content into the iframe - somewhat extreme if you'd ask me. Probably the most pertinent question is why we are using an iframe, the answer to that is definitely another post... |
![]() Felipe Heidrich |
Using the Orion Editor with AlmondIn my last post I gave instruction how to use the Orion Editor without requirejs, since then the code changed quite a bit and the instructions in the last post no longer work. We changed all the editor files to follow the AMD spec (you can find more details about this change here). It is still possible to use the editor without requirejs but you will need to use an AMD "shim" loader. The one I recommend is almond. To illustrate how to use the editor with almond I decided to write an simple application for that. It is actually an upgrade of the code snippet written by Andrew Niefer in this post. You can find my version of the code in gist. Besides changing the snippet to use requirejs I have also added a few extra features. Here are the instructions: First, in your blog post add a
Here is an example: This gets rendered to: Now that the introduction part is over I'd like to talk about the process I used to create the orionformatterbuilt.js file which is the compiled version of orionformatter.js.First lets take a look at what a html page with requirejs needs to do use orionformatter.js: It only needs to include "requirejs/require.js" and point data-main="orionformatter", very clean. The second script element setting the baseUrl was just necessary because our directory structure is a bit different. The next step is to replace requirejs by almond. Note that to use almond directly it was needed to include all the required files manually. Another difference is that requirejs ensures that orionformatter only runs when the dom is ready. With almond we don't get that, that is why the load event handler was necessary. Now is the time to run the requirejs optimizer on almond. This is the magic:
Notes:
orionformatterbuilt.js the html above can be simplified to this:In some cases, like when using the Orion Formatter with Blogger, it might not be possible to add a load event handler to the body. The workaround is add the script elements at the end of the body. The html would look like this:
|
![]() Ian Skerrett |
Integrating Lifecycle Tools with OSLC and Eclipse Lyo
Lifecycle tool integration is a key issue for the new breed of tools emerging around the concepts of Agile ALM. Eclipse is a great platform for tools integration on the desktop but how do tools integrate on the server? OSLC and Eclipse Lyo are a specification and open source implementation for solving lifecycle tools integration. Michael Fiedler and Steve Speicher will be talking about OSLC and Eclipse Lyo at the upcoming Agile ALM Connect conference. To introduce people to the Agile ALM Connect speakers and topics, I will be doing a short Q&A with some of the speakers. Below Michael and Steve provide some background on OSLC and Eclipse Lyo. 1. What is OSLC and why does the industry need OSLC? OSLC (Open Services for Lifecycle Integration) is an open community dedicated to reducing barriers for lifecycle tool integration. The community authors scenarios and specifications for exposing application lifecycle data (change requests, test cases, requirements, etc) through uniform interfaces which rely on the architecture of the World Wide Web and Linked Data standards. Organizations use a variety of lifecycle tools – commercial, open source and those developed in house – which need to share data, resources and assets. Current integration approaches are often based on fragile and proprietary point-to-point APIs. Tools adopting OSLC can interoperate easily using a linked data approach which enables loosely-coupled integrations with improved quality, navigation and traceability of shared data. 2. How would you like people or companies to contribute to the Eclipse Lyo project? Individuals and companies are welcome to participate in both the Eclipse Lyo project and in the OSLC workgroups. The Lyo project is looking for developers interested in promoting OSLC adoption by developing SDKs, reference implementations, compliance tests and examples. OSLC workgroups develop integration scenarios and specifications to address different aspects of the system and software lifecycle (requirements, development, test, etc). Workgroup participation is open and is a great way to learn more about OSLC and contribute to new and evolving specifications. 3. What is the best resource to start using OSLC and Eclipse Lyo? Getting started with Eclipse Lyo and OSLC is easy. To get started with Lyo, visit the Wiki on eclipse.org (http://wiki.eclipse.org/Lyo) to get an overview of the project. To participate in Lyo development, you can start by introducing yourself on the development mailing list, lyo-dev@eclipse.org. To participate in OSLC, visit http://open-services.net/participate and join in the discussions on the forums, mailing lists and workgroup meetings. |
![]() Wayne Beaton |
Top Ten Ways to Say Eclipse
Every couple of days, I get an email from somebody looking for a price quote for Eclipse. Generally, the sender is a software reseller acting on behalf of a client. Sometimes they ask to partner with us, sometimes they just want a simple price quote. In all cases, I answer with some boilerplate text that I keep around:
Now, the interesting thing for me, is the number of different product names people use to describe the thing that they want to buy. Here are a few of my favourites (in no particular order).
There’s a couple in there that seem to come out of nowhere, obviously from folks who have us confused with somebody else. Curiously, I get almost no email about soccer clubs or vampires. |
![]() Thomas Kratz |
Richt Text Editor for Eclipse/SWT
I have been looking around, but a feasible Rich Text Editor for SWT seems to be hard to find. I finally came accross the FCKEditor integration from the JFire/Nightlabs guys. They do not promote it, but it works fine for me. I had to grab some dependencies from different repos at nightlabs and make some hacks to make it play nice with the Rest of my app, but it looks stable and works on all platforms (some other editor needs a xulrunner, thats still messy on 64bit platforms) as it uses the Browser widget to render FCKEditor. Customized FCKEditor in an eclipse e4 RCP app. |
![]() EclipseLive |
Upcoming Event: Webinar: Transforming development visibility and productivity with Borland StarTeam 12.0 and Tasktop |
![]() Eclipse Jetty |
i-jetty 3.1 Released
Release 3.1 of i-jetty for Android is now available from the Android Market and the i-jetty download page. This release updates the embedded Jetty to jetty-7.6.0.RC4, although the majority of the changes have been to the Console, which is a webapp that allows you to interact with your Android device from a remote browser. Higlights include:
Here’s a screenshot showing tracking my phone as it moves from the Sydney Opera House to Fort Denison on Sydney Harbour: Enjoy. |
![]() Peter Kriens |
Objects RevisitedAlan Kay is the inventor of Smalltalk, the first fully truly object oriented language. I learned Smalltalk in the early eighties and almost everyday that I use Java I am crunching my teeth that James Gosling did not steal more ideas from Smalltalk. About 20 years ago, during an OOPSLA, Alan Kay presented the idea that data should always carry its own methods to access that data. His example was |
![]() Gunnar Wagenknecht |
Use Target Definition Files in PDE Build
I’m not hip when it comes to building Eclipse based products. I still use plain vanilla PDE Build. The cool guys all switched to Tycho. Well, you’re allowed to call me dinosaur then. Anyway, I’ve been using I also use them to drive PDE Build. Instead of specifying stuff to fetch for a build again I simply point PDE Build to the same Previously, this was implemented by transforming the <target name="buildTargetPlatform" unless="skipTargetDefinition">
<!-- note: this requires pde.core (from Juno) in the base builder -->
<pde.provisionTargetDefinition
targetFile="/path/to/my.target"
destinationDirectory="${repoBaseLocation}/target"
clearDestination="false"/>
</target>
|
![]() Michael Jastram |
ProR Snapshot Build available
Good news to everyone interested in ProR - we finally have a snapshot build available on the RMF website. If you are interested in ProR, ReqIF, etc., please give it a spin.
|
![]() BJ Hargrave |
Juke Box Hero, Got Stars In His Eyes
|
![]() Jae Gangemi |
happy 2012 |
![]() Laurent Goubet |
Traceability test case : UML to Java generation
The next version of Acceleo will introduce a number of improvements of its existing features, one of its most important, the automatic builder, being entirely re-written in order to get rid of legacy code and improve the user experience. This also comes with a much better experience for users that need to build their Acceleo generators in standalone, through maven or tycho. More news on this are available on the bugzilla and Stephane's latest post. On the left-hand side, a file that has been generated. On the right-hand side, an editor opened as result of using the action "open input" : the model is opened and the exact element that was used to generate the part of code is selected. Find the part of a generator that created a given part of the code On the left-hand side, the same generated file as above. On the right-hand side, the result of using the "open generator" action : the Acceleo generator which generated that selected part of the code is opened, with the exact source expression selected. Real-time Synchronization These are but a few of the features that can be derived from the synchronization between code, model, and generators. Some more examples include : previewing the result of a re-generation, incremental generation, round-trip (updating the input model according to manual changes in the output generated code)... Most of these features are better seen in video to get an idea. If you want to see some of them in action, some more flash videos of what traceability can do for you are available on the Obeo network (though a free registration is required). |
![]() Andrei Loskutov |
Eclipse job in Böblingen
We (Verigy) have a job opening for a Java / Eclipse developer in Böblingen / Germany. Details on G+. |
![]() Gunnar Wagenknecht |
Upcoming Events
I know some of you already finished planning for the next few months. There are a couple of interesting events I’ll attend which might be of interest for you. Thus, I thought sharing won’t hurt. FOSDEM (Feb. 4 – 5, Brussels, Belgium)I’ve never been in Brussels before. I’ve also never been at FOSDEM before. Andrew told me about his plan to generate some nice Eclipse buzz there. Well, it looks like that will turn out great. Mike will be there too. We’ll have an Eclipse stand for people to show some projects and talks about Eclipse and we’ll also give a few talks about Eclipse. Mine will be about EclipseRT. EclipseCon (March 26 – 29, Reston, Virginia, USA)Ok, this one is a classic (for me). I’ve been there before. You gotta have to be there! However, this year my flight to EclipseCon will be shorter. The event moved from the west coast to the east coast. Frankly, I always wondered about switching location away from Santa Clara. But I’ll also miss San Francisco. It’s a beautiful city always worth a visit. Yet it took me three EclipseCons until I finally visited it in 2009 for the first time. I may need to find a new event in that area. JAX (April 16-20, Mainz, Germany)Also bit of a classic, I like that event. It’s packed with lots of sessions and people. I’ll talk about developing cloud applications with Eclipse Gyrex. Our first major version (1.0) is only weeks away and that talk will be a great opportunity to learn more about Gyrex and see how we use it to solve some interesting problems. Hope to see you soon at any of the events! |
![]() Jan Kohnlein |
Multitouch Gestures in the Generic Graph View
In my previous post, I've already described the discovery mechanisms of the Generic Graphical View project: Starting from one node you can step by step reveal other connected nodes in the same model. The model itself is fixed - it is still a view! - but the user can decide herself which subset of elements should appear in the diagram. That behavor allows to create diagram views focussed on a specific semantic aspect of the model. |
![]() Mariot Chauvin |
Modeling 2.0 : Let's collaborate!
A bit of history 4 years ago, when I joined Obeo, I started to work on a new modeling tool dedicated to system engineering. The main focus of this tool was to enable system engineers to model graphically complex systems with different representations, for each speciality, depending on their viewpoint. The tool was associated to a methodology and integrated in a modeling workbench. Separation of concerns by representations was a first step to scalability of graphical representations, another was to add several mechanisms (layers, filters, hide/reveal) to allow end users to hide some elements. The approach is somehow similar on what Miles is working on. We took the decision to create a generic runtime with the possibility to specify graphical representations and to drive the tooling by the viewpoints. The approach has similarities with Jan current's work, and I think our work inspired him a little bit. Since the runtime has been used for safety analysis (diagram screenshot) and several other use cases. However, although our tool primary concerns was collaborate modeling since its inception, we did not offer directly a solution to the concurrent access problem. In fact, we left it to the Revision Control System (RCS) used by end users. As Alex wrote concurrent access management by RCS have several drawbacks, so we decided to offer the possibility for end users to collaborate more seamlessly. On the technical side, we decided to use CDO, a technology we had experienced successfully in others projects, and which seems to match the most to our requirements. As our graphical modeling technology is based on GMF Runtime, our global technical task was to integrate GMF and CDO. GMF and CDO, integration challenges If you are used to component architecture like the Eclipse platform one, you may think that these two components will plug together quite easily. Unfortunately, this is not the case for various reasons :
On our product, the work is still in progress, but we he have implemented solutions for most challenges presented above. During this work we opened several issues :
As you may seen, the CDO team has been very responsive, and already provided fixes for most of them. I would like to thank them for their availability and help. This blog entry present results coming from a work collaboration between Thales and Obeo. Ce message de blog est issu d'un travail en commun entre Thales et Obeo. |
![]() EclipseLive |
P4Eclipse Tutorial
Abstract:
|
![]() EclipseLive |
Modernize your ALM Architecture with Tasktop Sync 2.0
Abstract:
|
![]() Roy Ganor |
Getting Started with Facebook App Development
Last week I was playing with Facebook App development, getting ready to the Facebook announcement. It was quite pleasant experience, although things could be simpler. The Facebook Open Graph concept gives a nice overview on what and why this all about, so that part went very smooth. When things get technical, the Facebook Developers site turns messy. That is, all topics are covered in a 'tutorial' approach rather than an API approach like most developers are used to. Moreover, the layout of this page is definitely not intuitive as it mixes between reference and tutorial docs. That's said, the general experience was good.
|
![]() Vojimir Golem |
Getting started with PlayN (Part II)
Part I has shown how to install and use the PlayN a cross-platform game abstraction library. In this screencast you will see how to use Eclipse IDE to run/edit/debug cross-platform games developed with PlayN. |
![]() Hudson-CI Blog |
First Hudson Release from Eclipse Foundation
The Hudson team is pleased to announce its 3.0.0 Milestone 0 release from the Eclipse Foundation. We have worked diligently and expertly over the past year to get to this milestone release. Since release 1.398 the Hudson community has benefited from the team’s work through the introduction of the 6-week release cycle, based on a new development and release process and the ongoing work on bugs, enhancements and new features What is included in this release?The M0 release is the first release of Hudson as a top level technology project from the Eclipse Foundation. It has been a very busy 12 months for us and that is shown in the large numbers of new features, enhancements and bug fixes the team has developed. Over 50+ new features and enhancements cover:
Over 350 bugs across the full range of Hudson have been fixed especially focused on stability, performance and the core SCM plugins such as GIT and SVN. In parallel to this, in August 2011 the team began the process of submitting the Hudson core code to the Eclipse Foundation The foundation has stringent entry requirements on all project source code and third party licences to ensure they are IP and license clean. Hudson’s source code, split over 10 core modules, has now been approved and is available in the Eclipse GIT repository. There are over 200 third party libraries distributed with Hudson (including many that relate only to plugins). Some of these are LGPL licensed libraries that the Eclipse Foundation does not accept under any circumstances. The team developed and implemented a strategy to replace these with more suitable libraries ensuring little impact on the core code or Hudson plugins using them. For example:
The balance of the libraries were considered for submission to the IP checking process. In itself this is no small task. Each library has to be submitted with its source code. Some of the libraries were so old that the code was not readily available or had been forked with local changes. The Hudson team modernized the code through such means as replacing forked libraries with current versions and working with library owners to feed forked changes back into the latest library versions. The Eclipse Foundation contacts owners and contributors to libraries to establish IP cleanliness. As you can imagine, this is a labour intensive process but the work of both the Hudson team and library owners has ensured that over half of the 100+ third party libraries have been approved already. This core set of 100+ libraries represents those that are physically packaged in the core war. The rationalization and approval process for the balance of the libraries is ongoing. But the result of this mammoth effort is that Hudson is ready to move forward and develop features related to the high level themes that the community agreed upon. The final part of the effort in the leadup to this M0 release is the work that has been done on both the Hudson Eclipse website and wiki. Much of the content from the older hudson-ci.org has been rewritten or updated and moved to the new infrastructure. Over 70 pages are now available from the new sites, including the recently published Hudson Book (151 pages of material in it’s own right) that contains the most up to date information on installing, administering and using Hudson. What can you contribute to this release?As an alpha release we are not expecting miracles! But the release has gone through development and testing cycles and we are very pleased with the results. You should be able to run this release of Hudson on your container of choice and expect it to behave well. You can install plugins and expect them to run. With the changes to libraries detailed above there may be some issues that we need to address quickly. Known issues will be with any plugin that uses JFreechart. We are in the process of either forking or contacting plugin owners to create the dependency on the external plugin. But the plugin may not yet be available from the update center. Keep an eye on the blog and Twitter feed for the latest news. If you have any issues or further enhancements relating to this Eclipse release Please raise issues in the Eclipse Bugzilla system which you can find at https://bugs.eclipse.org/bugs/ - Hudson lives under the top level Eclipse Technology project. You will need to register for an Eclipse BugZilla account to log issues if you don’t already have one. For more information on the Hudson community, mailing lists, forums etc. please head over to the communities page. Feel free to join us at the next community phone call to voice your opinions and experiences with this new release. What is coming next?It’s our intention to release monthly milestones until we get to our first approved Eclipse production release. By which time we feel that the Hudson project at Eclipse will be fully functional and ready for migration of your production servers. In the meantime, updates will continue in parallel on hudson-ci.org for all your production Hudson needs. Susan Duncan |
![]() Eric Rizzo |
Today is "strike" day to protest SOPAToday is "strike against censorship" day to protest the SOPA and PIPA bills that are attempting to pass in the US Congress. Please educate yourself about the potential negative impacts of these laws and get involved. http://sopastrike.com/strike https://www.google.com/landing/takeaction/ http://americancensorship.org/ |
![]() Jan Kohnlein |
Discovery Diagrams for the Generic Graphical View
If you've read my previous posts or seen my presentation at EclipseCon Europe 2011, you'll already know the Generic Graphical View framework: Using two Xtext-based DSLs - one for mapping semantic to graphical elements and the other for styling the figures - you can easily create nice looking diagrams for any Java based model. |
![]() Stephane Begaudeau |
Maven integration in Acceleo
With the release of the new Acceleo stand alone front end for the compilation of Acceleo modules, I’ve started to work on a brand new maven integration in Acceleo. Currently in Acceleo, if you need to build Acceleo modules with maven you have to use a Tycho based build with a java class generated by Acceleo to tweak the build (for example to register the metamodel(s) used in the modules). This Tycho based build will always produce an Eclipse plugin as a result. The next major release of Acceleo will have a maven plugin dedicated to the compilation and it will bring several key improvements. Firstly, the new compilation front end brings a completely stand alone compilation. Those who want to build their Acceleo modules without having to build an Eclipse plugin will be able to do so. Secondly, this new front end support more complex project structures (with for example, multiple output folders in a same project). Thirdly, you will have the ability to contribute a class to influence the uris of the dependencies in the saved files (for example, change all the uris of the dependencies to other module to “platform:/plugins” uris that are more “eclipse plugin” friendly). Finally, it also features an improved resolution of the dependencies of a project with several options. Your project will be able to have a dependency to Acceleo modules in another project (that should have been previously compiled). A valid Acceleo project is just a directory on the file system with at least one “source” sub-directory and one “output” sub-directory (no need of an Eclipse nature or anything like that). This first solution is fine as long as you have the source code of the other modules but sometime you need to build something with the dependencies in jars. The maven plugin for Acceleo will let you declare a dependency to a jar containing already compiled Acceleo modules by using:
For those who want to have a look at this new maven based build for Acceleo, you can find its source code on github.com and you can test it with a simple pom.xml like this one. |
![]() Mik Kersten |
Happy Birthday Tasktop
Five years ago, on Friday January 15th, I defended my PhD thesis on Focusing Knowledge Work with Task Context. The following Monday, January 17th, we incorporated Tasktop Technologies. Driven by the years of research that it took to prove that tasks are more important than files, integration is more important than features, and that focus begets flow, we embarked on a journey to bring to market a transformation in how we work and collaborate around software. Our journey and passion have been fueled by our customers and our open source community, as to date we have not taken any external funding, and instead embarked on what’s more recently been defined as the Lean Startup approach to building a company in an Agile and customer-centric fashion. Bootstrapping, we have doubled in revenue and nearly doubled in head count each year since our inception, and now support over a thousand customers and over a million open source users. Working closely with our ISV partners, the Eclipse community and open source ALM projects, we are proud to be one of the key contributors defining the future of ALM.
In addition to the opportunity to be a part of a transformative endeavor, what’s guided our vision is a manic focus on the needs of individual software workers. Mylyn and its commercial counterpart, Tasktop Dev, materialized because the growth in complexity of software and the fragmentation of ALM tools were bringing our and our fellow developers’ productivity to a halt. Tasktop Sync was born out of the same need to give other stakeholders such as testers, project managers and business analysts, a connected and collaborative view on the software delivery process. With our focus on integration, our goal is to empower developers and other stakeholders in order to advance ALM to support the rise of the software-powered economy. We want to take this birthday moment to thank all of the customers and partners who have made it possible for us to do what we love, which is to invent the future of ALM and to strive for our goal of doubling the productivity of software developers and managers. We hope you like the next round of innovations that we are hard at work for launching in 2012, which will be a definitive year for software, for ALM and for Tasktop Technologies. |
![]() Kim Moir |
2011 by the numbers
2011 was an exciting year in the Eclipse community. From my corner of the Eclipse universe, he's what it looked like: I contributed a chapter on Eclipse to the Architecture of Open Source Applications in 2010 and the book was published in May 2011. Thanks to Amy Brown and Greg Wilson, for their long hours editing and providing feedback to the authors of this book. It's a great read! When Greg first approached me about writing this chapter, my immediate thought was "How hard could it be? I live and breathe Eclipse all day". It was much more difficult that I imagined but in the process I learned a tremendous amount and am a better committer for the experience. Many thanks to DJ Houghton and John Arthorne for reviewing my drafts and providing valuable feedback. A special thanks to Jeff McAffer who I interviewed about the decision to switch to OSGi in 3.0 and Steve Northover for his suggestions to make the SWT section into something more pixel perfect. Merci Olivier Thomann for answering my many compiler questions, and Boris Bokowski and Paul Webster for their thorough discussions with me regarding the modelled workbench and dependency injection in 4.x. Also, thanks to Mike Wilson to allow me the flexibility in my job to spend some time at work working on this chapter. I'm excited to see that Amy and Greg are now editing a second volume of this book. Six milestones, many release candidates, two service releases, and one coordinated release, four streams, thousands of builds, millions of tests No rest for the committers. 143 bug fixes I closed about 143 bugs in the releng bucket in the past year. That doesn't seem like much really. I'd have liked to solve more. The largest issues implemented from a releng perspective were shared licenses, code coverage, and the largest work item, the Git migration. 42 Git repos The Equinox and Eclipse projects migrated all their repos to Git. We now have about 42 Git repos. This involved a tremendous amount of work on the part of the Eclipse team as a whole. There were many whiteboard drawings and detailed discussions about the migration process with John, Paul and a Mr. Gheorghe. There was no Ringo. Thank you Paul for all the huge amount of testing, script writing, and migration of all the ui and e4 repos. Thanks John for your work many sage suggestions on our Git migration, as well as your suggestion to implement the git flow method to simplify our development and build processes. Thanks Andrew Niefer for migrating many of the Equinox and PDE repos, Bogdan Gheorghe for your work with SWT, and Oliver Thomann for testing JDT Core repos. Thanks Tom Watson for your Git advice, having already climbed the Git learning curve while working on the OSGi Alliance repositories. To Dani Megert and Markus Keller, your always fine attention to detail and pointing out areas that could be improved is appreciated. Paul is giving a talk about our migration at EclipseCon 2012 called Let's Git this Party Started. I'm sure it will be insightful and entertaining. One EclipseCon, two talks, one castle, many great people I was privileged to attend EclipseCon Europe in Ludwidsberg this past November and present two talks. I thoroughly enjoyed preparing these talks, and even more presenting them. On the Wednesday morning, I talked about our Git Migration, and that evening I gave a talk with John Kellerman about history of Eclipse over the past 10 years. After the second talk, a few people came up to me and said that the talk was so good that it should have been a keynote. That was very fantastic to hear because we really put a huge amount of effort into that presentation. I also had a lot of fun talking to people at our booth where we had posted many pictures of the Eclipse family from over the years. The Saturday after the conference Simon Kaegi, Eric Moffatt and I visited Heidelberg castle. Canada scores very low on the castle index so this was a treat. You can't buy Eclipse magazines or giant pretzels at train stations in Canada either. I was impressed. 19 blog posts I didn't have much time to write blogs posts this year. The most popular one I wrote this year was about smashing open source stereotypes. I'm never sure how popular a blog post will when I write them. It's always a surprise. The comparison of Mozilla and Eclipse build infrastructure I wrote last year still holds the record for most popular (it ended up on reddit). One marathon, many kilometers of training How is running related to release engineering? Running keeps me sane when release engineering gets crazy :-) Preparing for the Ottawa marathon in May means that you have to start training at the end of January. Running through snow, ice, wind and rain teaches you there isn't really anything you can't do when you are willing put in a lot of hard work to reach your goal. And when you reach that goal, there's a lot of joy, because you know that you have conquered all the obstacles in your path and emerged victorious.
Who knows what 2012 will bring? |
![]() Kai Toedter |
Eclipse 4.x talk for JUG Ostfalen
If you are interested in the Eclipse 4.x Application Platform and happen to live close to Braunschweig (Germany), join my talk for the JUG-Ostfalen: “Was ist neu bei der Eclipse Rich Client Platform 4.x?” When: Friday, January 20th, 7:00 pm After my session there is another talk: “Agile Review” (Eclipse Plugin) by The event is free: Registration and info is here: http://eclipse4.eventbrite.com/ Would be great to see you there! Kai You find me on Twitter and Google+. |
![]() Ankur Sharma |
OSGi Tracing in Equinox
The Equinox implementation of OSGi provides the tracing APIs in org.eclipse.osgi plug-in since Eclipse 3.5. The tracing options are generally Boolean flags stored in a .options file as key-value pair. A typical .options file would look like this
org.my.plugin/ui=true org.my.plugin/ui/editor=true org.my.plugin/ui/prefs=true org.my.plugin/debug=false org.my.plugin/debug/data=true The hierarchy is defined using the slashes. But this is only a general practice. The tracing does not understand this. -osgi.debug To load the values from the .options file, provide the file name as command line parameter (or program parameter in launch config) command line arg example eclipse.exe -debug C:\tracing\.options program argument (in launch config) example -Dosgi.debug=C:\tracing\.options Using -debug is same as setting the osgi.debug system property. Accessing the option values at runtime 1. In RCP application If the RCP application has access to the org.eclipse.core,runtime.Platform object and thus they can access it directly like this String value = Platform.getDebugOption("org.my.plugin/ui"); User can validate if the program is running in debug mode using Platform.inDebugMode() API. 2. In pure OSGi application An OSGi application can access these options using the DebugOptions service ServiceTracker debugTracker = new ServiceTracker(bundleContext, DebugOptions.class.getName(), null); debugTracker.open(); DebugOptions debugOptions = (DebugOptions) debugTracker.getService() boolean uiOption = debugOptions.getBooleanOption("org.my.plugin/ui", false); Using the API has the advantage that user does not have to check for nullness. More Tracing API org.eclipse.osgi provides more APIs which are very helpful in logging the trace. 1. Registering a debug option listener The listener can be registered as service using the BundleContext (that you receive in the activator class when the bundle is started) final Hashtable<String, String> properties = new Hashtable<String, String>(4); properties.put(DebugOptions.LISTENER_SYMBOLICNAME, TracingConstants.BUNDLE_ID); bundleContext.registerService(DebugOptionsListener.class.getName(), new MyDebugOptionsListener(), properties ); 2. Listening to the debug option change events Once the listener is registered, a callback will happen each time a debug option is changed. The callback does not tells you the delta and instead throws the whole lot. So we can use this place to read and init from the DebugOptions /* (non-Javadoc) * @see org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions) */ public void optionsChanged(final DebugOptions options) { //DebugTrace trace; trace = options.newDebugTrace("org.my.plugin"); // boolean field DEBUG = options.getBooleanOption("org.my.plugin/debug", false); } this is just an indicative code. You don't have to necessarily do it this way. 3. Writing to trace This is the easiest part. Afterall the reason we did the whole exercise was to make the tracing simple. A handle to trace object can be obtained from the debug options. /** Trace object for this bundle */ private final static DebugTrace TRACE = MyPluginActivator.getDefault().getTrace(); // returns the trace object obtained using options.newDebugTrace("org.my.plugin"); @Override protected Control createContents(final Composite parent) { if (MyPluginActivator.DEBUG) { TRACE.traceEntry("/debug", parent); } ... ... } Checking MyPluginActivator.DEBUG is optional. TRACE.traceEntry will check for the flag "/debug" anyway. This is to improve of the performance. We store the the flag values to boolean fields and update them through the listener. 4. Where is the log file? The log is stored in the file as set in the debug options. By default, it tends to store them to workspace\.metadata\trace.log options.setFile(new File("/path/to/trace/file")); 5. Controlling the trace logs The logs are conntolled by two system properties eclipse.trace.size.max : The system property used to specify size a trace file can grow before it is rotated eclipse.trace.backup.max : The system property used to specify the maximum number of backup trace files to use Easier way to manager the logs? PDE will be providing UI for managing the logs and make them dynamic. See Bug 296631. This is mostly like to make it to Juno M5 release. What do you mean by dynamic? If you notice, the debug options can be loaded at the launch time (using -osgi.debug) or programatically when running. However, if you wish to turn the tracing on/off in a running product, its tricky. PDE will be providing an extension using which a plug-in can expose its debug option flags. The UI will display these flags in preferences where they can be turned on/off for a running application. Cool! isn't it? * If you find any discrepancies in the above post, please bring it to my notice so that they can be updated. Update: Tracing UI is now available in latest Integration builds and will be there from Juno M5. |
![]() Tom Schindl |
SVG for FXML-Conversion
So some weeks ago I read Jasper Potts blog on FXG to FXML-Conversion tool (useing simple XSL-Stylesheet). This blog Jasper asked if there’s probably one day someone providing a conversion tool for SVG. This has been on my list for some time now and because I was traveling a bit in the last 2 weeks I had some time to hack on such a converter. I’ve not used XSL but instead used xtend (svg-parser (java),fxml-converter (xtend)) (because an XML-File comes with a lot of multiline strings). It took some time to wrap my head around SVG and how I could translate this in FXML/JavaFX 2.0 API calls but I finally I’m at a point where I have something to show off: Please note that the JavaFX 2.0 image on the left is only made up of primitive JavaFX 2.0 elements (Circles, SVGPaths, Rect, Gradients, …) and it by far does not yet handle all the nifty stuff one can do with SVG but it shows me that such a conversion tool is doable to some extend though e.g. when it comes to filtering, … SVG has much more definitions than the JavaFX-API currently provides. I was not even able to convert the SVG-Gaussian-Blur to JavaFX’ Gaussian-Blur (but that might just me I’m not an expert in graphics stuff), SVG allows to apply multiple filters/effects to a node, … . So to provide full SVG-Support – without residing to libraries like Batik – in JavaFX 2.x we’d need more API (or at least a tutorial how to e.g. write custom effects) but even with the current API one can get quite far as you don’t notice any missing thing in the above screenshot. I’ve pushed the orignal svg-File (from the KDE oxygen-theme) and the resulting fxml-File to my git repo so that you can compare them. |
![]() Orion |
Writing a Content Assist Plugin For Orion
Orion includes a simple but powerful infrastructure for implementing content assist for your favorite language. This article will describe how to create your own content assist plugin by working through a simple example. As with any Orion plugin, the starting point is an HTML file declaring your plugin. You can find a complete example here, but the body of the plugin is a simple script like this: window.onload = function() {
var provider = new eclipse.PluginProvider();
provider.registerServiceProvider("orion.edit.contentAssist",
new RubyContentAssistProvider(),
{name: "Ruby content assist", pattern: "\\.(ru|rb)$"});
provider.connect();
};
This script registers an implementation of the orion.edit.contentAssist service. The service parameters indicate that it should be associated with filenames ending in “.ru”, or “.rb”. The content assist implementation is found in the RubyContentAssistProvider object defined in a separate script, rubyContentAssist.js. This script defines a service implementation object declaring the computeProposals method. The completion reference for the arguments and return value of this method are provided in the orion.edit.contentAssist documentation. Example 1: Simple keywordsLet’s start with a simple example that offers completion on a subset of Ruby’s reserved keywords. function computeProposals(prefix) {
return ["alias","and","begin", "break","case","class"];
}
We are given a string argument that contains the sequence of word characters immediately preceding the current cursor position. We didn’t use the argument here but we could have used it to only compute the proposals matching that prefix. Since a simple keyword list is trivial to compute we didn’t bother – the Orion content assist implementation will only show proposals matching that prefix anyway. Here’s a shot of our current content assist implementation in action: Example 2: Advanced completion featuresNow let’s look at a more interesting example: function computeProposals(prefix, buffer, selection) {
var proposals = ["alias","and","begin", "break","case","class"];
var prefixStart = selection.offset - prefix.length;
var precedingChar = buffer.charAt(prefixStart - 1);
if (precedingChar === '=' && "begin".indexOf(prefix) === 0) {
//suggest writing a block comment
proposals.push({
proposal: "begin\n\n=end",
description: "=begin - block comment",
escapePosition: prefixStart+6
});
}
return proposals;
}
We have added two more arguments to the computeProposals function: buffer, and selection. These arguments contain the current editor buffer and selection at the time content assist was invoked. We are using this information to check if the user is attempting to create a Ruby block comment, which starts with “=begin”. Instead of returning a simple string in this example, we are returning a proposal object. This object allows us to provide more details back to the caller such as a description of the proposal, and the cursor position the editor should have after the completion has been inserted. In this case we want the cursor to end up inside the newly created block comment. Also note that the text of the proposal does not include the equals character. The completion engine will only replace the provided prefix word, which only includes normal word characters (letters, numbers, or the underscore character). We already know that the character immediately before the prefix is an equals character already, so we don’t need to insert another one. Here is a shot of our enhanced content assist in action: Note that both the begin keyword and the block comment proposal are included here. The description we provided for the block comment proposal helps the user understand the difference in this case. A more complete example could do more sophisticated analysis of the source to rule out the possibility of a keyword appearing at this location, and only show the block comment proposal. Example 3: Linked mode completionWe’ll use one final example to illustrate Orion’s linked mode completion. This works exactly like some of the content assist in the Eclipse Java development tools, where after selecting a proposal the user uses the tab key to iterate through a set of fields that need to be filled in. Once all the fields are filled in, the user presses enter to finish the insertion process and exit linked mode. In Orion we indicate a linked mode completion by adding a positions property to a returned proposal. This property is an array of position objects indicating the offset and length of each linked region that requires user completion. In this example we use linked mode for an “if block” template where the user must provide the conditional expression: function computeProposals(prefix, buffer, selection) {
var proposals = [];
var prefixStart = selection.offset - prefix.length;
if ("if".indexOf(prefix) === 0) {
//suggest writing a block comment
proposals.push({
proposal: "if condition\n\t\nend",
description: "if - if block",
positions: [{offset: prefixStart + 3, length: 9}]
escapePosition: prefixStart+14
});
}
return proposals;
}
When this proposal is accepted, the proposal text is inserted and the editor selection moves to the first position, which is the “condition” field. Below is a screenshot of what the editor looks like after this proposal has been selected. Note that the message area in the Orion toolbar indicates to the user that they have entered into a linked mode completion. After editing the condition, the user hits Enter to finish the insertion, and the cursor will move to the indicated escape position. Note that the escapePosition property doesn’t need to account for the fact that the user might add or remove characters in the linked fields before they are done. The content assist engine will automatically adjust this value to account for any typing, so you just need to record the final cursor position under the assumption that the user will not modify any of the linked fields. This concludes our overview of Orion’s content assist infrastructure. As these examples illustrate, it is very easy to get started with writing your own content assist service for Orion. Writing a truly powerful content assist service requires much more in depth source code analysis, but Orion takes care of all the basic editing infrastructure to let you focus on the language analysis. Check out the complete Ruby editor example and Developer guide for the most up to date details.
|
![]() Kai Toedter |
GWT Contacts Demo with MVP and Testing
On Monday, January 23th, I am going to talk about some cool features of the Google Web Toolkit (GWT) at the OOP 2012 conference in Munich. To have a live demo for discussion, I implemented a GWT port of my Eclipse 4 Contacts Demo. In this blog post, I talk a bit about my experience with Google’s MVP (Model View Presenter) approach, including activities, places and event bus. Furthermore about UIBinder in combination with GWT Designer and Presenter testing using Mockito. You can find the latest source of the demo at https://github.com/toedter/gwt-mvp-contacts. Here is a screen shot, as you see, I did not focus on nice design. Click on the image to see it in original size. Model View Presenter (MVP) The Model View Presenter Pattern has different flavors: “Passive View” and “Supervising controller“. In Passive View there is no dependency between model and view, Supervising Controller is not so strict and allows e.g. data binding from model to view. In GWT, presenters are represented by Activities, views are implemented by GWT UI classes. There are 2 common ways to define the binding between views and presenters: Either the presenter defines a display interface that the view has to implement, or the view interface provides a presenter interface. The latter one is often used in GWT when the UI is created with UIBinder, because it makes it easier for the view to call back to his presenter. In the contacts demo, the view interface for the list view looks like public interface IContactListView extends IsWidget, AcceptsOneWidget {
public interface Presenter {
void goTo(Place place);
void select(int index);
void select(Contact contact);
}
void setPresenter(Presenter presenter);
void selectInitialContact(Contact contact);
void initialize(List contacts);
}
As you see, for laziness reasons I don’t use “Passive View” since I pass a domain object (Contact) to the view. A good introduction into GWT MVP you find at the GWT Web site. If you have a more application-like layout with kind of toolbar and several display regions, you might think you will need nested presenters/activities, but you don’t have to nest them. Thomas Broyer wrote a nice article about this issue, and I used his approach in my demo. UIBinder and GWT Designer UIBinder splits a UI component into a Java part and an XML/CSS part. That makes it easier to separate concerns and helps designers and developers working together. GWT Designer is a nice and free GWT UI Editor for Eclipse. One feature is the automatic creation of MPV related infrastructure, like corresponding activities and places. In the demo I have several implementations of the list view and the details view. You can change them by altering the ClientFactory implementation. The screen shot below shows a small details view example in GWT Designer, klick on it to see the image in original size. Presenter Testing with mockito One advantage of MVP based approaches is the good testability. For that purpose I wrote a few exemplary tests using mockito as Mocking framework. The reason for using plain JUnit tests together with mocks is mostly speed. With mockito it is pretty easy to mock all the involved GWT MVP infrastructure like activities, places, event bus and even a GWT Remote Procedure Call. Here is an example for a presenter test: @RunWith(MockitoJUnitRunner.class)
public class ContactListActivityTest {
@Mock
private IClientFactory clientFactoryMock;
@Mock
private PlaceController placeControllerMock;
@Mock
private IContactListView contactListViewMock;
@Mock
private AcceptsOneWidget acceptsOneWidgetMock;
@Mock
private IContactServiceAsync contactServiceAsyncMock;
@Mock
private EventBus eventBusMock;
private List contacts;
private Contact contact1;
private Contact contact2;
@SuppressWarnings("unchecked")
@Before
public void setUp() throws Exception {
when(clientFactoryMock.getPlaceController()).thenReturn(placeControllerMock);
when(clientFactoryMock.getContactListView()).thenReturn(contactListViewMock);
when(clientFactoryMock.getContactService()).thenReturn(contactServiceAsyncMock);
// Mock a GWT RPC
Answer answer = new Answer() {
@Override
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
AsyncCallback> asyncCallback = (AsyncCallback>) args[0];
contact1 = new Contact();
contact1.setFirstName("Kai");
contact1.setLastName("Toedter");
contact1.setEmail("kai@toedter.com");
contact2 = new Contact();
contact2.setFirstName("Kai2");
contact2.setLastName("Toedter2");
contact2.setEmail("kai2@toedter.com");
final List contacts2 = new ArrayList();
contacts2.add(contact1);
contacts2.add(contact2);
asyncCallback.onSuccess(contacts2);
return null;
}
};
doAnswer(answer).when(contactServiceAsyncMock).
getAllContacts(any(AsyncCallback.class));
// set the real contacts object, when clientFactory.setContacts is
// called
Answer setContactsAnswer = new Answer() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
contacts = (List) invocation.getArguments()[0];
// System.out.println("answer() to setContacts(): " + contacts);
return null;
}
};
doAnswer(setContactsAnswer).when(clientFactoryMock).setContacts(any(List.class));
// Return the real contacts object, when clientFactory.getContacts is
// called
Answer> getContactsAnswer = new Answer>() {
@Override
public List answer(InvocationOnMock invocation) throws Throwable {
return contacts;
}
};
doAnswer(getContactsAnswer).when(clientFactoryMock).getContacts();
}
@Test
public void testGotoPlace() {
ContactListActivity contactListActivity =
new ContactListActivity(new ContactPlace(null), clientFactoryMock);
ContactPlace contactPlace = new ContactPlace("kai@toedter.com");
contactListActivity.goTo(contactPlace);
verify(placeControllerMock).goTo(contactPlace);
}
@Test
public void testStartWithEmptyToken() {
clientFactoryMock.setContacts(null); // force RCP
ContactListActivity contactListActivity =
new ContactListActivity(new ContactPlace(""), clientFactoryMock);
contactListActivity.start(acceptsOneWidgetMock, eventBusMock);
verify(contactListViewMock).setPresenter(contactListActivity);
verify(contactListViewMock).initialize(contacts);
}
@Test
public void testStartWithToken() {
String token = "kai@toedter.com";
clientFactoryMock.setContacts(null); // force RCP
ContactListActivity contactListActivity =
new ContactListActivity(new ContactPlace(token), clientFactoryMock);
contactListActivity.start(acceptsOneWidgetMock, eventBusMock);
verify(contactListViewMock).setPresenter(contactListActivity);
verify(contactListViewMock).initialize(contacts);
verify(contactListViewMock).selectInitialContact(contact1);
verify(eventBusMock).fireEvent(any(ContactViewEvent.class));
}
@Test
public void testMayStop() {
ContactListActivity contactListActivity =
new ContactListActivity(new ContactPlace(null), clientFactoryMock);
contactListActivity.start(acceptsOneWidgetMock, eventBusMock);
contactListActivity.mayStop();
verify(contactListViewMock).setPresenter(null);
}
@Test
public void clientFactoryTest() {
List testList = new ArrayList();
clientFactoryMock.setContacts(testList);
Assert.assertNotNull(clientFactoryMock.getContacts());
}
}
If you are interested in above stuff and happen to be in Munich on January 23th 2012, join my Night School, 6:30pm at the OOP 2012. Have Fun! Kai You find me on Twitter and Google+. |
![]() Stefan Winkler |
Separating the Wheat from the Chaff — Or: How to Sort Bugzilla Mails
One challenge in my daily work with my email is dealing with automated mails from Hudson or Bugzilla. As I am involved with several customer projects, I cannot keep track of all the Eclipse committer-related mail during the day. As I am using GMail, I have become used to the mail filtering mechanism GMail offers to make email sent from Bugzilla or Hudson bypass the inbox and land in a separate IMAP folder (GMail uses a label metaphor, but when accessing mails via IMAP, GMail labels are mapped to IMAP folders). Until recently, however, there was one problem, which I had not solved for months. As perhaps a lot of people do, I am not only receiving Bugzilla notifications related to bugs for which I am reporter, assignee, or on the CC list, but I also watch other Bugzilla accounts; most notably I, follow the emf.cdo-inbox@eclipse.org Bugzilla notifications to keep myself up to date (at least theoretically ...) with all the current bugs of CDO. The problem was that I wanted to separate the more important notifications (those for which I am reporter, assignee or explicitly part of the CC list) from the less important ones (namely those to emf.cdo-inbox). Most of the time (and here comes practice ...), I have too little time to dig through all the Bugzilla notifications and identify the important ones which I should really care about (or at least read) right now.
Of course, this is not a fault of Bugzilla, as Bugzilla sets really useful headers for its emails. In particular, the mails which I denoted as "more important" above can be identified by checking the content of the X-Bugzilla-Reason header. If this header contains CC, Reporter, or AssignedTo, I regard the notification as important. The actual problem is that GMail does not support filtering emails by arbitrary headers (or at least they have hidden that feature so well that I did not find it ...) To solve the problem for me, I have not installed a small Unix utility called IMAPFilter on my virtual server which I am also using to host this blog. IMAPFilter can be configured via a config file written in the Lua programming language. This way, one can write arbitrary (and sophisticated, if needed) rules and commands to process email stored on one or more IMAP servers. In my case, a quite simple config file does the trick (Note: I still use GMail filtering rules to sort Bugzilla emails into the CDO/Bugzilla folder, because this was configured already, and it makes the IMAPFilter configuration a bit easier):
(Note: the plus signs have to be read as logical OR) That's almost it. The config.lua file goes into ~/.imapfilter and to execute the utility on a regular basis, I have created a crontab entry which calls imapfilter all 15 minutes: 0,15,30,45 * * * * /usr/bin/imapfilter Naturally, the above is only a simple example. Experiment for yourself to unleash the power of complex mail sorting. | ||||
![]() Stephan Herrmann |
A little statistics of the day
My latest query in Eclipse’s bugzilla answered 189 bugs. Out of these a certain TLA was mentioned just in the bug summaries 54 times. Those who have followed my previous posts, know which three letters I’m referring to. Looks like they’re even more relevant in some Eclipse components than I ever fancied (no - not telling, in which component I searched |
![]() Wayne Beaton |
Open Source Rules of Engagement
The Eclipse Development Process (EDP) defines–in its section on principles–three open source rules of engagement: Openness, Transparency, and Meritocracy:
In more concise terms, transparency is about inviting participation; openness is about actually accepting it; and meritocracy is a means of limiting participation to those individuals who have demonstrated the desire and means to actually participate. Transparency is one of those things that I believe most people understand in principle. Do everything in public: bug reports are public, along with all discussion; mailing lists are public; team meetings are public and minutes are captured (and disseminated). By operating transparently, the community around the project can gain insight into the direction that the project is moving and adjust their plans accordingly. In practice, however, transparency is difficult to motivate in the absence of openness. What is the value to the community of discussing every little detail of an implementation in public? Does anybody really care? The fact of the matter is that a lot of people really don’t care. Most users of Eclipse are blissfully unaware that we even have bug tracking software and mailing lists. But some people do care, and transparency is a great way to hook those people who do are and get them to participate. A lot of open source projects understand transparency. A lot, however, don’t understand openness. They’re not the same thing. To be “open” means that a project is “open” to participation. More than that, an “open” invites and actively courts participation. Participation in an open source project takes many forms. It starts by creating bug reports and providing patches, tests, and other bits of code. Overtime, contribution increases, and–eventually–some contributors become full-blown members of the project. Courting the community for contributors should be one of the first-class goals of every open source project. But openness isn’t just about getting more help to implement your evil plans for world domination. It’s also about allowing participants to change your evil plans for world domination. Openness is about being open to new ideas, even–as the EDP states–if those new ideas come from your direct competitors in the marketplace. A truly open project actively courts diversity. Having different interests working together is generally good for the overall health of an open source project and the community that forms around it. |
![]() Saurav |
Eclipse Tips -Part 4
After quite a long time i chanced upon some UI programming. So the thought of putting the next edition of Eclipse Tips came to my mind.
File Browsing Dialog It may happen that you would like to browse for a file in the file system and then select it for further processing.Remember how you browse for projects when you import projects from your local file system. The File browsing dialog can be brought by using FileDialog. You can also use the FileDialog to filter on the file names, extensions etc through the APIs such as public void setFilterNames (String [] names) and public void setFilterNames (String [] names) respectively. This is how you can use FileDialog in your code FileDialog dialog = new FileDialog(parentComposite.getShell());EMF Unparseable content I also ventured into some intricacies of EMF Models.Part of my work was to evaluate the possiblity of sending non parseable content through the EMF Models. So i finalized two options Base64 Binary and CDATA.CDATA being the standard way caught my attention first. Here is the link which describes the difference CDATA and Base64 Binary. http://forums.devx.com/showthread.php?t=4667 CDATA In EMF you can pass the CDATA if you annotize your model with the mixed content.Please follow the steps to model a mixed content. (a) Define the EClass for which you want to have the mixed content.Lets say I want to send my java script code through my Request EClass. So i would define an EClass saying Request.Annotate the Request class by giving the source as Source http:///org/eclipse/emf/ecore/util/ExtendedMetaData. (b) Create a new Details Entry value for that annotation with name as 'request' and kind as 'mixed'.So it makes the Request class to contain an attribute of type mixed content. (c) Then define the actual attribute which will contain the mixed content for e.g. JSCode of type EFeatureMapEntry Then annotate JSCode with ExtendedMetadata and then put the Details Entry value with name as mixed and kind of elementWildCard. How to add the CDATA from your code //get the instance of the Request class FeatureMapUtil.addCDATA(request.getJSCode(),"js code");The FeatureMapUtil adds the CDATA to your mixed content attribute. Another example i do is for the famous ExtLibrary model. I add an attribute called content in the Library class which contains the mixed content.Below is the xml of the ecore for that part.For this blog purpose i have removed all the other attributes and references of the Library class. Check how the Library is class is told to contain a mixed attribute and then attribute called content is added which is the actual mixed content. Base64 Binary I also tried to explore the Base64Binary way of passing the content. It is very simple as how to pass the Base64 binary data.Just create the attribute of type Base64Binary.EMF comes with a datatype built in for that. I end this post here. Happy working on eclipse. |
![]() Neil Bartlett |
Free OSGi BOF at DevCon 2012
The programme for the Birds-of-a-Feather (BOF) session at OSGi DevCon 2012 – co-hosted with EclipseCon 2012 – has been announced. I will be speaking about the Java 8 module system, Jigsaw and how they relate to OSGi: what are the differences; the pros and cons of each in different environments; and the potential for them to work together. There will also be sessions on: OSGi Subsystems; simplifying development with the upcoming OSGi Bundle Repository (OBR) standard; and finally a surprise session from a mystery speaker. The BOF is free to attend, you don’t need to be registered for OSGi DevCon/EclipseCon. So if you’re in the Washington DC area and interested in learning more about OSGi or meeting several of the top OSGi experts… you know where to go.
|
![]() Neil Bartlett |
OSGi Training in 2012; London, NY, DC and Sydney
I will be running a series of OSGi training courses this year, with the first two being held in London and New York in February. The early bird pricing for London will expire in the next couple of days, so please do hurry to secure your place! If you’re in North America and can’t make NY in February then there will be another chance to take the training in the Washington DC area (very close to Dulles airport). Then later in the year I will be down in Sydney, Australia. You might be wondering about the “Masterclass in OSGi” series that I previously ran with Peter Kriens, who recently announced his resignation from the OSGi Alliance. Peter is very busy completing his duties for the Alliance and then will be fully engaged with his next venture, so he has told me that he is not able to participate in the masterclasses for the foreseeable future. My new course is heavily based on the subjects and discussions that arose from the masterclasses that took place in 2010/11, though it is intended to be more accessible for OSGi beginners. I still believe it’s the absolute best way to quickly achieve a deep understanding and mastery of OSGi and modularity in Java, and I very much look forward to seeing you there. |
![]() Peter Kriens |
Java Generics are a LemonAfter working with Java for almost 15 years and deep knowledge of Java generics on the class format level I learned something very basic the really, really hard way. I knew the collections in Java were not that good in comparison what you find in other environments (immutable anyone?) but now I learned that even adding all that extra cruft on my classes is useless when you have a major |
![]() Philip Wenig |
Waiting for Java7 on Mac OS X 10.6.3 “Snow Leopard”
Somehow, it was a good decision to switch OpenChrom to Eclipse 3.7.1 (Indigo) and Java7 except of Mac 10.6.3 “Snow Leopard”. Why on earth do they not support Java7? I don’t know. But I was aware of, that I needed a quick workaround to make it running. Hence, here’s my solution how to start RCP applications on Mac OS X using Java7: First of all, create the folder “JavaVirtualMachines” in the directory “/Library/Java“. Unless it’s not created, you’re not able to install the Java7 Developer Preview. user$ sudo mkdir /Library/Java/JavaVirtualMachines You can choose between the JDK or JRE package. I took the JDK. Install it by dragging it into the specified folder. Now, we need to create a program specific launcher called “start.sh“, but you’re free to choose nearby any name you like. Therefore we dive into the application.app (in this case openchrom.app). Create a file called “start.sh“. The content of the starter “start.sh” depends on the specific settings of your RCP application. I took the settings from the application.ini file (in this case openchrom.ini). #!/bin/sh export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home LAUNCHER_JAR=../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar java \ -Xms128M \ -Xmx500M \ -Dosgi.install.area.readOnly \ -Dosgi.configuration.area=@user.home/.openchrom/0.6.0/OpenChrom/configuration \ -Dosgi.instance.area.default=@user.home/OpenChrom/workspace \ -Dsun.awt.xembedserver=true \ -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts \ -jar $LAUNCHER_JAR Start the terminal and navigate to the “start.sh” script. It is necessary to set the executable bit once using “chmod a+x“. The RCP application can now be started by starting the script using “./start.sh“. user$ cd Desktop/0.6.0-PREV/OpenChrom/openchrom.app/Contents/MacOS/ user$ chmod a+x start.sh user$ ./start.sh This tutorial presented a workaround for OpenChrom. But it is applicable in the same way for Eclipse and other RCP applications. |
![]() Sven Efftinge |
Upcoming Presentations on Xtext / Xtend |
![]() Sven Efftinge |
I like free beer!
Did you know about http://99-bottles-of-beer.net? It uses a couple of interesting features: Seriously, I think this is one of the most concise and readable versions. Compare yourself. |
![]() Ed Merks |
Modeling Daze to Come
My transition to Germany is nearing completion. I now have a three year visa to stay in Germany and I'm registered as living in Berlin. Amazingly the visa was acquired with roughly eight hours of time investment, including the four hour wait for the appointment, along with zero euros of financial investment. The best things in life are free. |
![]() Kai Toedter |
My Upcoming Events & Sessions
In the next months I am going to give sessions/trainings at several conferences and other events, mostly Eclipse related. I’d be happy to meet you there. January 20th, 7:00 pm (free event): January 23th, 6:30 pm: January 26th, 11:00 am (free event): March 26th, 1:00 pm: March 28th, 1:30 pm: April 16th – 19th: April 20th, 9:00 am: April 23th, 9:00 am: April 26th, 9:00 am: April 27th, 9:00 am: Have Fun! Kai |
![]() Vojimir Golem |
How to install and run Dart Editor
In this short screencast (2:30 min) you will see how to install and use new Google Dart editor (currently in alpha). |
![]() Holger Voormann |
Moving Forward – Vex 1.0.0 M8
Vex has moved from being a component in the WTP Incubator project to being a project on its own in Mylyn Docs. Like all other Eclipse projects Vex has its own home page: eclipse.org/vex. Our project lead is Florian Thienel, currently the 99% of Vex (only you can change this). 1.0.0 M8Last week milestone 8 was released. If you already use Vex then you have to migrate your vex-plugin.xml files. Otherwise you should give Vex a try to edit XML files word processor like. The next big thing is XML Schema support in addition to the good old DTDs. Already 1.0.0 M8 contains basic support for it. At the moment you have to register the XML Schema manually by editing the vex-plugin.xml file – the UI to do this is under development. So stay tuned. Vex is moving forward slowly but surely. |
![]() Alex Ruiz |
Associating Xtext editors to file names, instead of file extensions
I’m currently working on a Xtext-based editor for Google’s BUILD language, as described in our Google Engineering Blog. BUILD files do not contain an extension, they are simply named “BUILD.” This naming convention made working with Xtext quite challenging. I needed to change Xtext’s default behavior: instead of associating Xtext editors to file extensions, I needed to associate them to file names. In this blog post I’m describing how I was able to accomplish this. In this post I’ll be using a brand-new Xtext project. To keep things simple, I’ll use the default file extension (mydsl) and grammar. You can get the source code of this post from Xtext Samples, a new open source project where I plan to store the code I use in Xtext-related posts. All code is released under the Eclipse Public License (EPL) 1.0. The following steps assume we are going to associate our Xtext editor with the file name “MyDsl.”
1. Modify the plug-in’s
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class MyDslContentHandler extends ContentHandlerImpl { public static final String MY_DSL_FILE_CONTENT_TYPE = "com.google.eclipse.MyDsl"; @Override public boolean canHandle(URI uri) { return isMyDslFile(uri); } @Override public Map<String, Object> contentDescription(URI uri, InputStream inputStream, Map<?, ?> options, Map context) throws IOException { Map<String, Object> description = super.contentDescription(uri, inputStream, options, context); if (canHandle(uri)) { description.put(VALIDITY_PROPERTY, VALID); description.put(CONTENT_TYPE_PROPERTY, MY_DSL_FILE_CONTENT_TYPE); } return description; } } |
Line 2: We define a new content type for “MyDsl” files. We keep the constant public since we will be using it later.
Line 4: We specify that file names with name “MyDsl” can be handled by the ContentHandler. We call the utility method isMyDslFile(URI) from the class URIs.
Line 8: We declare the content of “MyDsl” files as valid and associate its type to the one defined in line 2.
IResourceServiceProvider that provides services to files with name “MyDsl”Here is a simplified version of our IResourceServiceProvider. You can find the complete file here.
public class MyDslResourceServiceProvider extends DefaultResourceServiceProvider { @Override public boolean canHandle(URI uri) { return isMyDslFile(uri); } }
We call the utility method isMyDslFile(URI) from the class URIs to specify that this IResourceServiceProvider can handle files with names “MyDsl.”
Now it’s time to wire up everything together. First, we bind IResourceServiceProvider to our MyDslResourceServiceProvider in the plug-in runtime module:
public Class<? extends IResourceServiceProvider> bindIResourceServiceProvider() { return MyDslResourceServiceProvider.class; }
Now we tell Xtext and EMF, in MyDslUiModule‘s constructor, to understand files named “MyDsl.”
public class MyDslUiModule extends AbstractMyDslUiModule { public MyDslUiModule(AbstractUIPlugin plugin) { super(plugin); configureXtextToWorkWithFileNames(new InjectorProvider()); } }
We pass an InjectorProvider that obtains the plugin’s Injector only at the moment when it is needed. At this point we cannot pass the Injector directly, since it has not been fully constructed when configureXtextToWorkWithFileNames is called.
The method configureXtextToWorkWithFileNames(InjectorProvider) is defined in XtextSetup:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | final class XtextSetup { static void configureXtextToWorkWithFileNames(InjectorProvider injectorProvider) { register(new MyDslContentHandler()); register(new ResourceFactoryDescriptor(injectorProvider)); register(new ResourceServiceProvider(injectorProvider)); } private static void register(ContentHandler h) { ContentHandler.Registry registry = ContentHandler.Registry.INSTANCE; registry.put(HIGH_PRIORITY, h); } private static void register(Resource.Factory.Descriptor d) { Resource.Factory.Registry registry = Resource.Factory.Registry.INSTANCE; registry.getContentTypeToFactoryMap().put(MY_DSL_FILE_CONTENT_TYPE, d); } private static void register(Provider<IResourceServiceProvider> p) { IResourceServiceProvider.Registry registry = IResourceServiceProvider.Registry.INSTANCE; registry.getContentTypeToFactoryMap().put(MY_DSL_FILE_CONTENT_TYPE, p); } } |
Line 4: We register the ContentHandler we created in step 2.
Line 5: We associate the IResourceFactory in the plug-in’s Guice module with the content type defined in step 2.
Line 6: We associate the IResourceServiceProvider we created in step 3 (and later on registered in the plug-in’s Guice module) with the content type defined in step 2.
To run the editor, right-click any of the projects and select “Run As” > “Eclipse Application” from the context menu.
Here is a screenshot of the editor opening a file named “MyDsl”

In this post I have shown how to make Xtext understand file names in four easy steps. You can find the code for this post in the project Xtext Samples. You can checkout the code, browse it or download it.
Even though I spent a good amount of time reading Xtext and EMF code to figure this out, I cannot claim my solution is the best one. Please let me know if you know a better way to do what I described in this post :)
Feedback is always welcome.
![]() Roy Ganor |
A (Big) Dot Release
Although dot releases don't get as much attention as major releases , this one should definitely get highlighted: "Zend is pleased to announce the release of Zend Studio 9.0.1!" This new release focuses on improving source code editing experience, improving editor performance, smart indentation when pasting code. It also extends the code formatter so PHP comments are well structured. Working with PHPUnit made easier with the addition of smart configuration (and bootstrap) detection. Community plugins updates provide advanced features with Git, ZenCoding and Symfony2. The changes include:
|
![]() Miles Parker |
Joining the Tasktop Team
Last week I said that I had some really exciting news to share, and this is it: As of today, I am part of the Tasktop team. I've long been an admirer of Tasktop, for a number of reasons... |
![]() Martin Lippert |
open and transparent demo camp sponsoringIts been a while since Peter Friese and I started to organize the Eclipse Demo Camp in Hamburg. And since the early days, we couldn't have done it without companies sponsoring the event so that we could sit in a nice location, have free drinks and quite often even free food for everybody joining us to watch great demos and great speakers. Since sponsoring was always an important part of organizing that event, we decided to try something new in this area. For the next demo camp (the Juno release camps in the summer of 2012), we try a totally open and transparent sponsoring. Everybody is invited to join us sponsoring this event. All you (as a sponsor) need to do is: register yourself as a sponsor on the demo camp wiki page with your name and the amount of money you would like to spend. And we explicitly invite everybody: from big companies spending several hundreds of Euros to individuals spending only a few bucks. Every single Euro is welcome and highly appreciated. The sponsoring will have absolutely zero effect on the selection of speakers or demos and we continue to have no sponsored talks or company presentations at the beginning (the only exception to this is if the management of the company that is giving us the room for free is asking for a small intro at the beginning, but we try to avoid that as well). And attendance will be free, as usual... :-) Ah, one more thing: We will donate 20% of the food/drinks that we order for the event to a local organization that helps homeless people. We think its not fair when we sit inside having more food than we can eat and having other people sitting on the street being hungry. Therefore 20% of all the drinks/food that we order will be delivered directly to that organization on the evening of the demo camp. |
![]() Karl Beecher |
Eclipse trainings available
I delivered my first Eclipse training just before Christmas last year. I’m happy to say that the clients, just under a dozen programmers working for a large German corporation, have reported being “very satisfied” with my two-day seminar. I’m also happy to say I enjoyed it even more than I thought I would, probably due to the lack of nervousness I thought I might experience. In fact, I was so at ease and enjoying myself, I’m now hugely looking forward to delivering it again for other clients. For anyone who wishes to know more about the Eclipse training I provide (perhaps you’re interested in it yourself?) here’s the basic overview:
These subjects are by no means carved in stone, but they certainly embody what is necessary for beginners to learn (with the possible exceptions of UML, XML and plug-in development) and represent what can be covered in a minimum of two days. Beyond that, my curriculum is flexible and open to discussion. If you’re interested in knowing more or booking a training, then please feel free to get in touch via mail@karlbeecher.com. |
![]() Glyn Normington |
New Releases: Virgo 3.0 and Gemini Web 2.0
Virgo 3.0 and Gemini Web 2.0, collectively known as the Maya release, are available for download and download, respectively.
See the release notes for details.
|
![]() Eclipse Gyrex |
How we do release engineering?
One of the challenging parts at Eclipse is doing the release engineering work. Large projects may have dedicated resources as well as well established processes. We don’t. However, I like the way the Eclipse project is doing their builds. They have (over simplified) a “version.properties” file that contains a list of bundles and a SCM tag to use. They are called map files and they drive the build. For a long piece of Eclipse history, the map files were tagged manually by hand. Whenever a committer modified a bundle (aka. plug-in or feature). He also had to release those changes by tagging the bundle and updating the map file. When the Eclipse project migrated to Git they automated this process. A script is started before the real build begins. The script scans a branch for new commits since the last tag. If any new commits are found, the repository will be tag with a new tag and the map file will be updated. I started migrating Gyrex to Git last week. The CVS to Git part was easy. Our build is running again. Thanks to an update to PDE Build it fully supports Git map files. Our process has always been as close to the Eclipse project as possible. We also use the map files which drive our build. We also used to tag our (CVS) projects by hand and we also used to update the map files by hand. Now with the change to Git we’ll also stop doing that. I took the scripts from the Eclipse project and adapted them. We don’t run the script as part of our Hudson build job. Due to security concerns, the Hudson machines aren’t able to push changes back to Git repos. Thus, I run the tagging scripts on build.eclipse.org by cron. At the end of the run, a Hudson build will be triggered by the script via and Hudson API call. You can find the scripts here: Filed under: Documentation, Updates Tagged: CVS, Git, Releng |
![]() Ekkehard Gentz |
Git and mobile development (Git branching model)
mobile development == development for different API versionsAs you know, the last years I was using Mercurial (hg) as DVCS for my projects. If you’re developing for mobile devices (doesn’t matter if this is Android or BlackBerry etc) sooner or later you run into the situation that you have to support some platform OS versions.
there are different strategies how to solve this:
both doesn’t make me happy: I don’t want to manage different projects parallel and I also don’t want to use a preprocessor because the code becomes more unreadable with all those if OS5 then….. if OS 6 then….. instructions. Also the library-per-API.-differences solution isn’t really flexible. So I was looking for new ways HowTo solve this and sketched up what I’ll need. Reading Al Blues Git Tip of the week: GitFlow I found out that most of my ideas were already published here: A successful Git branching model I don’t need it exactly this way, but if you should read the article to get the idea how all will work. so back to the mobile development. let’s take an actual example: logging4bb using a special Git Branching modelOverviewI developed a logging framework for BlackBerry OS 6+. As you probably know, under BlackBerry OS Java you couldn’t use any of the modern logging frameworks like Log4J, SLF4J, LogBack, java.util-logging etc. Logging is always an important part for my development, so I implemented a logging framework (logging4bb) where I can
If you followed my blogs you know that I’m using Lilith since years to monitor the logging of OSGi – Equinox applications together with SLF4F / LogBack. I’m sending LogEvents to Lilith using the same format as LogBack does this using a Lilith Appender, so Lilith doesn’t know that there’s not LogBack but a BlackBerry device sending events. This works from Simulator and also real Devices through WLAN or CellTower. The best thing: now you can watch log statements from server and mobile clients side-by-side read more here about the logging4bb project itself. Between BlackBerry OS 6 and OS 7 APIs supporting SQLite and also Remote Command Framework are different, so I wanted to support both OS versions. Next problem because the project should be Open-Sourced: The Socket Connection uses BIS (BlackBerry Internet Service), which makes it very easy to switch between WLAN and CellTower and still using the same SocketConnection. As a BlackBerry partner you’re allowed to use BIS as a free BlackBerry Service in your products (per ex. my Apps in the Appworld), but it’s not allowed to publish the special connection String. To launch and run the application I have to use the String. How to make development possible with these goals:
all without the standard ways like pre-processor etc. public and private repositoriesof course I want to use source repositories for the public parts (OSS) and also the private parts (secret connection and also appworld product and/or customer products). that’s the reason why the projects are hosted at Bitbucket: I can have unlimited private repositories for free. Great that Bitbuckit also supports both: hg and Git projects. Git Branching ModelHere’s an example how the branching model could look like from different tools: EGit: Tower (OSX): I’m working with Tower because then it’s easy to have one single place where I can manage all my repositories from Eclipse Workspaces on OSX (my main development) and also Eclipse Workspaces from the unfortunately-Windows-only-BlackBerry development. Hint: I’m using Parallels and mapped a directory on OSX as Drive W:\ to Parallels-Windows7 running on top of OSX. so I can manage all from Tower on OSX Here’s an overview how my branching model works: let’s take a look into the details: Who’s the Master ? There’s no Master branch as usual, because there are dev-* branches working like a Master branch for the different OS Versions. The Master only has a readme.txt file with a short description of the branching model. Then development started with the dev-public Branch – in this case development started with OS 6 API. Some times later after finishing the OS 6 version, the development continues using the newest OS 7, so a branch os6/dev-public was created. Each branch works like a Master for the specific OS Version. Hint: I’m using the “/” in the names to get a folder-like structure in tooles like Tower. What about Bugs ? Bugfixes only for OS 6 API will be done on the os6/dev-public branch – bugs for all versions will be fixed on the newest branch. If some parts of the new development or generic branches should be back-ported to the older os6 version, then GIT Cherry-Pick is an easy way to do this. How to use the “secret” private Repository ? This repository is only needed in workflows where the project ist Open Source and public, but some parts are not allowed to be publicly visible. In this special case I need dev-secret* branches, where I add the secret parts. Now it becomes difficult: without the secret connection code I cannot run and test the application or launch the simulator. So normaly I’ll work in the *secret* branches, test-run-change code etc. But these changes must be part of the public branches. So after some steps I want to commit and I also want to be sure, that all works from the OSS public branch. Now GIT Stashing comes into play:
sounds complicated, but it works very well and after some weeks working with this branching model I like the flexibility How to work with Customer Repositories ? workflows are easier, I only merge regulary from the public development branches, because normaly special customer-cases won’t be given back to the public area. but if – from time to time – something should go back: as usual cherry-picking is your friend. HowTo organize local development Repositoriesthis is totally up to you how you organize your local repositories. It depends from your team-size, project structures etc. some examples what could be done:
To cherry-pick and move changes back to other branches one member of your development team should have a local Repository like 1. Local branchesThe Branching Model above was all about public remote branches tracked by your local branches. Of course al the usual workflows work as with ‘normal’ projects referring to a Master Branch only: create local branches for bugfixes, new features etc. Hint: if not already done please read the article above: A successful Git branching model What Users should Clone / Check-Out ?Users simply clone the public Repository and then have to decide which public branch they should check out and always pull against to get the newest things. Everyone who only needs the OS 6 version simply checks out the os6/dev-public branch, who needs the newest one checks out dev-public branch. Who needs all, can switch between the branches or have different workspaces for different OS Versions or …. GIT really makes it easy for everyone to follow their specific workflows and project structures. ToolingTooling is important if you want to manage complex workflows with GIT. If you’re a friend of the commandline, then you can do it all from there very fast and all options are open to you. But I don’t like the commandline and prefer UI Tools. If you’re working with Eclipse only then EGit is the best way to do it. Newest versions of EGit / JGit now are supporting most what GIT provides. If you like Gerrit for code-reviews then again EGit is a good solution. I’m now using Tower, which is a great UI Tooling for OSX. (Thx @PeterFriese mentioning Tower some time ago at twitter) With Tower I can manage all my repositories at a single place – doesn’t matter if they’re from OSX – Eclipse workspaces, Windows (on-Parallels) Eclipse workspaces or from non-Eclipse sources. All the workflows are easy to manage from Tower. The UI is a really good looking OSX UI. I’ll provide some Videos later. Thanks…to Al Blue’s Git Tips of the week – series – this is a must-read for everyone starting with Git to understand the power of Git. I’ll blog some more about my GIT experiences soon as part of my DVCS blogging series. ————————————————————————————————————————— (c) 2011 Creative Commons License 3.0 (BY-NC-SA) by ekkescorner Filed under: Blackberry, Eclipse, Egit, LOGBack, mobile |
![]() Miles Parker |
Butterflyzer Beta
When Butterflyzer was launched a year ago it was introduced with the following words: "Butterflyzer is in Alpha now. Before we release more polished versions, we need to know if people really want it. So if you like it and want to see a full version, follow us on twitter, and tell your friends. If we get 10 followers we'll release an alpha version. If we get 100 followers we'll release a beta. If we get 250 followers, we'll make a nicely packaged version available commercially at a decent price. Simple as that." A minor problem.. the response was so great that we achieved the Beta milestone in a few months. And the software just wasn't there in terms of Beta quality. Plus, I felt that there were a number of key improvements to the interface and other functionality that just had to be made. So, it's been six months since we hit the milestone, and I'm happy to announce that.. The Beta is Finally Here! Download Butterflyzer Now We've had a Beta Preview available for some time, so many of the features won't be news to all of our users, but I think the level of polish -- if you can talk about a beta release having polish -- is pretty good. There will certainly be issues with it (that's why we have betas!) but it is otherwise feature complete and ready to go to version 1.0. If you're wondering how much work has gone into the release, I'll throw out one measure: the Beta release is Build #995. Here are just some of the many issues big and small that we've addressed along the way.. User InterfaceThe application just didn't fit in well with the target audience and their expectations about how web related tools should look and feel. One of the most important pieces of feedback I heard was that the interface just felt overwhelming. There is a lot that you can do with Butterflyzer, and I wanted to find a way to make that functionality easily accessible while de-cluttering the user environment as much as possible. The Butterflyzer Alpha was a typical Rich Client (RCP) application built on the rock-solid and powerful Eclipse platform -- the same one that IBM and other leading software companies base their applications on. The downside of that is that the current Eclipse UI support is a bit stodgy. And unfortunately, while the Eclipse environment provides a lot of functionality, it is very difficult to change the overall look and feel. (E4 makes huge improvements in this area, but E4 didn't address all of our requirements and isn't quite mature enough yet.) So we went back to the drawing board, moved a bunch of stuff around, and re-implemented key existing functionality, including interface and workbench components. It wasn't simple to make these changes, but I think they were more that worthwhile. In fact, I think they were necessary. You can build the most powerful, feature-rich program in the world, but if the UI isn't any good, the only people who use it will be the people who don't have any other choice. So yep, we sweated those single pixels. Browser Look and FeelIn the quest for simplification, Butterflyzer copies the overall presentation of a typical web browser like Safari, Chrome or Firefox. Catalogs are like browser tabs and all of the interface elements are consolidated within them. That means that we've essentially turned the typical end-user application inside out, with all of the tools and views being hosted inside each editor. Here's what the old application looked like: And here's chrome, our simplicity bogey: Here's the new and improved Butterflyzer: Why so dark?By the way, if you've wondered why Butterflyzer employs a "light on dark" visual style, it's not that we're trying to be trendy or anything. There are sound reasons for keeping the Butterflyzer elements dark:
New Help SystemWe've implemented a new Help System that includes dynamic help, so that when you scroll over an interface item, you can get live help. Speaking of help, there is a lot of it! And since we have it now, I'll use it to help tell the story. Eclipse software developers might be interested to know that the majority of the documentation is actually produced directly from our properties files. (Yes, Butterflyzer is fully designed for Internationalization, but we don't have any translations for other languages yet.) That means that we only have to maintain this information in one place. Custom Java code reads the properties and converts them to Wiki text and the help system dynamically loads the property information for context sensitive help, including links to related documentation. From there, we use Mylyn Wiki Text to generate the Eclipse Help system artifacts, online documentation, and even a PDF manual. Palette MenusOne major goal was reducing the number of mouse-clicks needed to perform common tasks. I think that number and frequency of mouse-clicks have a large effect on end-user perception of ease of use and efficiency for an application. We needed to reduce the proliferation of toolbar buttons without causing a lot of mouse thrashing. Popup menus work fine for supporting changes in options, but they have a big usability issue. Every time you want to make a change, you have to reopen the menu. You could put options into a tool widget as many Apple applications do -- and we do that for more complex settings involving sliders -- but then users have to get rid of it when they're done. Instead, we created our own menu type that displays as long as the mouse is within the target menu area. This required replacing a lot of the normal Eclipse menu implementation. If you still think all of those buttons are a bit bewildering, you can find out what they all do here. Context PopupsIf a mouse-click takes time and mental effort, a right-click takes even more. There is just something that feels slow and uncomfortable about the whole interaction. I think that's a major issue with the Eclipse user experience actually, and one of the reasons that people like Web interfaces so much -- you see something, you click on it, it does something. Simple. At the same time, it's even worse to have to mouse up to a toolbar to perform a common task on an item. And the worst thing of all is a hover. There is nothing like waiting for a machine that can do billions of instructions per second to take half a second to decide that you want to do something! In Butterflyzer, we wanted to support a sense of flow when working with items. And we need commonality between the different kinds of views so that for example the options that you have when working with an item in the graph view are the same as when you mouse over the item in the browser. The solution was a context menu that appears automatically . It's still a bit experimental -- there are some usability and consistency aspects to fine-tune -- but I think it works pretty well. Currently you hold down that "CTRL" key in order to make the menu appear on any item -- having it appear in all cases made interaction a bit busy feeling. WindowsYes, Butterflyzer has always done Windows. Just not very well, frankly. Apologies to the legions (well, dozens anyway!) of Windows downloaders out there..we think this latest version will make you much happier. VisualizationThere have been significant strides in this critical area as well, including innovative approaches to taming, filtering, and cleaning up visualizations and related data. For more on all of that, check out this section in our comprehensive documentation. InternalsThe list of enhancements here is too long to get into, but we've put a lot of effort into creating a system that has the highest throughput and integration without compromising data integrity. It's been a challenge, and there have to be some gotchas lurking out there, but I'm really happy with how the system is handling the large volume of data that we can pull in. To see what I mean by "large volume of data", check out this page for details on what you get from a single Butterflyzer search. Web SiteThe web site has come a long way from the alpha days, where it was deliberately minimal and home grown. Please visit! New VideosIf you want to see how this all fits together, check out the new videos: Let's Talk!As always, I'd love to hear from you. What are you using Butterflyzer for? What would you like to do with Butterflyzer? One thing I'd like to mention specifically for people already involved in developing software tools for the Semantic Web: Butterflyzer is an end-user product, but there are many other opportunities for employing core Butterflyzer technology. Perhap you have proprietary or specialized Web information sources that you'd like to integrate with the Butterflyzer Content Management and Visualization services. Perhaps you'd like to license or re-brand Butterflyzer or make use of key components. Contact us and let's discus how you can use Butterflyzer to enhance your efforts. But what I really hope is that you're someone who just wants a good tool that you can use for web research, and that Butterflyzer scratches that itch for you. I'm reading the new biography of Steve Jobs so I can't help indulging in a little reality distortion of my own -- in the best sense of that phrase, naturally. You'd never know it with all of the talk, but we're still in very early days of semantic technologies, and we're nowhere near exploring the possibility surface, let alone exploiting it. When it comes to web exploration tools, what exists now for the average user is... well, it's a lot of dumb shit, with a nod to Steve. I believe that you need a rich, powerful application to make the most of the deep store of knowledge that is out there, but it needs to be as simple as it possibly can be -- in short, a tool that opens up the Semantic Web for the Rest of Us. And that's what Butterflyzer is all about. It's an exciting time to be building software tools! There are a lot of interesting things happening, and plenty of opportunities for all of us to make positive changes in how people around the world work and live. I've got some other really exciting news to share, but that will wait until next week... |
![]() Eric Rizzo |
I've censored the following, in protest of a bill that gives any corporation and the US government the power to censor the internet--a bill that could pass THIS WEEK. To see the uncensored text, and to stop internet censorship, visit: http://americancensorship.org/posts/33408/uncensor |