/* BeejBlog */

Handy ETL JScript

import.cmd: @cscript /b import.js %*

import.js
  1. //v1.0
  2.  
  3. function cleanarg(i)
  4. {
  5.   //WScript.stdout.WriteLine("i: " + i);
  6.   return(WScript.Arguments(i+1).replace("\"", ""));
  7. }
  8.  
  9. //WScript.stdout.WriteLine("arg count: "+WScript.Arguments.length);
  10.  
  11. if (WScript.Arguments.length == 0)
  12. {
  13.   WScript.stderr.WriteLine("Usage:");
  14.   WScript.stderr.WriteLine("  -i \"input file\"");
  15.   WScript.stderr.WriteLine("  -o \"output file\" (blank = screen output)");
  16.   WScript.stderr.WriteLine("  -r \"record separator\"");
  17.   WScript.Quit();
  18. }
  19.  
  20. var inputfile;
  21. var outputfile;
  22. var record;
  23.  
  24. var localpath = WScript.ScriptFullName.replace(WScript.ScriptName, "");
  25.  
  26. for (var i = 0; i < WScript.Arguments.length; i++)
  27. {
  28.   //WScript.stdout.WriteLine("arg["+i+"]: "+WScript.Arguments(i));
  29.   switch (WScript.Arguments(i))
  30.   {
  31.     case "-i": inputfile = cleanarg(i); break;
  32.     case "-o": outputfile = cleanarg(i); break;
  33.     case "-r": record = cleanarg(i); break;
  34.   }
  35. }
  36.  
  37. var fso = new ActiveXObject("Scripting.FileSystemObject");
  38.  
  39. //WScript.stderr.WriteLine("  inputfile: " + inputfile + ", record: " + record + ", exension: " + fso.GetExtensionName(inputfile) + ", WScript.ScriptFullName: " + WScript.ScriptFullName.replace(WScript.ScriptName, ""));
  40. //WScript.Quit();
  41.  
  42. var ForReading = 1, ForWriting = 2;
  43.  
  44. var f = fso.OpenTextFile(inputfile, ForReading);
  45.  
  46. var out = WScript.stdout;
  47. if (outputfile != undefined) out = fso.OpenTextFile(outputfile, ForWriting, true);
  48.  
  49. var line="";
  50. while ( f.AtEndOfStream != true )
  51. {
  52.   var str = f.Readline();
  53.   if (str == record)
  54.   {
  55.     out.WriteLine(line.slice(1));
  56.     line = "";
  57.   }
  58.   else line += "," + str;
  59. }
  60. out.Close();
  61.  
  62. if (fso.GetExtensionName(outputfile) == "csv")
  63. {
  64.   var WshShell = WScript.CreateObject("WScript.Shell");
  65.   //WScript.stderr.WriteLine(localpath + outputfile);
  66.   WshShell.Run(localpath + outputfile);
  67.   WshShell.Run(localpath + outputfile);
  68.   WshShell.Run(localpath + outputfile);
  69. }

Keyboard Porn

  • True Geek Love :)
  • The perfect rainy day activity
  • Ode to keyboard:
    • Still lovin’ my Dell “QuietKey” classic generic server keyboards (Thank you Pat and Gabe!! :)
    • It’s nice and heavy… doesn’t slide around on the desk like the featherweight Dells we get at work these days
    • The rubber pads under the keys (ocean blue dots in first photo) give a pleasingly solid thunk feel but still fairly quiet, not rata-tat-tat (which matters a whole lot more lately, when trying to sneak in some quality PC time next to the little one’s nest ;)
  • I highly recommend a simple jet wash versus popping all those keys off.
    • By my second round it was a quick matter of: unscrew, hose down, blow dry, screw back on… <15 minutes that way
    • Just 8 easy screws to separate the all-plastic key tray top side from its electronic underbelly (great cleaning copacetic design there… good job random Asian manufacturer!)
    • Then you can focus on blasting away the furry gummy bears rotting under your keys with nary a concern… a shower/sink sprayer with decent pressure comes in handy here.
  • Still into poppin’ keys?
    • Lesson #1 - have another keyboard handy for reference when it’s time to pop the caps back on
    • Careful, there was a micro spring under the space bar on mine
    • Careful #2, those rubber pads are very fragile… the slightest nudge knocks them off their gossamer adhesive… fortunately, very easy to super glue back on but they just sit on a flat glossy surface with no guide bumps or anything so you have to be mindful of re-positioning when you commit new glue
    • The plastic standoffs on mine (white pile in middle of first photo) are keyed so they fit back the right way without any thought … so feel free to let those chips fall where they may when you disassemble… the F and J were vertically slotted, all the rest were horizontal
