Dev of the Week: Rafael Winterhalter
Every week here and in our newsletter, we feature a new developer/blogger from the DZone community to catch up and find out what he or she is working on now and what's coming next. This week we're talking to Rafael Winterhalter, Java enthusiast and software engineer at Kantega in Oslo, Norway. Some of his most recent DZone posts include:
1. What have you been working on lately?
I am a software consultant at Kantega in Oslo where I recently wrote a conversion tool that allows to transform Microsoft Office files into PDF using a Java API. We tried various solutions for this, both commercial and open-source, but the results were rather disillusioning. In the end, we decided to write a tool of our own which runs an instance of Microsoft Office and delegates all the work to it via a native Office API that exists in Visual Basic Script that is then run from Java via bash. Since most of our applications are running in Linux boxes, this tool also comes with a client interface that allows to delegate the real work to a remote Windows machine via a REST service. This was really fun to write and thanks to our customer that originally required such a converter, we were also able to open-source it. You can find the converter on Kantega's GitHub (https://github.com/kantega/pdf-converter) if you want to check it out. It is quite comprehensively documented.
Other than that, I have started working on a Java instrumentation library in my own time which will, when the time comes, hopefully allow to finally retire cglib. Cglib was written in the very early years of Java and I got too often frustrated over its API and limited capabilities in the last year. I also wrote several patches for cglib in the past, for example in order to allow the preservation of annotations, but all solutions I found were rather hacky, which is why I finally decided to make something new. I made quite some progress already and I have seldom learned so much about the internals of Java than when working with this byte code generation tool. You can already find my working version of this tool on my GitHub, in case you are interested. (https://github.com/raphw/byte-buddy)
2. You're particularly interested in Java and Scala. How did you end up with these two focuses? Did one lead naturally to the other?
In recent years, so many interesting JVM languages were published, I just happend to like Scala but there is no special story to it. I prefer Scala because of its functional approach that does not try to supercede object-orientation, but instead complements it, and I also like the conciseness of the language. Also, I like working with Scala because it is a quite mature language compared to others and also because the entire TypeSafe stack is of such high quality. With every release, you feel like things are happening. Futhermore, if you are using the Play2 framework or Akka, then Scala is an obvious choice. However, I am aware that not everybody likes Scala and there are some concepts in the language that I have not yet befriended, but those I just do not use and still get a lot out of using Scala.
3. Are there any particular developer tools or resources you couldn't live without?
I do not think that I could still write Java code without IntelliJ. It just never fails me and it is such a time saver. Other than that, I do not think that I still have the nerves for writing web applications without using jRebel. Most importantly, I use Stack Overflow on a daily basis. I have been a passive reader for a long time but I increasingly started answering questions and I would not have believed how much fun it is to collect virtual reputation and badges. In general, I really have to thank the users of this platform, I learned a lot from them.
4. Do you have a favorite open source project (or projects) that you've contributed to recently?
Recently, I got keen of Jersey, the reference implementation of JAX-RS. I did not use it much before, but for implementing the converter that I mentioned, I had to use it quite a lot and explored some API features that I was not aware of before. I also found some bugs and of course, I contributed my fixes. I am, however, not active in any particular project at the moment since I am really using any free minute I have to push my instrumentation library forward. However, when I use a library and see that there is something I see that can be fixed in a reasonable amount of time, I do still like to contribute some lines of codes here and there.
5. Do you follow any blogs or Twitter feeds that you would recommend to developers?
I have to admit that I do not even have a Twitter account. I do however read some blogs. The one I read the most is ironically not related to computer science but to economics, which is what I originally studied. I can however only recommend Paul Krugman's blog (http://krugman.blogs.nytimes.com/) who talks a lot about matters that computer scientists are typically also interested in. Other than that, I like to get my data crunched by aggregators such as Dzone. As particular resources, I can still recommend IBM's developer works (http://www.ibm.com/developerworks/java/) and I also like Rebel Labs quite a lot (http://zeroturnaround.com/rebellabs/), especially since they manage to be both competent and humorous which is a rather rare combination.
6. Did you have a coding first love -- a particular program, gadget, game, or language that set you on the path to life as a developer?
My first coding-related expierience was Turbo Pascal in high school physics. It was fun to punch some lines but I did not really fall in love with this either. I did however get hooked by plain and simple HTML. I remember the first time that I put a small website together and it felt like a great achievment. All one needed to know was to be found on the web and could simply be Yahooed, which was still the prefered way to do it those days. This feeling of do-it-yourself still sticks with me today whenever I get something done that I first thought was hard. I really like being able to improve every time I touch code and to keep this feeling of daily achievement alive, and I feel lucky to be a software engineer.
7. Is there anything else you'd like to mention?
Read code and get involved. Every day, all of us are using hundreds of thousands of code lines that people we do not know gave to us for free. I feel like many software engineers do not contribute because they feel like that there is a huge barrier to contributing to open source projects and not because they do not want to. However, everybody is happy about feedback and if you find something that you feel like can be improved, just make a patch and try it. In our daily job, we constantly read our collegues' code and change things that we think that can be done better. Simply see the open source code you use as an extension of your company's repository. Trust me, you will enjoy it!