What do they have in common? They're all...
Books By People I Know!

home | shop | blog | Jonas K. | Kochalka | Gordon | Marinacci | Emphasis


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!