LATE BOUND http://latebound.posterous.com Most recent posts at LATE BOUND posterous.com Sat, 24 Dec 2011 03:03:36 -0800 What to do when your projects outgrows the TODO file http://latebound.posterous.com/what-to-do-when-your-projects-outgrows-the-to http://latebound.posterous.com/what-to-do-when-your-projects-outgrows-the-to

For small projects a TODO file will most likely be OK, but at certain point it becomes too unstructured. For a long time I used RTM (Remember The Milk) as my main task list, and I tracked items related to my projects along with “buy milk” etc, but tagged appropriately.

Some projects simply don’t fit that format, so I ended with a lot of “lists” (e.g. TODO comments in code, text files, RTM) and a “task” can be in more than two states. It would also be nice to add some more information to a task than a couple lines of text. I’m happy to say that I found a nice tool that does pretty much all I wanted.

It lets you define stages of a workflow (e.g. Ideas, Design, Coding, Testing, Done) and you can put “cards” within each stage. Cards can have a bunch of information associated with them, like description, due date and checklists. Checklists are the most useful for me. For each feature I work on I add a checklist titled Postconditions, sometimes I add more (e.g. Preconditions).

As a bonus: if your project ever becomes more than just one person’s endeavour, you can invite collaborators, assign tasks etc. Trello should work esp. well in situations where some of the collaborators are not programmers, and therefore do not want to spend hours on figuring out some convoluted piece of software (like Trac).

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Tue, 20 Dec 2011 10:36:00 -0800 In the year 2011 http://latebound.posterous.com/in-the-year-2011 http://latebound.posterous.com/in-the-year-2011

I landed a Clojure job. Moved to another country. Picked up C++. Went to the US for the Clojure Conj conference. Got a Mac.

I want to post something about using Clojure in a big company in a mixed Java/Clojure project. I keep putting it off but it will happen.

I really like the UK, but British kitchen is not my thing. And yeah, there were riots couple of months ago, but my neighbourhood was spared.

The Conj was great. I think the biggest topical highlight was logic programming and I’m sure everyone’s reading “The Reasoned Schemer” now. In overall I liked that the Conj wasn’t taken over by a cavalcade of web and testing frameworks' tutorials. Instead we got a nice dose of use cases of Clojure, algorithmic/data structures and practical musings. Also: dubsteb. It was also my first time in the USA, so I had to experience the grotesquely huge cars for the first time.

Speaking of the USA, I took the advantage of the low position of the dollar and got myself a MacBook Air. Pretty sweet machine. I haven’t used it heavily for development yet, but I’ll try to create something for iOS next year.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Mon, 24 May 2010 03:30:00 -0700 Channels (almost like in Newsqueak) but in C#. Again. http://latebound.posterous.com/channels-almost-like-in-newsqueak-but-in-c-ag http://latebound.posterous.com/channels-almost-like-in-newsqueak-but-in-c-ag

Updating old code. Learning new things about .NET 4

Years ago I saw a really good talk by Rob Pike about a little known language called Newsqueak. I can’t remember if I had anything more than a mild interest in concurrent programming, but that talk got my attention. I read all I could find about concurrency in Newsqueak. Fun ideas are fun to play with.

I wrote a short article about channels, which are Newsqueak’s construct for synchronization between threads. I tried to emulate behavior of channels in C# via locking and signaling. I was aware that there probably is no 1:1 mapping between what Newsqueak calls processes and managed threads in .NET (though I’m not sure to this day how many processes could Newsqueak spawn before bringing machine to a halt) but the exercise was fun enough to do it anyway.

Now, this was long enough ago, that C# didn’t have syntax for lambdas and was missing all the concurrency goodness that .NET 4 brings. I decided to update the code, expecting it to be a 5 minute operation. It took a bit longer.

Code to be upgraded consisted of 2 projects: a Channel class and a nice example adapted from the presentation mentioned above. Implementation of channel didn’t need any changes, but the example (an interesting take on Eratosthenes prime sieve) was spawning System.Threading.Threads. Replacing occurrences of

new Thread(foo).Start();

with

Task.Factory.StartNew(foo);

resulted in this:

Chanlib_contentions

The Y axis on the graph is the number of contentions. In other words, the program spend 94% of its time on synchronization. A disaster.

