My JavaFX presentation at PanamaJUG 2007 (JavaFX en Español)

Last December I did a presentation about JavaFX in Spanish for the Panama Java User’s Group (JUG). This event took place in the city of Chitre, and was a lot of fun to participate in, specially since it gave me a chance to visit my native country. The presentation aimed to serve as an introduction to JavaFX, providing an overview of the main features of the language. I showed some simple demos from Sun, and a few I created myself. At the end, we went over my JavaFX clock implementation and discussed a bit what place JFX occupies in the RIA technology space. The slides are featured at the top of this post, and are in Spanish of course. Thanks to Aristides Villareal, and the members of the Panama JUG for inviting me to this wonderful event! I was lucky enough to bring along one of my daughters, Sofia, and she enjoyed the trip very much.

I have to say, the most difficult part of preparing this presentation was trying to figure out the Spanish version of common programming words and concepts. Part of the problem is that when I was learning how to program in Panama (when I was around 10-12 years old) all of my resources; magazines, books, etc where all in English. So I never knew that array is “arreglo”, that a developer is called a “desarrollador”, or what the corresponding word for loop is. It would be really nice if there was some type of resource out there with a table with all these terms, and maybe other languages. One challenge is that it seems not all of these words are “settled”. I noticed some people were still pretty comfortable with the English versions, while others used the Spanish ones exclusively. Also, there are a lot of emerging technologies and concepts in Computer Science which I think still don’t have Spanish translations. Pretty much a more difficult challenge than I expected.

javax-panama-jug.jpg

One more thing, JavaFX has changed a lot in the last year. When I did this presentation, I didn’t cover how much effort has gone into optimizing this technology or the new changes to the animation API (like the deprecated dur keyword). There is a preview JFX SDK coming out next month, and you can sign up for it at javafx.com. I didn’t attend JavaOne this year, so I don’t know all the details, but I’m hoping the SDK comes with some of the tooling that Sun has promised. Designer level tools are key to this technology’s success. I hope to make a blog post with a quick review of the SDK once it comes out.

Parkzone T-28 Trojan maiden flight, with video!

So last year around October I started to get into the RC airplane hobby, buying a simple 2 channel Firebird Commander 2. That plane was literally “gone with the wind” and I replaced it with a nice 3 channel Super Cub. The Super Cub is currently grounded because I have to glue the tail together. I’m hoping to fix that soon.

The latest plane I bought is a T-28 Trojan from Parkzone. It’s an RTF (Ready to Fly) model which means it comes with everything. The radio, Li-Po batteries, servos, ESC, even the AA batteries for the remote! You can get one of these for around $219.99, but if you have the rest of the parts already you can get the PNP (Plug and Play) model that comes without the the Li-Po battery and radio which goes around $159.99.

t28-trojan-schematic-fx.jpgT-28 Trojan (you can see an animated version of this image in the video)

Read more »

Bug of the day : Negative screen resolution

negative_screen_resolution.png

I’m not going to brag too much, but I may be the only user in the world with a monitor capable of -1x-1 screen resolution. Makes me feel special! Now if I could only find a game that supports this resolution, perhaps Duke Nukem Forever?

Organic Software

organic_software.jpg

An article on treehugger has an interview with Paul Kim, VP of marketing for the Mozilla Corporation. The Mozilla marketing folks have decided to coin the term “organic software” in order to raise awareness of some of the other benefits of Mozilla besides its list of features.

Here is Paul’s rationale for using this term:

PK: I should clarify that we’re not trying to create a new model. Instead, what we’re trying to do is to help new sets of people who know nothing about open source software quickly start to understand that Firefox is something different from the software they’re currently using to access the Web. ‘Organic software’ is a concept we came up with that we thought would resonate with end users in ways that ‘free software’ doesn’t. I think ‘free software’, at least in the US, doesn’t carry the same valence that ‘FLOSS‘ does in, say, Europe.

PK: I think for people in the open source movement, the term ‘organic’ is a lot clearer and immediately graspable. I think in the broader culture, and again I’m speaking of the US, the word ‘free’ gets filtered through a consumer lens. So yes, it’s a terminology issue for end users - trying to communicate clearly what practitioners already grok.

I appreciate what the Mozilla folks are trying to do here, but this whole campaign seems wrongheaded and actually misleading. The term organic is often associated with organic food, which is supposed to be healthier and friendlier to the environment. That is acknowledged in the article. Using this term causes more confusion in my mind, when I first read it, I thought the Mozilla developers were making a “green” commitment and trying to save the environment by changing some of their habits (perhaps turn off their computers once in a while?).

What they should do is keep educating the public on the term “open source” instead of confusing the issue further. Their uses further overloads the word “organic” and I can also see companies jumping on the bandwagon and redefining the whole definition (ex: A software company pledges to go “green” and calls their software organic).

The article itself is proof of what I’m saying. It is from a site dedicated to environmental/green issues, and this Mozilla announcement has nothing to do with that, except that they now use the word organic.

Sorry Mozilla, a vote down on this marketing strategy from me.

The maximum number of methods in a class

penguins.jpg

The other day I saw a Java interface with well over 300 methods (with no inheritance). It’s one of these interfaces that is a single point of entry into a system, and I’m partly to blame. Really didn’t think about how the API should scale, and now that there’s years and years of development depending on this interface, refactoring this single interface is not a trivial class (it would have to be broken up at least in a dozen smaller interfaces).

