[interview title="Kevin Kofler: Developer of the Month"] [iname="Peter Fernandes"]To begin, please provide some background info about yourself (location, age, education, anything else or none).[/iname] [iname="Kevin Kofler"]I was born on July 1st, 1983 in Oberpullendorf near Vienna, Austria. I'm an Italian citizen, but I live in Austria (and have been since birth). I'm currently studying Mathematics and Computer Science at the University of Vienna (Universität Wien).[/iname] [iname="Peter"]Outside of the computer world, what are your hobbies/interests?[/iname] [iname="Kevin"]Oh, you mean there's life outside of the computer? ;-) Well, I like Mathematics, which is why I'm studying it. ;-) And sometimes I watch soccer games on TV. I also play calculator games relatively often. But most of my free time is spent in front of the computer.[/iname] [iname="Peter"]So how and when did you become involved with computers and programming?[/iname] [iname="Kevin"]The first programmable devices I started with were an old PC XT clone and a TI-85. That was in my early teens. I started with the Word for MS DOS macro language for lack of something better, then QuickBASIC and TI-85 BASIC. Then I learned more and more programming languages. The fun thing is that I actually learned 68k assembly before C, the first time I really used C was when working on the source code of the A68k assembler.[/iname] [iname="Peter"]You've mentioned BASIC, C and Assembly. Are there any other languages (besides Italian, etc. ;)) that you know? Which language are you most fluent in? Is it your favorite?[/iname] [iname="Kevin"]I also know C++, Java, and some amount of Delphi, LISP and Prolog. I'm probably most fluent in C/C++ these days, but I can still get stuff done in assembly and the various BASICs. My favorite languages are C, and C++ with Qt (I really hate the STL and Boost though). I should add that C++ would completely suck on the calculator (see Zeljko's TIGCC FAQ entry). ;-)[/iname] [iname="Peter"]I'll forget you ever said C++ and move on. ;) Do you have a favorite open-source software project on the internet?[/iname] [iname="Kevin"]In the TI calculator world, the usual suspects, and the ones I'm heavily involved with anyway (TIGCC, TiEmu etc.). ;-) Otherwise, I have 2 favorites: Fedora and KDE. (Yes, I'm one of those folks running KDE on Fedora. ;-) )[/iname] [iname="Peter"]That's because we like being cool. ;) How long have you been programming TI calculators?[/iname] [iname="Kevin"]In TI-BASIC ever since I got that TI-85, it must have been somewhere around 1995 (my earliest TI-85 program with a date in it is from 1997). I got my TI-89 [during Christmas 1998] and started writing TI-BASIC on that immediately. My first assembly program was in 2000, then I started C in 2001 (and now I know it very well, including much of the C standard subtilities, due to working on the GCC port).[/iname] [iname="Peter"]What is your favorite part of programming a calculator as opposed to a PC? Do you think that coding for such a limited platform has helped you grow in any way as a programmer?[/iname] [iname="Kevin"]On a calculator, you see the immediate gains of optimization: saving bytes means more programs fit into the small memory, and saving CPU cycles is actually feasible without those unpredictable scheduling, caching etc. effects which often mess everything up on a real computer. Another nice point is that there's a lot more stuff which hasn't already been done on the calculator. However, these days, most of my work is actually on the toolchain allowing to write calculator programs, not on the calculator programs themselves. Working on a programming toolchain is fascinating, but also hard, you need to really know what you're doing when you work on GCC: for example, a firm knowledge of C, the target CPU and its assembly language and the internal GCC representations is needed. This also taught me a lot about compilers (and helped me ace the Compiler Construction course I took at the university ;-) ).[/iname] [iname="Peter"]Now for the big question: Size or Speed?[/iname] [iname="Kevin"]Size all the way, it makes the difference between being able to fit 1 or 100 games on your calculator. ;-) Well, that's extreme now, but the smaller the programs are, the more fit, that's important with that small a memory. People complaining about speed are just not patient enough. ;-) Or more likely they're just wasting memory and/or battery power to compute frames which aren't actually displayed by the LCD anyway, the LCD only works at 90 Hz, and even that is too much because of both the LCD's and the human retina's persistence. Everything above 12 Hz is a waste. So in a game, do the computations with a size-optimized routine, then put the calculator in low-power mode until 1/12 of a second has elapsed, that will help save memory and batteries. Oh, and if you need to react to key presses immediately, just have auto-int 2 in the list of interrupts allowed to wake up the calculator from low-power mode.[/iname] [iname="Peter"]Can you tell us about any interesting projects that you are working on now?[/iname] [iname="Kevin"]Well, I'm mostly working on updating what I already released. For example, I'm working on KTIGCC 2, a port of KTIGCC to KDE 4. As the KDE 4 libraries are being ported to Windows, this should allow me to replace the old TIGCC IDE and use the same code everywhere. I have it already compiling with KDE 3.90.1, but completion is currently disabled and needs some work, the code could use some cleanups (such as not using the deprecated Qt3Support and kde3support classes anymore), and the Windows port also needs work. I also need to wait for some bugs in the KDE 4 version of the KatePart, the editor component I'm using, to get fixed before I can release KTIGCC 2 betas for serious use. But occasionally, I think of a small calculator project to write in a couple of days and just write it. ;-) That's how projects like Backgammon got started or proofs of concept like Spread89 got done. But I can't tell you what the next one will be because even I don't know. ;-)[/iname] [iname="Peter"]What do you consider to be your best work in the field?[/iname] [iname="Kevin"]I'd say my work on TIGCC (including KTIGCC). TIGCC is not all my work, but that's what makes it great, for example I don't think any single person could have made a compiler comparable to current versions of GCC alone. But a lot of the recent improvements in TIGCC [u]are[/u] mine. Of course, updating GCC to new upstream versions also brings in lots of improvements from the upstream GCC developers.[/iname] [iname="Peter"]Indeed, more minds can come up with more ideas, and better solutions. Is there something that you'd really like to do (programming-wise) before you die ("That game I've always wanted to make...")?[/iname] [iname="Kevin"]Hey, I'm too young to die! ;-) I really want to finish KTIGCC 2, I think having TIGCC built from the same sources everywhere is going to make a lots of things easier. And then rewrite the TIGCC documentation tools in portable C (or possibly C++) and so they output Qt Assistant format directly (because CHM will no longer be needed with KTIGCC 2). That will leave TIGCC in an a lot less unfinished state. Abandoning TIGCC in its current state (without that done) would really leave a taste of unfinished work. Though if TI abandons the 68k line in favor of the NSpire, it might at one point become pretty useless to do any work on TIGCC, unfortunately.[/iname] [iname="Peter"]Hopefully the following will live on... Lastly, would you like to share any plans that you have for the future?[/iname] [iname="Kevin"]I plan a TIGCC 1.00 with KTIGCC 2, new documentation tools (also hopefully making it easier to merge the documentation changes which have been waiting for years), a single source tarball for both Windows and *nix, GCC 4.2 or 4.3 (or 4.4 if it takes really long), and also a newer GNU as if I can get it to work (there's technical obstacles to upgrading beyond 2.16.1, which is what TIGCC is currently shipping).[/iname] [iname="Peter"]What about after your immediate education?[/iname] [iname="Kevin"]Well, I don't know yet, I might move up the academic career ladder if the opportunity arises, or I might become a programmer (I could envision myself working in the mathematical software field or at some Free Software oriented company).[/iname] [iname="Peter"]Thanks a lot for your time![/iname] [/interview]