Fixing this took me a couple of minutes but it is not obvious. The prime sieve works by starting new Task for filtering out multiplies of a certain number. The filters are chained together and every integer which comes out at the end, has to go through all of them. Newly discovered primes cause a new filter to be added; making sure multiplies of this new prime get rejected from now on.

New filters are chugging along, each in a new Task created via a factory as shown above. So why all the contention?

Tasks are scheduled on the thread pool and apparently the default hints passed to the scheduler are not enough. We can fix that by being more explicit about the nature of our task:

Task.Factory.StartNew(Filter, arg, TaskCreationOptions.LongRunning);

our filters are kept alive as long as the program is running, therefore the TaskCreationOptions.LongRunning.

While entertaining, the prime sieve is obviously abusing Tasks and managed threads; cost of synchronization is greater than the cost of the computation performed in each thread. But finding out the differences between System.Threading.Thread and System.Threading.Tasks.Task, the new recommended method of spawning new threads from .NET 4.0, may come in handy. Especially if one decides to make some changes in older code.

I pushed the revised version on github: prime-sieve-cs

Side note: I’ve been meaning to have a look at Go language, which I know expands on themes present in Newsqueak. I finally found some time and want to write down some thoughts on Go, Clojure and other things.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sat, 20 Mar 2010 04:05:00 -0700 Three Big Lies http://latebound.posterous.com/three-big-lies http://latebound.posterous.com/three-big-lies

A presentation by Insomniac Games

Mike Acton from Insomniac Games, creators of Ratchet & Clank, gave a talk at this years Game Developer’s Conference. This blog post bares the same title as the presentation.

3biglies_slide

Though I wish I could hear the talk, the slides (pdf) from the talk available from Insomniac’s blog seem to capture the main points well.

Instead of designing your code around the model of the world (presumably with OO), Acton suggests to come up with way to transform the data given the constraints of the platform (hardware). They also equate World Modeling to “self helf books for programming.”

Thinking about your program as a series of transforms is the standard mind-set employed people doing functional style programming. Sometimes the language doesn’t leave you much choice, because everything is immutable. In game programming you have as much mutable state as you can. But according to Mike Acton, thinking in terms of explicit data transforms can bring us a lot of value: in performance and ease of maintenance.

That’s just a quick summary, see the slides for a more complete debunking of the Three Big lies.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Mon, 03 Aug 2009 14:36:00 -0700 gen-struct: a Clojure macro for generating classes with mutable state http://latebound.posterous.com/gen-struct-a-clojure-macro-for-generating-cla http://latebound.posterous.com/gen-struct-a-clojure-macro-for-generating-cla

Sometimes the only way to get the desired performance is to shun immutability.

In case of Clojure, that means using arrays or importing mutable classes from an existing Java library - assuming the library already has classes with properties/fields that fit our needs. Otherwise, we have to write some Java code.

Dropping to another language for performance is pretty disappointing. But sometimes it's the only sane choice.

I've created gen-struct library to avoid some of those situations. This simple macro, which in reality is a modified version of the gen-class macro created by Rich Hickey, allows you to create simple, mutable and immutable structures. You can customize only one aspect of those classes: their fields. Here's an example:

(gen-struct 
  :name my.test.struct      
  :mutable-fields [[float x]
                   [float y]]
  :final-fields [[int timeout]
                 [static int MAX_TIMEOUT :is 1000]
                 [java.io.File input]])

gen-struct automatically generates a constructor which lets you initialize all the final, non-static fields. In the above example, single constructor accepting an `int` value and a `File` object would be generated (you pass the arguments in order in which they were declared in the macro).

gen-struct classes need to be compiled, just like with gen-class.

This is an ugly duckling, since it doesn't allow for inheritance, probably not everyone will be happy with no possibility of overriding `equals`, and static final fields can only be of primitive type. At least it doesn't let you mix state and behavior in one entity.

My main motivation for creating it was that some of my experiments in clj-processing needed a lot of mutation.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sat, 14 Feb 2009 18:40:00 -0800 Only one paragraph about Denmark http://latebound.posterous.com/only-one-paragraph-about-denmark http://latebound.posterous.com/only-one-paragraph-about-denmark

