All the lulz have been had..
.. the game is now over. :)
On gems and their flaws
.. the game is now over. :)
posted by brx at 7:31 AM 0 comments
labels: rants
The new semester has begun and I am am going to be surprisingly busy with university stuff. I have to prepare a couple of seminar presentations on topics that I am not too acquainted with yet. The first being about a recently published paper on an algorithm for calculating Hausdorff distances between polygonal models in real time. I also eat salad.
posted by brx at 12:47 AM 0 comments
So! Today I got home from university to find that nyu's replacement screen hinges had arrived from Hong Kong. Yay! I bought these from a chinese seller on Ebay a few weeks ago when nyu's (6 year old) hinges broke. They don't quite look the same as my old ones, but they fit and they appear unused. I don't expect them to endure another 6 years of frequent use however. Still, I'm happy.
posted by brx at 6:02 PM 0 comments
So, I read a blog post just now on line/region duplication over here and thought I'd give it a try as well.
Here's what I came up with:
(defun duplicate-line-or-region (arg)
"Duplicates the current region (transient) ARG times, but at
least twice. If none is active, duplicate the current line
instead."
(interactive "p")
(let ((times (if (> arg 1) arg 2)))
(save-excursion
(if (use-region-p)
(kill-region (mark) (point))
(kill-region (point-at-bol) (point-at-bol 2)))
(dotimes (i times)
(yank)))))
posted by brx at 3:56 PM 0 comments
labels: emacs, hacks, programming
I just ran into a Makefile that had a rule like this:
blah.tree blah.zip: Makefile
mdassembler --ecma ./blah -o blah
make -jN
and die horribly.
blah.zip: blah.tree
blah.tree: Makefile
mdassembler --ecma ./blah -o blah
posted by brx at 4:37 AM 0 comments
labels: programming, rants
posted by brx at 12:52 AM 6 comments
a long time has passed since we first met, first knew each other;
since I loved you. in a way, i still do. you have prolonged my life
back in 2001, given me strength to prove to myself what i can be worth
and what i carry within. i can not take this lightly and for all i
have become, all i could have become, you have my eternal thanks.
i would have liked to talk to you again, about our respective directions
in life, about the past, about the things that have happened to us
since our sad parting. my story would surely have fallen short.
i trust that you still carry yourself with the grace that i fell in
love with, so vividly remember, and that you are slowly but steadily
fulfilling your dreams. it is my wish that you do.
love, andreas
posted by brx at 4:23 AM 1 comments
labels: whine
A long time has passed since I have posted to this blog, which is rather sad. I have had lots to do and in between exams, illness and SoC hacking there was not much time left to dedicate to keeping the blog up to date, even my training suffered.
Anyway, Dirty D is "prototype done", which means support for SCUMMv5 and code structuring. Its final code formatting is buggy however, so even though the structuring is correct, this is hard to observe unless going into the source and inserting statements to print the various graphs and related meta information which are generated during code structuring. Very much in character of its name and because of lack of time I left it like that to move on to the implementation of the final decompiler in python. (This also meant skipping implementation of a second prototype devoted to the stack based bytecode variants and the question of how to generalize the disassembler portion of the decompiler, but I will come back to that.)
As for "finalD" (it does not have a name yet), it disassembles SCUMM <= 5 currently. The structuring code is next on my agenda to be translated to python, followed by the output. There are a few more days in SoC and I am positive that these things will be finished .. soon :)
There's some beef though and it is related to the stackbased SCUMM variants >= 6. I hope to be able to wrap up the structuring and outputting code fast enough to have time left to devote to these, but the outlook is grim at least for the SoC deadline. Correctly handling these stack based bytecode variants might just require some limited form of data flow analysis, which I have tried to avoid in general. Apart from this, the sheer amount of tedious work involved in writing handlers for opcodes has me cringing in terror by now, at least when deadlines are involved and the optimum outcome until the end of SoC I can envision involves me not sleeping for five days straight.
posted by brx at 6:29 AM 2 comments
labels: GSoC
These past few days I have worked frantically through the nights to complete Dirty D's opcode repertoir for v5 of SCUMM. I finished up a couple of minutes ago. Nothing beats tediously adding dozens (~107 I believe) of opcode handlers one after another. I will have to think of a way to minimize the pain next time this kind of work comes knocking on my door, which is soon.
Anyway, according to my schedule I was supposed to finish this first prototype, well, yesterday. I currently have an intermediary representation of the raw "disassembled" data. so control flow structure rec. and pseudo code formatting are still missing. The formatting code itself will take about one day, maybe less, and should cover most of the requirements for another bytecode variants as well. (intermediary rep -> pseudo code). The control flow structure rec is what I will write next. I hope to finish all of the remaining work for Dirty D until next Monday so as to not waste much more time before deciding on the nature of the second prototype. Opcode specification probably will be key then, there has to be a less painful way... *rubs his eyes*
good night, for now..
posted by brx at 4:42 AM 0 comments
labels: GSoC
It's 5:30 over here. I am somewhat tired after having spent the night hacking on the first decompiler prototype for SCUMM v5 (antipasto "Dirty D") and figured I might just as well whip up a quick status update on my blog. These past few weeks I have been quite busy with university work and personal issues and hence, even though I started writing Dirty D earlier than planned, I find myself barely within schedule now. There are ~10 days until the first prototype "milestone" and my slacker sense alarms me of more sleepless nights ahead. I still have to do the first svk push to my tools branch in the ScummVM repository, but that will happen later today once I am on campus (unless I am run over by a bus or abducted by aliens). Anyway, not too long ago I talked to my mentor about the general design of antipasto. Let me give a quick summary:
The decompiler is planned to roughly consist of two parts.
The first encompasses general utilities to be used to extract/process bytecode from game scripts and bytecode dependent backends making use of these utilities to produce a uniform temporary opcode listing format independent of bytecode variant in structure. All control flow manipulating opcodes of a bytecode variant will have to be replaced by semantically identical counterparts of the temporary format during processing.
The second part holds the control flow analysis functionality of the decompiler. It is responsible for transforming a partial decompilation in temporary format as produced by one of the bytecode variant backends into a semantically identical "program" with low level control flow statements such as gotos resolved into higher level looping/branching constructs where possible.
Rationale:
By disconnecting the control flow analysis part of the decompiler from bytecode dependent decompilation code, we'd go a long way of making the decompiler simpler to extend with support for new bytecode formats. Apart from that, the introduction of a temporary decompilation format might also help make more general ways of specifying bytecode formats in part one of antipasto apparent. Every bit of functionality for initial bytecode processing that can be ripped out of a bytecode variant backend and pressed deep into the guts of Dirty D eases future adding of support for new bytecode variants.
And that's what I'd like.
posted by brx at 5:27 AM 0 comments
labels: GSoC
posted by brx at 5:51 PM 0 comments
labels: GSoC
I have not had much time up unti now to work on my project, much less to blog about it. So: "Hey there, fellow Coders of Summer!" and of course to whoever else is reading this: "Welcome. Wait, what are you doing here?!".
First a small introduction for the folks over at Planet SoC:
My name is Andreas Scholta and this summer I will be working on an improved game script bytecode decompiler for ScummVM. And if that wasn't exciting enough, I will be using Scheme as my language of choice, at least for prototyping that is. Because this is my first time applying for/participating in SoC I do feel lucky and elated for me to have made it this far. Naturally, the blunt of work is still ahead and I hope I am able to successfully complete my project by the end of this summer.
Work is officially supposed to begin tomorrow and hence I have finally taken the time to talk to my mentor about basic project infrastructure things. As a result a SVN branch has been set up and a wiki account was created, which I will use for project internal progress reports and possibly for documentation of specific ideas.
Much thanks goes out to the people who have encouraged me (some indirectly) to take part in this beautiful endeavour and whose silent support up to and loud cheers upon my admission filled me with motivation and a subtle anxiety to finally be able to get to work. You know who you are.
For now, what else is there to say but..
Happy Hacking!
posted by brx at 3:44 PM 3 comments
labels: GSoC
"Dear Applicant,
Congratulations! This email is being sent to inform you that your
application was accepted to take part in the Summer of Code. [..]"
... when that mail appeared in my inbox an hour ago, I screamed for excitement. Accepted! Woooooo! This summer I will be working for ScummVM, writing a new bytecode decompiler for scumm scripts. It will be an interesting experience to say the least :)
Aaaaaaaaaah, this is going to be a beautiful summer!
posted by brx at 1:25 PM 0 comments
labels: GSoC
What can I write? I feel speechless and somewhat drained of emotion. It's as if I've spent most of it on the second half of that anime I have been watching the past couple of days: Kanon, the 2006 remake by Kyoto Animation to be exact.
And it seemed like an innocent harem anime in the beginning too... except there was no slapstick humour and its male lead was not a klutz. He was just asshole enough for his harem to react in interesting and entertaining ways. I am no anime blogger and I won't spoil this for you. But heed this warning and don't take it too lightly. If you decide to watch this show, enjoy the first half of laughter and general lightness, but don't let it fool you: soon a series of character centric story arcs will emerge, each sadder than the previous one, gradually working towards a final, devastating attack on your male (if you are male, that is) ego with the obvious goal of making you empty your lacrimal sac under the pressure of overwhelming sadness.
I am spent. I am glad I watched this and I am starting to realize how much I regret having seen it all already. What a ride.. :) Oh! Maybe I should not mention it, but yes, it has a happy end.
posted by brx at 12:47 AM 0 comments
I wasted today, tweaking David O'Toole's color-theme-cl-frame.el to be more clowney ("colorful"). I will not upload the tweaked theme ever. Ha ha ha.
[update: fugly color-theme-brx.el]
posted by brx at 3:40 AM 0 comments
labels: emacs
So, a friend has given me a heads up on some Google Reader developments today: it has improved. Never having tried any previous version, I opened the page, imported my feeds and.. decided to stay.
For now I will keep my Bloglines account, but I can already imagine me trashing it. Bloglines is great, don't get me wrong, but Google Reader has a few obvious things going for it (see Kiko vs Google Calendar).
posted by brx at 12:08 AM 0 comments