Music Explorer FX 2.0: Now with Real Music

Sunday, May 16th, 2010

The latest version of Music Explorer FX is now available. It boasts some significant changes, most notably access to full-length, licensed audio tracks. Click the button to launch it, and read on for the new features.

Real Music

A significant limitation of previous versions of MEFX was the lack of access to licensed audio. Since most music is not freely available, MEFX would have to offer up whatever free content it could find on the internet. So if you brought up Lynyrd Skynyrd, for example, you were likely to come up with five remixes of someone sampling Freebird, when really all you wanted is the studio version of Sweet Home Alabama.

Thanks to a new content provider program between the Echo Nest, and Play.me (a music content provider) this problem is a thing of the past. MEFX can now offer up full-length audio.

By default, MEFX will play 30 second preview clips of any given artist. If you sign in with your play.me account though, you get access to the full-length versions (the sign in button is in the upper right part of the application).

signin

If you don’t have a play.me account, you can register (for free) via MEFX — only an email address is required. A free account nets five hours per week of full-length audio. If you feel like paying money you can get an unlimited amount of audio streaming (a bit of a disclaimer here: I’m told that Play.me is U.S. only…for now).

Playlists

Beyond access to licensed content, this new version also introduces the Playlist, found in the lower left corner of the application.

playlist

Instead of being limited to only playing audio from the artist in the middle as previous versions were, you can now add any artist to the playlist, and continue browsing. This keeps the music playing while you browse around the artist space.

Click the “+” button below the artist to add it to the back of the playlist. If you see something that you want to play immediately, then click the “>” button instead.

beck

Once in the playlist, you can hover over an artist to modify their position in the list.

Since MEFX is now pulling from a real catalog of audio data, the number of tracks per artist has grown significantly (over 20 tracks in some cases). In order to better manage this, you can click on the artist’s image to “flip it over” and view the available tracks. From here you can click on an individual track to include or remove it from the playlist. Here’s a screenshot showing the track list mid-flip.

flip

A New Look

MEFX 2.0 sports a new look — most notably this is reflected in the “shelf” component at the bottom, where most of the goodies reside.

shelf

In addition to the playlist, described above, the artist history resides here on the shelf as well on the right side.

Everything You Want to Know About an Artist

Videos, News, Bios, Reviews, Blog entries — all sorts of aggregated information about the artist is available to you. Just click on the “i” (”info”) button below the artist.

WhiteStripesInfo

Click the “images” button under the artist to view the image gallery (as with the older versions).

ChickenfootGallery

But Wait, There’s More…

Don’t forget the “shelf popup” in the lower right corner (click the “up arrow” to bring it up).

controlpanel

This extra control panel allows to to tweet your musical journey (as before), adjust the popularity of artist recommendations via the “Fame” knob, and toggle Auto-Play.

Auto-Play will enable MEFX to randomly pick artists and fill the playlist for you. This “auto pilot” mode is great for parties when you want to keep the music going without user intervention and also want something interesting happening on the screen.

I’m excited about this new version of MEFX. I feel that it has crossed over from “interesting experiment” to “useful application”. Please check it out, and let me know what you think.

Check out the main site for more information about MEFX.

Oh, and be sure to check out MEFX 2.0’s mention in a recent Billboard article.

Enjoy!

posted by Sten Anderson

GR8 US Postmortem: Be the Outlier

Sunday, April 18th, 2010

The Groovy GR8 conference is a small intimate gathering that is part educational, part commiseration over not being able to fully use Groovy in the day job, and part therapeutic for having to deal with the incessant ribbing from your pretentious Rails coworkers.

The US version of GR8 was held in Bloomington MN this year and was kicked off with Guillaume Laforge giving a sort of “state of the union” of the Groovy language: the past, present, and future. I’m not aware of any other language that has had such consistent releases. It is hard not to contrast the singular vision and momentum of the Groovy language with the languishing JDK 7.

After lunch, Venkat Subramaniam delivered the keynote with the central message “be the outlier” which was as much a sort of “call to arms” as it was a suggested career path. Citing Malcolm Gladwell’s book of the same name: it is the outliers who change the world and are ultimately successful. Of course, statistically we can’t all be outliers, but it’s a good place to strive for, and an appropriate theme for a conference of less than a hundred attendees.