I've been in Denmark for over a month and haven't really seen much of it. I'm waiting for warmer weather. But the people are cool. Lots of different nationalities in the place I work in makes things even more interesting.

I'm doing mostly .NET related stuff right now, I only have time for Clojure on weekends. I'm trying to get a feel for getting better performance out of Clojure code; yesterday I've dug up an old code sample, but now I see I was doing a bunch of subtle things wrong. Rewrite ahead!

Back in December I've begun to prototype a Swing app in Java (I needed auto-completion to get used to the giantic API). Right now I'm in the process of building it from scratch in Clojure. I want to see how far I can go without dropping down to Java, and how to combine Java and Clojure in one project effectively (mostly from the design perspective).

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Tue, 25 Nov 2008 05:54:06 -0800 Clojure goodies http://latebound.posterous.com/clojure-goodies http://latebound.posterous.com/clojure-goodies

Processing + Clojure

Processing is a java library for doing visualizations and various media related stuff. A while ago I did a Clojure wrapper for it. You can get it from github: clj-processing.

Cloak

A couple of months ago I saw examples of config files of ruby's rake. Rake is a build tool, like ant or msbuild, but unlike those, it doesn't involve editing XML files. And thanks to ruby's quite flexible syntax, the resulting configuration files don't hurt your eyes.

I don't know ruby and didn't really feel like learning it just for one tool. Googling for something similar to rake in the python universe didn't yield any results.

Since I'm investing much time in Clojure lately, I decided that I might as well write something useful in it. Hence Cloak, a simplistic automation tool written in Clojure. It's heavily inspired by rake; I had rake's docs opened most of the time when writing the app.

Here's how to use it. You put a file named CLOAK in your project's directory, and in it you define tasks, like this:

(task :task-name [:other-task :another]
    (when (exists? "some.file")
        (rm  "some.file"))
    (sh "command arg1 arg2 arg3" :dofail))

Task name should be a keyword. To run it from the command line, type cloak task-name, without the semicolon (assuming cloak is the name of the shell script that launches cloak). Second argument to task is an optional list of dependencies, which can be other tasks or files. For example [:compile "classes/my.lib"]. To refer to a file, use it's file name. Apart from regular tasks, you can specify file tasks:

(file "index.html" ["template.xml" "content/main.txt"]
       (sh "genhtml template.xml content/main.txt index.html"))

file tasks differ from regular tasks in one detail: they compare modification time of the target and all its dependencies. Task is executed only if mtime of target < mtime of source.

Cloak is not a replacement for maven or ant. It would take me ages to reach the level of functionality of those tools. I just wanted something simple, to automate the generation of my website (among other things). So far, it's still a work in progress but it's usable enough for me to use it with my own projects.

Utility Libs

I've also put my utility libs on github. Cloak requires them (but has them in in a jar, so no need to download them separately). There's some IO and math related stuff in there.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Thu, 20 Nov 2008 00:23:13 -0800 Autumn Update http://latebound.posterous.com/autumn-update http://latebound.posterous.com/autumn-update

Since the end of the year is near, and because at the beginning of January I'll be pretty busy with other things (see below), I decided I'll post something while I still have spare time on my hands.

On a personal note, that was a good year (I finished school, among other things). On the professional level, well, I didn't work anywhere, was too busy with my thesis. But in September I started sending out my CV and found something really nice. In Denmark.

I'm starting in January, that's why I won't have much time at the beginning of next year for fancy retrospectives. I'll spend 1+ year in Denmark. I always wanted to live there, at least for a while. I mean, they invented Lego, best toy ever.

But till then, I have lots of free time and so far I'm spending it mostly on reading and programming. I'm gradually replacing Python with Clojure as my weapon of choice and I'll post something on that topic shortly.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sat, 30 Aug 2008 19:18:01 -0700 MathTalker Went Live http://latebound.posterous.com/mathtalker-went-live http://latebound.posterous.com/mathtalker-went-live

On friday I uploaded the 1.0 version of MathTalker to Google's servers. It's a simple chat application which allows you to write mathematical formulas (using syntax similar to TeX). It was written in Python and runs on App Engine.

