Scala, Java, Unix, MacOS tutorials (page 356)

I was originally going to title this article "Is Oracle Killing Java?" and write about a number of recent events in the Java community, but I'll try to just stick to the most recent fact, which is that Doug Lea is resigning from the JCP Executive Committee. (JCP stands for Java Community Process.)

Dear Mr. Jobs,

As I think about this Mac Java deprecation issue, I'm reminded of my own story of making the switch to the Mac platform, and how your investment in the Java platform led to that switch.

[Dateline: Friday, October 22, 2010, Talkeetna, Alaska.] After Apple very quietly announced that their Mac Java port is deprecated, a CIO wrote Steve Jobs, and Mr. Jobs sent his usual one-line reply. Next up, James Gosling, the "father of Java", replied to Mr. Jobs' comments, basically saying they were inaccurate.

If I haven't responded to your comments lately, my apologies, but I'm staying at the Talkeetna Roadhouse in Talkeetna, Alaska, taking time for a little R&R. When Apple deprecated Java on Mac OS X while I'm in the middle of developing a Java-based speech-recognition app for Mac OS X (because Apple's speech recognition server sucks), I decided it was time for a real break.

With Apple very quietly letting developers know that Java on Mac OS X is deprecated (you had to find it in the Release Notes for the latest Java Update), it's quickly time to think about what this means to Mac Java developers.

Why did Apple do this?

Seeing that they're not hurting for money at all (see Apple makes more than $1.6M revenue per employee), there are three possible answers here:

With the announcement of the App Store for Mac OS X, Apple also released a Java upgrade, and their release notes contain this ominous verbiage for Mac Java developers:

Java Deprecation

As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.

The release notes then go on to explain more about Apple/Mac Java being deprecated:

Ever need to include a Java jar file in a JRuby script? As I work to convert my Mac speech recognition server to JRuby, the first task I need to tackle is to include the Sphinx-4 jar files in my JRuby path. You can include one Java jar file in your JRuby script path very easily, like this:

require 'lib/sphinx4.jar'

where the jar file 'sphinx4.jar' is in a local subdirectory named lib, which is cool. But if you need to include many Java jar files into your JRuby script at one time, here's a very cool way to do that:

Mac speech recognition software: I just had a fun interaction with my iMac that went a little like this:

Al is standing in kitchen, peeling an avocado. It's a little quiet, so he says, "Computer, play the movie Juno."

The computer says something snarky like "Yes, master" (or in Alaska, "You betcha"). In a few moments the movie begins playing.

Al smiles.

Every once in a while technology leads to something pretty funny. For me today it was the Google News page, showing a story about a California mayor being arrested after a "wild-ride purse snatching." The funny thing was that Google News had the story under the category "Data Storage", which I can only assume was a reference to the storage capabilities of the woman's purse. Here's a partial snapshot of the Google News page:

One of the things I learned when using the pure Java speech recognition software yesterday is that my iMac has no visible indicator of when the microphone is on. With the Sphinx-4 "Zip City" application you have to press a button to speak, and when you do, there's no indicator on the iMac that the microphone is on. So basically any application can turn on the Mac microphone without you knowing about it.

Summary: There is a Pure Java speech recognition project named Sphinx-4, which looks very promising. You can easily run their WebStart demo, and recently I've developed my own Java speech recognition app on top of Sphinx-4 to control my Mac OS X system.

So far this looks pretty sweet ... if you're interested in programming with speech recognition, a project named Sphinx-4 provides a Java speech recognizer, i.e., a speech recognition server written entirely in Java.

I want to apologize to a few people who have written lately that I haven't been able to take the time to help. I'm trying to get my new book/website online, and it's taking a lot of time. The website is a story I've titled "How I Sold My Business", and I was fortunate to be able to get the domain name HowISoldMyBusiness.com.

Dear Google,

About Chrome, well, I've had to quit using it. If you'll look at all the bug reports I've filed, you'll see there are several problems when trying to use it with Yahoo Mail. It also doesn't render several websites properly, and I've reported those as well. And lately it keeps crashing. I notice this when it takes two attempts to close every tab, and then finally I just have to "force quit" Chrome.

As I was working with MailChimp this weekend, I stumbled across a blog article they shared about the success of their new Freemium business model approach. They took the "freemium" route a little more than a year ago, and their numbers look like this:

As a brief followup to yesterday's article on Revenue Per Employee in Computer Services, here's a mind-blowing statistic:

Apple earns $1,664,431 revenue per employee.

That's right, well over $1.6M revenue per employee. That's just mind-boggling. That revenue statistic just destroys computer service firms, whose best performer earns $169K revenue per employee.

As I get ready to release my new website on How I Sold My Business, I did some research on revenue per employee, specifically revenue per employee in the computer services industry.

As it turns out, there are all sorts of good information sites on the internet. Probably the most consistent source of information is the Fortune Magazine site, specifically these two links:

Very cool, thanks to a comment from a reader I just learned about the Ruby $stdout and $stderr variables. In short, you can write to STDOUT and STDERR in Ruby using code like this:

$stdout.puts "stdout"
$stderr.puts "stderr"

If you put those two lines in a Ruby script, and then run the script like this:

ruby test.rb > stdout 2> stderr

you'll find that the stdout and stderr files will contain the two different strings.

Mac DVD movie ripping: When I first wrote my article on How to rip DVD movies on a Mac I felt a little guilty, like I was sharing some information the movie industry doesn't want you to know. But then during this past week two things happened that made me glad I wrote that article.

Summary: A collection of UML Use Case examples (software requirements examples), based on a "real world" project.

I've been taking a little time lately to document a lot of what I know about UML Use Cases, and today I thought I'd take a few moments to link up to Use Cases I wrote for a client back in 2004. The client graciously allowed me to reprint these on this website, as long as I removed their name from all the documentation.

In my Use Case quality article yesterday I wrote about a "User Story" for a fictional "User Logs In" requirement. To complete that article, I promised to write a Use Case version of that same user story. Here then is that sample "User Logs In" Use Case, which you can compare to yesterday's User Story.