NetBeans in Cairo!
By Geertjan on Jan 08, 2006
What Mohamed, Sarah, May, Moataz, Ismail and Ahmed are currently specifically interested in is module development. For their end-of-degree thesis, they want to develop a plugin for NetBeans (they haven't made a final decision yet on what kind of plugin, but they're seriously considering a Java 3D Image Editor -- so, if there's anyone out there reading this who wants to give them advice or suggestions, or if there are people out there with experience in this field, please let me know or leave a comment at the end of this blog). So, somehow Mohamed had got in touch with Gregg (about something unrelated) and then Gregg, because he knew I was hanging out in Egypt, put me in touch with Mohamed. After exchanging a few e-mails it seemed like a good idea to do a short presentation on module (i.e., plugin) development in NetBeans IDE 5.0, followed by a brief overview of other 5.0 features. I got Brian to send me his slides -- and then arranged to meet Mohamed outside the Egyptian Museum in Cairo. (The train for Cairo left at 6.11 in the morning, so I didn't get much sleep. I was also worried that maybe I'd somehow miss Mohamed at the museum or that there'd been some miscommunication about something.)
But everything went perfect! I met Mohamed at the museum, walked back with him to the AUC, then met with the others, and walked through Brian's slides -- all of us were crowded round Mohamed's (great, and very very clean) laptop (except for Ahmed who joined us later). After going through the slides (which give a very basic but thorough overview of the whole module development process), I did a quick demo which added a menu item and toolbar button to the development IDE. The speed with which everything happened really worked in that they clearly felt excited about how quick and fast it all was. (One thing I stressed, which didn't come through so clearly in Brian's slides, is the connection between the NetBeans APIs and the module file wizards -- i.e., using the Actions API is kickstarted through using the New Action wizard, using the Loaders API is kickstarted through using the New File Type wizard, etc.) Also, what really works very well in demonstrations (because both these features are just so cool) is to show the layer.xml browser in the Projects window as well as the API filter in the Project Properties dialog box.
I also did a quick demo of various other 5.0 features -- obviously, I included Matisse, the many new refactorings, and web service support (that really blew them away -- so much code is generated for you in the web service area, when you see it happening before your eyes for the very first time, it's an awesome experience).
Then they asked a lot of interesting questions, some of which I couldn't answer. Here they are (these are the ones I couldn't answer or which I consider to be issues that I'll add to Issuezilla soon):
- In the New Action wizard, why can't you create your own menu? In other words, you get a list of the existing menus, to which you add your new menu item. But what if you want to add the new menu item to a completely new menu? You'd need to create the new menu in the Options window first, and then go to the New Action wizard. It would be better if the listbox in the New Action wizard were a combobox instead. (But I'm sure this is planned for the next release. And it's very easy to change this in the layer.ml file.
- In the Module Manager, after you've installed your new module, what does the "T" icon mean? Only the modules that you install (i.e., not the default IDE modules) have this "T" icon. During the demo, we wondered what that stood for.
- Are there limits to the size of the icons used by the New Action wizard? I always assumed that the icons had to be 16x16 pixels, but during the demo we used a random 10x10 pixel icon on Mohamed's laptop, and that worked without a problem.
- Matisse, obviously this was a really cool part of the demo (main takeaway: "you don't need to know anything about layout managers, just pretend you're using DreamWeaver, but in the desktop area"). However, it would be good if there was a single button that you could press to return all your changes to the defaults (in addition to the current situation, where each property has to be set to default individually).
- They asked about compatibility between .Net and Java web services. I said I didn't know the answer, but that I'm sure there's some solution in this area (or that it's being worked on -- I guess this is what Tango is all about). For example, they mentioned that .Net web services deal with datasets while Java web services deal with resultsets. Is there some way of mapping these to each other?
- In the coffee shop, I quickly showed Mohamed how to create a Google toolbar for NetBeans (thanks again, Ludo), as explained here. However, I re-encountered the problem where the module doesn't work for the internal HTML browser. (I know that Ludo knows about this, because I mentioned it in his blog, but I don't know if a solution has been found for it.)
After the slides, the demos (a new menu item, toolbar button, loader, and web service, all within 5 minutes), and the questions, we went to a local hangout place, with coffee and so on (reminded me a bit of Starbucks). There we took several pictures (once I get them from Mohamed, I'll publish them here so that you can see what they look like). I had a really good time with them, they took me to central Cairo, where we hung out, had a really great meal (fantastic Egyptian kofta), and then they even drove me all the way to the airport. (And they didn't laugh at my pathetic Arabic, not even once!)
One very interesting point I picked up from them was when they asked me: "What perception do you -- and other people -- have of programmers in Egypt?" (They asked me this because in my e-mails I had expressed a lot of surprise at having discovered that they had even heard of NetBeans. After all, has anyone come across Egyptian programmes on nbusers? Or anywhere else? I know I haven't.) I told them what I think is not just true for me, but also true for a lot of other people, specifically in NetBeans -- who even knew that hundreds of students in Egypt are all using NetBeans? That really blew me away. Then one of them said something that explained a lot to me -- he said that they have "a suspicion of collaboration". In other words, they want to solve things themselves, only as a very very last resort would they consult a mailing list such as nbusers. In general, any problem they encounter, they solve amongst themselves. In this way, they stay below the radar, and NetBeans folks never know that they even exist...
They'd definitely be interested in hosting something like a NetBeans Day (they say that they should be able to attract at least a few hundred people, students from a variety of universities, especially if the productivity of NetBeans is emphasized and the connection between productivity, skill enhancement and the increased likelihood of getting a job as a programmer). The NetBeans Day would, in their opinion, if it were well-marketed, be able to attract developers from surrounding countries too, such as Kuwait and Jordan.
Finally, as pointed out above, Mohamed, Sarah, May, Moataz, Ismail and Ahmed would really appreciate your input! Here are some very specific things that they'd like input on:
- Are there plugins out there that already do what they're thinking of doing -- i.e., creating a plugin that provides a graphic 3D editor for NetBeans? They were talking about adding 3D images to the palette, then being able to drag and drop them in the NetBeans editor, being able to rotate the images, and set their properties in the Properties window. (I know of at least one person -- Mark Kay -- who is working on something similar. If you're reading this, Mark, it would be good to link up with these guys.)
- Would their 3D image editor plugin be useful to anybody? They're doing this for their thesis, but they're also hoping that it be useful for the broader NetBeans community. So, are there use cases out there for this kind of plugin?
- The scale of their project seems to be similar to that of the Mobility pack (and they have a year to complete the project, the first half year for research and the second half year for development). Are there Mobility developers out there who can advise these students on how they should plan and research their project and to give them general advice on the planning stage?
- They were also talking about drag and drop functionality of Mobility code for Bluetooth communication. Does someone have experience or ideas for this?
- They were very interested in finding out about what standards they need to adhere to in order for their plugin to be integratable into the NetBeans sources. I showed them this page, but I suspect that that page, with its various sublinks (such as this one) is not completely up to date.
- More generally, they're very interested in findout out "what are the hot topics out there". In other words, if their other ideas don't work out, what other plugins could they potentially consider implementing (again, it has to be useful as well as doable within the timeframe). I mentioned a C++ editor plugin to them, but I wouldn't be surprised if someone isn't working on that already (of course, that shouldn't stop them, different implementations of the same concept isn't necessarily a bad thing).
So, basically, if you're out there reading this, and willing to chip in your advice or suggestions -- please feel more than free to do so. You can also just contact Mohamed directly, if you prefer. Here's his e-mail address: firstname.lastname@example.org.
And... watch this spot if you want to see pictures of us hanging out together in Cairo!