MathTalker has pretty steep requirements for a web app: Firefox browser and special math fonts (download links on MathTalker page). Displaying math formulas is possible thanks to ASCIIMathML library, which converts ASCII to MathML. I know about the plug-in that lets you render MathML in IE, but I decided to drop support for that browser after spending a couple of hours trying to make the UI work.

App Engine

App Engine SDK comes with a little web framework and that's what I used. You can also use Django, but I wanted to keep things simple. The built-in framework is nothing special, but it doesn't get in your way. What requires more attention is Google's Datastore - their distributed database. Honestly, I used only relational databases so far (oh, and flat files...), so I had to watch one or two talks from Google IO conference to get the idea.

What pissed me off the most was lack of support for nested transactions and some bugs in existing transaction code. To run some piece of code, you have to pass a function to db.run_in_transaction(), but whenever I tried to make the code more generic (as in: not to write two almost identical functions) stuff exploded. It's pretty bad, because creating an entity and updating a counter should be a single atomic action. But they aren't, so you end up hoping for the best.

JavaScript

Little bit of history: At first I hated it, then I really liked it. Now I'm just using it and ignoring its deficiencies. And regarding the period that I liked JS: it was the time that JS libraries were becoming really, really good, and I was just impressed (shocked, even) that it's possible to build anything with it without cursing like mad.

But even JS 1.7, which has generators and list comprehensions, is pretty verbose, and you can only take it so far as jQuery - the best attempt for creating domain specific language in JavaScript. Great for traversing/manipulating DOM.

Another thing: I used Emacs with js2-mode. The style of formating code encouraged (somewhat) by jQuery drives Emacs insane and beaks the indentation. At the beginning it bothered me, but then I stopped nesting function definitions and js2-mode let me do my work, and my code looked more readable. I don't know if that was how js2-mode supposed to work or if it was just a bug, but it's done more good than harm.

Blueprint

I've also tried out Blueprint CSS framework. I've used Yahoo's CSS reset library before (and I don't want to work without CSS reset ever again), but never Blueprint. It's pretty good, but somehow feels not clean enough. I guess it provides to much defaults for my taste. But I'll probably use it again someday.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sun, 20 Jul 2008 12:39:57 -0700 Functional http://latebound.posterous.com/functional http://latebound.posterous.com/functional

Recently I tried to rewrite a particular algorithm for generating permutations in a functional manner. The original was written in C#, therefore lots of mutable data structures etc. My first attempt at rewriting the code in Clojure went something like this:

Media_httplh3ggphtcomszablasinws5facmiaaaaaaaaaiudj1yvcfojpis400cljfailpng_zfarbqeoajdhibj

