One notable feature of .fetchmailrc syntax is the use of optional noise keywords that are supported simply in order to make the specifications read a bit more like English. The ‘with’ keywords and single occurrence of ‘options’ in the example aren’t actually necessary, but they help make the declarations easier to read at a glance.
The traditional term for this sort of thing is syntactic sugar; the maxim that goes with this is a famous quip that “syntactic sugar causes cancer of the semicolon”.[88] Indeed, syntactic sugar needs to be used sparingly lest it obscure more than help.
Having a bit of time free, I’ve elected to work on my games resource sub system. Overall, the whole game is a lot like Id Tech 3 in architecture, because it’s exactly the kind of architecture I want, even if I don’t want to put up with the engine that powered Quake III: Arena so excellently.
For the resource loading, what I want is for a configuration file to define what packages should be loaded, kind of like a PATH for zip files. When something needs to be loaded, it’ll be be found at a path, like foo.zip:/what/file.ext— telling the sub system to locate foo.zip in the game or user data directory, then return a handle to the /what/file.ext stored inside of it. As opposed to the more Id approach, where file naming, e.g. pak0.pk3, pak1.pk3, … controls the loading order, I want my game to use a config file to handle that. Because personally, I think having to remember which machine friendly name a resource resides at, is a pain in the arse for making maps and mods >_>.
Because I’m running things very light on dependencies, mostly because compiling stuff on Windows is a bitch (stupid programmers) and many useful items are not easily available on FreeBSD. So things will probably be built on top of zlib, using contrib/minizip as an example of using zlib with the ZIP format.
It has been a some what hectic day, logged off around 0400R last night and couldn’t sleep, by the time I finally started to doze off, ma started shouting and jarred me awake again :-(.
Fast forward to like 0815 this morning and she does the same damn thing, I’ve had about 3 hours sleep, tops. Getting back to sleep is unbearable, improbable, and time passes slowly. Fast forward again, to about 1045R, and I’m thusly awoke again. In fact, by this point, I’ve had sooo little sleep, that I didn’t even realise that I was having a dream, until I was woken up! Went back to bed and finally got up sometime after 1200R, to be used yet again as a cheap slave…. I’m tired of being nothing more then an asset.
The only positive things so far, is I’ve had time (~1 hour) to play with my file server with only a half dozen interruptions or so. For me, that’s a blessing.
No idea what I’m going to do for the rest of the day, I’m not really in a good mood…. and there’s nothing much that I can get done right now, that is not going to result in headaches later. I fucking hate my life here.
Thoughts drift to backup technology
As has been on my todo list for a while, is setting up cron jobs for running dump on my file server, as an “Extra” safe guard to the fact, that my data is mirrored across three different computers already, hehe. (I also do periodic backups to a separate cold storage partition, and priority files to CD-R every year or two.)
My main concern there of course being, how to do it without compromising disk space to much, after all we’re talking about a lot of crap lol. In writing my test script, I’ve also experimented with piping dump into lzma for compression, but at least with Vectra’s scarce resources, is a bit toooo much for the box to handle the data sets involved. Then I started to think, gee, wouldn’t it be cool to just keep a SQLite database that stores logs of changes (cron’d from a script), and then periodically run ZIP on the target, excluding unchanged files since the last backup. Effectively creating a smart form of dump, that functions at a different file system layer (e.g. like tar or cpio).
Then I started to think, well, the best existing solution that I’ve ever bumped into my travels, is a program called Bacula, but I’ve never had to to explore it. With a little poking around, it seems that Bacula is very much the kind of system that I would like to have.
Which poses three questions:
- How well does it work with OpenBSD?
- How well does it handle disk space/compression tasks?
- When will I have time to read all the excellent documentation?
So, sadly it will probably be some time after the new year has come and gone, that I’ll have time to return to this loop; my RTM updated accordingly. On the upside, if three hard disks in separate locations of the building, and with very controlled data replication patterns, some how fails before then…. the entire building will likely have collapsed, so it would be the least of my worries lol.
I just had some fun :-D
Was walking to the mail box, and on the way back an older man asked if I was cold—like normal, I’m out in sandals, shorts, and T-shirt and it’s freezing cold out.
“Nope”
“Wow, you must be part escamo or something”
“I was born in Flordia, so I love it: beats 90 degrees!”
😀
Been in/out all morning, but finally woke up around 11:15R, from a dream best described as interesting but alarming :-S. Less then ten minutes passed before the aggravatory pouncing began, and it was less then 15 minutes before I was officially enlisted for slave duty again :-(.
It’s like everyones a big bird with radar…
On the upside, I’ve managed to transfer all the Live Journal entries from January 2009 into Blogger. Really, I hope to have everything transferred before 2010, lol, but we’ll just have to wait and see. I’ve made about 36 posts on Blogger since the beginning, not counting the moved posting. Live Journal says I’ve made 1537 entries (counting that one), and blogger gives my grand total here as 1,076 posts. So, there is about 498 posts to transfer over, Feb-Oct 2009 and part of Nov. 2009.
After that, the new roost will be ready for a party, muahuhauaha!
Pour me a stiff drink
Managed to get through work, a further reminder that freezing wind and plenty of rain don’t mix very nicely, my hands were almost numb by the time I got inside :-/.
Spent most of my day thinking over the changes for Stargellas input system, but for the most part was thinking about the client/server aspects of the engine, resource loading, and the issue of dealing with cheaters. After taking a very detailed line of thinking about methods to prevent cheating: I’ve decided that it is impossible to crate a PC game that forbids cheating, or it must take the next Albert Einstein to figure out.
Obviously the moment any thing leaves the trusted server, it becomes untrusted information: no data from the client can be trusted what so ever. Most of the more “Industrial” advice about cheat prevention is a totally load of bullshit; more often then not, worse then bullshit. The only way you can stop a cheater, is to close the system down: run your own hosting servers and the clients, in LAN fashion. Then put up the `eyes in the sky` like a casino to make sure no one jacks your hardware. Anything less then that, is basically a lost cause lol. You can raise the ante but you can’t mark all the cards. As soon as tools to disassemble the code or view/change the programs memory enter the picture, the battle is lost: so absolutely nothing on the clients computer can be trusted, even the operating system. Of course, one could easily state in the ELUA that any unauthorized software assisted means of interacting with the software is illegal, which rules out everything save butterflies, but there’s no enforceable method to deal with that. Even attempting to abort program if cracker program X is running or installed, is a wasted endevour: you’d be on the wrong side of the arms race. Whether the game itself is open source or closed source makes no real difference, because obfuscation doesn’t work outside of movies.
Because it’s impossible to prevent cheating outside of your own private arcade (at best), the only viable solution to preventing cheating in an online game, is to give the community the tools to deal with them.
Requiring an authenticated account and having the servers verify this with your own systems before allowing the player to join—and implementing the means for admins to properly ban that account from their servers. Like wise, a global blacklist for any account banned from more then X servers is a good idea, hehe. That being said, of course there is no reliable way to keep the person from coming back: even if they needed another account name, e-mail address, IP address, and computer hardware. It does however, “Level the playing field” by giving the community the means to regulate itself.
The downside of course being, unless your companies game supports a generic peer to peer (unauthenticated) multiplayer mode, the game becomes a paper weight as soon as you shut down the servers. If those login servers and such are not going to remain in steady operation for at least 10-15 years or so, you’re cheating the customers. (Especially those that coughed up $50 on day one and a pre order.) Even worse are games like Battlefield 2, where you can’t do squat unless you login, because once the server is shutdown, it’s unplayable without hacks. At best, you could hope the company puts all the important server addresses in config files instead of the game exe/dll files, as it makes switching to a community provided replacement a bit less complicated for granny.
In the case of my games, well there’s none of that. The only anti cheat measures to be taken, are those that raise the `barrier to cheating` to knowing how to cheat. Unless I become the next Mark Shuttleworth or something. But then again, my games are being developed for my own enjoyment: allowing others to play them, will just be a side effect of (some day) finishing the projects.
It’s been an easier day then expected: ma wasn’t feeling up to working, so instead I ended up in the super market >_>. On the upside, financial woes aside, I got to spend more time focused on programming :-D.
Lately I’ve been working on the computer games I want to build, and finally came to a working title for `StarfighterGame` –> Stargella. With a sub title of vengeance or revenge, which is a perfect title for allowing sequals and expansion packs to be made ^_^. The concept is much like the classic arcade games: simple mindless action. I remember Galaxian and Galaga most fondly, as games that I played in front of Pizza hut as a child. The best free “Clone” that I’ve seen is xgalaga, but it leaves a lot to be desired. What I want, is the kind of game you sit there and play for hours, and suddenly realise you’ve been sitting in front of a computer for the last 6 weeks with a long beard and a torn house coat lol.
The story is simple, also like the great classics: you’ve returned home to the beautiful world of Freyja to discover it is being ravaged by the evil Viekasiekian Empire. Realising that you are the last able bodied star fighter pilot on Freyja, you dive into battle: pushing the Viekasiekian forces back off into space for the final showdown against Emperor Zurick.Game play obviously being in the overhead shooter style of Galaxian and Centipede, but unlike the classics, I want the ship to have full range of movement with the mouse cursor, instead of being constrained to say, left and right, ala space invaders.
Calling the planet Freyja, is meant to encourage the concept that the planet is a beautiful paradise. Like wise, the name of the lead baddy is named in hnour of the graveyard scene from Shakepeare’s Hamlet—Alas poor Yorick, I knew him well! The intention here, being to thoughts of death and such. After all the Viekasikians are meant to be evil ;). Geeze, try to say that three times fast without twisting your tongue in a loop!
Portability concerns have caused me to have to largely ‘drop’ python from the mixture, along with all high level solutions for general rendering and game development tasks. FreeBSD is a horrible platform for developing a video game on, IMHO, unless you like the low level stuff. So, I’m using a common denominator of fairly ANSI C / ISO C89 compliant code, with SDL as the principal backends for graphics and input handling.
It’s also kind of hilarious, trying to maintain a code base that supports both the GNU C++ and Microsoft Visual C++ compilers, using a *subset* of common C++, is actually painful. However using a fairly common dialect of standard’ish C in GCC/Visual C++ is quite less painful. This is principally because MSVCs concept of C programming is more or less 20 years behind the rest of the world 8=).
and if anyone else dares to fucking interrupt me while writing this post, you’re going to be flung out a damn fucking window!
****sigh****
Haven’t been updating my journal here lately, been to busy with work…. still 2 or 3 days of labour to deal with to boot.
Router has been giving me grief for at least two days, and previously was a power outage; I’m starting to think that the outage my have damaged the router somehow. If that’s the case, I am really fucked—because I can’t afford to replace the S.O.B.
Even worse, on top of that, I got up to cycle the router again and my finger hit my laptops power button while a port was upgrading, what a fsckin’ night!
One cheerful moment in a dreary day
The world abounds in aphorisms that convey wisdom to the young, although that advice is usually ignored. Many aphorisms are by unknown authors: “A stitch in time saves nine” (although anyone who has repaired a sail knows that one stitch can actually save 9,000). “People who live in glass houses shouldn’t throw stones.” And many witty people have contributed their own, like this gem from Mae West: “Lead me not into temptation; I can find the way myself.”