He encouraged being a Polyglot programmer — even if you didn’t have use cases for all of the languages that you learn — citing that the number and types of languages that you know greatly influence how you think and solve problems.

It bears mentioning that while I had heard of the legendary Venkat, I had never actually seen him speak. It is rare for a speaker to be both a powerful orator and also a technical master. I attended both of Venkat’s afternoon sessions and I have to say that his live coding skills are off the hook. Not only did most of his sessions involve live coding, but he answered questions by coding up examples on the fly.

Now that is a master.

If GR8 is a representative sampling of the future of Groovy, then sign me up. There is no other conference that I’ve attended where I felt such immediate kinship with people that I had never met. I look forward to attending next year.

As a quick side-note: it doesn’t seem to matter if I end up going to the shopping mecca of the midwest, The Mall of America, I will still just pick up presents for my kids at the hotel gift shop as I check out.

posted by Sten Anderson

Flipping Nodes with the JavaFX PerspectiveTransform

Tuesday, April 13th, 2010

In working on some new features for Music Explorer FX 2.0, one of the issues I’ve had to think about is where to put track information for an artist. The current UI is mostly visual and doesn’t afford a lot of space per artist. For reference, here is how a typical artist is currently represented:

unflipped

Wouldn’t it be nice if we could just work within the current space constraints and flip that artist over to see the tracks that it has to offer? With JavaFX’s PerspectiveTransform (and the help of a Timeline for some animation) we can do just that.  Here’s a screenshot of a node flip in-progress.

halfflipped

Here’s a shot of the track listing on the “back” rotating into view.

halfflipped2

And here’s the final state.

flipped

This is just a prototype (clearly I don’t listen to Nickelback), but feel free to go ahead and try it for yourself. Once you launch the app, click on the “flip” button to flip the node back and forth.

The code to make this work is an amalgam of Josh Marinacci’s “Photo Flip” demo and the Flip Transition in Lucas Jordan’s “JavaFX Special Effects” book. The main issue to be aware of here is that, as explained in Lucas’ book, we’re not flipping 180 degrees from front to back. If we did that the track listing UI would be reversed.

Rather what is really happening is that halfway through the rotation when the front node is “on edge”, we’re swapping it for the back node (the track listing) and rotating the track listing the “last” 90 degrees of the rotation — as if it had made a complete rotation.

In other words we’re rotating a full 360 degrees, but cutting out the “middle” 180 degrees to make it look like half a rotation. If we didn’t do this, but rather just rotated 180 degrees, the track listing would appear backwards.

Feel free to check out the source code for details.

Incidentally, this is just one of many neat tricks in Lucas’ book, so be sure to pick up a copy. By way of full disclosure and self-aggrandizement, I was the tech reviewer for the the book — but don’t let that stop you from ordering your copy today!

posted by Sten Anderson

Interviews with Average Programmers

Saturday, March 20th, 2010

Books that interview luminous, high-profile programmers seem to be popular right now.  Titles like “Coders at Work“, and “Secrets of the Rockstar Programmers“  have interview-style formats in which various programmers generally regarded to be some of the best in the industry are asked questions about how they got their start, and where they think the industry is headed, etc.

These books are an odd mix of inspirational and at the same time demotivational since after a while I start to think that everyone except me got their start coding assembly on a PDP-10 that they built themselves over the weekend when they were five years old.

Still, however, it’s impossible for me to read these books and not wonder how I would answer some of these questions myself even though the answers would only likely be worthy of an “Interviews with Mundanely Average Programmers” at best. Since such a book will never likely be written, I thought I would interview myself here for laughs.

Note that the following is intended to be taken as lighthearted and humorous. Any resemblance to anyone’s actual life or experience, including my own, is entirely coincidental (although I do own “Teach Yourself Java in 21 Days“).

———————————————————————————–

Interviewer: How did you first get into programming?
me: Well, I was meeting with my Career Counselor one day to figure out what I should do with my EE degree.
Interviewer: Oh so you have a degree in Electrical Engineering?
me: Eh? No, ‘English Education’. So anyway, he had this problem with his computer — he couldn’t open an email attachment or something. Anyway, I somehow got it open for him, and he said I was pretty good at that, and that I should go into computers. So here I am.

