Fullscreen editing

I find myself doing more and more coding in (some kind of) fullscreen mode. One reason is the omnipresence of 16:10 or 16:9 screens, and that most applications are still pretty wasteful with vertical space (think Thunderbird). Title bar, menu bar, tool bar, tab bar, status bar, window panel, whoops, an estimated 10-15% less space for coding. This is especially painful on smaller notebook and netbook screens. I also like to avoid distractions, I don’t really need to look at the clock, check the battery, or read incoming mail subjects while doing something else.

Before window-based systems became mainstream on home computers in the mid 90s, fullscreen editing was the norm. Poor DOS users couldn’t even run more than one program at a time. Window managers and higher resolutions lead to much more sophisticated coding environments, increasing both usability and visual clutter.

A few years back, tiling window managers appeared. They no longer manage applications in arbitrarily sized and positioned windows, but instead use tiles on the desktop for a semi-automatic layout process. Some of the ideas trickled down to traditional window managers as well: Windows 7 lets users expand windows to either half of the desktop, Compiz Grid and Ubuntu’s Unity achieve a similar effect on Linux. Personally I like these less extreme approaches, given enough screen estate windows are just inherently accessible and no tiling algorithm will work for all applications.

Some of my fullscreen candidates are (or were):

  • Firefox/Chrome: F11 to toggle between fullscreen and windowed mode. Unfortunately, there are slight issues in both browsers (there is no feedback whether a new page is loading, the URL bars can be a bit quirky).
  • Netbeans IDE: View –> Full Screen (don’t press the default short cut on linux). Also reduces the clutter of the already very clean Netbeans layout by removing the toolbar.
  • IntelliJ IDEA: unfortunately the full screen mode was kicked out of IDEA 10, at least on Linux. You can remove the toolbar, status bar, and the docked windows panels, leaving you with a menu and the editor window.
  • vim: there’s a native plugin, gvimfullscreen_win32, for Windows that basically works but struggles when the window layout changes. For Linux I just use (grid-) maximized console windows.
  • Gnome Terminal: F11 toggles between fullscreen and windowed mode, too.
The main problem I keep running into is that current desktops don’t tend to work well with fullscreen applications at all (perhaps unavoidably so). As long as I have one monitor for each program I work with at a time this is not an issue, but even one additional program breaks usability, leaving the alt-tabbing user in agony. Recently I started using Ubuntu’s Unity at work, and (for all its flaws) I like the basic ideas – thinking in applications (versus application windows), encouraging keyboard navigation, optimizing desktop space usage (combined menu/title bars in a global menu). But sometimes having just one application on the screen, one thing to concentrate on, helps so much that I wonder if the classic desktop metaphor can actually be fixed.

Comments (1)

Random Reading

Miscellaneous personal book highlights of last year.

Fiction

  • Friend of the Earth (T.C. Boyle, 2000): Set in a post-apocalyptic, near future, it really is the dark humor that kept me turning pages. The not-so-glamorous past of a well-intentioned, but somehow morally challenged environmentalist is told in flashbacks, while in the present he struggles to keep the last remaining animals from killing each other (and him). I also liked Tortilla Curtain and Drop City by the same Puli-owning author.
  • Matter (Iain M. Banks, 2008): Books like this drew me away from gaming. Fiction/science fiction writer Iain (M.) Banks unleashes ultra-powerful civilizations and medieval monarchies, worlds of worlds, artificial intelligences and ship minds in a creative firestorm.
  • Watchmen/From Hell (Alan Moore, 1987/1991-96). Yeah, I admit I’m late to the game and only stumbled over these graphic novels lying around in bookstores supporting the Watchmen movie. Still both Watchmen (fallen super-heroes) and From Hell (Jack the Ripper) are excellent reads and beautifully illustrated.
  • The Work of the Night (Die Arbeit der Nacht, Thomas Glavinic, 2006). A disturbing novel by Austrian writer Thomas Glavinic where his protagonist wakes up one morning in depopulated Vienna. What follows is a downward spiral from enthusiasm (who doesn’t want to take a sports car and drive flat out on the busiest city streets?) to great loneliness and total psychic breakdown.
  • The Terrors of Ice and Darkness (Die Schrecken des Eises und der Finsternis, Christoph Ransmays, 1984): Based on diaries from the Austro-Hungarian North Pole Expedition, Ransmayr depicts the true horror and insanity of this polar expedition. Very recommended reading, although I’m not sure how much of the seemingly authentic language survived the translation.

Computer Science

  • Coders at Work (Peter Seibel, 2009): I liked Beautiful Code and am currently reading Programming Pearls, but the interviews in Coders at Work stand out for their broad coverage of ancient and current technology, from people working on the first Unixes and the guy that wrote Live Journal to Donald Knuth. Peter Seibel knows one or two things about coding, and it shows in the questions he asks, in the direction he is able to give the interviewees. The only gaping hole for me was game programmers, since they always did a lot of bleeding-edge coding. But there’s always Masters of Doom.
  • Programming in Scala (Odersky et al, 2008): A very approachable introduction to the next-gen JVM/CLR programming language Scala. My enthusiasm for the language is currently a bit declining given the inherent JVM restrictions and the complete lack of a standard library, but I learned a lot just from reading this book and tinkering away with my own little programs.