P1030115-800x600 P1030116-800x600

Overclocking ‘Skeletor’ Q9540 v1.0

[Update: 14 Dec 2010] Round 2 here

Photos of the rig

Well I just spent a few hours racking up some serious negative wifey points to see what I could see at the end of the OC rainbow :)

Current CPU specs:
  • Intel Q9450 Quad Core 2 “Yorkfield”
  • Got it for $382.48 including shipping back on 21 April 2008 (not quite a month after release :)
  • LGA 775 socket
  • stock @ 2.66GHz (333MHz FSB  x 8x multiplier = 2.66GHz)
  • The multiplier is locked on this CPU (SOP for cheaper non ‘Extreme’ Intels) so the only way I can overclock is by jacking the FSB.
  • 2 * 6MB = 12MB L2 cache
  • 333MHz * quad pumped = 1333MHz effective FSB

RAM considerations:
  • 333MHz FSB x quad pump means the minimum RAM spec is 1333MHz (= 4 x 333) to keep up with the FSB & CPU
  • DDR - this 1333 MHz is a DDR number meaning the RAM clock is actually half that (reference how the timings are typically rated under RAM Specs below)
  • FSB/RAM Ratio - that 1333 MHz is bare minimum in order to stay with a 1:1 FSB/RAM clock ratio… one can lower typically jimmy with this ratio in your OC bios settings to avoid choking your RAM while still goosing your CPU… i don’t have a feel for how practical that compromise winds up being but OC’ing is all about bragging rights and 1:1 just sounds cooler doesn’t it? ;)
  • Anyway, I decided to go with bare minimum DDR3-1333's starting out given Q2 2008 build date prices ... Hoping that I’d be able to juice them a little over spec without paying for it of course :)
 
Current RAM Specs:
  • G.SKILL - Part#: F3-10600CL9D-2GBNQ
  • DDR3 1333MHz, PC3-10600
  • Timings: CL 9-9-9-24 @ 666 MHz, 8-8-8-22 @ 592 MHz, 6-6-6-16 @ 444 MHz
  • 1.5V – 1.65V
  • 4 x 1GB Sticks (NewEgg was $110 per 2 x 1GB bundle = $220 total for G.SKILL 4GB DDR3 1333MHz back on 21 Apr 2008)
 
Mobo Specs:
  • ASUS P5E3 PREMIUM/WIFI-AP @n
  • BIOS: AMI (09/02/08)
  • FSB: 1600/1333/1066/800 MHz
  • Socket: LGA775
  • Chipset: X48
  • HDD Controllers:
    • Intel ICH9R = 6 x SATA 3Gb/s RAID 0,1,5,10
    • JMicron JMB363 = 2 x eSata ports & 1 PATA/IDE legacy port
  • Card Slots: 2 x PCIe 2.0 x16 @ x16        1 x PCIe 1.0 x16 @ x4, x1        1 x PCIe x1         2 x PCI 
  • RAM Slots: 4 x DIMM, 8 GB, DDR3 2000/1800/1600/1333/1066/800 Non-ECC, Un-buffered, Dual Channel
  • NICs: Dual Gigabit - Marvell 88E8056 (PCIe) & Realtek RTL8110SC (PCI)
  • Audio: Analog Devices AD1988B @ Intel 82801IB ICH9
image

OC Reality (kind of dismal actually):
  • 466 MHz FSB x 8 = 3.72 GHz wouldn't even boot :)
  • 433 MHz FSB       = 3.48 GHz booted but BSOD’d pretty quick :)
  • 400 MHz FSB       = 3.21 GHz lasted through 10+ minutes of serious crank tests <yeah?> but BSOD’d right when I fired up Outlook after those tests <rats!>
  • 380 MHz FSB       = 3.05 GHz seemed to hold <meh, better than nothing i guess>