Interviewer: Well, yes, many programmers don’t take the conventional route and get a CS degree. So tell me,what languages do you know and use regularly?
me: Oh, lots.
Interviewer: Specifically, can you name a few?

me: Sure. I’m most comfortable with Java 2 , but I also know Java 1.4, Java 5, even some Java 6. I know Java Swing and of course Java Collections pretty well. Some Java Servlets too.
Interviewer: Ok, those are all the same language. Do you know anything else besides Java?
me: Er lang–
Interviewer: Oh, Erlang, really? What have you done with Erlang?
me: No sorry, I was starting to say to myself, “Err, languages besides Java…”. I’ll have to think on it some more.

Interviewer: Ok, well let’s move on then. What’s the most complicated piece of code you’ve implemented?
me: Oh that’s easy. One time I had to sort a list of numbers, so I did a sort in one line.
Interviewer: Really!? You implemented a sorting algorithm in one line of code? That’s very impressive. Donald Knuth would be proud.
me: Who?
Interviewer: The father of modern computer science and the author of the seminal “The Art of Computer Programming” series.

me: Yeah well if he likes sorting, he should check out Java Collections, one of the languages I know. You can do a sort with just “Collections.sort()”, and then it sorts the collection you give it. Boom. Sorted. One line.
Interviewer: …
me: If you give me his email I can let him know where to find it–
Interviewer: …

me: Say, aren’t you going to ask me how I would move Mount Fuji? I have a pretty good answer, I think.
Interviewer: What? No, this isn’t a job interview.
me: It’s a trick question. You can’t move mountains. That’s the answer.
Interviewer: Well, I think that might be the point of the question.  I don’t think it has “an answer” . So anyway–

me: So I got it wrong then. Does this mean the interview is over?

Interviewer: No, I wasn’t — you asked yourself that question. Anyway, let’s keep this thing going. What are your thoughts on Pair Programming? Do you practice it often?

me: Absolutely not. I mean, don’t get me wrong, I don’t judge others for doing it. I mean, have I been tempted? Sure. But, I’m a happily married man and–
Interviewer: Ok, let me stop you there. I’m pretty sure we’re not talking about the same thing.  Let’s just skip a few of these questions here. Ok, here’s a safe one: What are some of your favorite tech books?

me: Oh, probably “Teach Yourself Java in 21 Days” stands out. It got me up to speed in my first language, Java 2, and very quickly too I might add. I actually read most of it in 20 days, so I figure I’m probably ahead of the curve somewhat. I’ve always scored pretty high on reading comprehension. I also have one of those books with a picture of an animal on the cover about XML. Oh! That’s what I was trying to remember from your ‘what languages do I know’ question! I know XML too.

Interviewer: I’m not sure XML is really a language–
me: Ok, sure, no problem. Just keep me down for Java Servlets then.  In fact, maybe count it twice. I know it pretty well.

Interviewer: Sure, well, I’m not keeping score. It was just meant to spark conversation. Well scanning down the rest of my questions here, I think I can anticipate most of your answers. So why don’t we just cut it short here. Thank you for taking the time to talk to me.
me: Did I get the job?
Interviewer: Once again, this wasn’t a job interview.
me: Dang. That always means “no”.

posted by Sten Anderson

JavaFX Tag Visualizer Source Code

Wednesday, March 17th, 2010

Some of my first experiments with JavaFX involved alternative ways of visualizing tag clouds. Specifically there was the “dome” visualizer, and the “radial” visualizer, both pictured below with their respective webstart links.DomeViz

tagcloud

radialviz

The source has been updated to JavaFX 1.2 and lives here for the dome visualizer and here for the radial visualizer. Thanks again to those who had interest in it. The usual caveat of “this is messy experimental code” applies.

posted by Sten Anderson

JavaFX Family Tree Visualizer Source Code

Tuesday, March 16th, 2010

A couple people have requested the source code for this Family Tree Visualizer that I contributed to JFXStudio a while back. You can get the source code here (updated for JavaFX 1.2). Thanks to those who had interest in it.

This visualization foregoes the typical tree structure by displaying a family tree in concentric rings with the younger generations rippling out from the middle (much like a real tree). There’s also some animation to flip back and forth between the two examples (the Baggins line and the House of Durin from Lord of the Rings).Screen shot 2010-03-16 at 12.14.57 PM

