Q & A with Joshua
Marinacci
Tell us a little bit about yourself, how many
times have you lived in California?
I've lived in quite a few places, actually. I
was born in a suburb of Seattle, moved to Atlanta at the tender age of 2,
then spent three years in Buffalo, NY for three years when my father was
on active duty in the Navy. Let me tell you, 10 feet of snow is a lot more
fun when you are 12 years old. After Buffalo we returned to Atlanta where
I stayed until graduating from Georgia Tech in '97. From there it was back
west for a 9 month internship at Xerox PARC and 5 months as a research assistant
at Stanford. Another move back to Atlanta in '98 made me quite experienced
with travel between the coasts. I once calculated that I've driven the 2500
mile stretch on I-40 an average of once every year for the past decade.
After a string of startups and contracting jobs in Atlanta I have now returned
to the Bay Area with my hire into the Swing Team at Sun in June of 2005.
So it's only two times living in California so far, but I'm only 30 so who
knows.
What got you interested in programming?
As a child I wanted to be an astronaut, aerospace
engineer, and a painter. (Though I could probably add cowboy, fireman, and
wizard at some point as well). My interest in the visual arts, but fascination
with how things work, eventually lead me to explore computer graphics on
a Timex Sinclair portable computer I bought at a garage sale for ten bucks
(which is a lot when you are 12). I pushed it's 1k of memory as hard as
I could, porting some of my old experimental programs from Apple II into
it's strange form of basic. Sadly I had know idea what I was doing or where
to go from there, but fortune intervened.
My aunt and uncle sold their house and moved in with my family around 1988.
My uncle was an electrical engineer from Georgia Tech and worked in the
software industry at the time. With his guidance I bought my first XT computer
and learned the basics of programming and trig. My first "real"
program was an artillery simulator which had real ballistics and character
based visuals. The math was interesting but really only as a way to get
something cool on the screen. By the time I started high school and had
access to better computers I was hooked. In 1993 I started college in the
CS department and chose Graphics, Visualization, and Usability for my specialization.
The rest is history.
Do you have any mentors you'd like to plug?
My uncle, of course. And Ian Smith, my favorite
TA at Georgia Tech. He steered me away from C++ and towards Java during
my sophomore year. If it wasn't for that I might not have written the book
or be working at Sun now. I'd also like to mention my physics and math teachers
in high school. I was very fortunate to have excellent teachers in my AP
classes. They gave me a theoretical foundation that has served me well over
the years. Why just today I had an idle AIM conversation with a friend about
XML, UI design, and the latest theory of quantum gravity, all before lunch.
I wouldn't be where I am today without the foundations they've given me.
You've been writing about Java and open source
projects for some time now, are you an expert or an extrovert? What is the
importance to you of putting yourself in the middle of the discourse on
these topics?
I used to think I was an expert on Java, but
now that I'm at Sun I realize how little I know. The Java ecosystem is so
big now that nobody can understand it all. Maybe that's just the pace of
technology. So now I think I'm just an extrovert. I like sharing the knowledge
I have and seeing the interesting things that people do with it. I don't
really consider myself "in the middle" of these topics. I think
of myself more as a surfer, just seeing where the wave is taking us. I've
always been fascinated by the wave of technology and speculating about the
future (1950's atomic age stuff is a passion of mine). I think that Java
is one of the important technologies of the early twenty-first century so
I'm just glad to be a part of it.
How did you meet your co-author, Chris Adamson?
I met Chris at a startup called AnyDevice about
five years ago in Atlanta. I interviewed him, actually. It consisted of
us discussing GUI design and the (then in beta) copy of OSX on his blue
iBook. Oh, and some Java stuff too. After we all left AnyDevice we kept
in touch. He started doing editing for
Java.net
and got me interested in writing. When I had a book proposal for Swing Hacks
he was the logical choice for a co-author, a more experienced writer to
help me through the rough spots. Though we now live on opposite coasts we
[are in touch] at least a few times a week.
The "Hacks" series has become a
very recognizable sub-brand for O'Reilly, even spawning copycat "hacking"
books from other publishers. Books like "Google Hacks," "eBay
Hacks" and "Amazon Hacks" have grown popular on the allure
of learning hidden secrets and tips for interacting with these Internet
giants. How does "Swing Hacks" fit in with these other books in
the series? Is it strictly a book for the experienced programmer or are
there "hacks" that will bring new users into the Java community?
Swing Hacks was the first truly programming oriented
Hacks book (possibly preceded by
Flash
Hacks). It's not intended for the lay person. You really need to be
a Java programmer to use it and have some basic experience with Swing. I'd
say this book is more of a treat for Java programmers who are bored with
their usual Swing apps, or who think that desktop Java can't do all of the
flashy things that native apps can. Okay, to be honest, I really wrote the
book for me. It was all of the stuff I always wanted to find in a Swing
book and never did. I've never seen a non-reference/nutshell book on Swing,
so that only left me the task of writing my own (and convincing Chris to
write half of it for me). So it pretty much has an audience of one. That
said I do hope it will inspire others to make cool new applications in Java,
but I'm happy just reading it myself.
Between AJAX and Flash there is a rising pressure
for richer web experiences - can Swing compete in this world? Where does
Swing leave these other options in the dust? Will Swing ever be designer-friendly?
Swing can absolutely compete in this area. Swing
has always enabled developers to create richer user interfaces than web
pages allow. AJAX and Flash are definitely pushing the envelope, but you
can still do so much more. If anything the competing technologies are making
Swing better. Matisse is the fantastic new visual GUI builder in Netbeans
and I don't think it would exist if there wasn't pressure from Flash and
Eclipse. Matisse makes GUI layout very easy, enabling you to get back to
working on what your program does rather than fretting about how it looks.
It's the first GUI builder that I'm willing to use, and I hate GUI builders.
I'm very impressed.
I think that Swing has the potential to make great forward looking applications.
We're never going to rewrite MS Word in Java because we're never going to
rewrite Word in anything. It's already done. The future of desktop apps
is in doing interesting things with web services and other data on the net.
I think that's where desktop Java apps can really shine.
When most people talk about flying saucers,
visions of little green men come to mind, but
Flying
Saucer means something else to you - tell us about XHTML rendering and
your interest in this project.
Flying
Saucer is an XHTML and CSS renderer written in 100% Java. The genesis
for the project actually came out of an article I wrote for
Java.net
about the various HTML renderers available for Java. In short there aren't
many good options. You must either go commercial or use an embedded browser
like Mozilla. Both options are cumbersome and not ideal. But why was it
like this? The W3C specs are very exhaustive and specific. It shouldn't
be that difficult to write.
I eventually decided that writing a web browser from scratch would be horribly
difficult to do in Java (or in any other language) but I could cheat by
reducing my requirements a bit to: valid XHTML + CSS 2.1 only, work on correctness
before speed, and reusing existing code as much as possible (Java2D, XML
APIs, CSS parsers). I worked on it for two months by myself then open-sourced
it during the summer of 2004. A few months later, with the incredible help
of some great programmers around the world, we had our first usable release.
Now, a year and a half later, we've had several releases, introduced support
for every major part of the XHTML/CSS specs (including incremental rendering
of large documents) and the layout speed is literally orders of magnitude
faster. All because we decided not to write a web browser.
You blog, you're chief tech support for your
family and friends, you work for Sun, you pilot
Flying
Saucer (sorry I couldn't resist that one), there's
JDIC
and
SwingLabs, just to name
a few projects you're involved in, oh and you've co-written a book - do
you ever sleep?
Not really, though I have slowed down a bit to
nap in the last six months. I've got some interesting things coming up though,
so stay tuned!
Back to the book. What surprised you most about
the experience? Where has the book taken you?
The book was far harder to write than I ever
thought. I'm used to doing 2000 word articles. I simply wasn't prepared
for the effort involved; and I only had to write half of it! I have gained
new respect for people who do this for a living, especially novelists who
have to produce a thousand pages entirely out of their heads.
Writing the book was also exhausting. By the end of the writing process
I was very worried that no one would enjoy reading the finished product.
It didn't seem interesting or fresh anymore. After a few months of not working
on it, though, I could look back at the printed book and really enjoy it.
Anything new being cooked up on your Mac for
your publisher?
I have a few articles I'm working on, a slew
of blog posts, and some ideas for a new book or two. So I'm going to keep
pretty busy.
What does Web 2.0 mean to you? What opportunities
do Web 2.0 strategies bring for the Swing enthusiast? Can Swing take meaningful
"mashups" outside of the browser?
To me Web 2.0 doesn't mean AJAX. It means combining
existing data sources and programs (what we would call web-services today)
in some interesting new way, enabling something that is completely different.
We've spent the last ten years building technology and rolling out infrastructure
(often not at a profit) to create the Internet and we've filled it with
lots of great stuff. But it's the boring and expected stuff. We had maps
and auction houses and business directories before the Internet, now they
are just better. Web 2.0 is about creating genuinely new stuff.
So where does that leave Swing? Well, I don't believe Web 2.0 is really
about HTML or AJAX or 'web' interfaces. It means doing new and interesting
things over the network. Web pages are great at certain types of tasks and
Swing is great at others. Sometimes you need the power of a rich client
interface. You couldn't have created
iTunes
or
LimeWire using a web page (not
that certain companies haven't tried). I think that Swing definitely has
it's place, especially when it comes to doing new things with web services.
As a true-believer in Java and Swing: What's
held Swing back the most, and how can it be fixed?
In the past Swing was held back by graphics
performance and memory usage. Now I think the major issue is deployment.
Getting the applications to start up quickly and smoothly, and just plain
getting more copies of Java installed on the computers of the world. To
fix it we have a lot of work to do, but it *is* getting done. Deployment
and maintenance with Java Web Start is much better than applets and downloadable
jar files. Mustang has some new JWS improvements that will really help security
and perceived performance. And we are working with more computer vendors
(not to mention Google) to get Java installed on more and more computers.
I think desktop Java is finally going to hit the big time.
Josh, Joshy or Joshua?
It used to be Joshy, but, well, I'm thirty years
old now, so that doesn't seem appropriate anymore. Sadly I have user accounts
all over the place with joshy, joshyx, and joshy688. So, in person I'm going
by Josh now. Online I'm thinking of switching entirely to an icon. Probably
animated. With stars!