I then realized that my BIOS OC settings were in an auto RAM ratio selection mode… at 380 MHz FSB it was choosing 456MHz core RAM clock (= 912 MHz DDR)… which compared to 1333MHz isn’t very awe inspiring… it was easy to change the BIOS OC settings from auto to a locked RAM clock to see what happens… I set my RAM clock to 1520MHz DDR (380 MHz x 4 for quad pump) to keep 1:1 with the FSB … it booted… ran for a while, still eventually BSOD’d :( well, they’re rated for 1333 and apparently I got just what I paid for.

Voltage:
I'm getting mixed signals from Everest... some screens say Core CPU is 1.0xxx and others say 1.2... no sure what to take as gospel there... my ASUS P5E3 x48 mobo's got some nice auto OC optimizer logic that I believe is choosing that voltage for me... I think I've read that 1.3v is tops recommended so you don't fry it... the way I see it, once everything else like bus bandwidths are lined up, voltage is the thing to creep up for stability ... I'd like to get 3.2GHz CPU to be stable and be happy with that.

Temps:
I'm idling just under 50c right now with silent medium fan level so I'm sorta wondering if I went a little too heavy on the thermal paste... easy mistake... I really really watched it but that's my first guess... the stress test at medium fan level got right up to 70c but no higher thankfully... putting it at a reasonable but audible high fan level knocked everything down about 7c which is great to watch.

Bottom line:
  1. Obviously I didn’t get anywhere with OC'ing yet so far
  2. I’ve now reapplied the thermal paste… i’m pretty clueless here… looked pretty thin smooth clean, but i really don’t know
  3. First obvious move is DDR3-1600 to keep up with 400MHz FSB = 3.2GHz CPU … 
    • Rats, Everest pulled meta data which indicates mobo only supports up to DDR3-1333… hmmm… sounds like I should just get an i7 or something ;)
    • mobo FSB is rated up to 1600 so ok there
    • [Update: 12 Nov 2010] Stumbled into the mobo manual <duh> for another reason, RAM modules up to DDR3-1800 are listed with immediate compatibility, and even up to DDR3-2000 is listed with O.C. disclaimers (e.g. air cooling on the RAM modules is recommended) … but the guys I read on 13 Dec 2010 below have a good point… all those RAM specs at 1600+ are only 1GB populated… so they weren’t filling up all the slots during those tests
    • i like to think the stability i saw running 10+ minutes under high utilization @ 400 MHz is promising
    • NewEgg 4GB (2 x 2GB) Search = <$100 ballpark (23 Sep 2010)
    • G.SKILL “RipJaws” DDR3-1600 with CL 7 timings = $75 (as of 13 Dec 2010, already dropped from $95 just a month ago 12 Nov 2010) … “Customer Choice Award Winner” sounds nice.
    • G.SKILL “Flare” DDR3-1800 w/CL7 timings = $140 (12 Nov 2010) … that might be fun… 433x4 = 1732 RAM freq would run nearly 3.5GHz CPU clock… would have to try 466 = 1864 just to see of course ;)  lots of helpful OC tips in the feedback for those modules … [Update: 13 Dec 2010] these seem like they’ve been discontinued… maybe they weren’t the real deal
    • [Update: 13 Dec 2010] This was a great, fresh, discussion that confirmed my suspicions and filled in a lot of holes for me… nutshell:
      • they’ve had trouble going above 1333 as well
      • they’ve been successful at 1400’ish x 4 sticks with 7-7-7-21 timings … that really doesn’t seem like much to write home about
      • and this deep tech: “A big part of getting the board stable at higher clocks was turning C1E off and setting the Load Line Calibration to Performance to combat the Vdroop and the board switching back and forth between the 6.0 and 8.0 multiplier”… I don’t know what half of those words mean
      • post#4 here was good too
      • they indicate that 2 sticks is better odds for success above 1333 … something about not “able to push enough info to all 4 slots at speeds above 1333 MHz”…
        • so you might want to go with 2 x 4GB’s rather than 4 x 2GB’s if you’re shooting for 8GB this round
        • or maybe think further ahead and get a 3 stick kit for Nehalem or presumably Sandy Bridge and just let than one stick hang loose for now… naww
        • NewEgg, G.SKILL page… 2 x 4GB with 7-8-7-24 timings are in the $200 ballpark but they top out at 1600 right now (as of 13 Dec 2010)… that’s a bummer…
        • actually there is nothing out there for 1800 with CL7 timings… so it would have to be 1600 I guess
        • so with all that, I could easily spring for the $75 1600 CL7 2 x 2GB kit and see what there is to see at 3.2 GHz… or I could always just stay put and throw everything into a 6 core Gulftown or wait and see what Sandy Bridge is all about… decisions, decisions… at least it’s good to feel more solid about where this board is at.

