MooCow Productions
Partitions, Day 2
I got some really awesome feedback from Giuseppe (the Data Charmer) in my preivous post and it gave me a few ideas I thought I would share. One of the really nice things he did in his article about partitioning was to test partitions with the ARCHIVE engine. His results were mixed (and, actually, so were mine), but I did want to give it a spin. Here is what I ended up with:
DROP TABLE IF EXISTS Logger;
CREATE TABLE `Logger` (
`timestampOccurred` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`dateOccurred` date NOT NULL,
`session` char(32) DEFAULT NULL,
`host` varchar(255) DEFAULT NULL,
`sslMode` enum('enabled','disabled') DEFAULT 'enabled',
`requestURI` varchar(255) DEFAULT NULL,
`referer` varchar(255) DEFAULT NULL,
`userAgent` varchar(255) DEFAULT NULL,
`remoteHost` int(10) unsigned NOT NULL
) ENGINE=ARCHIVE DEFAULT CHARSET=utf8
PARTITION BY RANGE (TO_DAYS(dateOccurred)) (
PARTITION p0801 VALUES LESS THAN (TO_DAYS('2008-02-01')),
PARTITION p0802 VALUES LESS THAN (TO_DAYS('2008-03-01')),
PARTITION p0803 VALUES LESS THAN (TO_DAYS('2008-04-01')),
PARTITION p0804 VALUES LESS THAN (TO_DAYS('2008-05-01')),
PARTITION p0805 VALUES LESS THAN (TO_DAYS('2008-06-01')),
PARTITION p0806 VALUES LESS THAN (TO_DAYS('2008-07-01')),
PARTITION p0807 VALUES LESS THAN (TO_DAYS('2008-08-01')),
PARTITION p0808 VALUES LESS THAN (TO_DAYS('2008-09-01')),
PARTITION p0809 VALUES LESS THAN (TO_DAYS('2008-10-01')),
PARTITION p0810 VALUES LESS THAN (TO_DAYS('2008-11-01')),
PARTITION p0811 VALUES LESS THAN (TO_DAYS('2008-12-01')),
PARTITION p0812 VALUES LESS THAN (TO_DAYS('2009-01-01'))
);
So, as before, I am still partitioning by year and month using the TO_DAYS() function. I also borrowed from Giuseppe's work and used the TO_DAYS function when defining each PARTITION, so that at least the original CREATE TABLE statement is a bit more clear (although running a SHOW CREATE TABLE against this monster still results in a somewhat confusing mess). To help clean things up a bit further, instead of simply naming the partitions p0, p1, and so on, I opted to include the year and month. It makes it slightly easier to read.
The question is, did this make a difference? Before moving it over to an Archive table, the Logger table was a MyISAM table with indexes on date, and session: CREATE TABLE `LoggerOld` ( `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `session` char(32) DEFAULT NULL, `host` varchar(255) DEFAULT NULL, `sslmode` enum('enabled','disabled') DEFAULT 'enabled', `requesturi` varchar(255) DEFAULT NULL, `referer` varchar(255) DEFAULT NULL, `useragent` varchar(255) DEFAULT NULL, `remotehost` int(10) unsigned NOT NULL, KEY `date_idx` (`date`), KEY `session_idx` (`session`(16)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 This size of this table was about 206MB (171MB of data and 36M of indexes). After switching over to the ARCHIVE engine (while making a few changes to the table-structure), the result was around 26MB on disk. That's a pretty huge difference, and I'm even storing a bit more data. I added a date field in addition to the timestamp field because I was unable to get partitioning to work correctly when partitioning on a timestamp. I'm actually hoping I can one day just drop the date field and use timestamps with partitions at some point - seems like it should work, though I won't claim to be an expert in this regard.
Performance-wise, it looks like things the speed of pulling my reports is about the same. Actually it might be a bit slower than before, but not by much. Of course, my data-set is quite small - high traffic sites may see very different results. The performance, however, is obviously much better than using an ARCHIVE engine without partitions. I haven't run any tests this time around, but when I was using the ARCHIVE engine before without partitions, pulling a smaller set of data took 2-3x longer than it now does.
Now obviously this only works when one is able to use partitions. The data I pull is usually over a small say of days and so can get lumped in a few partitions. Doing aggregate results on the whole data-set is still going to be quite slow. For me, I don't plan on doing those sorts of things very often and so the end result, while not as cool as I had hoped, does appear to be an improvement. Certainly the fact that I am using noticeably less disk space is pretty neat. And, at least in my tests, ARCHIVE has phenomenal insert performance.
Big thanks goes to Giuseppe for giving me some nice ideas, and for is excellent article on partitioning in 5.1. He's planning on posting additional information on his blog, so I recommend keeping an eye out for it!
The question is, did this make a difference? Before moving it over to an Archive table, the Logger table was a MyISAM table with indexes on date, and session: CREATE TABLE `LoggerOld` ( `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `session` char(32) DEFAULT NULL, `host` varchar(255) DEFAULT NULL, `sslmode` enum('enabled','disabled') DEFAULT 'enabled', `requesturi` varchar(255) DEFAULT NULL, `referer` varchar(255) DEFAULT NULL, `useragent` varchar(255) DEFAULT NULL, `remotehost` int(10) unsigned NOT NULL, KEY `date_idx` (`date`), KEY `session_idx` (`session`(16)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 This size of this table was about 206MB (171MB of data and 36M of indexes). After switching over to the ARCHIVE engine (while making a few changes to the table-structure), the result was around 26MB on disk. That's a pretty huge difference, and I'm even storing a bit more data. I added a date field in addition to the timestamp field because I was unable to get partitioning to work correctly when partitioning on a timestamp. I'm actually hoping I can one day just drop the date field and use timestamps with partitions at some point - seems like it should work, though I won't claim to be an expert in this regard.
Performance-wise, it looks like things the speed of pulling my reports is about the same. Actually it might be a bit slower than before, but not by much. Of course, my data-set is quite small - high traffic sites may see very different results. The performance, however, is obviously much better than using an ARCHIVE engine without partitions. I haven't run any tests this time around, but when I was using the ARCHIVE engine before without partitions, pulling a smaller set of data took 2-3x longer than it now does.
Now obviously this only works when one is able to use partitions. The data I pull is usually over a small say of days and so can get lumped in a few partitions. Doing aggregate results on the whole data-set is still going to be quite slow. For me, I don't plan on doing those sorts of things very often and so the end result, while not as cool as I had hoped, does appear to be an improvement. Certainly the fact that I am using noticeably less disk space is pretty neat. And, at least in my tests, ARCHIVE has phenomenal insert performance.
Big thanks goes to Giuseppe for giving me some nice ideas, and for is excellent article on partitioning in 5.1. He's planning on posting additional information on his blog, so I recommend keeping an eye out for it!
Categories: Member Blogs
New Vote Topic!
Now that the elections are over, the old vote topic didn't have as much weight, so I thought I would change things back around to MySQL. Namely, what's your favorite feature?
As for the old topic, things were about what I expected:
Who are you voting for this November?
Obama : 6
McCain : 0
(Writing In) Ron Paul : 0
Someone Else : 1
Undecided : 0
Total Votes: 7
As for the old topic, things were about what I expected:
Who are you voting for this November?
Obama : 6
McCain : 0
(Writing In) Ron Paul : 0
Someone Else : 1
Undecided : 0
Total Votes: 7
Categories: Member Blogs
Patience. I didn't buy it but they gave it to me anyway.
Until now, I have always have a fantastic experience with Amazon. They aren't the only online store I use, but certainly one I use frequently. Last week, I ordered a 62mm circular polarizer from Amazon. I was pretty excited since I haven't had much experience with one and they had one for a reasonably good price. Trouble is, what I ended up with is not what I ordered. Though the package arrived early, inside was a 62mm UV filter. Not at all what I paid for and, in fact, not even close to the same value. The polarizer was about $32 and the UV protector $12. Plus, I already have a UV filter and I don't need another one.
Well no worries. I filled out the web-form to have them send me the item I ordered. I tried to be polite, but I'll admit I did make it clear my rampant disappointment. I had hoped to have the filter by this weekend (RenFest weekend!) just in case I might need it. Well, they promptly shipped me another one and this time they did upgrade the shipping by one step. I filled out the form on Friday and the replacement arrived today. Want to venture a guess as to what as inside?
Another UV filter.
Screw me once, shame on you, screw me twice, shame on me. The thing is, I know Amazon can do better and honestly I'm not sure what the hell seems to be the problem. The case the filters were housed in has in big jumbo letters (that even nearsighted people like me can see clearly) that says UV Filter. The filter itself says UV filter. In fact, the only thing that says Polarizer is a tiny sticker on the top right. Well, and the back of the package, which contains a description about polarizing filters. I can't figure out how someone could have screwed this up this bad.
I'm trying not to point blame as much as to simply want the situation fixed. Well, this time around, I called Amazon and was met with a polite lady on the phone. That was a good sign. I told her my beef (politely, perhaps overly so) and we ended up agreeing that it might be best to send the whole lot back for a refund and just by the thing at a local camera shop if I want it by this weekend. The call itself was quite nice, though their menu navigation system was wordy and confusing. All in all, I feel like Amazon did a fair job and fixing the issue. I would have preferred that they overnighted me a verified replacement, but you can't have everything. The price was cheap, after all.
I guess the problem is I sort of expected more. This problem should have never happened in the first place, let alone twice. And while the person was quite nice on the phone, if this situation occurred at Rackspace, I feel as though we would have gone the extra mile to fix it. Amazon didn't. They were probably better than at least some online vendors, but I wasn't wowed. I was basically left a bit disappointed at the whole ordeal.
*shrug*
Well no worries. I filled out the web-form to have them send me the item I ordered. I tried to be polite, but I'll admit I did make it clear my rampant disappointment. I had hoped to have the filter by this weekend (RenFest weekend!) just in case I might need it. Well, they promptly shipped me another one and this time they did upgrade the shipping by one step. I filled out the form on Friday and the replacement arrived today. Want to venture a guess as to what as inside?
Another UV filter.
Screw me once, shame on you, screw me twice, shame on me. The thing is, I know Amazon can do better and honestly I'm not sure what the hell seems to be the problem. The case the filters were housed in has in big jumbo letters (that even nearsighted people like me can see clearly) that says UV Filter. The filter itself says UV filter. In fact, the only thing that says Polarizer is a tiny sticker on the top right. Well, and the back of the package, which contains a description about polarizing filters. I can't figure out how someone could have screwed this up this bad.
I'm trying not to point blame as much as to simply want the situation fixed. Well, this time around, I called Amazon and was met with a polite lady on the phone. That was a good sign. I told her my beef (politely, perhaps overly so) and we ended up agreeing that it might be best to send the whole lot back for a refund and just by the thing at a local camera shop if I want it by this weekend. The call itself was quite nice, though their menu navigation system was wordy and confusing. All in all, I feel like Amazon did a fair job and fixing the issue. I would have preferred that they overnighted me a verified replacement, but you can't have everything. The price was cheap, after all.
I guess the problem is I sort of expected more. This problem should have never happened in the first place, let alone twice. And while the person was quite nice on the phone, if this situation occurred at Rackspace, I feel as though we would have gone the extra mile to fix it. Amazon didn't. They were probably better than at least some online vendors, but I wasn't wowed. I was basically left a bit disappointed at the whole ordeal.
*shrug*
Categories: Member Blogs
Getting My Partitioning On
While it took some time to get things sorta out with building MySQL 5.1 with the right parameters to get partitioning support working, I finally was able to get a working install and had some time to play around with this new intriguing MySQL 5.1 feature hands on. The results were mixed I think. For an initial release, things are pretty solid, save for a few non-trivial oddities.
One of the problems I was trying to tackle was splitting up a logs table up by a date range. It seems like this would be a popular use for partitions since it replicates some of the functionality of the MERGE storage engine, only in most cases, does so better. The problem, however, I ran into was that it did not seem quite as trivial as I thought to partition by year and month. Partitioning by year seems easy - just use the year() function, but partitioning by year and month is far less clear. There's currently no YEARMONTH() function for instance (though there is a YEARWEEK() function) and, even if it was, partitions only support a sub-set of all the available MySQL functions, and CONCAT() is not one of them. So, you have to do things that are a bit more clever. Here is what I ended up with (as a test table): DROP TABLE IF EXISTS LoggerPartition; CREATE TABLE `LoggerPartition` ( `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `date2` date NOT NULL, `session` char(32) DEFAULT NULL, `host` varchar(255) DEFAULT NULL, `sslmode` enum('enabled','disabled') DEFAULT 'enabled', `requesturi` varchar(255) DEFAULT NULL, `referer` varchar(255) DEFAULT NULL, `useragent` varchar(255) DEFAULT NULL, `remotehost` int(10) unsigned NOT NULL, KEY `date_idx` (`date`), KEY `session_idx` (`session`(16)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PARTITION BY RANGE (TO_DAYS(date2)) ( PARTITION p0 VALUES LESS THAN (733407), PARTITION p1 VALUES LESS THAN (733438), PARTITION p2 VALUES LESS THAN (733467), PARTITION p3 VALUES LESS THAN (733498), PARTITION p4 VALUES LESS THAN (733528), PARTITION p5 VALUES LESS THAN (733559), PARTITION p6 VALUES LESS THAN (733589), PARTITION p7 VALUES LESS THAN (733620), PARTITION p8 VALUES LESS THAN (733651), PARTITION p9 VALUES LESS THAN (733681), PARTITION p10 VALUES LESS THAN (733712), PARTITION p11 VALUES LESS THAN (733773) ); INSERT INTO LoggerPartition SELECT date, DATE(date), session, host, sslmode, requesturi, referer, useragent, remotehost FROM Logger; In this case, I was able to get things working by using the TO_DAYS() function, which returns the number of days since we switched from BC to DC (although it's not accurate until after the year 1582). This is nice because it allows one to define any partitioning strategy just by using the proper day ranges. The problem is that it's not very clear - looking at the partition list does not really provide any insight into what each partition is storing (2008-01-01 to 2009-01-01, with each partition representing one month, more or less).
Another issue I ran into is that you cannot use a TIMESTAMP field in the function. Well, actually you can, but I wasn't able to run a single query where MySQL used the right partition(s) - it, instead, used them all. I'm not sure why this was the case, but having a DATE field specifically (date2 in the above case) fixed that issue. On that note, one thing I am going to try is to store the year and month in an integer field, say, called, yearmonth which simply stored values like '200801'. Then I can also partition by range, only my values would be more humanely readable. Both these solutions involve storing more data, however. Ideally, I would have liked to see a solution which uses the TIMESTAMP.
Another peculiarity with partitioning is how PRIMARY KEYs are handled. I was a bit surprised to find out that the field being partitioned must be in the PK if one exists in the table. It sorta makes sense, but also it doesn't :) According to the documentation, this is something that is being worked on, and is something I would like to see resolved. For my use-cases thus far, however, it hasn't entered into the equation.
Aside from the bumps, I did find that partitioning can improve performance. I dropped around 40% off the execution time of my test query when using partitions versus using the date index. Not too shabby! Of course, I'll admit that these aren't official tests. In fact, I'll admit that my solution is likely not the best out there. It is what it is :) But I thought I would share it nonetheless. Hopefully someone out there gets some use out of it.
One of the problems I was trying to tackle was splitting up a logs table up by a date range. It seems like this would be a popular use for partitions since it replicates some of the functionality of the MERGE storage engine, only in most cases, does so better. The problem, however, I ran into was that it did not seem quite as trivial as I thought to partition by year and month. Partitioning by year seems easy - just use the year() function, but partitioning by year and month is far less clear. There's currently no YEARMONTH() function for instance (though there is a YEARWEEK() function) and, even if it was, partitions only support a sub-set of all the available MySQL functions, and CONCAT() is not one of them. So, you have to do things that are a bit more clever. Here is what I ended up with (as a test table): DROP TABLE IF EXISTS LoggerPartition; CREATE TABLE `LoggerPartition` ( `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `date2` date NOT NULL, `session` char(32) DEFAULT NULL, `host` varchar(255) DEFAULT NULL, `sslmode` enum('enabled','disabled') DEFAULT 'enabled', `requesturi` varchar(255) DEFAULT NULL, `referer` varchar(255) DEFAULT NULL, `useragent` varchar(255) DEFAULT NULL, `remotehost` int(10) unsigned NOT NULL, KEY `date_idx` (`date`), KEY `session_idx` (`session`(16)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PARTITION BY RANGE (TO_DAYS(date2)) ( PARTITION p0 VALUES LESS THAN (733407), PARTITION p1 VALUES LESS THAN (733438), PARTITION p2 VALUES LESS THAN (733467), PARTITION p3 VALUES LESS THAN (733498), PARTITION p4 VALUES LESS THAN (733528), PARTITION p5 VALUES LESS THAN (733559), PARTITION p6 VALUES LESS THAN (733589), PARTITION p7 VALUES LESS THAN (733620), PARTITION p8 VALUES LESS THAN (733651), PARTITION p9 VALUES LESS THAN (733681), PARTITION p10 VALUES LESS THAN (733712), PARTITION p11 VALUES LESS THAN (733773) ); INSERT INTO LoggerPartition SELECT date, DATE(date), session, host, sslmode, requesturi, referer, useragent, remotehost FROM Logger; In this case, I was able to get things working by using the TO_DAYS() function, which returns the number of days since we switched from BC to DC (although it's not accurate until after the year 1582). This is nice because it allows one to define any partitioning strategy just by using the proper day ranges. The problem is that it's not very clear - looking at the partition list does not really provide any insight into what each partition is storing (2008-01-01 to 2009-01-01, with each partition representing one month, more or less).
Another issue I ran into is that you cannot use a TIMESTAMP field in the function. Well, actually you can, but I wasn't able to run a single query where MySQL used the right partition(s) - it, instead, used them all. I'm not sure why this was the case, but having a DATE field specifically (date2 in the above case) fixed that issue. On that note, one thing I am going to try is to store the year and month in an integer field, say, called, yearmonth which simply stored values like '200801'. Then I can also partition by range, only my values would be more humanely readable. Both these solutions involve storing more data, however. Ideally, I would have liked to see a solution which uses the TIMESTAMP.
Another peculiarity with partitioning is how PRIMARY KEYs are handled. I was a bit surprised to find out that the field being partitioned must be in the PK if one exists in the table. It sorta makes sense, but also it doesn't :) According to the documentation, this is something that is being worked on, and is something I would like to see resolved. For my use-cases thus far, however, it hasn't entered into the equation.
Aside from the bumps, I did find that partitioning can improve performance. I dropped around 40% off the execution time of my test query when using partitions versus using the date index. Not too shabby! Of course, I'll admit that these aren't official tests. In fact, I'll admit that my solution is likely not the best out there. It is what it is :) But I thought I would share it nonetheless. Hopefully someone out there gets some use out of it.
Categories: Member Blogs
A safe made of...LEGOs!
I found this on Digg and couldn't resist but to post it. Using the Lego Mindstorm kit, some dude(s) built a Safe out of LEGOs! It even has motion sensors and an auto-locking door. Pretty sweet!
Categories: Member Blogs
Ways to get MPG readouts from cars that don't have it
So even before the economy went to crap, and the US government decided to throw tons of taxpayer dollars at it (with talks of ANOTHER one, this time for US carmakers who had their head up their ass that they couldn't see the obvious), I was interested in getting more efficiency out of things. Mostly with the house, such as looking seriously at solar panels, turning off my file-server, making sure we have compact fluorescent bulbs, trying to figure out places to put LED bulbs, things like that.
Along a similar vein, I recently ran into some of gathering miles per gallon, and possibly additional information via the car's computer. One method is a DIY project called the MPGuino. The name is inherited from the Arduino project, a free open source development platform based on the Atmel AVR series of microcontrollers. The nice thing is that all the specifications are online, and the Arduino project itself has plenty of documentation of it's own. The other method is a commercial project called the ScanGuage-II. It's noticeably more expensive than building your own, but interfaces with the onboard computer (which means it only works for certain cars made after a certain date). It, however, provides more useful information the the DIY project, and is easier to install.
I'm sure there are other methods of tracking this sort of information, but these seems pretty neat without going too far off the deep-end. I haven't decided yet if I should give one of them a go, but nonetheless, it's neat to know it's possible to get some useful MPG information from cars that don't already display it. Of course, given how trivial this sort of thing seems, I'm surprised more cars don't have this already. *shrug*
Along a similar vein, I recently ran into some of gathering miles per gallon, and possibly additional information via the car's computer. One method is a DIY project called the MPGuino. The name is inherited from the Arduino project, a free open source development platform based on the Atmel AVR series of microcontrollers. The nice thing is that all the specifications are online, and the Arduino project itself has plenty of documentation of it's own. The other method is a commercial project called the ScanGuage-II. It's noticeably more expensive than building your own, but interfaces with the onboard computer (which means it only works for certain cars made after a certain date). It, however, provides more useful information the the DIY project, and is easier to install.
I'm sure there are other methods of tracking this sort of information, but these seems pretty neat without going too far off the deep-end. I haven't decided yet if I should give one of them a go, but nonetheless, it's neat to know it's possible to get some useful MPG information from cars that don't already display it. Of course, given how trivial this sort of thing seems, I'm surprised more cars don't have this already. *shrug*
Categories: Member Blogs
My work is awesome
There aren't many places I can think of (two, in fact) where having some dude randomly throws you over his shoulder and stomps around the office is considered an ok practice. Damnit my job is awesome!
Categories: Member Blogs
Searching Is Back!
It took me a bit longer than I anticipated (mostly due to working on other things), but finally restored the search functionality. This time around, I am using Sphinx as the fulltext engine. Though MySQL's implementation of fulltext has quite a few benefits, the major downsides are that it tends to be somewhat slow and that it only works for MyISAM tables. Though Sphinx has it's own drawbacks, it's a nice alternative when MySQL's built-in support cannot be used for whatever reason.
There is still some work to do. Right now, it is only possible to search by keywords - there is no ability to filter by date, category, mood, or tags. At least not yet...
There is still some work to do. Right now, it is only possible to search by keywords - there is no ability to filter by date, category, mood, or tags. At least not yet...
Categories: Member Blogs
Movies, Movies, Movies
This weekend was the first weekend in a long time where we basically did nothing but watch movies. Actually, that's not completely true. We did spend Saturday out in Leon Valley for another craft fair for our candle business. But apart from that, it was movies. Things got kicked off on Friday with The Hulk. Pretty good movie all in all and it looks beautiful on Blu-Ray. Man it's hard to imagine but standard HDTV looks like crap compared to Blu-Ray. Anyways Brandon and Sean said that Ironman was better, though we never did get around to watching it.
Instead, we went out to the movies to watch Role Models. That movie was awesome! The best of the three we watched this last weekend for sure, but was probably the best movie I have seen this year, second only to The Dark Night. I will definitely be buying it on Blu-Ray when it comes out.
Rounding out the weekend, I finally was able to persuade Corey to watch The Lion, The Witch, and the Wardrobe. I told her we only had to watch the first 45 minutes, but we ended up watching the whole thing. While she didn't go as far as saying she liked it, she did say it was at least Ok and that she had been too judgmental of the movie without actually having watched it. This has been a long standing agreement that we have had, and I'm glad she did her part of the bargain (I still owe mine with having to watch American Beauty). Originally, I was supposed to watch American Beauty first; or at least we had to wait until it was available on Blu-Ray. However, a few weeks back I won another bet which said that she had to watch it first. Silly, I know, but, hey, they are both good movies I'm sure and both of us should give them a shot. My turn is next :)
Anyways, not a bad way to spend the weekend!
Instead, we went out to the movies to watch Role Models. That movie was awesome! The best of the three we watched this last weekend for sure, but was probably the best movie I have seen this year, second only to The Dark Night. I will definitely be buying it on Blu-Ray when it comes out.
Rounding out the weekend, I finally was able to persuade Corey to watch The Lion, The Witch, and the Wardrobe. I told her we only had to watch the first 45 minutes, but we ended up watching the whole thing. While she didn't go as far as saying she liked it, she did say it was at least Ok and that she had been too judgmental of the movie without actually having watched it. This has been a long standing agreement that we have had, and I'm glad she did her part of the bargain (I still owe mine with having to watch American Beauty). Originally, I was supposed to watch American Beauty first; or at least we had to wait until it was available on Blu-Ray. However, a few weeks back I won another bet which said that she had to watch it first. Silly, I know, but, hey, they are both good movies I'm sure and both of us should give them a shot. My turn is next :)
Anyways, not a bad way to spend the weekend!
Categories: Member Blogs
Konami's VRC6 and Castlevania 3
I'm a big fan of chiptunes. You know, those bleeps and bloops that come from the older game consoles (C64, NES, etc.). Obviously, I have to be a fanatic if I'm building a MidiBox SID. But I digress, while browsing the MidiBox forums I ran across an interesting discussion about the infamous (in Japan) VRC6 sound-chip. This chip was shipped with a few Famicom (Japan's version of the NES) titles, such as their version of Castlevania 3. This chip added more channels, among other enhancements. The results are quite striking. Yes, to the untrained or unappreciative ear, it still sounds like crappy Nintendo music. But, it has much more depth than it did before. Kinda makes me sad Nintendo of America didn't allow these to be used in the US titles.
Though the VRC6 saw limited use, the VRC7 is even more rare and coveted for the Famicom fanatics. It was a full-blown FM synthesis chip which made the Famicom sound strikingly similar to a Sega Geneis (with the same standard NES graphics, however).
It's a shame the US version of the Famicom (the NES) lacked the audio-in pinout required for custom chips. Even if it did, Nintendo of America refused to allow these custom chips to be used for US games. I damn shame, if you ask me!
Though the VRC6 saw limited use, the VRC7 is even more rare and coveted for the Famicom fanatics. It was a full-blown FM synthesis chip which made the Famicom sound strikingly similar to a Sega Geneis (with the same standard NES graphics, however).
It's a shame the US version of the Famicom (the NES) lacked the audio-in pinout required for custom chips. Even if it did, Nintendo of America refused to allow these custom chips to be used for US games. I damn shame, if you ask me!
Categories: Member Blogs
Diet Coke & Mentos. It works.
Yesterday I finally got to set off some Diet Coke & Mentos fountains. Corey and I were at Hobby Lobby a few weeks ago looking at things for Making Perfect Scents and I found a Diet Coke & Mentos kit hanging by the register. It came with the loading tube, nozzle, and a pack of Mentos. I've been wanting to set it off for a while now, but I didn't want to do it without spreading the enjoyment around. Fortunately, yesterday Brandon and Amy were around to witness the awesomeness. No one else was, but, hey I can always buy more Diet Coke and Mentos.
So we grabbed up $15 worth of 2 liter Diet Cokes and 4 packs of Mentors. The results, I have to say, are pretty awesome. These days who hasn't seen the results of this, but, I have to say, it's 100x better in person!
Update: Technically, Corey found the nozzle thinger from Hobby Lobby. I just made us buy it :)
So we grabbed up $15 worth of 2 liter Diet Cokes and 4 packs of Mentors. The results, I have to say, are pretty awesome. These days who hasn't seen the results of this, but, I have to say, it's 100x better in person!
Update: Technically, Corey found the nozzle thinger from Hobby Lobby. I just made us buy it :)
Categories: Member Blogs
New vote topic and more updates to PhotoDawg
So I should be sleeping right now, but, well, it's been a crazy week and I haven't been sleeping well. So, instead of tossing and turning, I thought I would do some work on the website.
First up, a new vote topic! I figured I would make things reflect the current state of affairs and am curious as to the type of demographic that visits my site. So, the new vote topic is none other than asking who you might vote for. Of course, people who would rather refrain from telling (even though it's anonymous) can simply not vote. The previous vote topic results ended up being somewhat measly:
Sun`s Acquisition of MySQL
A Good Thing: 7
A Bad Thing: 1
Unsure: 4
What is MySQL?: 2
Aside from that, I spent a good while adding some minor features to PhotoDawg. It is not possible to view a selection of photos using a specific lens, sorted by the number of photos that were taken with each lens. I also uploaded more photos from the older photo album, ranked a few photos, and worked on the back-end stuff no one but me cares about :)
I guess that is worth a good nights sleep. Hopefully I can manage a few hours of shut-eye. If not, well, I guess I'll keep adding more cool features to the website!
First up, a new vote topic! I figured I would make things reflect the current state of affairs and am curious as to the type of demographic that visits my site. So, the new vote topic is none other than asking who you might vote for. Of course, people who would rather refrain from telling (even though it's anonymous) can simply not vote. The previous vote topic results ended up being somewhat measly:
Sun`s Acquisition of MySQL
A Good Thing: 7
A Bad Thing: 1
Unsure: 4
What is MySQL?: 2
Aside from that, I spent a good while adding some minor features to PhotoDawg. It is not possible to view a selection of photos using a specific lens, sorted by the number of photos that were taken with each lens. I also uploaded more photos from the older photo album, ranked a few photos, and worked on the back-end stuff no one but me cares about :)
I guess that is worth a good nights sleep. Hopefully I can manage a few hours of shut-eye. If not, well, I guess I'll keep adding more cool features to the website!
Categories: Member Blogs
Putting my camera to use
Been somewhat busy as of late snapping pictures and finally got around to posting some of them. It's been fun getting back into photography. I haven't done any serious stuff since high school (partly because it's so damned expensive!) so it's nice to have an avenue for creativity. Particularly when I can't seem to get any music down these days. I'm not sure what the issue is with that. It's partly writers block, and partly tools perhaps (though I have finally started to lay a few good potential songs out). Anyways enjoy!
Categories: Member Blogs
Standard PHP Library?
I've been using PHP for a long time. As a result, I have seen it grow and change over time. I like to think that I am up on the latest enhancement to the language, but while troubleshooting a PHP issue, I randomly ran the Standard PHP Library. Apparently it's been around for a while and I'm just late to the party (and more than fashionably late at that). It appears to be, more or less, similar to the "standard" object libraries of other languages. For instance, it has an ArrayIterator, which most other object oriented languages have. It's not what I would exactly call complete yet, at least not compared to the standard libraries of other languages, but it is nonetheless a start!
Categories: Member Blogs
Woohoo! Gratuitous Shadows!
So while it's only really used in the Gallery, I have added shadows to various elements on the site. I originally was trying to do this using standard CSS and images, but that ended up being fairly complex. As it turns out, WebKit supports CSS extensions which can easily render shadows around various items, such as tables, images, etc. Unfortunately, that means only people who use Safari can see the shadows. Everyone else, at least for now, is out of luck. Even so, the shadows look really awesome! Here's a small example for those that are not using Safari:
I'll admit, it's probably dangerous that I now know how to use shadows since I will probably be using it just about everywhere...
I'll admit, it's probably dangerous that I now know how to use shadows since I will probably be using it just about everywhere...
Categories: Member Blogs
Gumbo, Movies, and Cars (UPDATED)
I have to admit, it's not even over (though almost) but I'll go ahead and flag this weekend as pretty awesome. On Saturday I got called in the morning for a work related issue (I'm the guy on call this week). That took a good 4 hours and, while it wasn't all that fun, I was able to help square things away and was even able to spot a few other gotchas that could be potential problems in the future. I think the customer is now much happier so I'll still flag it under awesome. After that, we went out to my mom's for some gumbo. My Aunt Donna and Uncle Gary came down from Oklahoma to go fishing with my mom and Paul. Bobbi and Brandon also showed up and it made for a nice afternoon. The gumbo was delicious too!
After that, we went out with Brandon and Amy to go check out Nick and Nora's Ultimate Playlist. It was a pretty awesome movie! Comical, but also somewhat serious at times and a general feel good movie all around. It featured some awesome music took and had Michael Cera in it, so it was doomed to being totally awesome (did you know that guy is only 20?!). The only thing that bugged me slightly was the fake band name they used in the movie (Fluffy). It just felt somewhat out of place. And, granted, since Michael is in it, it sort of had a similar feel to his other movies. Which means if, for some reason, someone doesn't like Michael, they probably won't like this movie. I liked it though and plan on buying up the Blu-Ray once it comes out (I pre-ordered Beetlejuice on a completely unrelated note - woohoo!).
Today, we went with Brandon and Amy to check out the car show. Sean was supposed to come but he was stuck playing Warhammer. Jerk. Anyways, the show was pretty awesome. I got some good pictures (I think, I haven't actually uploaded them yet). I wish they had more concept cars there, and BMW wasn't there. Nissan was and they did have the new Skyline, and there were some interesting cars from most of the auto-makers. Acura even had a turbo-charged SUV. Which, I mean, I usually hate SUV's but I have to give them credit, for having a turbo and being an SUV, it said it got decent gas mileage. We had a good time, though I think the Austin auto show we went to a few years ago was better. After that we took a walk on the riverwalk to see the sights. We were going to go to dinner, but we were all still full from a big breakfast we had at Denny's.
Not too shabby, though I wouldn't mind having another day off :)
UPDATE: This last weekend Brandon and I had a moment to discuss the reasoning behind why I didn't like the name Fluffy. And, I have to admit, he had some good points. I hadn't though of the symbolism of the band and how the whole chasing Rabbits theme seems to be in other movies. More than that, though, the chase in general was something I hadn't considered. They were chasing this amazing band (that you never get to see in the movie) when, in reality, what they were chasing was each other. Sort of an interesting spin, and I can now see why the chose the name they did. BUT I still don't like it :) They could have called it a number of other things apart from Fluffy, and I still found the name distracting while watching the movie *shrug*. But, hey, it's still a good movie. And, again, the fact that the band's name was the only fault I could find in the movie says something about it if you ask me. It's definitely on my list of Blu-Rays to by - second only to The Dark Night.
After that, we went out with Brandon and Amy to go check out Nick and Nora's Ultimate Playlist. It was a pretty awesome movie! Comical, but also somewhat serious at times and a general feel good movie all around. It featured some awesome music took and had Michael Cera in it, so it was doomed to being totally awesome (did you know that guy is only 20?!). The only thing that bugged me slightly was the fake band name they used in the movie (Fluffy). It just felt somewhat out of place. And, granted, since Michael is in it, it sort of had a similar feel to his other movies. Which means if, for some reason, someone doesn't like Michael, they probably won't like this movie. I liked it though and plan on buying up the Blu-Ray once it comes out (I pre-ordered Beetlejuice on a completely unrelated note - woohoo!).
Today, we went with Brandon and Amy to check out the car show. Sean was supposed to come but he was stuck playing Warhammer. Jerk. Anyways, the show was pretty awesome. I got some good pictures (I think, I haven't actually uploaded them yet). I wish they had more concept cars there, and BMW wasn't there. Nissan was and they did have the new Skyline, and there were some interesting cars from most of the auto-makers. Acura even had a turbo-charged SUV. Which, I mean, I usually hate SUV's but I have to give them credit, for having a turbo and being an SUV, it said it got decent gas mileage. We had a good time, though I think the Austin auto show we went to a few years ago was better. After that we took a walk on the riverwalk to see the sights. We were going to go to dinner, but we were all still full from a big breakfast we had at Denny's.
Not too shabby, though I wouldn't mind having another day off :)
UPDATE: This last weekend Brandon and I had a moment to discuss the reasoning behind why I didn't like the name Fluffy. And, I have to admit, he had some good points. I hadn't though of the symbolism of the band and how the whole chasing Rabbits theme seems to be in other movies. More than that, though, the chase in general was something I hadn't considered. They were chasing this amazing band (that you never get to see in the movie) when, in reality, what they were chasing was each other. Sort of an interesting spin, and I can now see why the chose the name they did. BUT I still don't like it :) They could have called it a number of other things apart from Fluffy, and I still found the name distracting while watching the movie *shrug*. But, hey, it's still a good movie. And, again, the fact that the band's name was the only fault I could find in the movie says something about it if you ask me. It's definitely on my list of Blu-Rays to by - second only to The Dark Night.
Categories: Member Blogs
Warhammer's EULA makes me not want to play
You would think EA would have learned something with Spore, but I'm going to go out on a limb and say they didn't learn a damn thing. Warhammer Online was launched a few weeks ago and while there are the usual bumps that one sees with a new MMO, there's one issue that sticks out at me, and one I have taken some flak for.
Every-time you launch the game, you have to agree with the end user license agreement every-time. And it's not just an OK button. You have to scroll through the entire EULA, check the "I agree" box, and THEN click OK. Every-time. Every single damn time. Now I have two problems with this. First, it's REALLY annoying. It's this ugly pimple on an otherwise beautiful game. Second, and most important, having to agree to the EULA every-time implies that EA is going to be continually changing it. Now most people don't read the EULA when it pops up once (I at least skim it), but that's not the point. The real point is that EA can add clauses to the EULA at will that say they can do things like, oh I don't know, scan one's computer for sensitive material (like Quicken files) and since basically no one is going to read the , EULA, and, in fact, the thing could change so often that having someone keep up with it could be almost a full-time job.
While it might not be illegal, it sets a bad precedent and makes me uncomfortable. I don't want to read a EULA every-time I fire up a game. I want to play the game, for goodness sake, but I don't want to play it so much that I'd be willing to let EA have free reign over my computer and license agreement for playing the game. And the trouble is, I've heard EA has no plans to change this. At least with World of Warcraft, the EULA only pops up after a patch, which actually makes reasonable sense. That and I trust Blizzard far more than EA. EA has time and time again done terrible things for the gaming community at large (remember the lawsuit over the terrible long hours EA employees were forced to work?)
In short, EA and GameStop should team up together. They would make an unstoppable team of terror since both believe in poor customer service, bad employment practices, and both are exceptional ass-hats. With their evil powers, they could easily conquer the world...
Every-time you launch the game, you have to agree with the end user license agreement every-time. And it's not just an OK button. You have to scroll through the entire EULA, check the "I agree" box, and THEN click OK. Every-time. Every single damn time. Now I have two problems with this. First, it's REALLY annoying. It's this ugly pimple on an otherwise beautiful game. Second, and most important, having to agree to the EULA every-time implies that EA is going to be continually changing it. Now most people don't read the EULA when it pops up once (I at least skim it), but that's not the point. The real point is that EA can add clauses to the EULA at will that say they can do things like, oh I don't know, scan one's computer for sensitive material (like Quicken files) and since basically no one is going to read the , EULA, and, in fact, the thing could change so often that having someone keep up with it could be almost a full-time job.
While it might not be illegal, it sets a bad precedent and makes me uncomfortable. I don't want to read a EULA every-time I fire up a game. I want to play the game, for goodness sake, but I don't want to play it so much that I'd be willing to let EA have free reign over my computer and license agreement for playing the game. And the trouble is, I've heard EA has no plans to change this. At least with World of Warcraft, the EULA only pops up after a patch, which actually makes reasonable sense. That and I trust Blizzard far more than EA. EA has time and time again done terrible things for the gaming community at large (remember the lawsuit over the terrible long hours EA employees were forced to work?)
In short, EA and GameStop should team up together. They would make an unstoppable team of terror since both believe in poor customer service, bad employment practices, and both are exceptional ass-hats. With their evil powers, they could easily conquer the world...
Categories: Member Blogs
Turns Out, I was right about my phone
When I first got my work-cell, I hated it. For numerous reasons, but one of them being that I would get wrong numbers on a regular basis. Some of them were just weird. I swore that this number must have belong to a drug dealer. Turns out, a year later, I found out my suspicious was likely correct. Yesterday the Comal Country sheriff's office (specifically the criminal investigations department) called me and left a voicemail for someone that wasn't me. Well, this morning I got the same call. Thinking it was more than just a wrong number, I called back. Sure enough, the number they had on file was my work cell. I told them I had it for about a year or so and so they figured the person must have changed numbers.
*shrug*
*shrug*
Categories: Member Blogs
First Night Race In F-1 Awesome
While F-1 isn't my favorite racing league (IndyCar is), I do catch the races from time to time. And I have to admit, the inaugural race at Singapore was awesome. The race itself was pretty interesting, but was groundbreaking in one way - it was a night race. I'm sure there have been night-races before, but none in F-1, and certainly none that I have seen. The cars just looked awesome under the lights and was surely a site to see. Definitely glad I got a chance to watch it.
I've been slowly warming up to F-1, but I don't ever think it will trump IndyCar as my favorite racing series. Part of it is that F-1 just feels stuffy at times and even cold. The other problem is that there is no US driver and, in fact, they haven't been to the US in two seasons. Don't get me wrong, just because a US driver would be in the series doesn't mean he or she would be my favorite driver. In fact, my favorite drivers in IndyCar are not americans. I'd simply like the representation. They also use grooved tires, though they are doing away with that next year.
Either way, I shouldn't overshadow the Singapore race with such negativity. It was a damn good race!
I've been slowly warming up to F-1, but I don't ever think it will trump IndyCar as my favorite racing series. Part of it is that F-1 just feels stuffy at times and even cold. The other problem is that there is no US driver and, in fact, they haven't been to the US in two seasons. Don't get me wrong, just because a US driver would be in the series doesn't mean he or she would be my favorite driver. In fact, my favorite drivers in IndyCar are not americans. I'd simply like the representation. They also use grooved tires, though they are doing away with that next year.
Either way, I shouldn't overshadow the Singapore race with such negativity. It was a damn good race!
Categories: Member Blogs
