Category: Programming
Math is Easy
Yup. No Surprises Here.
After a marathon eleven hour stretch of coding, ending at 7pm today (21 hours of coding in 2 days), the project from hell is out the door. And the client called at 6:30 to say, “You know, when I said I would be in on Christmas Eve for a several hour long meeting to look at the thing, well, I have decided to wait until after Christmas. Hope you didn’t work too hard.”
God. Dammit.
At least now I don’t have to work on Christmas Eve. Maybe I will have time to start my Christmas shopping. On a happier note, I am taking the rest of the year off of work. I don’t have to go back until January, um… 5. 13 days off. I haven’t had that much down-time since I was unemployed one summer back in the college days.
Got my packet in the mail from Kendall. Classes start January 12 and run through the end of April.
So to all of my readers – who I hope were appropriately awed by the amazing fractal- snowflake- wreath thing – Happy Holidays!
Gone Fishin’
*snap*
Yes, that is exactly what it looks like: an image styled with a background image. View source if you don’t believe me.
Why? Why not!
Flotsam
It appears that the brain-busting work I did with cellular automata experiments is attracting a bit of attention. This fella has graciously linked to my site; an act I consider high praise indeed, considering the amount of Mojo he wields.
In other news [DEVELOPERS – you know who you are!!] someone with a Big Brain has figured out how to run multiple versions of MS Internet Explorer on Windows platforms (scroll to the bottom of the page for the standalone downloads). This one simple act suddenly makes cross-browser testing vastly easier. And on that note, I have two things to say to users of IE5.0 and 5.5: [1] Sorry about the glitches in my site, and [2] Upgrade your damn browsers to Mozilla or Firebird .
This development in no way lessens my loathing of IE5.0 and IE5.5. In fact, by installing them on my computer I feel like I am somehow now in league with the virus-writing 15-year-olds of the world.
On the Acquisition of Chinese Text
My last few days at work have been filled with the thrills of non-Latin character sets; specifically, getting Chinese and Japanese text into an XML-driven flash movie. It was in interesting trip, so I figured I might as well publish my findings as an exploration.
One caveat: Doing this required the downloading of a lot of language packs, both from Microsoft (for Windows) and from Mozilla (for the Mozilla browser). Visiting any of the following sites will probably bring up “install language pack” dialogues, but since it is not certain that your browser(s) will be able to view the text, I have placed all non-Latin characters in images.
First I went to Babelfish and typed in Ecce Signum .
Hmmm. Apparently Babelfish doesn’t automatically do English-Latin-Chinese translations. Let’s try “behold the evidence”
Closer… let’s try one more: “witness the evidence”.
There we go! Now for the verification, I copied the Chinese text from Babelfish and went to Mandarin Tools ; specifically the Unicode Character Dictionary , and pasted the characters into the text field titled “Search By Character”, while making sure the select box to the left of the text box was set to “UTF-8”.
Apparently it doesn’t translate very well… but is appeared to be close enough. But now the characters were not of a good size to make images of. Printing the screen and resizing the image was, to say the least, not very good. So I whipped up a little web page to display the characters, while making VERY SURE that I saved the page as Unicode, and not ISO-8859-whatever. VERY IMPORTANT for the display of Unicode characters. So now I had this:
Hmmm… little squares where I once had Chinese characters… So I looked at the page in Mozilla anyway. This is what I saw:
Perfect! Now the hard part is over. The rest was simply taking another screen capture, isolating the text in the screen capture, turning the image into a .gif, making it black text on a transparent background, and importing it into Flash to do a Trace Bitmap.
Before-and-after of doing a Trace Bitmap in Flash.
So there it is: my first experience in making Flash play nice with non-Latin characters. I am sure there are many many ways to do this that are much more elegant, and I am sure I will discover them the day after this project launches. But right now, I am kind of happy with what I have.
The Fractal Nature of Space
Lately I have been working on this game which I have had stuck in my head forever. More specifically, I have been building the tools which I will eventually use to build the game. Doing so has forced me to learn a lot in the way of data architecture.
My primary influences for this game are Nethack , the early Ultima games, and Diablo . All of these are adventure games, but there the similarities end. Nethack is – not to belittle it at all – a straightforward dungeon crawl, very simple graphics, simple rules, and astoundingly complex gameplay. Ultima (c. the Commodore-64 era) is middle of the road. Slightly more complex graphics, simpler gameplay, but a much more complicated world. It also gives you the option of controlling multiple characters.
Diablo – specifically Diable II – is an interesting blend of extreme complexity (the size of the world) and extreme simplicity (you play by clicking on stuff).
For the mechanics of the game I am building, Ultima IV – which cost me many a grade-point in college – has the most to teach me.
The interface was quite simple: Your character was always in the center of the screen, and the world shifted around you. Every time you hit a doorway, a city, the entrance to a dungeon, a teleport trap, or any number of other things, you would find yourself somewhere else.
One of the goals for my game is that absolutely all of the data for the game be held in XML files. Flash, while improving with every release, still chokes on huge files, so I had to come up with ways of [1] keeping files small, [2] keeping things modular, [3] keeping things consistent, and [4] keeping things interchangeable. This meant, to coin a phrase, “small pieces, loosely joined”.
Later I decided that, not only did everything have to be saved as XML, but even the images had to be built in XML. And that included multiple-frame animations.
So now I needed a logical system of creating maps and maintaining the internal logic of “When I exit room [1]at door [a] i need to appear in room [2] at room [b]”. How to connect all of these XML documents in a manner which maintains logic at the administration level, the file level, and the gameplay level?
Then it hit me: portals.
In Ultima IV, every time you hit a door, or a cave entrance, or a city, you were dumped into a new map in a specific place. That meant that there was something about the thing you activated which knew where to send you. It didn’t matter WHAT that thing was; every portal, no matter what it looks like, does the same thing: sends you somewhere else. Therefore each door, pit trap, ladder and trampoline has a set of coordinates identifying an XML document and an X and Y coordinate within the map which is built by that document. Scope and scale don’t matter; only the target. Let the new map take care of physics and context once you arrive at the new location.
So this long train of thought has made me think about the various portals in day-to-day life. The door of a house. The door of a car. A stairway. A slide. Each leads (for practical purposes) to a space with its own rules. Inside to outside. Rest to motion. Down here a fall will bruise me. Up there a fall will kill me. Out there is bright and cold. In here smells funny.
Portals, as initiators of action, rest in an indeterminate state. They are neither here nor there, and at the same time are both; like a shoreline. I imagine Schrödinger came up with his famous theorem after watching his cat stand halfway out the door for fifteen minutes. The cat was neither in the state of being inside or outside, but was half of each, yet it was a single cat, so logically it must be oscillating between one state and another. Yet the cat itself isn’t moving, so it must instead be in neither state until it makes up its damn mind.
My next big random train of thought will be on the object-ness of events, and consensual reality with reference to discrete units of time.
Side Tracks
Where have I been? Working on a Flash game . At least, the beginning of one. Miles to go before I sleep, and all that.
Blaster Information
Begin 9:00pm update
Back at work, doing a partial upload of a client site which will launch at 8:00am. We are still waiting on “minor” last-minute content changes. We will see…
Back a couple of years ago I came across a site which stunned me with it’s simplicity, novelty, and the sheer genius of the idea. I marveled at it, admired it for a while, then kind of lost track of it in the shifting prismatic landscape that is the internet.
Well I just stumbled across it again. It is still up, it is still doing its thing. So, without further ado, and with an eye toward spreading the word to all corners of this benighted world, I present to you the Prime Number Shitting Bear .
End 9:00pm update
Those of you who are worried about the Blaster worm, go here for info and go here for the tool to use to remove the worm . Note that Symantec is a third party debugging Microsoft’s software for them, since the powers that be at M$ seems incapable of doing it themselves.
To reiterate: this problem is 100% the fault of Microsoft. Any attempt to justify incomplete or buggy software by using the x-manufacturing simile, where x = [cars, architecture, television,social engineering], is simply a non-sequitur. Cars are cars, and software is software. The one will never be the other.
That having been said, I will continue to use Microsoft products and I will continue to wish a slow and painful death on everyone who works at or is a shareholder of Microsoft, who believes anything other than that the convenience of the end user is more important than paychecks, stock prices, and indeed, the existence of the company.
Dear Microsoft: Take some fucking responsibility for your actions.