Considering Home Network Storage Alternatives

My current bottom line is that I’ve got a 6 x SATA ICH9R just sitting there on my main Windows 7 machine’s mobo for free so I slapped on 2 TB x 2 in RAID1, published a few shared folders and leave that machine powered on 24/7.

After everything else (optical & OS drives) I had two ports left doing nothing so the previous gen 750GB’s x 2 are in RAID0 receiving scheduled backups for a little more cheap peace of mind.

I’m hoping by the time I actually need more space, that there will be something along the lines of a 5-bay Drobo engineered around SATA 3.0 (6 Gb/s) internally and USB 3.0 (5 Gb/s!!) externally to finally give us some serious speed for that $700 price point.

My big up front consideration: NAS vs DAS
  • What’s better, a true stand alone NAS box –OR- a large/fast DAS array shared from your primary machine???
  • FOR THE HOME scenario: I always go back to preferring DAS connected to my main beefiest workstation/”home-server”
  • You get to rally the performance wagons around at least one location where you have absolute top end HDD access when you want it…
  • If you go with a NAS, you basically accept that GbE is your top end… true, even DAS RAID0 HDD configs generally level out around 100MB/s average xfer rate which is basically the GbE saturation point (1 Gb/s = 125 MB/s minus some packet overhead puts you right around 100 MB/s)… but sequential burst rates can go upwards of 300MB/s (2.4 Gb/s) … so I believe NAS over GbE could very well prevent your drives from spitting the bits as fast as they’re capable.
  • After chasing NAS box performance specs for a while you start to realize that the end game is basically spec’ing out a mid-range PC… so that’s why I can’t stop swinging back to throwing my money at the primary machine’s horsepower and just leave that powered up all the time to share files.
  • My current working scenario is based on a main machine that’s sits at the center of our home’s media universe as the do-it-all living room media player… projector, good speakers, VLC, iTunes, etc… after that, it’s a matter of streaming (primarily video) wirelessly for individual needs (internet tablet, wifey’s PC, etc)… even if I did have the luxury of hiding that main machine somewhere other than the main living space, I think I’d just roll with a cheapo networked media player (e.g. Western Digital TV) in the living room with network storage requirements still covered by the main box.
  • Invariably one wants to share a few things out on the internet as well as around the home… my config readily lends itself to accomplishing this from simple IIS Directory Browsing up to a full blown photo gallery (PHP/MySQL based zenPhoto, love it!!)… other NAS boxes (Synology, etc.) market themselves on more and more “server” oriented features, but why fuss with learning and navigating around the limitations of various embedded linux flavors when you can have the full power of your primary machine’s OS to load up all kinds of goodies?? e.g. Synology’s built in photo gallery is nice but open source is always going to be ahead of the game
  • Another consideration: you don’t hear much talk about virus checking and NAS… maybe I’m worrying about this too much but full scans are something that one must do from time to time… ok yes, most of what we’re putting out there is going to be non executable media that doesn’t require scanning… but being a developer, I’ve developed a fairly extensive library of software that I like to have on hand… it’s doesn’t add up as fast as movies but it’s substantial… and apparently even JPG’s can get viruses… the thought of scanning all those files over the wire (repeatedly) just doesn’t appeal to me.
  • I like the idea of running a reasonable database in this space… granted the optimal database drive configuration is not the same as your primary storage volume –BUT- you do still benefit from having those byte buckets near each other for backups and such
  • [29 Sep 2010] Another one hit me: We finally have full symbolic/hard-link flexibility under Windows 7 NTFS… we can cross phyiscal drives with a link, etc… this allows full granularity to choose exactly what consumes the more valuable RAID1 space but still symlink anything into the same visible folder hierarchy… e.g. a single “movie” shared folder is physically comprised of “classics” subfolder (hosted on RAID1) in addition to “unwatched” (hosted on RAID0)… Shell Link Extension makes symlinks awesomely convenient to create with Windows Explorer.
  • For the HOME sized problem: There starts to be a pile of compelling reasons in favor of connecting the physical storage to the main CPU horsepower over the highest bandwidth possible

