Well, I removed the Bidvertiser ads. They were everywhere and all over the page and extremely annoying. And I got zilch. Definitely feel taken advantage of.
I’m going to try other networks. I’d stick with adsense, but their ads don’t show for me; I guess they blocked me. Would have been great to have received some information about that, but oh well. With any luck I’ll be able to at least make enough to keep the site alive. 3 dollars a month cant be too much to ask from the advertisements. So the site is back to being “ad free” for a short while.
Testing out ads. Trying to make this site something that doesn’t need to be supported/hosted/paid for out of pocket.
Feel like a total douche, but for the moment it’s just an experiment.
What worries me is that they seem… well, a bit aggressive. I hope I don’t scare people away; not because they would equal more hits=more revenue, but because I like to try to deliver good content and with ads like this it’s hard to determine whether it is my content that drives people away or the advertisements.
Again though- just an experiment. I’ll see what the webstats say in a week or so, and whether it’s worth it. my experience with advertisements says no, but we’ll see, that’s what the experiment is for. Speaking of webstats, I don’t trust them. It says I’m getting 1K hits a day, but I doubt I break a couple dozen.
Oftentimes, when comparing software products in the same market, you’ll see comparisons made where one product has a “pro” over another based entirely on the fact that it doesn’t cost money.
I’ve never understood this. It doesn’t make any sense, when you think about it. Sure- if the two products are extremely similar in form and function, then the comparison is valid- because all other things are equal within a margin. But the problem is, when it comes to free software, they typically don’t stack up to commercial ‘evil’ proprietary Applications.
For me, I learned this by way of text editors. This is a very simple type of application, and one would assume that out of the bajillions of free offerings, one of them would also be easy to use, and meet my needs. This was the case, but I was stymied by what I found in a lot of them.
For example, I have often seen free, Open Source applications, such as emacs, vi, etc touted as “the de facto text editor” application, and held up as some kind of standard.
I have to be brutally honest here- if those are some sort of standard, then that is a pretty damned low bar.
How is this even something to consider for everyday text editing? It’s about on par with WordStar in terms of finger-contorting shortcuts, and it reminds me of edlin, except that it is powerful; That much I can see. But when I need to become a god-damned apprentice to a ancient VI master to learn how to use the software application in a way that fits my needs and need to “train” myself even longer in order to do so adeptly, I’ve lost. My time is not valueless. It doesn’t matter if the software was free, or if I can edit the source code. For one thing, I don’t try to judge software as if being Open Source automatically makes a piece of software sit on some sort of moral high-ground above others. I want my software to work and do what I need. That is it. software should be judged on it’s own merits, not on it’s license.
One thing I noticed with free text editors, was they all seemed to have too many features, poorly organized.
notepad++ is a fine application. But it’s menus are an absolute mess. Being Open Source doesn’t mean you can ignore basic UI Design guidelines. Same goes for the Graphical versions of Vi/Vim (gvim) and for emacs. I have no doubt these are powerful tools, leveraged by plenty of people worldwide. But I cannot personally justify the time investment it would take to learn these applications, when there are plenty of other applications that provide exactly the functionality I want in an easy to use package. Also, from what I’ve seen, becoming proficient in either emacs or vi turns you into a condescending douchebag. gedit is a fine application- it’s free. It has syntax highlighting, and it’s menus actually make some bloody sense, and yet time and time again I see Linux veterans saying it is only for “noobs”. I want to edit my text. That’s what it does. The problem they have is that they invested so much time in learning an overall badly designed (UI-wise) application, and now need to justify that time investment by putting down those people who avoided that time investment in the interest of getting things done.
The free software I found that met my needs at that time was Editpad Classic. This program was (and is) a closed source application. I didn’t, and still do not care. It did what I needed. Then, when my needs grew, I found the same vendor had a product called “Editpad Lite”, and I found that to be sufficient as well.
When I started this website, I needed a efficient way to upload and edit files to and from my webhost. Upon reading the descriptions of features for that same company’s paid offering of the same product (Editpad Pro) I found it seemed to fit my needs perfectly.
Ever thrifty, however, I decided to prowl the web for free software with similar features. Notepad++ had an FTP plugin, but it was unweildy, stubborn, and finicky. No other FTP capability seemed to match. So I purchased Editpad Pro, and I am still using Editpad Pro (still using version 6) to this day for this very capability. Being able to make quick changes to my news page, edit the PHP code of any file on my host, at the touch of a single GUI button is something that I value. Again, I value my time more then some self-inflated sense of pride. Sure, I could:
But I cannot see any reason to do that. I can do all of those. But why are they disparate tasks? All I want to do is edit a file on my webhost. Why is it that an editor cannot edit a file simply because it happens to reside on a remote server? Why do I have to go through an arcane ritual of download->Edit->Return to sender just to edit a single file? And why do people seem to think this is in any way superior to the time-saving method of simply using an application that does this properly?
Returning to Open Source; It’s fine! I have no problem with it at all. I plan to release BASeBlock’s source code under the BSD/MIT license. But I don’t feel that an application being open source gives it value. The fact that an application is Open Source, in fact, means absolutely nothing to me. I only care about whether it does what I want. I don’t care if it has the potential to do what I want if I make changes and recompile the program, because that means it’s not free at all, costing me time I could spend not editing somebody elses program. People often tout the “Open Source” label, as if it matters. It truly does not. In the majority of circumstances, you don’t need, and you do not sanely want to view and edit the source code. How many people can look at the source code for perl, and make sense of it- only the maintainers. That is their job; even if they volunteer, thats what they like to do. But Why would your average user want to recompile the perl interpreter? I can’t think of a good reason. Same for nearly any other Open Source application. I’ve never downloaded and used a Open Source application and thought “hmm, it’s missing this feature- I know, I’ll waste the next two weeks staying up until 2AM and adding it”. No, what I think is “Hmm, this software application is missing this feature, I know, I’ll stop wasting my time using it and find something that does”.
I think the best summary I can come up with is this- Being Free or Open Source does not excuse sub-par design and implementation; and, at least in my opinion, I don’t see a reason to use any application based entirely on it’s license or distribution method. It’s almost as arbitrary as using an application over another because one of them is written by a catholic and the other is written by a jew. It’s a arbitrary and irrelevant to the meat of the matter which is whether that software does what you need it to.
Serialization has always been a thorn in my side. In VB6. in Python, in C#. The biggest annoyance is that most applications consist of somewhat complex object relationships and heirarchy’s, different race conditions about values that need to be initialized first, and who knows what else, all meticulously built during the course of your application, which you eventually need to save to persistent storage.
All applications can benefit from some form of persistence, even if it is only in the form of settings. As a result most Object Oriented languages have a way to allow you to “serialize” an object to a stream. In .NET, this is provided by way of the [Serializable] Attribute and the ISerializable interface, which allows you to customize the serialization somewhat.
What is interesting, at least in the case of .NET object serialization, is that you can choose one of a number of “Formatters” which will take the data acquired by the Serialization support framework and format it to one of any number of formats. Personally, I have only used The BinaryFormatter class, which will allow to write or read a serialized stream to or from a stream.
So, what use is serialization? Well, aside from the obvious ability to save the stream to a file, you can also use it in other ways. For example, since you can send the data across any stream, you could send it through a network stream, and on the other end another instance of your application would be able to rebuild the exact same object. Another usage I’ve found is for usage on the system clipboard; serialize what is being copied, plop it on the clipboard with your own format specifier, and then when you want to see if you can paste check if that specifier exists and when pasting deserialize that data from the clipboard, and you’ve got the objects that need to be pasted, which will be “new” objects separate from those copied (if they are still present).
Copying a object graph to stream, however, has a bit of boilerplate; you need to create the BinaryFormatter(), serialize, and the opposite in the other direction.
However, with generics, this task can be made a tad easier:
Two static methods that serve to input and output a object whose type implements ISerializable to and from a given stream. It also uses the GZipStream to compress and decompress that stream to try to save space.
Extending this directly to files is rather easy as well:
And huzzah! suddenly you can read and write objects to and from a file with ease.
One might even venture to create extension methods on the Stream class that provide this sort of functionality for input and output of any object supporting ISerializable, like the following, which assumes the previous routines are within a ‘ObjectStreaming’ class definition.
And there you have it, suddenly you can write objects directly to any stream, using methods of that stream Object, and that saved data is automatically GZipped for you as well.
This Does, however, present it’s own issues. If there is an error anywhere in your serialization code, using a “filter” type of stream, such as the GZipStream, may cause difficult to trace errors that cause exceptions to fire from the GZipStream itself, most notably “unexpected end of stream” type errors. You can usually trace these in Visual Studio by checking “thrown” on System.Runtime.Serialization.SerializationException in the Debug->Exceptions dialog, and allowing the data to save to a normal stream (that is, directly to a filestream or memory stream rather than by way of the GZipStream). This will allow you to determine where you made the mistake elsewhere. Typically, in my experience, it’s usually something as innocent as a misspelling, or even inconsistent capitalization.
So, I have an ancient laptop. A Toshiba Satellite 440CDX. I covered it in a youtube video:
Basically, for modern purposes, it’s practically useless. However, it could still be usable in some sense, I feel. So the first step was to get it network connected- it could, for example, server as a file server, or something.
The laptop is old enough- and I guess wasn’t the right model- that it doesn’t have a built-in Ethernet port. I don’t think it was typical in those days to have one, anyway. The only item that appears in the network adapters list of Device manager is the infrared port (remember those?). However, thankfully, it supports Cardbus. So I hopped on ebay and bought some cheap chinese thing for like 4 bucks. it took like 3 weeks to arrive but it made it.
I originally intended to create an “opening” video, where I set it up. I did, but I made an ass of myself by trying to plug the cardbus card in the Expresscard slot of my newer laptop for “testing” which of course didn’t work. Plugging it into the 440CDX- nothing happened. Was it defective? Wouldn’t be surprising, given the price. I perservered, because I guess I had nothing better to do.
I ended up in the laptops CMOS setup, and on a whim I toggled some PC-Card mode from “PCIC-compatible” to “Cardbus/16″ or something.
Upon rebooting, I plugged in the PC-Card… and Poof! Found new hardware appeared.
And thus began my trek to find it’s driver. The CD that came with the device was utterly useless since it was for a completely different component (judging from the INF files, a PC-card for serial/parallel ports, or something). What ended up happening, was I allowed the device to “fail” to install, and used Everest Home, at which point I discovered it was a Realtek chipset. This gave me something to work with. I first tried the closest model in the win98 database, which of course didn’t work, so I downloaded the appropriate driver. As I speak, it is installing now
. I needed to copy the contents of the Windows 98 CD to my flash drive. And I now realize that I used the Windows 98 First Edition disk contents rather than SE, so I’ll have to start the entire shebang again unfortunately. I ought to point out that the flash drive usage is supplemented by the incredibly awesome “unofficial service pack” for windows 98- that can be found here, and adds Generic Mass Storage drivers (whereas normally you would need a special driver for nearly every different drive you want to use). As well as a plethora of fixes/tweaks that make the Operating system as stable as possible. Which is very useful for systems that cannot run a newer OS.
Having now restarted the process with the appropriate(Win98SE) files, with any luck it will soon have network connectivity.
At which point I can forget about the entire thing and toss it back in a closet. But not after seeing how laughable the net is with IE 6 (or possibly 5.5). I might search for a more lightweight alternative but a Pentium 133 machine just isn’t cut out for the contents of the net today. I can’t imagine how terrible this site looks on it. At the very least I open up the possibility to use the laptop as a file server or something. Which would be pointless since it’s HD is tiny. SO some might ask “what was the point”? Well, actually, I did gain something so far:
I’ve now learned more about and actually used PC-Card type peripherals. While I was well aware of the various type I,II, III, etc designations, I was unclear as to the specific differences (PCMCIA on older machines being basically a portable ISA, PC-Card being PCI, and Express-Card being PCI-E). my ignorance shown quite completely by my attempts to plug a cardbus card into a expresscard slot. That, and I’ve now actually (well, with any luck) gotten one working, so there is that. The experience, I guess is the motivating factor. Also, it was totally worth it to hear the cool noise the laptop makes when you remove a PC-Card that it knows about. It’s like a PC-speaker version of the XP/Vista/7 “Device removed” sound. Hilarious, and fairly sure the BIOS is doing it too, which means that it’s really coming from the heart of the machine. Touching.
If the CD-ROM Drive of the machine still worked, I’d probably be testing out lightweight OSS Operating Systems, but unless I shell out 80 bucks for a new CD-ROM for the thing (haha, fat chance) that simply is not going to happen.
When choosing a font for any situation, you must consider the context of the font as well as it’s readability. Choosing a font for programming work is no exception. However, for the most part, programming fonts are blocky, and rigid; much like the source code they are used to display. Traditionally, Monospaced fonts work best; I know people who use MS Sans Serif and it drives me nuts.
I’ll skip the prologue involving the TX-1 and PDP-1, PDP-7, and so forth. Let’s start with the first Personal Computer- the IBM PC. Naturally, this machine didn’t really have a concept of “fonts”. usually, any editing of text you would do- programming or otherwise- was done using the “System” font. This actually varied between systems. Typically, the font was actually stored in the video card, so different video cards could often yield different results.
To demonstrate a few select Programming fonts I have encountered in my internet travels, I will use Visual Studio 2008, and change the font, and take a screenshot of a small segment of code that I feel is “busy” enough.
Fig 1 shows this sample using the “System” Font. A few issues stick out for this font; first, it’s a tad too bold. It feels too “heavy” for use today, compared to other fonts. Also, it’s rather large; it takes up an unnecessary amount of space. For the most part, nobody uses the System font for… well, anything, actually.
Another “System” Font, FixedSys looks similar to System, but is different in a few ways. This font, shown in Fig. 2, differs so slightly from System; In fact, I can’t even see the differences, now. I did notice a change when I switched between System and FixedSys in the editor, though. Largely, whether one chooses System or FixedSys makes no difference; there are other, better fonts to choose from on any modern system.
Courier was another popular font at the time for programming, and other text-oriented tasks. Courier is basically the template “Typewriter” font. This brings the advantage (for most programming fonts) that it is monospaced. Typically, Courier is a “fixed” font. What this means, is that it isn’t scalable. This has good points and bad points; a good thing about this is that every font size is designed by hand; but the downside is, because of that there are usually fewer sizes to choose from. One issue with Courier is that the 0 (zero) and the O are quite similar, differing only in that the O is slightly thicker than the 0 (or the 0 is thinner than the O, depending on your perspective) This can make deciphering source code slightly more difficult. As does the similarities between the 1 (one) and l (lower case l); the number has a mere 3 pixels added on to what the l has! In an emergency, this font will do in a pinch, but I think it’s hour of glory has passed.
At some point, a newer, TrueType Courier font was created; being a TrueType font meant that the font could be resized to any size at all, on the fly. Engineers, however, were stuck on the name. A crack team of highly skilled engineers, literature professors, and English majors were assembled, and they worked, tirelessly, for weeks trying to think of a name that says both “Courier”, and “New”. Eventually, they made a breakthrough; the name for this new font? Courier New, as depicted above in Fig 3.
Courier New was the staple font for basic text editors and Programming tools on Windows for years. It carries over a lot of the flaws of it’s predecessor, such as having easily confused 0′s and zeroes. They even made the 1 (one) and lower-case L situation more difficult by making the net difference between them a single pixel. Overall, the font was nothing more than a true-typed version of it’s predecessor, which in and of itself was useful, since it allowed for using any size you could imagine. A contender appeared about the time of Windows 2000, This font, designed for the console, also makes a good Programming font, because it meets all the same requirements; Lucida Console.
Lucida Console was born from the marriage between a Typewriter and an insect called the 7-year Lucida, which every seven years emerges from it’s burrow and showers random passerby with luck it stored in it’s cocoon. Lucida Console was made fun of often in the schoolyard, being forced to play with fonts like Comic Sans. The font isn’t terrible, but, it makes the worst mistake possible for a programming font (which debatably it isn’t to begin with, judging from it’s name) this is that it makes the 0 (zero) and capital O look identical. 1 and lower-case l still look different, thankfully, but having O and zero looking the same for a programming font is sort of like running to a halloween party without a costume and then saying that you are dressed as Steve Ballmer when you notice how much you had sweat on the way there. That is, it doesn’t matter how cool you are or look otherwise, you are still sweaty and possibly sticky and are therefore in the eyes of other guests best avoided.
With the release of Vista, Microsoft got MonoType to re-envision many fonts; Consolas is the monospaced font (out of many fonts) that resulted from this. Basically it is designed to replace Courier New. Additionally, Consolas is better tuned to take advantage of ClearType. Also, some of the mistakes of Courier New were resolved; the zero is now clearly a zero, signified with a slash. the one and lowercase-l are still a tad similar, but Braces ({}) are a bit more clear, as well. All around, probably my favourite programming font.
Unfortunately, Consolas comes with Windows Vista; you can install it on XP, but since it is tuned for ClearType it doesn’t always look quite right on Linux. Thankfully, there is an alternative for Linux, called Inconsolata. However, the problem is that Inconsolata appears to be tuned for *nix font smoothing, and looks a bit funky on Windows (even with cleartype off), as you can see in Fig 6. Obviously this isn’t so bad since for the most part Inconsolata is an attempt to bring Consolas to the Linux desktop anyway.
Because, from my experience, you can’t seem to get Inconsolata working properly on Windows (I’m probably doing something wrong, though) The picture does not do it justice; for all intents and purposes, it is pretty much the same thing as Consolas. If you program on a Linux/BSD machine in a graphical environment, I would recommend this font highly.
Inconsolata is a free font; It is, however, hardly the only one of it’s kind. Dozens upon dozens of free fonts are available, for any purpose, including writing source code. Some fonts go that extra step and are explicitly designed to be used for editing source code. One such font in that category are the Proggy Fonts. The Proggy fonts come in several varieties; but they all hold to one tenet: to be as readable as possible at small sizes. This is the sort of idea I can agree with! Just look at Fig 7. gorgeous… nice, clean lines… a bit small though, if you are using a high-resolution. I’ve set my text editors to use this font.
Anonymous is an interesting font, mostly because it’s name is so silly. For me it seems like a thinner, monospaced version of Helvetica Or Arial; but, it does use serifs on a handful of letters, such as Z’s, lower case L and 1. Anonymous crosses the zeroes, as well; making it easy to distinguish zeroes and the letter O. The slash extends outside the character itself, making it sort of look like a pictographic depiction of Uranus. Over all, another excellent font worth considering.
Envy Code R is another excellent programming font. The zeroes are slashed with a line that is more horizontal then usual, and the lowercase-L’s, ones, and I’s are all easily distinguished from one another. Another advantage is that the font scales rather well both to small sizes as well as large ones. The braces,brackets, and greater than and less than signs are all centered horizontally as well as vertically within the character box, which can be desirable. Like many of the other listed fonts, it appears to have pretty good support for unicode, as well.
There are many other fonts- I may make revisions and/or post new entries for them as I collect them together and get appropriate screenshots.
Three common criticisms of MLP:FIM are that it is “girly”, “gay” and/or “childish”. Here is my rebuttal to these three perceptions.
Well, there certainly isn’t a hard argument one can make against it- after all, it’s not filled with macho robots or explosions or superheroes with superpowers. Well, I guess it sort of has the last one but that is something of a stretch. For the most part, all the “girly” ness can easily be attributed to corporate meddling; after all, they weren’t trying to make a gender-neutral television show, they were targeting a specific market at the time to try to sell their wares. The difference, I think, between the earlier version and the new version (which I base on assumptions about the first version from the 80′s because there is no way in hell I’m going to be watching those, low expectations or otherwise) will likely be that this newer version basically tries to skin the limits of the limitations they put on, and some bits easily slip under the radar; whereas the earlier ones probably didn’t need limitations set at all and they (the producers/animators/etc) went to create a show designed specifically for selling the toys, possibly with very little pride in their work. Now, naturally, it’s not for everybody. The ponies themselves are usually coloured in various hues such as purple, pink, and pastels that are often associated with the female gender. A better question is why that is the case, but I digress. They are however, animated fucking beautifully; the realistic animation of their manes during movement left me flabberghasted that the bloody thing was done in flash. Having experienced the creation of flash videos and realizing just how much work it is to add some minute, and innocuous details made me feel that there was a lot of pride on the part of the creators; after all, they could have easily gotten away with just moving the symbol up and down, say, when Rainbow dash or another pegasus pony is hovering, but they took the time, in each instance, the animate their manes and tail reacting to their oscillation; same with walking, running, moving their head. I can still watch it now and notice such little nuances and am still blown away by the expertise that went into it. Yes, there are some pithy bits like the letters at the end and a few tidbits here and there, but personally I like the contrast that sort of thing can provide with my other favourite shows, compare, for example, Charles Lister from Red Dwarf With Twilight Sparkle.
Freddie Mercury was a Homosexual. That doesn’t mean Queen’s music isn’t fucking awesome, though. Well, unless you are a homophobe, I suppose. But really, I’m not really sure what this could possibly mean. I think maybe people just like the alliterative with girly so plop this in there as well with no real basis.
Now, I will contend that you MAY have something of a point here, given that the show is, obviously, intended for that demographic. But I can’t help but wonder, personally, why they would pay such close attention to little details like the manes/tails swaying in response to movement/wind/etc and so forth, when clearly their “target demographic” isn’t going to nitpick that type of thing. Again, they take pride in their work, and this extends to the writers, who try to make things appeal to nearly any audience. In particular the various puns that wouldn’t be “got” by most in the “childish “bracket, such as the “nightmare moon”/”mare in the moon” which works not only because mare is the name for a female horse but also because mare is the singular latin word for “sea” and is used to describe the patches, or “maria” of plains on the moon. Hell I didn’t even get the equine->Equestria reference at all until a few days ago. I also rather liked the exploration of the ideas of Critical Thinking in the “Bridle Gossip” episode, even if they sort of took a backwards step in that regard with “Feeling Pinkie Keen”, which is my least favourite episode, Aesop-wise. Have I personally learned anything from it? Well, aside from the fact that book titles with long, alliterative and possibly redundant names are kind of funny, no. But compared to the cartoons I would watch as a kid, I feel this one is better done. Even if the theme song isn’t as catchy as Duck Tales, it makes up for it by not being STUCK IN YOUR HEAD AT THE WORST TIMES. Like, say you are at the altar and the minister says “And do you, XXX take this woman to be your lawfully wedded wife”, would you rather accidentally blurt out “DUCK TALES WOOHOO” or, “I used to wonder what love could be, until you shared it’s magic with me” etc. I mean, see, the second one might actually pass for a vow. IT COULD SAVE YOUR MARRIAGE.
On most modern keyboards, manufacturers have decided to add an assortment of random keys, sometimes above the Function keys, sometimes on the left or right. For the most part, these are called “Media” keys. They often posess play/pause, skip next/previous, volume controls, etc. Sensible.
My Wireless keyboard has these. I don’t use it because- well, I don’t exactly have a magic battery maker machine, the Fome/End/Insert keys are configured “wrong” (well actually the way I’m used to is wrong, but I prefer to absolve the confusion by avoid it entirely for now, it just causes headaches while editing source code). that combined with the seeming inconsistency in how well it works have caused me to switch back to my wireless-500. Not to mention the fact that it gobbles up batteries.
Now with the MS wireless-500 keyboard, it has media keys as well. Play/Pause, Volume Up/Down, Mute. “My Computer” “Calculator” favourites, home, and E-mail.
My question here is why they are called “media” keys? I mean, I don’t have Skip Next/previous, which I would find MOST useful, but I have a bunch of other keys. They shouldn’t be called “Media” keys, they should be called “start random shit” keys. Because, you know, I start calculator sooo often I simply need to have it available at the press of a button. And I start thunderbird soo often I simply need it with a single keypress; even though if I started it often I could either pin it to the taskbar, put it on the desktop, or put it in startup. Not to mention that Vista/7 will keep applications that are started frequently right there on the start menu, so if I started thunderbird frequently, it would only be two keystrokes. Of course, that is more than the one keystroke to press the button marked with a envelope- but It just seems kind of silly to have these types of controls for other actions that can be done with only the keyboard, and yet leave out stuff like volume control, which are a defined media “key” but are suspiciously absent from this keyboard. Who seriously uses these keys? Am I wrong to assume they are, or at least, were, some silly marketing gimmick for when people thought the more keys a keyboard had the better it was?
I’ve already written about the “classic” 2012 end of the world doomsday prediction, you know, prediction number fifty bajillion. I have to say that end of the world predictions don’t have a very good success rate so far, what with the world not being ended and all.
Anyway, as ridiculous as the prediction is, there is an even more ridiculous prediction that occurs in 2011 (this year). In fact, it’s mere days away on the 21st.
Now, it is important to note that this prediction is… well it’s not really based on anything, and truly what end of the world prediction isn’t based on self-doubt and nonsense. This one however truly takes the cake. The wikipedia article on this can be found here. Apparently, this is yet another prediction by one of those people who seems to have this magical ability to predict when the world will end and then when it doesn’t they find they made a “calculation error”. This doesn’t make a whole lot of sense. You would think in the time between predicting the “end of the world” and when it doesn’t actually happen you might have given the “math” (haha, how laughable is that, but you’ll see, it’s freaking hilarious) a once over and found this “calculation error” especially since, in almost every case the “math” is the thing being constantly brought forward. Are we really supposed to believe that “oh the prediction is sound I just forgot to borrow a ten here”. Bullshit. This same guy apparently also predicted the end of the world in 1994, and I’m sure we can work out how accurate that was.
Camping states he has attempted to work out mathematically-based prophecies in the Bible for decades. In an interview with the San Francisco Chronicle he explained “…I was an engineer, I was very interested in the numbers. I’d wonder, ‘Why did God put this number in, or that number in?’ It was not a question of unbelief, it was a question of, ‘There must be a reason for it.’ “
What the FUCK is this? “There must be a reason for it”? Really? Even the most devout christian can agree that there is such a thing as overanalysis, and treating the bible as a fucking math textbook takes it beyond a joke.
But it get’s better. He provides a “mathematical proof” of this:
- According to Camping, the number five equals “atonement”, the number ten equals “completeness”, and the number seventeen equals “heaven”.
- Christ is said to have hung on the cross on April 1, 33 AD. The time between April 1, 33 AD and April 1, 2011 is 1,978 years.
- If 1,978 is multiplied by 365.2422 days (the number of days in a solar year, not to be confused with the lunar year), the result is 722,449.
- The time between April 1 and May 21 is 51 days.
- 51 added to 722,449 is 722,500.
- (5 × 10 × 17)2 or (atonement × completeness × heaven)2 also equals 722,500.
What? seriously? “hey look at me assign arbitrary numbers to these words and do some pointless math and come out to another number that happens to be able to be derived from another math formula involving these numbers? Is this guy on FUCKING CRACK? Seriously? Just take a bunch of completely fucking arbitrary date intervals, do some basic arithmetic on them and them make up some handwavey bullshit about the results and POOF! proof of some retarded idea. Here, I’ll try this too!
Really, just try to find something that I did differently. I replaced the terms and the numbers but I included the same ass-pull of arbitrary other numbers that is done in the “original” prediction text.
Ever wonder how the windows disk cleanup utility works? Go ahead. Try googling it. All you’ll get are various “tech tips” on how to effectively use the program, nothing on how it actually does it’s task. I became curious recently in a forum thread regarding Disk cleanup and a few other similar tools. Ages ago I recall reading some article or Q&A column or something where the author described some of the intricacies of disk cleanup; I couldn’t find it, (it was probably in the MSDN library collection I was using at the time)- and it was written for Windows 98 Anyways. So, I decided to determine the method disk cleanup uses to figure this out. My first tool in this fight was to try to use Process Explorer to try to determine what DLLs disk cleanup loaded, shown in Fig 1-1.
From this, there isn’t a whole lot to go on. There is a lot of informational noise, in that it’s difficult to determine which files would be the presumed “plugin” dlls and which are simply loaded by other DLLs and so forth; Additionally, there is also the possibility that it doesn’t keep the DLL loaded and therefore it wouldn’t appear in this list at all. However, there would still be behaviour using the DLL and related data, and it has to retrieve the list of “plugin” DLLs or whatever from somewhere, so I turned to Process Monitor instead.
Generally speaking, I actually prefer to avoid using Process Monitor if I can. It’s not that I dislike the program- it is extremely powerful and replaces both of the older filemon and regmon utilities. The problem I have is that even though it provides a number of powerful tools for filtering the various events, it is still a lot of data to sift through. In this case, I set a filter to include only cleanmgr.exe related events, ran disk cleanup, (or at least let it “enumerate” what it could clean) and then sifted through the various events. Searching through the results I found some entries corresponding to the names of each “cleanup” list item, which can be seem in Fig 1-2.
From this, it seems clear that Disk cleanup is getting many of it’s cleanup “entries” from a list contained in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches. Naturally I assume this differs if the tool is run as a standard user (rather than as administrator). Each key seems to have a few pieces of data; a filelist, for example, and a Folder, both of which seem to allow for pipes separating multiple values as well as wildcards. They also have a Description entry, which is either a string or it could be a resource reference in the form @filename.ext,-resid where resid is the resource id in the dll/exe’s string table that is referenced by the @filename.ext. This same format is repeated for a few other entries as well as what icon Disk cleanup should show in the list.
More interesting however is the “default” item, which references a CLSID; I followed the CLSID for one cleanup entry, in this case the “chkdsk temporary files” entry. This clsid can be found in HKEY_CLASSES_ROOT\clsid and it’s inprocserver32 is %SystemRoot%\System32\DATACLEN.DLL. Because CLSID’s are in fact class IDs and
therefore we can assume that DATACLEN.DLL is in fact a COM component, I opened it up with OLE/COM Object viewer included with the Windows SDK. Unfortunately, it refused to open it, as seem in fig 1-3; inspecting the file with Resource Hacker, I determined that the cause was in fact because the file did not have the TYPELIB resource entry that is typical of COM components; or, more precisely, that entry was probably stripped. So, I was somewhat at a loss here; clearly, disk cleanup interfaces with DLLs as COM components and passes the data from each registry key to that component in order to perform that particular phase of cleanup; in the case of the chkdsk temporary files cleaner for example, it passes in a FileList of *.CHK, and also a list of folders, ?:\FOUND.000|?:\FOUND.001|?:\FOUND.002|?:\FOUND.003|?:\FOUND.004|?:\FOUND.005|?:\FOUND.006|?:\FOUND.007|?:\FOUND.008|?:\FOUND.009 which I would imagine means to search the specified drive for each of those given “found.00#” folders and delete all .chk files within them. Pretty straightforward, judging from this we can assume that dataclen.dll is what actually is doing the grunt work here, in that many of the entries specified- at least in my registry- point to dataclen.dll with varying folders and file masks.
For a bit, I figured “well, maybe it’s a secret interface that isn’t documented” but no doubt there would be trouble over that- Microsoft is apparently supposed to work with their insides out nowadays but I digress; either way, application vendors have been adding functionality to Disk cleanup for ages so I assumed there was some sort of documentation, which led me to this page.
This documents exactly what I originally suspected; Disk cleanup does use a specific interface, in this case IEmptyVolumeCache and IEmptyVolumeCache2. So far, the way Disk cleanup works appears to be something like this:
it enumerates all keys in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches. It may also enumerate other keys for similar entries.
In this case the default value for each key will be a CLSID; this CLSID points to a class that implements either IEmptyVolumeCache or IEmptyVolumeCache2; the latter of which is of course newer and adds a single new function which adds better multi-language support. Disk Cleanup opens the appropriate registry key (which again may be in HKEY_CURRENT_USER in the case of a non-admin run) and passes the HKEY handle to the initialize routine of the instantiated class. Then presumably each cleanup class will “do it’s thing” to initialize from that key. This explains why some of the keys present in VolumeCaches seem to have different values; the different DLLs and CLSIDs can require different keys and values to be present which can mean different things. That said most of them are in fact “standard”, and are documented here. the “stateflags” entry appears to be the one affected by using /sageset and /sagerun, the behaviour and effects of which to me were a final puzzle piece:
By running the disk cleanup manager’s executable file—Cleanmgr.exe—from a command line, you can declare cleanup profiles. These profiles are composed of a subset of the available handlers and are given a unique numeric label. This allows you to automate the running of different sets of handlers at different times.
The command line “cleanmgr.exe /sageset:nnnn“, where nnnn is a unique numeric label, displays a UI allowing you to choose the handlers to be included in that profile. As well as defining the profile, the sageset parameter also writes a value named StateFlagsnnnn, where nnnn is the label you used in the parameter, to all of the subkeys under VolumeCaches. There are two possible data values for those entries.
- 0: Do not run this handler when this profile is run.
- 2: Include this handler when this profile is run.
For example, suppose that the command line “cleanmgr.exe /sageset:1234″ is run. In the UI that is presented, the user chooses Downloaded Program Files, but does not choose Temporary Internet Files. The following values are then written to the registry.
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer VolumeCaches Downloaded Program Files StateFlags1234 = 0x00000002 Internet Cache Files StateFlags1234 = 0x00000000The command line “cleanmgr.exe /sagerun:nnnn“, where the value of nnnn matches the label declared with the sageset parameter, runs all of the handlers selected in that profile.
A generic StateFlags value is written to the registry when Disk Cleanup is run normally. This value simply stores the state (checked or unchecked) of the handler the last time it was presented as an option to the user. There are two possible data values for those entries.
- 0: The handler was not selected.
- 1: The handler was selected.
What can we glean from this? well, aside from changing a few flags in the registry, this doesn’t actually change the list of usable cleanup options. “But BC” I hear you say- “My list is different when I use cleanmgr /sageset:65536 & cleanmgr /sagerun:65536″!
Of course it is. when you run cleanmgr /sageset, it lists <every> handler; even those that would normally be excluded because of permissions, since you are merely changing the values of them in the registry. When you then use the /sagerun switch you aren’t actually performing the cleanup for all those items, only those valid for the current profile. Compare for example the list you see when you use /sageset:65536 to the list you get when you run cleanmgr.exe as an administrator. For me, I see no difference. /sageset and /sagerun don’t actually change the available cleanup options, they just change the cleanup options chosen (which boxes are checked by default).

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 