(No Title)
I’m about 14 hours away from right-clicking the folder My DocumentsSchoolUndergrad and clicking “Send to Compressed (zipped) Folder”.
Cool.
I’m about 14 hours away from right-clicking the folder My DocumentsSchoolUndergrad and clicking “Send to Compressed (zipped) Folder”.
Cool.
2 MB/s down, 1 MB/s up on BT downloading FreeBSD 5.4.
That’s freaking fat bandwidth.
I found a cool memory leak spotter: Valgrind. Free software and all that.
Looks like Python’s a bit leaky, but that’s to be expected. However, it spotted some stuff in Sigma (stuff I’ve been suspecting anyway), and I apparently have a segfault bug I didn’t know about. So, the project will go on the operating table after finals for a code clean.
I’m afraid my mistakes are going to get shoved up my butt at a later date if I don’t do something about them now. I wouldn’t use “disaster” to describe my object handling, but “suddenly more complex” is pretty accurate. About time for an audit.
It’s mainly the ManagedList objects I have now, which are doubly-linked lists with memory allocation built in. It’s a bit of a mess right now.
Oh well.
Theory: Reality programming is a symptom of the death of method acting.
We no longer look for characters in our entertainment. Our characters are the people themselves. Just think about Matthew Perry, Ben Stiller, Diane Keaton, etc., etc. We get the same thing every time. This is just like what you get out of reality programming.
The only good method-type actor I can think of right now in the younger generation is Matt Damon. Comparing his performances in Oceans Twelve and Good Will Hunting, I see some good character acting there.
Haven’t gotten this on the record yet. Noserings suck.
The second OpenOffice 2.0 Beta is pretty good. When it comes to adding TrueType fonts, you have to do some dirty hacking, but that’s cool. I’ve got Georgia going now, and it looks pretty good (including antialiasing). It’s fast, and it gets the job done. Come on 2.0 Final!
It’s late. I’m not sleepy.
Thinking about Sigma, it’s about time to work on the Python. I just realized that it is infrastructurally possible for me to implement Python “behaviors” for denizens. Meaning, every n ticks (probably equivalent to about 5 seconds), an arbitrary Python function is executed for a designated denizen.
Although it is untested so far, it is quite possible to perform some amazing “look and feel” type procedures just using the one Python extension interface I have already written. This is the Python wrapper to the Server::Message() function, which implements the ability to send a per-case formatted message to user(s) in the room, world, or just one character, based upon a format string like those seen in the printf() cstdlib function family. This allows things like “You enter the room” and “Brandon enters the room” to be sent to the proper parties based upon who is reading the text.
The interpreter is fully functional (I have tested this, or I wouldn’t even be talking about it), but I haven’t quite decided upon the architecture for the Python bindings. To summarize the procedure, you load a “module” (codename.py file) into the interpreter, which then passes you a Dictionary object containing function name (string) vs. function “pointer”. You then pass this “pointer” into a Py_CallFunc()-type thing and deal with the return value. I think I’m going to use something called a functor to encapsulate and provide an interface to the actual calling process. The link eloquently describes a functor as a class that overloads the () operator (i.e., the function calling operator). This would serve as a great interface, and you could pretty much treat this functor class as a C++ function pointer.
The morbidly curious might wonder how I plan to deal with object access from Python scripts. The answer is a 32 bit number. Memory locations are addressed at the upper limit of the “bit” of the operating system, or 32 bits. An unsigned long is also maxed out at the bit of the OS. So, I’m casting my object pointers to unsigned longs and sending them raw to Python, which then will call interface functions like sigma.messageTo(“format string”, int dest, ...). The C++ implementations of these interface functions will cast the ulong’s back to object pointers and dereference them to complete the action.
I’m working on getting dynamic_cast<>()’s to work in order to check the integrity of these back-casted long addresses, but this may not be possible (at least with GCC 3.3.4). It wants these things to be object pointers to start with (instead of “numbers”). Maybe I can static cast the ulong to a Character*, and then cast the Character* to itself (just to take advantage of the type-checking provided by dynamic_cast’s). I don’t know.
Anyway, the challenger won Iron Chef America and I need to force myself to bed.
omg! 1337 printer!
Whoa…. The new Dave Matthews Band video promotes a message of patriotism and return to religious values and traditions. It actually features pictures of clergy and various churches. Whoa.
It also has a bangin’ LeRoi solo.
Things…look…good…?
pedantic, definition
In your recent writeup about dual cores, (here), you say “He augured that dual-core processors will be the greatest advance in performance since the introduction of the 386 and sliced bread.”
Spelling issues aside, sliced bread was not a great technological achievement nor a good step for the majority of the world’s bakeries to take. By preslicing the bread, air is allowed to penetrate deep inside the bread, which makes it stale and unfit for eating much quicker. So larger bakers add preservitives and such to make it last longer. In the end we have bread that goes bad faster and is loaded with preservatives that clinical studies will probably be studying for the next ten years. Progress indeed. Please refrain from using the phrase “The greatest advance(ment)... since sliced bread” in the future unless you mean that dual-cores are a step in the wrong direction.
(From The Inquirer user letters)