...and they shall know me by my speling errors.

Danno Ferrin (aka shemnon) on stuff that matters to him.

Getting Your Java 8 App in the Mac App Store

Good news everyone!

Professor Farnsworth

You can now put your Java 8 applications onto the mac app store. How do I know? Because I put a little hackathon app I wrote on the Mac App Store. The better news is that Oracle is working on making this very simple with the JavaFX packager. You can get some of the early bits in the open source repo for OpenJFX here (building and using open source code is left as an exercise for the reader).

If you don’t want to wait for the code to get an official release and you are comfortable doing stuff by hand then here are the steps you will need to follow.

8 Cool Things About Java Streams

Lambda expressions are one of the coolest features of Java 8 so far. But I think there is a (not so) secret weapon that shows just how powerful such “syntactic sugar” can be in increasing code readability and writeability. When you increase the expressiveness of code it unlocks a higher level of understanding that can make the most obtuse of tasks simple.

That secret weapon? The Java Streams API. Recently I entered an online contest simply to use the Streams in a more performance oriented environment. My surprise was that the API made development of the principal loop very simple, and very malleable to the many changes I would make. Here are 8 cool things I learned.

1. Streams don’t require lambda expressions

Even though this API really shines with Lambdas, you don’t have to use them.

Tech Predictions for the Year of the Horse

This year I’ve decided to do tech predictions on the Chinese New Year instead of the Solar New Year. Now the cynical reader may presume that I am merely finishing a blog post I started before Christmas before I started playing with Lego Mindstorms EV3 robots, but I actually worked the week between Christmas and New Years. To be precise it is the year of the Wood Horse. Not to be confused with the Trojan horse.

JavaFX Gradle Plugin 0.4.0 Released

Yesterday I pushed the fifth rerelease of my JavaFX Plugin for Gradle to BinTray, version 0.4.0. (Who came up wit the idea of zero indexed arrays anyway?) New in this release is the ability to specify a particular source set from which to package your runtime classes from. There were also a large number of bug fixes.

To use the plugin in your gradle script copy the following script into your root build directory:

http://dl.bintray.com/content/shemnon/javafx-gradle/0.4.0/javafx.plugin

and then load it in your build.gradle file like so:

apply from: ‘javafx.plugin’

This is a change from previous releases where I recommended you apply the script directly from the internet. But that doesn’t works so well on an airplane or other similarly air-gapped networks, particularly in places with poor wifi reception.

JavaOne 2013: Dogfooding the Future Java

Last week I presented two talks at JavaOne 2013. The first talk I gave on Monday was “Styling Your Custom Components with CSS in JavaFX.” My second talk on Tuesday was “Building and Deploying JavaFX Applications with Gradle or Maven (or Ant!).” Since these two sessions were very technical in nature I created demo applications for both and the source for these are on Bitbucket. One repo for the custom CSS presentation and another one for the deployment build tools talk. Since each talk dealt with different perspectives in the same talk I created a separate git branch for one, so keep your eye out for the branches.

Dogfood

Not only were my samples written for JavaFX, but the presentation itself was written with JavaFX and used JavaFX technologies for every pixel the presentation put on the screen.

Oracle JavaOne 2013

It’s day two of JavaOne 2013 and I am already done giving both of my talks. This is a new one for me because whenever I speak at conferences usually I have at least one talk on the last day, and after lunch too. So I am usually stressed out the whole time making sure my talk is ready.

There is no shortage of things to do for me to do for the next two days. Tons of technical sessions for me to attend, and it’s all over the place. For work I still need to get into one of the Nashorn sessions. There are also a lot of cool JavaFX sessions that you will likely see me at. The ever popular Script Bowl has a new companion the “Emerging Language” bowl for the up and coming languages (but not befunge or piet unfortunately).

There is also the expo hall. While smaller than before the oracle purchase what is missing is the non-developer focused booths. So if you are a developer the full value of the expo in a smaller space. The swag grabs have also chilled out some since the actual content of the booth is often the draw. You can still get some good swag, although the better swag requires steps like deploying an application to Cloud Foundry or dropping a link to the Oracle Technology Network in your blog post. Even though I just did a name drop to get a t-shirt, I actually do like these approaches because it increases the engagement with the attendees. As opposed to the scan and run approach followed months later by the sheepish admission to the salesman when they call up that they only got your name because you wanted some flashing bouncy balls for your kids. Purely hypothetical example. That is not the voice of experience. ;)

Well, I can’t spend my whole time on my computer, I’m trying to pay attention to a session about Compact Profiles.

Insubstantial Needs a New Maintainer

When I first started the maintenance branch of Kirill Grouchnikov’s Substance and Flamingo Libraries over two and a half years ago I had one important overriding reason to do so: we were using his libraries at my day job. That is one of the greatest things about an open source project, when the original author moves on to newer and shinier things the community can step in and take over the project.

That time has come again. Since I am no longer working on the project that is using those libraries I no longer have the daytime hours to spend on bug fixes and creating releases. I also would rather spend evenings and weekends playing laser tag, swimming with the family, or working on JavaFX. I haven’t really touched it in any significant way in over six months. Nor do I see myself processing another Insubstantial release.

Do you want to be the maintainer?

JavaFX Gradle Plugin 0.3.0 Released

Today I pushed the fourth rerelease of my JavaFX Plugin for Gradle to bintray, version 0.3.0 (real software engineers count from zero). New in this release is the ability to specify a particular JVM to package with your native bundles and the ability to customize platform-specific build options. Some configuration options and conventions also moved around to support these two features, most notably the plugin no longer automatically self-signs the code.

To use the plugin in your gradle script, you can apply the plugin from the following URL:

apply from: "http://dl.bintray.com/content/shemnon/javafx-gradle/0.3.0/javafx.plugin"

Or, you can include the content of that file anywhere in your build, either directly in build.gradle or included from your file path.

A Touch and Gesture JavaFX Demonstration

A few weeks ago my day job bought me a Surface Pro to help me prototype some future product work. Being a developer, you could probably guess the kind of software I installed on it. For the record I have yet to attempt to use stuff like the Finance and Travel App, and only opened the Maps app out of idle curiosity. The first thing I did was install JDK 8 and IntelliJ, so I could get down to business: figuring out how to best use touch screens and gestures.

Gradle JavaFX Plugin 0.2.0 Released

The 0.2.0 release of the Gradle JavaFX Plugin is now live on BinTray. Get it while it’s hot! More things changed in this release than the lat time around. First there has been a lot of work automating the use of icons in the packaged resource. My previous post has all the details. Second, the interaction between the Maven and Eclipse plugin has been improved. Finally, the distribution has move to BinTray for the release artifacts.