Leave a Comment

Almost there…

Signs

Leave a Comment

Planes, Textures, and Soft Shadows

My toy raytracer written in Scala got a few new features:

  • Planes
  • Textures
  • “Soft Shadows” (distributed raytracing)
  • Supersampling Anti-Aliasing

Textures don’t add much to the computation time, but distributed raytracing is a real performance killer (at least when implemented naively, as in my version). Essentially, when determining the surface color at a given point, instead of sending just one ray to a lightsource to see if it’s obstructed by any other object, many rays (typically at least 25) are sent out to an area that describes the light source (e.g. a box). The return values (black if the ray was obstructed, the light source color otherwise) are then averaged, leading to smooth transitions at the edges. And it does look nice… combined with supersampling (anti-aliasing) it now becomes easy to spend hours rendering a single image at, say, 1024×768 pixels.

Pool Scene

Next idea: writing a parser combinator for (a subset of) POV-Ray’s Scene Description Language (SDL) to skip the painful step of modeling scenes in compiled code. This will also enable me to do some Scala coding again, since adding new features to the raytracer itself usually means spending much more time wrapping your head around math stuff than actually writing code.

Leave a Comment

Beware of avgnsx.exe

Wondering why my CPU usage peaked between 25 and 50% when using a download manager to max out the 16 MBit cable connection, it turned out that the “network scanner” in AVG 8 (free) is to blame. Even if the obnoxious link scanner (which loads every link in a Google search result and checks for “trojan” web sites) is disabled, AVG still monitors all network traffic on port 80.

The only solution (suggested in the AVG Free forum) is to reinstall AVG, choose a custom install and disable the link scanner… yikes.

Comments (9)

Everything Is A Sphere

When I was down with a cold last week I dug out a book about computer graphics that I bought during my university time (3D Computer Graphics by Alan Watt). It provides a mathematical foundation for many core techniques in CG, and it got me interested again. About 8 years ago when I bought this book I wrote a small raytracer in C++, and since I am really in search for new hobbyist projects to teach myself Scala, I figured I could give it another shot.

Scala is a statically typed functional/object oriented language for the JVM and the CLR, and at least on the JVM it is known for providing performance similar to Java (in contrast to dynamic JVM languages such as Groovy or JRuby). This is the first scene that provides something my 8-year-old project couldn’t, namely a checkered surface (composed of two other surface instances). The code is pretty newbie-like and a bit unstructured, so for now I’ll leave it at that. FWIW, it took about 5 seconds to render this picture on my rather mundane home machine (Athlon X2 @ 2.2GHZ, Windows XP) using the 1.6.0_11 server JVM.

A World of Spheres

Leave a Comment

Not-so-white christmas, but still…

…it was great. Just for fun I mounted some really old tele lenses from my father on my EOS 450D, and managed (with great patience) to take some shots that were in-focus and reasonably illuminated.

The longest was a 300mm lens from his old Praktika, which went to about 1000mm with two tele-converters and considering the DSLR’s crop factor. Of course a tripod was mandatory, and I finally found a use for the 450D’s live view: sometimes it was easier to adjust the focus watching the back LCD screen, especially when the lighting was poor (I usually had to focus with the aperture wide open to be able to actually see something). With the ~1000mm I also had to use a 10-seconds-self-timer, because it would take the setup this long after pressing the button to stop swinging.

The outdoor photos were shot hand-held with a 135mm (before cropping) lens of a Yashica SLR. Photos 1-3 and 5 were taken with the 450’s kit lens.

Christmas 2008

Christmas 2008

Christmas 2008

Christmas 2008

Christmas 2008

Christmas 2008

Christmas 2008

Leave a Comment

Christmas is coming…

…that’s for sure. Still it feels a bit odd since we’re not even near the freezing point. The bad thing about this is that our “Punsch” (“glogg”?) doesn’t taste too well all by itself, it needs supporting low temperatures to ease the pain of its sweet, uber-aromatic taste.

Leave a Comment

Pure

After a pronounced hiatus from PC gaming for a variety of reasons, among them disappointment with recent PC releases, a stubborn resistance against MMOGs, and a slightly outdated home PC, it seems that my gaming passion returned. Two reasons: Pure and the Xbox-360 Controller.

Realizing that I wouldn’t fill my weekends playing with my amazing new camera, wouldn’t continue my bike tours around Vienna, wouldn’t be happy watching TV series and movies and reading all day when it’s -10 degrees outside, I considered gaming again. For most of my youth I was an avid gamer (always PC, for whatever reason) and equally interested in reading or writing about games as in playing them. This lead to my involvement in two German-speaking sites about PC games, Top of Games (retired) and Gametective (still active, although a bit low on updates and seriously hurting because of its 5-year-old codebase).

