Latest Publications

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!

Happy Thanksgiving!

turkey.jpg

Hope everybody has a happy thanksgiving. After a long year of working, we’re finally getting to the holidays, so I’m really looking forward to spending to more quality time with the family. That and of course eating some turkey tonight and my favorite, leftover turkey sandwiches.

Google Android update: videos, development group, blogs

android-emulator.jpg

Videos on Google Android development can be found here;
http://www.youtube.com/user/androiddevelopers

There’s also a Google Group community setup for developers; http://groups.google.com/group/android-developers

As far as “blog reactions” there has been a lot written on the release of this SDK;
Happy Birthday to Android and devphone.com
JavaLobby: Android is out, first looks
Slashdot: Google’s Android Cellphone SDK Released
Comic: Android SDK reactions
Android SDK, Demo Video and Contest

Seems like overall reaction to the SDK is mainly positive. But it’s interesting to see in the Google Group there’s a lot of “why can’t I develop in X technology with Android, type of threads. Obviously, not everybody is happy with the choice of Java as the development language for this platform. Luckily for some of these people, it should be possible to code for an Android enabled phone with one of the many JVM compatible languages out there.

Update (Packages included in Android)

Packages included in the Android SDK.
http://code.google.com/android/reference/packages.html

One interesting thing to see is the Java SE APIs that are included and the ones that are not.

You can see the main language APIs for java.lang, java.lang.reflect, etc. Also included are the main util packages and network packages; java.util, java.io, java.nio.*. The Java 5 concurrency packages are there too, in addition to the Java 5 annotation package too.

What’s not included is anything for the SE UI; java.awt.*, javax.swing.*. There’s also no CORBA or RMI packages of course.

I’m glad to see a lot of the standard SE APIs, at one point I thought Google was not going to include these at all, it’s great to see they are there. It’s unfortunate there are no SE graphics APIs, this means no JavaFX for Android in my view. I guess you could still do some JFX apps but you’d have to map the graphics to the Android rendering API. However, given JFX relies on Java SE this causes a problem.

Also listed a junit packages … are these really included in the runtime? Not sure if that makes sense.

Listed are some Apache Commons packages, like codec (very useful) and the apache http client. Note that Java’s HttpURLConnection package is still there, so there are actually 2 HTTP client implementations in Android.

Android SDK released!

Mr. Roboto

Google has released the Android SDK on Google Code. The SDK is Java based and runs on Windows XP/Vista, Mac OS X 10.4.8+ and Linux. It requires a JDK 5 or 6 and Ant. Google provides an Eclipse plugin, but there are also instructions for using the SDK without Eclipse or with other IDEs (Jonathan Schwartz has promised a Netbeans environment for Android). The following video provides a quick intro to the Android architecture. Android runs on a Linux Kernel and applications are written in Java. For writing your own apps, the main 4 components you can use are;

  • Activity: UI component, a screen.
  • IntentReciever: Register code until it is triggered by an external event. Ex: Wake up code when phone rings.
  • Service: A task that runs on the background (no UI). Ex: Music stars in an activity, user does something else the service running the music will be in a service.
  • Content Provider: Share data with other processes and applications.

Other highlights include: WebKit used for web browser, SQLite for data storage, Java VM is called “Dalvik”. More details at the “What is Android” page.

For graphics, there are no signs of Graphics/Graphics2D or any AWT or Swing code to be found. Android provides it’s own component model, windowing and graphics libraries. The following code shows how to add a button with an anonymous listener;

http://code.google.com/android/reference/android/widget/Button.html

 public class MyActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);

         setContentView(R.layout.content_layout_id);

         final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(new Button.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
     }
 }

Very interesting stuff, of course one wonders what this means for JavaME. Android is an effort by the Open Handset Alliance, composed of over 30 companies. Missing in this group of course is Sun, also missing is more details like will there be any JavaME interoperability with Android applications, or what this means for the mobile version of JavaFX.

I also couldn’t find details on to what extent of the Java SE API is included in Android (have to try that Eclipse plugin). I’m guessing it won’t include the javax.swing and java.awt packages, but a more detailed list would be nice. It’s good to see that at least it will support Java 1.5 language features. I’m also glad is Google is providing more information on this platform than what you usually see with Apple.

Now all I need to do is find some time to create a couple of apps and see if I have a shot at winning some money!

New Java logo, Ruby style! (a few thoughts on programming language marketing)

Java on Ruby!

No, I’m not proposing my brand new Java logo replace the latest one from Sun. As a matter of fact it’s hardly a good logo, and seems more like a book cover, but for some reason a very similar logo (the one mine is based on) was selected as the official one for Ruby.

Ruby logo

People are being a bit harsh on the thread from that last link, but yeah the logo they selected is not that great. Maybe it would make an OK book cover, but you would expect something a bit simpler and more visually appealing. Also was it really necessary to put “programming language” as part of the logo? That just looks bizarre.

(more…)

Beware of rotten apples

Rotten development environment

I like Apple, it’s a highly innovative company with great products. I passion for programming was developed as a kid when I had an Apple //c. I own a couple of iPods and wouldn’t mind having one of those cool MacBooks. A few years ago, and at this year’s JavaOne, I noticed lots of developers with cool looking Apple computers. They definitely look a lot more interesting than the standard corporate Dell stuff. But one thing got my attention at this last JavaOne, I noticed a lot of Sun engineers with Apple laptops, and doing demos on those machines.

Nothing wrong with that, I didn’t expect them to be hauling some of those Sparc/Solaris laptops. However, Java 6 had already been out and there was a lot of talk of future features (Java 7 and beyond) related to the language and I found it odd that it seemed like a lot of Sun engineers would do their work on an Apple machine with versions of Java that are not current. I expect Microsoft engineers to have no problem running the latest and greatest versions of the .net framework, but tosee some of the Java desktop guys running on a machine that didn’t have the latest desktop features, didn’t seem to me like the best idea.

Due to Leopard and its lack of support for Java 6, it seems many of these same engineers are changing their minds, like James Gosling.

(more…)