I'm doing RPM this year. Whoo-hoo. Also, there's been a massive thing of commits to OpenSmash, mostly just getting ready for a true arena setup.
There have been other things going on, but none of them are really worth mentioning here. Expect me to cross-post RPM status between here and RPM's blogs.
~ C.
Saturday, January 26, 2008
Wednesday, January 9, 2008
Happy New Year, 2008!
Hey, guys. It's time for a "State of the Corbin" entry. Bear with me.
- I'm dropping OpenAniDB. There is not enough interest, both from me and the community, and with everything else that's going on, I don't think I can keep hacking away at code that is ultimately lackluster at best. I'm not releasing the C++ source, mostly because it is, frankly, steaming shit. I bet the Python will be easier to maintain; it's certainly better-commented. Good luck to whoever decides to hack on that.
- I haven't posted in nearly a month because I've been switching schools. Sorry 'bout that. Won't happen again for a while, hopefully, so I'll be posting more stuff here again.
- I'm going to step up the rate at which I record music. I've been given a chance to work with some local jazz bands as a pianist, so more music is inevitable, and I plan to share a lot with you guys.
- I have created a new Linux distribution in response to a need: I needed a live distro that had a lot of recovery packages, was reasonably up-to-date, and that just worked. So, I've created Box-o-Trix. More on this later; I will eventually put it up on Dreamhost or something along those lines.
- Justin and I are returning to work on OpenSmash. I may or may not have more code of my own to write, or I might join another project. We'll see.
Saturday, December 15, 2007
OpenAniDB: Reinventing the Wheel
Hey, guys. In a lot of ways, the code I've been writing is fundamentally different than Python, and I keep finding myself writing code to do things that wx can do natively. (Would you believe I reinvented the hash map for strings before learning about wxHashMap?)
So, the state of things. UDP is pretty solid. It currently blocks on I/O. Ideally, we would select() and re-enter the code path once we get a response, but this is pretty good considering we are single-threaded. Also, instead of small nonce functions for each response/error code, I'm now letting each part of the app just switch{} between each code, and then the UDP object cleans up and handles any errors received. I'm sure there will be more tweaking, but I think it's pretty cool to be able to just "have things work" in regards to network errors. For example, if you receive a 555 ("Banned!") at any point during execution, the UDP object will pop up a box letting the user know, without bothering the main code.
The DB is, well, the DB. There's a lot of things unimplemented that the old DB system had; in particular, I have ditched the old per-table functions for a nice, generic Put() and Get(), which handle raw SQL statements. There's also PutRaw() and GetOne(), which wrap those into functions that are much more palatable. There's still a lot of app code which is missing. I haven't rebuilt the morass of code that drives the DB browser. I'm looking forward to it, though. It will be quite cool, I hope.
Hashing works. So does adding to the mylist. Hell, if that's all you really want, then it's done. Finished. The ability to load files into the hasher, hash 'em, and then send the hashes to AniDB is all there. However, renaming/moving hasn't been reimplemented, so if you need that, you're out of luck. Also, the whole thing with DB caching isn't quite working (and there's no way to test it without the DB browser,) so more code must be written.
Good news, though. Hashing is fast. I'm using a builtin MD4 instead of external libs, and frankly, it's ridiculously fast. 10-15 seconds to hash 170 MB. On Linux, at least, I can cache the entire file in memory after hashing, and then just do additional hashes from RAM, which is impressively speedy. On Windows, eh, not so much.
~C.
So, the state of things. UDP is pretty solid. It currently blocks on I/O. Ideally, we would select() and re-enter the code path once we get a response, but this is pretty good considering we are single-threaded. Also, instead of small nonce functions for each response/error code, I'm now letting each part of the app just switch{} between each code, and then the UDP object cleans up and handles any errors received. I'm sure there will be more tweaking, but I think it's pretty cool to be able to just "have things work" in regards to network errors. For example, if you receive a 555 ("Banned!") at any point during execution, the UDP object will pop up a box letting the user know, without bothering the main code.
The DB is, well, the DB. There's a lot of things unimplemented that the old DB system had; in particular, I have ditched the old per-table functions for a nice, generic Put() and Get(), which handle raw SQL statements. There's also PutRaw() and GetOne(), which wrap those into functions that are much more palatable. There's still a lot of app code which is missing. I haven't rebuilt the morass of code that drives the DB browser. I'm looking forward to it, though. It will be quite cool, I hope.
Hashing works. So does adding to the mylist. Hell, if that's all you really want, then it's done. Finished. The ability to load files into the hasher, hash 'em, and then send the hashes to AniDB is all there. However, renaming/moving hasn't been reimplemented, so if you need that, you're out of luck. Also, the whole thing with DB caching isn't quite working (and there's no way to test it without the DB browser,) so more code must be written.
Good news, though. Hashing is fast. I'm using a builtin MD4 instead of external libs, and frankly, it's ridiculously fast. 10-15 seconds to hash 170 MB. On Linux, at least, I can cache the entire file in memory after hashing, and then just do additional hashes from RAM, which is impressively speedy. On Windows, eh, not so much.
~C.
Saturday, December 8, 2007
Music: Corbin Simpson - "Quick Adventure"
One of my adventures. This recording was a warmup before my jazz audition. (He stopped me halfway through the audition, said he had had enough and I was the guy. I'm the guy. Oh yeah. *dances*) ~ C.
Quirk
Something interesting I found: wxConfigBase::Read() is improperly overloaded. GCC accepts:
...but not...
Very interesting, isn't it? My current hypothesis is that false is internally represented by 0, which is the null pointer, so it isn't sure if it should be (bool)false or (bool*)NULL.
My solution:
Inelegant, but it works. Defaults for settings work. Next on the list is file renaming.
~ C.
bool wxConfigBase::Read(wxString, true);
...but not...
bool wxConfigBase::Read(wxString, false);
Very interesting, isn't it? My current hypothesis is that false is internally represented by 0, which is the null pointer, so it isn't sure if it should be (bool)false or (bool*)NULL.
My solution:
bool f = false;
bool wxConfigBase::Read(wxString, f);
Inelegant, but it works. Defaults for settings work. Next on the list is file renaming.
~ C.
Tuesday, December 4, 2007
Music: Portal - "Still Alive"
The infamous radio song from Portal. Cross-posted on Youtube. More tomorrow. ~C.
Subscribe to:
Posts (Atom)