Having never been a console gamer, I envied the dynamics and excitement the current gaming consoles attracted during the past few years. While I almost fell asleep playing through the first (demo) level of Crysis, it seemed that all the good people (unless those in MMOGs and simulations) went to consoles first, for whatever reasons – probably market share, working copy protection and platform uniformity. Sure, I still played Civilization 4, had a few months of active racing in Race 07, and was blown away by Bioshock, but apart from that it felt like “more of the same”. I seriously considered (maybe still do) getting a Xbox 360 or Playstation 3, both formidable gaming platforms. My main reasons for not getting one are my cheap TV and (I have to admit) the game pricing. It seems that any new PS3 game, for example, prices between 60 and 70 Euros. A few months ago, that was over US$ 100 for a single game! I could get 10 books or DVDs for that. Also, looking closer at recent Xbox and PS3 releases, my excitement was dwindling. While there are many high-quality releases, few caused enough excitement to justify their premium price for me (although I’d love to do a few laps in Wipeout HD).

Although my home PC is now over 3 years old (I upgraded to a dual-core processor and more RAM for little money), the blocker for current PC games was the nVidia 7900GS card, which simply doesn’t have the power to run all the shaders and post-processing of current games at a full LCD resolution of 1680×1050. The first step obviously was a new graphics card. ATI recently introduced a new midprice GPU with lots of raw power for a reasonable price, the Radeon 4850. I settled for a variant by PowerColor with a silent cooler and wow!, Crysis does look amazing (but still bores me). Also, Adobe’s Lightroom feels a lot snappier.

But the real cause for my excitement is (the console port of) Pure and the Xbox 360 controller for Windows. First of all, the Xbox controller is the best value for money compared to any game controller I ever bought (followed by the amazing first Sidewinder joystick). For less than 30 Euros, you get two analog sticks (which also act as a button when pushed down), an 8-way pad, six buttons on top, two analog “triggers” (ideal for throttle and brakes) and another two buttons above them, and on top of that “rumble” functionality.

Finally, Pure.

It’s been a while since a game made me feel so good by doing all the tiny things which separate great games from good and mediocre ones. Pure is an ATV mud racer by Brighton-based Black Rock Studios. You race against AI or human opponents on fantastic tracks around the world, and get “boost” (some kind of nitro) by doing mid-air stunts. Sounds boring? It’s not.

First of all, being a port from the Xbox 360 Pure is a perfect match for the Xbox 360 controller. Although the button mapping is not entirely obvious, it takes about five minutes to get through the tutorial and and learn the basic moves. Then, instead of tormenting the player with gameplay details, the player is thrown into racing action. Of course, at first you don’t really know what you’re doing (or how you’re doing it), but you score a few points and get a sense of achievement soon.

Pure thrives on technical perfection: the graphics are jaw-dropping and smooth without a single hiccup. The music creates the right sense of “reckless fun” and seems to decrease in volume during long jumps, just to kick right in after the landing (or maybe I’m imagining this?). The controls are both complex and controllable. Everything in this game is optimized for fun: when you get thrown off the bike, the penalty is relatively low. You lose a few seconds and some boost, but return to the game at the crash site and at racing speed. It is almost impossible to lose the racing line. During the jumps the game slightly corrects your direction if you’d land outside the track otherwise. You can customize every part of your ATV, but don’t have to. Pure is not a simulation, and takes advantage from it.

Of course, there’s no light without shadow. The number of tracks is limited, and the three race types offer only so much variety. The online mode seems to be rather deserted, and the loading times could be better. But Pure achieves its main goal: delivering one of the best arcade racers in the last few years, miles ahead of any Need for Speed game for its innovation and pure gameplay quality.

Next, I might give GRID another chance (also much more fun when running at full resolution). Although I’m also a sim racer, these games offer a kind of instant gratification that a real sim can (and should) not.

Oh, and in four days we might have a black Formula 1 champion and a black US president. Times change after all.

Leave a Comment

Hello XO!

For learning a new language or framework, I tend to use tasks I’ve solved before – this way I’m more focused on the new platform instead of the problem itself. One such task is a sudoku solver, another tic-tac-toe. One rainy afternoon, trying to escape boreout at work, I mindlessly typed apt-get install tictactoe on my Ubuntu workstation, and I discovered that my Ruby tic-tac-toe client from 2002 is still in the Debian/Ubuntu repositories (and it actually works!).

I wanted to play around with Swing/Netbeans, so after a couple of evenings here’s the Java/Swing version (but this time, I hopefully did not mess up the negamax implementation): JTicTacToe (Webstart)Sources

It was actually quite fun, except that I gave up forcing an initial size for the main application window. Seems like there’s no easy way of achieving this with the Swing Application Framework.

Leave a Comment

Older Posts »