Here’s the web start link again for convenience:

One of the great things about JavaFX Script is its declarative syntax, which lends itself to feeling like a DSL for constructing objects.  To illustrate this idea, here’s an excerpt of the DSL-like syntax for creating the family tree from the above screen shot:

FamilyTree {
person: Person {
name:”Durin”
children: [
Person {
name:"Dain I"
children: [
Person {
name: "Tror"
children: [
Person {
name: "Thrain II"
children: [
Person {
name: "Thorin II"
}
Person {
name: "Frerin"
}
Person {
name: "Dis"
children: [
Person {
name: "Fili"
}
Person {
name:"Kili"
}
]
}
]
}
]
}
FamilyTree {
  person: Person {
            name:"Durin"
            children: [
              Person {
                name:"Dain I"
                  children: [
                    Person {
                      name: "Tror"
                      children: [
                      Person {
                        name: "Thrain II"
                        children: [
                          Person { name: "Thorin II" }
                          Person { name: "Frerin" }
 ...

While it would be pretty generous to say that this is a full-blown DSL, its conciseness and structure certainly feels a lot like one. In my weaker moments I might even mistake it for a Groovy Builder.

I’ve heard it said many times over that JavaFX is a DSL for creating user interfaces. I may push that a bit farther and say that it’s a DSL for creating just about anything visual.

Next up, in keeping with recycling my old ideas, I’m going to update and release the source code for these tag cloud visualizers for those interested.

posted by Sten Anderson

MEFX at SXSW

Monday, March 15th, 2010

Paul passes along this photo of Music Explorer FX being demoed at the SXSW music festival this past week.

mefx-sxsw

It’s nice to see that a) JavaFX is getting some representation at such a diverse and high profile festival and that b) Music Explorer FX is still a part of that promotion. This seems like a natural fit though since MEFX is an application for music discovery, and SXSW is, after all, a festival about discovering new music.

posted by Sten Anderson

JavaFX at the Chicago Java Users Group

Saturday, December 12th, 2009

I’ll be giving a talk on JavaFX this upcoming Tuesday, December 15th at the Chicago Java Users Group. The talk is titled “JavaFX for Java Developers”, and is meant to be a survey of JavaFX from the perspective of someone already familiar with Java.

Thanks to the generosity of Apress, there will also be an ebook raffle for Lucas Jordan’s new book: “JavaFX Special Effects“, which I had the privilege of tech reviewing.

So if you live in the Chicagoland area, come check us out.

posted by Sten Anderson

I Heart Joel on Software

Wednesday, December 2nd, 2009

Let me make one thing perfectly clear before you embark on this journey with me: I very much love reading anything Joel Spolsky writes. I am a Joel on Software fan-boy. I am also aware that, due to his ubiquitously strong opinions, he is frequently cited/criticized on other tech blogs, and that doing so is derivative and shallow, even though that’s what I’m about to do here.

I acknowledge this, but it’s ok, because I Heart Joel on Software.

I have read most of Joel’s books, including the self-titled “Joel on Software”, the sequel “More Joel on Software”, the dubiously too-small-to-be-a-book “Smart and Gets Things Done”, and the edited-by-Joel “Best Software Writing I”.

After reading so much of his work, it’s very clear that if there’s one thing Joel cares about, based on reoccurring topic, it’s what separates the programmer wheat from the code-monkey chaff: that is, how do you identify a Good Programmer?

Indeed, “Smart and Gets Things Done” and its analogous sections in “JoS”, and “More JoS” is billed as a hiring guide for managers looking to hire the best possible programmer.

Herein lies the paradox though: the real audience of all of Joel’s books is his core readership, which are programmers, and since the thrust of “Smart and Gets Things Done” is that 99% of programmers are terrible at what they do and not worthy of jobs, Joel then, must have a latent disdain for his own readership.

Joel’s ideal programmer has graduated from an Ivy League Engineering School, and can construct a Full-Adder from memory without using XOR gates. Further, Joel asserts that these mythical engineers are never on the market since they get hooked up with extremely rewarding and fulfilling internships right out of school and never want for anything else. The 10 or 12 engineers that fit into this category won’t buy his books since they apparently know all these things a priori, which means that it’s all of us slack-jawed programmers that must be enabling Joel’s book royalties.

So it seems that Joel is stuck in a love/hate relationship with his audience. I assume he loves to sell books, yet he must be aware that the type of programmer he takes so much time to insult and the programmer reading the insults are in fact one in the same.

Why would we, the sub-par programmers of Joel’s universe continue to enable this? It’s possible that we are indeed so Neanderthalic that we simply don’t have the higher functioning thought processes to get the joke. Do we think he’s talking about someone else?

“Ha ha, it’s so true, Joel!  Those boneheads have to submit their resumes to dice.com to get work. What morons! Ooh, what’s this? Another email from a recruiter? Yes, I am interested in a Hot Java Contract in New Jersey! A ‘must fill ASAP’?  I’m sending my resume now!”

Or perhaps we are well aware that we are both the target and the audience. In this case it becomes more like an abusive relationship. Even though he hurts us, we know he doesn’t really mean it. We keep coming back for more, hoping to read that post someday that will heal all the hurt and make it all better.

We yearn for the post from him that admits that, indeed there is no correlation between what school you went to and what type of engineer you are. In fact, how fast you can regurgitate a quick sort algorithm on a white board has nothing to do with how you’ll fare in a team, and further, that raw algorithm analysis is both an unnecessarily reductionist and irrelevant way to assess someone’s skill.

We’d like to sit on our high horses and look down at the unwashed masses with disdain and stroke our egos by saying that what we do is High Art as opposed to all those Java Lightweights that would break down and cry if they ever saw a dangling pointer, but the fact is that it requires no more (and no less) innovation or brain cells to write bug tracking software (for example) as it does to develop budget reporting software. Any project is a fount of potential technical challenges, no more or less important than any other project’s, and solved by programmers of all mental shapes and sizes.

We, Joel’s Readership, would like to think we’re better than most of the programmers out there and may feel the need to distance ourselves from all the inept imbeciles since the field has such a low barrier to entry, as compared to say, being a doctor. But of course, we’re writing software, not saving people’s lives, and if we are talking about the category of software that does keep people alive, whether by moving the laser to the correct place over the cornea, or adjusting the yaw of an aircraft so it can safely land, then it was probably written by a contractor, that class of engineer which stands diametrically opposed to the “never on the market” rule and probably didn’t go to Yale.

In fact, I imagine that, as the aircraft descends into that last critical few hundred feet above the ground, the pilot is subconsciously hoping that the engineer who wrote that motion control code was more concerned with preventing gimbal lock than with being able to sort that array of numbers in “log n” time.

We, Joel’s readership, would love to see his acceptance of us in this form, but alas, we are unlikely to see such a concession from him.  At least not while we, the JoS fan-boys, keep buying his books.

posted by Sten Anderson

All I Really Need to Know About Programming I Learned in Kindergarten

Thursday, November 12th, 2009

kindergartenOn the days that I pick up my daughter from Kindergarten, she’s always bursting with excitement over what she has learned that day. It often makes me wistful for my own Kindergarten days, almost 30 years ago. As I listen to my daughter talk about her day, I reflect on my own time in kindergarten, and how, trite as it might seem, that year spent in school at age six, really gave me all the tools and life lessons I needed to be a professional programmer.

I often think back to what Miss Johnson used to say in that small classroom at Laird Elementary back in the early 80s, “now remember class, try to keep your initial load factor for your hashtables at 0.7″. At the time, I remember thinking, “now when am I ever going to use that?” But sure enough, my mid-thirties self now chuckles at my younger naivety.

After recess, we would all gather ’round and listen to her tell the story of the Traveling Salesman and how he could never find his optimal route in a deterministic amount of time. “Use a branch-and-bound algorithm!” we’d all shout at the climax of the story.

“Children”, she’d chide us, “can we do better than that?” Of course we couldn’t resist being baited like that, “use a Nearest-Neighbor Heuristic!” we’d exclaim with excitement, barely able to stay on our carpet squares.

She would often tell us that while learning to clean up after ourselves, and sharing with others were indeed important life skills, they were not relevant at that age, and we would likely learn about them in grad school.

Come to think of it, I do recall an extensive lecture on the importance of flushing and always washing your hands in Genetic Algorithms in my Masters program.

posted by Sten Anderson

CityTech Home