As you can see, I got lost halfway through. But this is what you get when you try to write procedural/OO code in a functional language, using immutable data structures. Usually the right way to get out of a mess like the one above is to use map or its syntactic brother: list comprehension (Clojure's for macro).

I ended up with a lazy list of permutations, where the laziness required zero effort from me - got that for free from the language.

I'm still stumbling while writing programming in Clojure, but not in the frustrating way like when I tried to write something of use in F#. Probably getting to know Scheme beforehand helped a bit.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sun, 06 Jul 2008 04:24:31 -0700 I'm no longer a student. http://latebound.posterous.com/im-no-longer-a-student http://latebound.posterous.com/im-no-longer-a-student

A little more than a week ago I defended my thesis and now have a Master's degree in mathematics. The title of my thesis is "Particular classes of functions holomorphic in the unit circle," topic related to the Bieberbach conjecture, for those more oriented in math. For the next month and then some, I'll be writing code and learning. I'd also like to finish Okami. After that I'll start looking for a job.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Mon, 28 Apr 2008 00:07:00 -0700 At least I've written some code http://latebound.posterous.com/at-least-ive-written-some-code http://latebound.posterous.com/at-least-ive-written-some-code

A Little Update

I’ve entered the thesis-writing mode and that means I only allow myself to work on my projects on Saturdays. By projects I mean tasks that usually take a good couple of hours. More often a whole day.

Yesterday I finally did some work on my game. With a couple of thousands LOC it became apparent I have to write some tests, and that’s mostly what I’ve done this Saturday. I’m using TestNG.

I also have to force myself to write some PHP code for a class in the coming weeks. I was avoiding PHP for so long, but it finally got me. At school, of all places.

Linux

Lately, I’m spending much of my time on Linux. Here’s why: my laptop is three years old, but only a couple of days ago suspend and resume started working. Sort of - 1 in 5 times the machine just doesn’t want to wake up, and I have to reboot it. Other annoyances: this PulseAudio bug (pulseaudio -k and using “plain” ALSA drivers fixes it), Tracker, a desktop search app, doesn’t work (but Beagle does, I use it). Oh, and watching video on Linux sucks - I always see huge pixels and sometimes that just ruins the whole experience.

One small observation: I don’t install many apps on Windows these days (I’m not counting various dev tools). I do almost everything in the browser, which really bothers me, because the UI usually is slow etc. But on Linux, I find myself more willing to try out new apps. And some of them are really good or very promising (Gnome-do, Tasque, Glipper).

The overal feel of a modern Linux desktop environment is positive. Not quite there yet, but also not far from where it should be.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Wed, 26 Mar 2008 00:37:04 -0700 26: Good Age To Start Using Lisp http://latebound.posterous.com/26-good-age-to-start-using-lisp http://latebound.posterous.com/26-good-age-to-start-using-lisp

I'm 26 now. Spent my birthday writing my thesis. Nobody forced me, I just want to be done with it.

Haven't worked much on my game. But since I started working on it, I pay more attention to what is happening in the java world. That's how I found out about Clojure - a lisp dialect for the JVM. It was created to address many of the concurrency annoyances that occur when you write code in java (or any other language which doesn't really promote immutability). I always wanted to learn lisp, but my understanding of the situation is that there's lot of lisp implementations and all of them work well within their own world; interop with other languages is clunky. Clojure has all java libraries at its command, so I decided to take a look.

The only sensible programming environment for Clojure at the moment is Emacs. I'm getting more and more proficient with Vim, so learning yet another editor didn't seam like a good idea. But I did it anyway and I'm glad that I did. The combination of Emacs + REPL completely blew my mind. I've used Python REPL (and the excellent ipython), but somehow Emacs + Lisp REPL is different. Hard to explain it.

I also decided to take a brief look at Scheme to familiarize myself with the syntax and basic idioms of the language. Another thing: reading SICP is on my todo list for this summer and authors use scheme there. Going through a couple of exercises in How To Design Programs resulted in one or two "Aha!" moments.

I uploaded an implementation of A* path finding algorithm in JavaScript, that I wrote a year ago or so. It took me so much time to put it here, because I couldn't get it to work on IE properly. It still doesn't work on IE but I don't care - it's just not worth my time. Anyway, since writing the code I learned that the way I render the board is really inefficient on current browsers (especially IE) - all those divs shouldn't be created dynamically.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Fri, 29 Feb 2008 12:21:58 -0800 Diving Into Java http://latebound.posterous.com/diving-into-java http://latebound.posterous.com/diving-into-java

I was the guy who not so recently declared on every occasion: I hope I will never have to program anything in java and my mind will remain java free for the rest of my life.

I hoped. But some time ago I decided to write a game and the only engine that had everything I needed in an easy to use package was jMonkeyEngine for java. I also looked at Ogre3d, but the Ogre model exporter in Blender didn't work at the time. jME has importers for the most common formats, so there shouldn't be a problem.

I have never programmed in java before but going from C# to java is relatively painless experience. Basics are the same. All the really useful things from C# are missing (eg. delegates). In the end I find the java language really boring and I wasn't surprised by any of its limitations. Irritated, yes, Surprised? No.

Apart from the language I had to get used to Eclipse. It's a pretty good IDE, but it uses a lot of resources. Every 2-3 minutes my cpu usage spikes, so if I'm listening to music at the moment on anything other than Winamp, I hear skipping or pauses. I experienced it only on Windows, linux manages to withstand Eclipse's whims. Well, almost. Eclipse on linux has one of the most unresponsive UIs I've ever seen. I find it unbearable.

But let's get back to java. JDK comes with Rhino javascript engine, and thanks to some recent additions to java's API's, other scripting languages are pretty easy to host on the JVM. I decided I'll stick to rhino, so javascript is the scripting language I use in my project. There are libraries for jME which provide a console, like the one in Quake. That's useful for development. But nothing beats custom tools, which I know I should write, but I just don't have the desire to learn SWT or Swing or whatever right now.

Since I'm mostly done with building the base layer of code, soon I'll start playing with the mechanics of the game, and then graphics, effects etc. I'm completely green in that area and I can't wait too start. Too bad I have to focus on my thesis

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Wed, 07 Nov 2007 20:12:00 -0800 Rotoscoping - Hard to get it right http://latebound.posterous.com/rotoscoping-hard-to-get-it-right http://latebound.posterous.com/rotoscoping-hard-to-get-it-right

Since I’ve already told you what I’m currently playing, there’s no reason to hide that I really like the aesthetics of “Another World.” Besides, It’s an awesome game.

Since I first saw “Flashback” I wanted to know how the animation was done. Now I know that the technique used is called rotoscoping. Last few days I’ve been trying to do some rotoscoping myself and so far the results are mediocre, to put it mildly. I wanted to make 3-4 keyframes and interpolate the frames between them. No free lunch, as they say. To make the animation look acceptable, a huge amount of tweaking must be done. I don’t think there’s a way around it.

Here’s what I did exactly: I caught some frames from a movie with VLC, imported them to Inkscape and hand drawn (only straight lines) contours of a guy walking. Then I wrote a script to parse the resulting SVG file and form a few keyframes from it (basically, lists of points). Then I interpolated the missing frames and played the animation with pygame.

I’ll play with it a little more during the week, and see what I can do to make the animation look at least as good as in “Another World”.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sun, 28 Oct 2007 18:24:00 -0700 "Another World," Another Time http://latebound.posterous.com/another-world-another-time http://latebound.posterous.com/another-world-another-time

Not so long ago, “Another World” was re-released. The game first appeared in 1991, but I had never played it. I loved “Flashback”, a title very similar visually, and because of that sometimes mistakenly called the sequel to “Another World”.

Some time last year Eric Chahi released the game with updated graphics. It still has its distinct style, but now the graphics are more detailed (hi res). Especially the backgrounds. I downloaded the demo and was blown away. Great atmosphere. You can buy the game for 7€ which is dirty cheap for a game. In Poland “Another Wold” is also available in retail; with some extra goodies in a box (short video with interviews with people involved in the game’s creation, soundtrack CD, a postcard and a little book). I ordered mine on Tuesday, got it on Friday.

The most distinguishing feature of “Another World” is its animation style. Back in the early 90s, the pre 3d era, animation was done with a series of bitmaps, swapped every x milliseconds or so. But in another world characters were animated with vectors. I always wanted to know how exactly it was done. I mean, motion capture was not a standard equipment in game production, yet. You can read about how Eric Chahi did it on the official page.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Tue, 23 Oct 2007 13:19:00 -0700 Like A Pirate! http://latebound.posterous.com/like-a-pirate http://latebound.posterous.com/like-a-pirate

He did it again.

After all those years he did it again. Not that I doubted in him during that time, but damn.

I’m talking about Sid Meier, creator of Civilization, among other games. Civ was the first game that made me forget about the real world. And sleeping. I was ten or eleven years old at that time.

Yesterday around midnight I installed Sid’s Pirates! and launched it; you know, I just wanted to try it out before sleep. What an obvious mistake. Three hours later I reminded myself about a lecture I had to attend in the morning.

As an absolute fan of the movie “Master and Commander” I really wanted a game about ships ‘n stuff but it appears sea battles are not a popular topic among game developers (or more likely, publishers). I’ve heard about Pirates long time ago but never played it, not even the previous versions. The latest incarnation of the game was released in 2004, so I found it in the budget section of a game store. Ahoy!

After some time spent with the game, I have to say I relly like it. It’s a really simple and fun game. I think I can safely put it in the casual games arena. It has simple mechanics and looks cute (but not Care Bears cute). My favorite part are the sea battles, but other elements of the game (trading, simplified duels and dancing) are interesting and fit really well with each other. And just like Civilization and its “on more turn” phenomenon, Pirates! doesn’t let you go away from the computer so easily.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Tue, 02 Oct 2007 14:58:00 -0700 Love and Hate: My Relationship with ASP.NET (continued) http://latebound.posterous.com/love-and-hate-my-relationship-with-aspnet-con http://latebound.posterous.com/love-and-hate-my-relationship-with-aspnet-con

Some .NET Love

Nothing is perfect, neither is a beast as complicated as ASP.NET. Every developer finds something he dislikes in it. But in my view, there’s a lot more to love in ASP.NET than to hate.

Before summer I worked on a web application involving lots of AJAX. In essence it was an online game played via browser; persistent world, lots of data going from and to the server, and a quite complex interface (including a poor man’s version of Google Maps). And I didn’t know javascript at that time.

I really liked AJAX.NET because it is consistent with the model used in ASP.NET; that is building web pages out of ready controls. I looked at different AJAX frameworks and I think only Dojo did things in a very similar fashion. Although AJAX.NET has a pretty steep learning curve and forces you to write lots of boilerplate code, in the long run it’s a real time saver and, dare I say, joy to work with.

As a side note: as many other programmers, I also under appreciated javascript.

It may seem strange that I mention AJAX.NET as my favorite feature of ASP.NET, but I stand by it because it made me actually want to work with ASP.NET again. I liked the workflow of writing controls in client and server code, sometime the border between the one and the other seemed to blur (mainly thanks to how easy it is to include web service calls into the whole thing).

Other reasons to like ASP.NET? For me there’s only one: The .NET framework. It’s a strong enough reason not to ditch ASP.NET completely.

I have to admit that all my opinions above were spoken in a vacuum (almost). That is: I didn’t take into account the choices (or lack of them) a developer is forced to make when working on a project, or the fact that working with Microsoft’s software commercially usually costs lots of money. I assumed a free hand and semi-unlimited resources (eg. you already bought all the MS stuff).

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sun, 12 Aug 2007 00:40:00 -0700 I ♥ (some) Web Apps http://latebound.posterous.com/i-some-web-apps http://latebound.posterous.com/i-some-web-apps

A couple of words before I begin: some of the applications mentioned below changed the format of this weblog a little bit (details). So I thought I’d share what other applications I use every day. I suppose some of them may be of value to you too.

My favorite web apps (in no particular order).

Remember The Milk - this is the best planning app I have ever used. It has an API (eg. you can send tasks to it via Twitter), you can do almost everything using keyboard shortcuts, set reminders, prioritize tasks, make smart lists, tag your tasks. I don’t really use any other normal calendar app for time management (well, sometimes I input stuff into Google Calendar; my classes, for example, because I need an ordinary calendar view for this).

Twitter - The first time I’ve heard about it, I thought it’s a stupid idea. But I started to like it (partly because Dave Winer so enthusiastic about it). It’s pretty neat to be able to know what people you admire or your friends are doing/thinking at the moment.

Tumblr - I fell in love with this one just yesterday. Like with Twitter, my first impression was a yawn - it looked like just another blogging service. But it isn’t. What makes the difference is the bookmarklet that you use to post stuff to your tumblelog. You can post a quote, a conversation, a photo, a video, or an ordinary blog post. You can also suck in items from RSS feeds. For example, I directed my tumblelog to my allconsuming, del.icio.us, flickr (photos tagged with ‘mobile’), and 43thing.com. I really wanted something like this, a kind of lifebox.

Flickr - the best way to share your photos on the web (because of their RSS, API and user interface).

Del.icio.us- probably the simplest bookmarking site. And because of that, I’m a loyal user.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland
Sun, 12 Aug 2007 00:20:00 -0700 Change Of Format http://latebound.posterous.com/change-of-format http://latebound.posterous.com/change-of-format

Less activity = more content

Recently I started posting entries that consist only of a single quote. They stand out, because I added a special css style for that kind of stuff. But yesterday I decided to change that and the overall format of this weblog.

Only longer or meaningful (IMHO) pieces will go here. Short form, links, and other things that amused me (but are mostly not of my authorship), will go into my lifebox (a term I borrowed from Rudy Rucker). Expect more frequent activity there. Also, I deleted the posts with quotes and put them into my tumblelog.

lifebox is hosted on Tumblr, a great web app I (re)discovered on Thursday. If you’re afraid of having a regular weblog (or think you have nothing to say - which is untrue) give Tumblr a shot.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/37063/space_50s_116x116.png http://posterous.com/users/PV5ryJ2wX7 roland fyuryu roland