Pertinent specs:
  • MB/s = MegaBytes per second, Mbit/s & Mb/s = MegaBits per sec, GbE = GigaBit Ethernet, Gb/s = GigaBits per sec
  • Notable NAS vendors: Synology, QNapBuffalo, LaCieHP, Acer, AsusNetGear, Cisco, ZyXEL
  • Performance rundown of many popular NAS boxes
    • RAID0 based units hold the crown – and nothing tops out much over 100MB/s read or write
    • Didn’t realize the Qnap’s were kicking so much arse
    • The NetGear seems to be the champ but she’s pricey (see my note about their X-RAID technology below under Holy Grail)
  • HD Video Streaming, minimum required bandwidth: in the ballpark of <10MB/s (per client)
    • Blu-ray spec max data transfer rate = 54 Mbit/s (~7 MB/s)
    • HD DVD spec max data transfer rate = 36 Mbit/s
The Holy Grail (at the raw storage level):
  1. Single Volume - a single logical storage pool
  2. Redundancy - at least single drive failure redundancy (with RAID 5 style efficiency)
  3. Different Size Drives – we all want to take advantage of the biggest/cheapest drive available from one year to the next

These are the only options I'm currently aware of:
  • Drobo
  • Windows Home Server
  • NeatGear has something called X-RAID2 in their ReadyNAS line that looks pretty good as well… 6 bay Pro model (empty) = $1000 street <yikes>
  • zFS - Solaris only…various OpenSolaris based versions out there… people do run it under a Windows VM with some success but seems clunky
  • BeyondRAID is like RAID 5 striping & redundancy yet with the freedom of on-the-fly swapping of any drive size
  • Pre-emptive, automatic self healing
  • Tool-less, Tray-less HDD slots
  • Sexy Health lights
  • OS X TimeMachine compatible
  • Downsides:
    • - a bit pricey (5 bay, eSata “Drobo S” = ~$700 empty!) … i feel like they’re charging about $100-$200 over average hardware for their secret sauce
    • - unfortunately it’s run of the mill speedy (60-90 MB/s over eSATA)… too bad we can’t justify the cost with some extra performance
    • - unavoidably it’s running a proprietary format in order to work its magic … the million dollar questions is: What is Drobo’s track record now that they’ve been out there a while??  Definitely need to dig up some solid reliability satistics…  If it ever does totally puke on you, you’d have to wait for a replacement unit to drop in your drives and see what’s still there… and after that, only Data Robotics Inc can possibly save you and it’ll cost you.
    • but is this really any different than RAID5?  RAID is pretty much the same vendor specific lock-in isn’t it??… if your RAID controller up and dies (for me that’d be my mobo :| … you’d have to obtain nearly identical duplicate hardware to salvage your drives… apparently you can migrate across same vendor like ICH9R –> ICH10R which does give slightly more flexibility
Windows Home Server
  • You can install PHP
  • It does run fine in a VM
  • OS X TimeMachine compatible
  • - When you add a drive you must designate it as either Storage or Backup (the Storage pool offers no redundancy)
  • - Obnoxious – there’s something whacky about how it does not balance allocation very well across available drives
  • WHS “v2” aka “Vail” due sometime 2010 (V2 is Windows 2008 based, V1 is Windows 2003 based)
  • Great AnandTech.com dissection
    • v1 was basically a fancy tack-on above NTFS - “Drive Extender was the biggest component of the secret sauce that made WHS unique from any other Microsoft OS. It was Drive Extender that abstracted the individual hard drives from the user so that the OS could present a single storage pool, and it was Drive Extender that enabled RAID-1 like file duplication on WHS v1. Drive Extender was also the most problematic component of WHS v1 however: it had to be partially rewritten for WHS Power Pack 1 after it was discovered that Drive Extender was leading to file corruption under certain situations.
    • v2 Drive Extender is now ‘below’ NTFS… proprietary block based storage… single file can/will be spread across multiple disks (“chunking”)
      • biggest downside is that you can no longer just plop a WHS drive in another server to pull files in an emergency
      • chunking means that you’re in a more RAID0 like risk category for your main storage
      • enables backup of open files… to me, Drive Extender v2 provides similar freedoms to what Volume Shadow Copy provides us elsewhere
    • Great stuff in the many comments:
      • This comment basically sums up my WHS vs Drobo question => [RE: Almost there by davepermen on Wednesday, April 28, 2010, on comment page 2] – “in storage-loss for the security, raid5 is superior. if all your data is in duplication mode on whs, it needs 2x the storage space. raid5 needs "one additional disk".” … so Drobo is more like WHS flexibility + RAID5 reliability… so they really are the only game in town and hence the price.
  • Generally accepted as a solid WHS implementation: HP Storage Works x510 (rebranded MediaSmart EX495)

Links:

Logitech S715i Portable iPod Speakers Review

My primary usage scenarios is small group biking… want something that can carry some punchy bass to nearby riders over typical road/wind noise w/o being clunky or adding too much weight (we have to hop on/off a lot of trains/stairs, etc)…

Highlights

Reviews / Links

image image P1030099-800x600  P1030100-800x600Battery NiMH 180AAHC3TMX 3.6V 1800mAh-800x600
  • Retail: $150, Street: $132
  • Released Aug 2010
  • 8 speakers! = 2 x 3” neodymium mid drivers, 2 x 1.5” neodymium tweeters, 4 x 2” passive bass
  • Rechargeable proprietary NiMh battery (highly marketed @ 8 hours)… too bad they’re not rocking a Li-ion slab… but supposedly these batts are user serviceable through a screw panel so we’ll see.
  • 3.5 lbs (perfect)
  • Standard 3.5mm AUX input (required for me)
  • Remote (worthless for me)
  • A/C wall brick
  • Travel sack

My review:
  • just gave them a test run tonight 22 Sep 2010
  • they bang pretty nice off the back bike rack
  • compared to the logitech 28mm (eBay = $30, no longer available) they are better enough to be worth $150 to me
  • iPhone compatible
  • feel solid, not as bulky as i expected
  • Battery = NiMH 180AAHC3TMX 3.6V 1800mAh (see photo)

Batteries!!  I’ve already started maxing out the battery life during our rides… we saw around 6 hours last ride… that’s not 8 hours :) … to be fair, once I turned down the volume, then the light went back green for another hour or so… but who wants low volume!?!?