That got me wondering, what could be the maximum number of methods in a class. A quick google search yielded a forum discussion with the answer as defined in the JVM spec (2nd edition);

The number of methods that may be declared by a class or interface is limited to 65535 by the size of the methods_count item of the ClassFile structure (§4.1). Note that the value of the methods_count item of the ClassFile structure does not include methods that are inherited from superclasses or superinterfaces.

So even if you have 300 methods you are still very far away from ever hitting the limit. I wonder if there are any open source projects out there with classes with this number of methods. If you count inheritance, some of the AWT/Swing classes do have a large amount of methods, but there have to be more examples of this.

Anyways, my little piece of advise is to be forward thinking when designing APIs and make sure the API can scale as more functionality is added. It is always a good idea to think very modular and to group functionality in classes and packages that make sense.

Obviously, when others depend on your code, it never hurts to practice good design usability.

Hanna Montana Guitar Piñata

hanna_montana_pinata1.jpg

Monica’s latest party had a fun “super star” Hanna Montana theme, and I made her this electric guitar piñata. We had a lot of fun making it, because of the shape there was no need for balloons or any messes with flour. I basically just used a box from one of my RC airplanes, cut the shape with one face of the box and traced the bottom part with the other side. The corners were just slices from the same box folded to form the necessary shape. Lots of tape was needed for this.

Because I was using a box and no paper mache, I was afraid the kids were going to have a hard time breaking it but no, it stood its ground and then broke when the bigger kids started hitting it.

One fun little detail where the knobs and the cords made out of colorful threads. Also added a little Hanna Montana sticker to keep up with the theme of the party.

guitar_pinata_detail.jpg

BTW one of the top searches I keep getting is for “transformer piñata”, which almost makes me try to do one (Starscream or Optimus I guess). Too bad my girls are not really into the Transformers, but maybe I could do just for fun or give it to a friend.

Cinderella’s Castle at night

magic_kingdom.jpg

We all went to Disney’s Magic Kingdom last weekend, and I like this picture we took of the castle at night. Makes it look a bit spooky.

GenderRenderer, GenderEditor and unfortunate class names

whoops2.jpg

 

So the other day I’m looking at somebody’s code and notice a class name that caught my attention; “GenderEditor”. I think it was just your normal JTable class to show a “gender” property, but I thought it was kind of funny because the class name implied you could use this program to switch a user’s gender very easily (with no surgery!).

I talked to the developer and we had a good laugh about it. Then I noticed in the code a class called “GenderRenderer”. Well, you don’t have to use a lot of imagination to figure out how this class could be potentially a problem (what should we use to represent gender … hum).

There’s nothing wrong with these class names of course, but it made me think about how hard it is sometimes to come up with good names for our classes and how easy it is to come up with some awkward and sometimes embarrassing names.

I can’t remember any similar to GenderEditor, but I do know somebody that got carried away with naming everything *Broker. UserControllerBroker, GroupManagerBroker, SaveTheDolphinsBroker. If that wasn’t enough, then actual “broker” implementations just appened “Impl” at the end of the name, making things even more convoluted; UserControlerBrokerImpl, GroupManagerBrokerImpl, etc. I guess good descriptive names are nice, but you can get carried away trying to define what the object does in the name. We do have comment blocks in most languages, so sometimes it’s best to just say what the thing is supposed to do there.

I’m also not a big fan of putting a big “I” in front of interfaces. IUser, IConsumer, ICreditCard, this convention is used a lot by Microsoft and IBM. You look at the Eclipse code and it is littered with it. I see the point though, sometimes you want to make clear people separate interface from implementation, but we do have IDEs that let us know quickly and visually what is a class and what is merely an interface.

The again, having some basic naming conventions is often better than none at all. As long as you apply a bit of common sense and make sure you read the names you are using out loud, you won’t end up with weird names or potentially offensive sounding classes.

The “constructor that doesn’t construct” blooper of the day

DeadFish2

Two people sent me this code blooper the other day, again, class and parameter names have been changed to protect the identity of the offender(s).

public SomeObject(
boolean lowSetting,
boolean highSetting,
boolean currentSetting,
Color lowColor,
Color highColor,
Color currentColor,
Color otherColor)
{
   super();
   lowSetting     = this.lowSetting;
   highSetting    = this.highSetting;
   currentSetting= this.currentSetting;
   lowColor        = this.lowColor;
   highColor       = this.highColor;
   currentColor   = this.currentColor;
   otherColor      = this.otherColor;
}

I have to admit I didn’t get it in the first couple of second, but it should be clear that this constructor is basically not doing anything. It basically overrides the constructor parameters with the current values in the object, which is more than likely not what we want to do.

BTW it also has a pet peeve of mine, it calls “super()” (the parent’s public no arg constructor). A lot of people don’t know that this is done automatically for you, no need to write code to for it.

Anyways, this one could have been prevented if you had a policy saying that method parameters should be named differently from class members. However, I personally like naming them the same. I guess it shouldn’t be unreasonable for the compiler to give you a warning when you do this, I’m going to guess most of the time you don’t want to do this.

2007

fireworks.jpg

Last post of the year. I haven’t updated the blog in a while, had kind of a longish vacation from work and was taking a bit of a break from the internet. In the middle of that, I had a very good trip to Panama and spoke at the corresponding JUG over there about JavaFX, more on that in a later post.I wish everybody a happy new year, and hope to update the blog more frequently. This year has been good in my life and I’m hoping things get even better in 2008.

Feliz Año Nuevo!