Vocabulary Learning on the NetBeans Platform
I am a software developer, entrepreneur, and student at the Free University of Bozen. I've created an application named MemorizEasy, which is a vocabulary learning application on the NetBeans Platform.
Though I grew up in Italy, I went to the english-language Cambridge International High School. I had to learn plenty of vocabulary to get along, while flashcards and time were not enough. My "new words" notebook was growing into an alphabetically-unsorted dictionary.
Then I started sticking the new words on my wall, so that I could look at them while brushing my teeth and every time I walked into the room. But the wall was not large enough!
What ended up working for me was to rotate the words such that I’d always have 28 words - 7 new words, 7 that were new 4 days ago, 7 a week ago, and 7 a month ago. This algorithm was very effective, yet labor intensive. I wondered if the computer could do a better job. Then, in Bozen, I had to learn German...
Here are some screenshots. The first shows the main window:
Vocabulary view with synonyms and meanings:
A mobile edition of the application is in the planning. However, the mobile edition is more of a companion edition to the desktop application. Users exercising their writing skills using the autocomplete editor (inherited from the NetBeans IDE) need to do so on their larger screens:
The sources of the application are here:
I started thinking about using the NetBeans Platform when I was trying to provide the autocomplete feature for my JTextArea. I wondered how does NetBeans provide such a feature for Java? If only I could re-use its code...
Most useful about the NetBeans Platform is that everything you like in NetBeans IDE you can simply reuse. I totally ascribe to the notion of software re-use and that SE != plumbing. Plus, the window management system is phenomenal, and Maven support is on the rise.
At BarCamp Charleston, I recently presented a session entitled "SE != Plumbing" and invited the audience to learn about the NetBeans Platform, Maven, Java WebStart, and JPA2. I used Geertjan’s plumbing pictures to illustrate the point and made the same sound argument: you should develop your application with domain knowledge. That your application has a consistent user-friendly window manager, which remembers the previous user configuration is not your business, but users expect it nonetheless. I found it important to distinguish the NetBeans Platform as a framework, from the NetBeans Platform as a set of libraries, to convince the skeptical attendees of the benefits of porting their application to the NetBeans Platform.
Tips for NetBeans Platform Newbies
As with all software engineering, iterative refinement through small steps is a winning strategy. There are plenty of NetBeans Platform tutorials that do very powerful things. Run them and tinker with them until you reach your expectations.
The NetBeans Platform is not about starting from scratch. Change names of classes at the end, but when you do so, check after each change to make sure the application still runs because you’ll likely have to manually change the layer file, the module settings, as well as the POM files.
NetBeans Platform Wishlist
The improvements I'd like in the NetBeans Platform:
- I’d like to tinker less and less with layer.xml in favor of annotations. Thankfully, NetBeans is moving in that direction.
- More Maven support, but, because of Jesse Glick’s recent work, NetBeans seems to be the most supportive IDE.
- Modules on demand. Right now my application is loaded with clusters full of modules I don’t want. An example is the embedded browser, which shows up if a user clicks on a hyperlink. Fortunately I’m not alone: http://wiki.netbeans.org/DependencyBasedModuleIncludes.
The latter should move us farther from the NetBeans Platform, allowing NetBeans Platform code to be re-usable in web applications too.
Future of MemorizEasy
Instead of linear reference cards, I’d like to replace them with Mind Maps. In the absence of a module that generates mind maps (if anyone knows of any, please let me know) I’ve started writing my own using the Visual Library API.