So now I’m looking to hack in some Lithium rechargables like what I’ve started to experience with these CREE LED’s

I’ve already received one of these buggers to the right ($20 bux, 6 days Air Mail from Hong Kong to Germany! you gotta love the Chinese economy! :)

I plan on cannibalizing the battery box and springy cable for feeding the speakers :)  we shall see

To answer Peirre’s question in the comments: The direct battery feed is 3.6v (based on an packaged bundle of 3 x 1.2v AA NiCads in series)… but the DC charging input port is rated at 12v so there’s hurdle to get over there… I feel like we could use a fancy more expensive battery pack (like the Tekkeon’s) to drive the 12v input in a physically clean but likely power wasteful approach… I’m more inclined to fiddle around tapping the existing battery feed first and see how far I get that way.

[Update: 2012 May 05] To finish off this thread, the headlamp at the right was cheap yet very capable as a lighting solution. It was a shame to cannibalize it for the battery pack experiment. And unfortunately, while the pack and cable were physically promising, the arrangement was based on a remote switch at the light head which was not a simple circuit loop that could be shorted to be always on. It was a real bear getting the little wires soldered back to the light head after this disappointment.

Fear not. What has worked out quite practically is using a simple 18650 plastic case with wires soldered to pennies on either end to form a simple battery case with power leads. The case also provides an easy place for a spare backup battery… Or one could probably run them in parallel but I haven’t bothered. I removed the stock NiCad battery leads and spliced them to the makeshift 18650 battery pack so that it could be easily connected and removed. The makeshift battery case is too big to fit anywhere inside the original battery cavity but the built in speaker stand lends itself to use as a strap mounting point.

Actually, eBay seems to have some nice single 18650 battery cases with leads ready to go.

Untitled-5
DSC_6341-medium

Lastly, a buddy got the Bose SoundLink Bluetooth speakers and I definitely consider them another notch or two up this ladder.
Highlights:

  • $300 – this is the only downside really
  • The internal battery pack is made of no less than 3 good ol’ 18650’s! Yay! finally somebody gets it!
    • They’re rated pretty low (less than 2000mAh if memory serves)… so beyond the already good base 10 hour rating, presumably there’s some good room for improvement with solid upgrade cells, like the latest Redilast 3100mAh’s.
    • From what we could tell after getting the battery cage open (there are screws under a label), the cells appear to be bare, i.e. no protective cap chip. There’s a pretty dense logic board right after the cells so presumably it’s all well buffered from spikes.
    • I emailed the owner and he indicated $14 a piece for the naked 3100’s in qty 5 or greater.
  • Bluetooth is pretty handy with today’s devices… there’s also a standard 3.5mm AUX port.
  • A bit more sound punch for sure… very clear…
  • nice tight, well built, rectangular package that lends itself to bungee’ing to a rear bike rack, etc.
  • also, the cover can be easily removed which leaves some raised Allen screws convenient for mounting.

Firefox hangs above v3.6.3

Bottom line: run CCleaner and let it delete all your bogus registry entries… thankfully, that did the trick for me first shot <whew>.

  • I’m on Windows 7
  • I definitely have some viruses
  • Firefox stopped launching after a fiery session of whacking suspicious DLLs/EXEs sitting in my %temp% and %appdata% folders (McAfee isn’t catching them [Update: 22 Sep 2010] Thankfully, BitDefender 2011 found a rootkit and another little bugger)
  • The firefox.exe process would show up in task manager but it’s window would never show
  • I was currently running Firefox v3.6.10 and kept downgrading to see what would happen… interestingly v3.6.3 was the newest one that still worked … as of v3.6.4 no dice… even v4.0 beta 6 was hosed
  • Googling was coming up pretty blank so that’s why I’m blogging this… i did see one or two other Mozilla support forum posts that had been closed due to inactivity
  • This thread was still running so I’ve posted this resolution there, linking back here
  • I understand this isn’t really a diagnosis but more of a shotgun blast type fix… if you really care, you could whack entries one by one to find the true culprit… i saved my registry entries as a backup so theoretically i could go do that for someone that was in dire need :)

The Essence of WPF ViewModel

I think this guy (scroll down to comments) is concisely nailing the real core implementation detail of what ViewModel is all about vs old school approaches… everybody else just seems to have a bunch of “it’s great” double speak:

Another thing...
The one big paradigm shift I experienced when moving to WPF is realizing that if you front units of your business logic with DependencyObject "controllers" you can pretty much remove all codebehind in your UI. For instance imagine this common scenario:
You want to display a list of products in a category, you have a category dropdown and a products list in the UI. In your business logic, you have a method that returns a list of categories and a method that returns a dataset of products based on a category name.
Normally, you'd have to add codebehind for the form load event to populate the dropdown from the business logic, then on the slelectedindexchanged event of the dropdown etc blah blah yadda yadda.
But in WPF, you can create a DependencyObject "controller" that exposes a dependency property for the category list and the product list, implemented as observable lists. Inside this controller, you populate the category list when instantiated. Then you listen for the selected value of the category to change, at which point you populate the products list. All you have to do at that point is to databind against these properties in the UI. Its a nice pattern, and pretty easy to unit test both the UI and the controller.

Dang! these guys are all over it:

Scott - Imagine a world where any POCO could actually be represented as a control in WPF. That's what DataTemplate does for you.
To use a DataTemplate in this way, create a DataTemplate element in your Window/Application/whatever's Resources, and set the DataType to whatever type the template is for (don't specify an x:Key attribute).


The DataTemplate can have a single child, which should be some sort of control/gui object (like a Grid), and all descendants of the DataTemplate will implicitly have their DataContext set to whichever object is being templated.


Once you've done this, you can drop instances of your templated type anywhere you could normally have a control, and WPF will automagically find and apply the template.


Another way to use DataTemplates is to specify a key on them (at which point the DataType attribute becomes optional but often recommended) and then specify that resource on various properties that accept datatemplates, like the ItemTemplate property on ComboBox or the ContentTemplate property on ContentPresenter (you can use ContentPresenter in places where you'd like to refer to an existing object instead of creating a new one--for example, you could leave your settings object in the resources, and have a ContentPresenter with its Content set to that object).

MS Project 101 for Developers

(Emphasis on For Developers)
BLUF: the simple idea here is that it’s quite easy to project your aggregated Remaining Duration estimates into a quickie calendar date.
  1. capture a list of rational tasks - do an initial break down by individual screen if you don't have something else in mind... a little sub-task depth is good but don't go too deep at first... in typical software architecture, program functions and/or database objects are good candidates.
  2. then spend a little time throwing out a rough estimate for each task… don't get too hung up on accuracy here
    • leverage the out of body experience by pretending you’re not the guy that’s gotta do all this work
    • it can be sorta fun in a twisted way and a surprisingly worthwhile organizational moment if you’re lighthearted about it
  3. fully expand your outline (Project > Outline > Show > All Subtasks)
  4. select all your tasks from top to bottom…
  5. and link them together (Edit > Link Tasks [Ctrl+F2])
  6. in the normal task grid, make sure you have the columns: Duration, % Completion and Remaining Duration (right click a column header > Insert Column)
  7. fill out the % Completion numbers as best you can
    • as you’re doing so, the Remaining Duration for each task will go down accordingly
  8. use sub-task nesting to create a task nodes with automatically summed Remaining Duration totals which represent your Milestones du jour
  9. and then use Business Day Calculator > Add Business Days to project some quick and dirty milestone completion dates to talk to
  • to me this approach can give you something reasonably concrete to talk to in an hour
  • there becomes some "safety in numbers" here... it's harder for someone to throw out the timeline w/o somehow acknowledging the existing one
  • you can print out your task list and a pretty Gantt chart for a little more razzle dazzle than empty hand waving
  • you can back yourself up at the next review by working the old estimates to correspond with actuals

Misc notes:
  • The different kinds of Percent Complete
    • % Complete - deals with time
    • % Work Complete - deals with man-hours
    • % Physical Complete - deals with physical progress (link) … in Development land “physical” of course gets very abstract and therefore makes it fun deciding where to draw the line on what is the smallest "thing" be a trackable task – but for example: screens, stored procedures, classes are granular enough “physical” things typical worthy of tracking completion.

CREE LED Based Bicycle Lights and Rechargeable Lithium Ion Batteries

References:



image
My first time up at bat was a CREE Q5 bike light: 5 mode, rated at 345 lumens = $17.50 w/shipping
Mini review: just charged up the batteries and tried the new Q5 345Lm torch… it’s pretty flippin nice for <$25!… very intense center spotlight, but also a lot of wide spread to light up a full trail in the dark… looks like a winner!

Untitled-2
[Update 09 Mar 2011]
CREE T6 seems to be latest/greatest , 750Lm T6 = ~$30 w/shipping
CREE R5 *might* be a slightly better bang/buck bargain, 600Lm R5 = ~$20 w/shipping

** careful, there appears to be a regularly advertised bogus 800Lm R5 that is actually a Q5 (which might still be pretty good :) many of the auctions of these mention Q5 in the package contents image
image According to Torchy’s 18650 battery tests, at 1A load, *everything* drops off well before 3000mAH.
  • SenyBor, Panasonic, Sanyo & Samsung rated the best… unfortunately they’re much less prevalent on eBay and are more like $10+ per battery rather than ~$5 like all the UltraFire fodder out there
  • Apparently UltraFire’s *never* perform up to their advertised rating… bummer, UltraFire’s cheap & prevalent 3000 & 4000mAh were particularly lousy
  • Another top end brand is “AW”, Protected “true” 2600mAh = ~$17 per (ouch)

Before I knew this, I got a simple charger combo with 3600mAh UltraFire’s 18650 x 2 = $19 w/shipping, so far so good
image
Another big battery test rundownRediLast appear to be top notch$17 per 2900mAh cell (ouchy) + $6 USPS Priority shipping … I ordered 4 of these… we shall see…
image
Another 18650 Shootout:… The UltraFire 3000 Protected (Red/Silver) does uncharacteristically well on his test???
image
Untitled-4 I picked up a couple of these 360 degree Handlebar mounts for $5.25 ea w/shipping… found some more for $2.43 w/ship… they’re worth every penny

Mini review: The ones like this with 360 rotating feature are harder to find, very necessary for aiming the light from my “long horn” beach cruiser style handlebars.  This item feels real good in actual usage, definitely recommended… made of a very flexible rubbery plastic, soft enough that I added a washer to both ends of the tightening bolt so that the bolt heads didn't just cut right through… the good thing is, after several trips in ~5C German weather, I can tell that this material will never shatter like so many others.

Notes: