/* BeejBlog */

TapeAndMedia.com

I found their service to have a refreshingly personal touch… prices are the lowest… I would highly recommend them for all your blank media needs… i don’t know them or have any affiliations with them… i was just impressed with their service so much that i had to write it down somewhere

Free iTunes Album Cover Artwork + Embed Artwork Image to MP3 via iTunes COM API SDK w/JavaScript

Misc Notes:
  • Given: iTunes has some pretty high quality cover art for many albums (all images are standard 600 x 600 pixels).
  • The basic trick here is that you can sign up for a free iTunes account (without providing any credit card or other personal info)…
  • And use that account to download the cover artwork for free.
  • Then run my script which will automate iTunes to extract the cover from iTunes’ special stash and save it as a real local image file
  • -AND- then embed that image back into the MP3 file so that it stays with the MP3 file no matter where it gets transferred.
  • The iTunes API is clean, the .CHM based API document that comes with the SDK is easy to navigate and is readily understandable… this really opens a lot of possibility with some quick javascript.
  • Note: if you’re experiencing the kind of trouble where the MP3 tag changes simply don’t take no matter what you do, try entirely wiping out the existing tags and start from scratch… for me, the “APE” metatag format always seemed to be a culprit (vs. “ID3” which is much more common)
  • MP3Tag is an excellent tool for bulk tag cleanup efforts like this… tons of good wizard driven actions you can perform on mp3 files names & tags… remove string, mixed case conversion, etc.
  • Standard list of iTunes genres for handy reference
  • Image size increasing MP3 size – if you’re trying to cram your music on a smart phone this could matter and I was asked about it.  Taking a quick random sampling of my covers I saw from 50k to 80k per 600 x 600 pixel JPG artwork added to each file.  Rounding up to 100k and assuming an average of 4MB’s per MP3 means for every 40 MP3’s you’re adding the size of an additional MP3 to your library.  A 16GB SSD would hold ~4 thousand MP3’s… adding images would knock that down by ~100.

Steps:
  1. Follow steps below to create free iTunes account… thus providing free artwork download capability
  2. in iTunes press CTRL-A to select all your tracks
    • now ONLY IF YOU WANT TO REPLACE all your existing artwork with iTunes covers... with your entire library selected in iTunes, right mouse and select “Get Info”, and then check the box next to the blank cover image and hit OK, this will clear the artwork from all your MP3 files!  Make sure you save any of the ones you care to keep ahead of time. It will take quite a while to complete that wipe, of course depending on the size of your library.
  3. Right-mouse and select “Get Album Artwork” - this will download covers for every MP3 file that doesn’t already have artwork embedded in the file. `
  4. Now run my script from CMD.EXE
    1. cscript EmbediTunesDLArtwork.js
    2. I’ll be honest, a handful of albums always proved stubborn, the scripted image embedding simply wouldn’t take for no apparent reasons, no errors… just had to do those few by hand.
  5. That’s basically it, go have a look!

Enjoy!

EmbediTunesDLArtwork.js
  1. var tracks = WScript.CreateObject("iTunes.Application").LibraryPlaylist.Tracks;
  2. var fso = WScript.CreateObject("Scripting.FileSystemObject");
  3. WScript.Echo("Tracks to analyze: " + tracks.Count);
  4. forEach(tracks, function (track)
  5. {
  6.   if (track.Kind == 1 && track.VideoKind == 0)
  7.   {
  8.     //"VideoKind: " + track.VideoKind + ", Kind: " + track.Kind + ", KindAsString: " + track.KindAsString +
  9.     //"Index: " + track.Index + ", PlayOrderIndex : " + track.PlayOrderIndex +
  10.     /* uncomment to collect missing artwork into a big group that's easily grouped together in the iTunes GUI by sorting on the "Show" column header
  11.     if (track.Artwork.Count == 0)
  12.     {
  13.     track.Show = "!!missing artwork!!";
  14.     WScript.Echo("Missing artwork - Artist: " + track.Artist + ", Album: " + track.Album + ", Name: " + track.Name);
  15.     }
  16.     continue;
  17.     */
  18.     //now for all downloaded artwork, save it to an image file and then write it back into the mp3 file so that we're free to carry music with artwork out of iTunes
  19.     var AlbumFolderName = fso.GetParentFolderName(track.Location) + "\\";
  20.     forEach(track.Artwork, function (art)
  21.     {
  22.       //debug:WScript.Echo("  IsDownloadedArtwork: " + art.IsDownloadedArtwork + ", Format: " + art.Format + ", Description: " + art.Description);
  23.       var AlbumArtworkFullPath = AlbumFolderName + track.Album.replace(new RegExp("[:?$/\@*]", "g"), ".") + ArtworkFormatAsString(art.Format);
  24.       if (art.IsDownloadedArtwork)
  25.       {
  26.         try
  27.         {
  28.           if (!fso.FileExists(AlbumArtworkFullPath))
  29.           {
  30.             WScript.Echo("*** Saving Art to file: " + AlbumArtworkFullPath + " ***");
  31.             art.SaveArtworkToFile(AlbumArtworkFullPath);
  32.           }
  33.           WScript.Echo("    Saving art to MP3: " + track.Location);
  34.           art.SetArtworkFromFile(AlbumArtworkFullPath);
  35.         }
  36.         catch (ex)
  37.         {
  38.           WScript.Echo("        Error: " + ex.message);
  39.         }
  40.       }
  41.     });
  42.   }
  43. });
  44. function ArtworkFormatAsString(format)
  45. {
  46.   switch (format)
  47.   {
  48.     case 0: return (".unk"); break;
  49.     case 1: return (".jpg"); break;
  50.     case 2: return (".png"); break;
  51.     case 3: return (".bmp"); break;
  52.   }
  53. }
  54.  
  55. function forEach(enumerable, delegate)
  56. {
  57.   for (var enumerator = new Enumerator(enumerable); !enumerator.atEnd(); enumerator.moveNext())
  58.   {
  59.     delegate(enumerator.item());
  60.   }
  61. }


Register for free iTunes account:
Enter iTunes App Store Select “Free Apps” (currently in lower right page gutter) image
Select “Free App” image
Create New Account image
Continue image
Accept & Continue image
Enter Personal Info and Continue image
This is the big enchilada… Select “None” for payment type. Note: this option only shows up when you start by selecting a free download. image
Done image
Confirm the verification eMail via embedded link image
Pop the little iTunes download thingy and sign in <finally> image image
If all has gone according to plan… you should be greeted with this pleasantry You now have an album art download capable yet free iTunes account :) image

Hacking ATI x1300 into Mac OS X (Latest = Snow Leopard v10.6.8)

[Update: 2012 March 29] A commenter has his 7146 X1300 running Lion via EvoEnabler and no other mods… if you have a x1300 card that’s not cooperating with Lion, it would be interesting to try patching your bios to report a 7146 deviceid and see what happens… see the related comments below for links to corresponding tools.

[Update: 2011 Sep 3] See here for my successful transition to cheap, fanless, 3 Display capable replacement for the x1300.

Here are the main tweaks in a nutshell (“S/L/E” = System / Library / Extensions path on your OSX system drive):
  • S/L/E/ATI1300Controller.kext (this yielded proper resolution and dual display)
    • info.plist: replace 7187 with 7183
  • S/L/E/ATIRadeonX1000.kext (this enabled QE/CI … it sure is nice to see that dashboard ripple the first time! :)
    • info.plist: replace 7187 with 7183
    • MacOS/ATIRadeonX1000: replace HEX 8771 with 8371 (these are the reverse hex thingy)
  • \Extra\com.apple.Boot.plist (This is absolutely crucial, it's what signals Chameleon to invoke it's magic ATI juju, this file changes to org.chameleon.Boot.plist in Chameleon 2.0 RC5)
      <key>GraphicsEnabler</key>
      <string>Yes</string>

Further info on ATIRadeonX1000.kext/MacOS/ATIRadeonX1000:
  • it’s key to look for 81 FA prior to 87 71 (explanation here)
  • V10.6.3 upgrade: offsets => 2D58F, B0C65
  • v10.6.4 upgrade: offsets => 2D3BF, B0FEF
  • v10.6.6 upgrade: offsets => 2D363, B1185
  • v10.6.7 upgrade: offsets => (exactly same as v10.6.6)
  • v10.6.8 upgrade: offsets => 2E26F & B2A27 … I required EvoEnabler.kext in addition this time around… find it on www.kexts.com: … look for the ones pre-patched for X1000 series, then replace the framebuffer string (typically “Alopias” or “Wormy”) with “Sphyrna” (dual link DVI) or “Caretta” (single link DVI) which apparently are the framebuffers compatible with our RV516 card and still supported in 10.6.8+.

Lion
  • v10.7.0 - ATI1300Controller.kext works as usual and readily provides full res… but unfortunately QE/CI via ATIRadeonX1000 is proving more difficult… there’s 4 possible hits on 8771 in ATIRadeonX1000, but none of them are prefixed with our tried and true "cmp edx, 7187h" = "81 FA 87 71" … the bytes @B3B6A look promising with “81 F9” prefix, which would presumably be a very similar opcode, like cmp ecx… but I got an instant KP when patched that way and kextload’ed… would of course love to hear anyone else getting this to work ... Lion looks nice, we finally get re-size grab handles on all sides/corners of a window (just like Windows)… and the little trick where it’ll reload everything back up after a reboot is kind of cool too.

Full Disclosure… These are the other tweaks in play on my Hackintosh:
  • DSDT.aml –
  • Bootloader -
    • PC-EFI v10.6 (Tony Mac’s handy install package)
    • [Update: 2011 Aug 10] I’m currently running v10.6.8 & 10.7 via Chameleon 2.0 RC5 r1329 patched by Azimutz as described here
      • Lion requires some new magic bits only found in new booters like Cham2RC5 (friendly UI installer pkg’s here; fresh binary-only auto-builds here).
      • Note: Cham2RC5 changes the com.apple.Boot.plist standard to org.chameleon.Boot.plist
      • One key thing to keep in mind is that once you get an RCx of Chameleon installed via friendly package, one generally need copy only a new “/boot” file of a more recent build… all the other bits (seem to) stay the same until you hit another major RCy milestone.
      • The next hurdle one with our kind of “legacy” ATI video card runs into is that the Chameleon team has decided to cast off the "legacy" bits that were keeping our little x1300 in the game thus far :(, presumably so they can maintain a more nimble code base going forward … can’t say I blame them.
      • FORTUNATELY, Azimutz, has taken it upon himself to resurrect our legacy bits in new form… the way I interpret that post, Azimutz is piggybacking an existing chameleon “plug-in” approach that runs via a new “/Extras/Modules” folder…in our case, we toss in a binary named “ATIGraphicsEnabler.dylib” which represents the missing bits of our wayward card.  Make sure when Azimutz gives you back your new binary, that you take note of which .dylib, AMD or ATI, that' he actually compiles your specific DevID into. I missed that at first… nice thing is, you can simply hex edit to see where yours is… use the source code as your guide :)
      • Azimutz is really doing some serious community service… He is literally taking requests for missing DevID’s and feeding the huddled masses with daily builds!  What a guy!!!
      • I submitted the specific details of this x1300 and Azimutz got back to me with a new binary in less than a day!!
      • NOTE: You must be logged in to see the link for the latest binary download zip file!!!  Then, you’ll find a link like “i386_r1223_a.zip” at the VERY bottom of Azimutz’ first post, just above his sig block… otherwise, the link is totally missing and not called out in any way... this totally threw me at first!! :)
Terminal: kextstat | grep ATI
(note, contrary to Eric’s feedback on 29 Jan 2011, ATISupport is loaded)
    69 2 0x5dfa5000 0x32000 0x31000 com.apple.kext.ATISupport (6.2.6) <68 14 13 7 5 4 3 1>
    81 0 0x5e0dd000 0x21000 0x20000 com.apple.kext.ATI1300Controller (6.2.6) <69 68 14 13 5 4 3 1>
    86 0 0x5e32b000 0x5b000 0x5a000 com.apple.ATIRadeonX1000 (6.2.6) <82 68 14 7 6 5 4 3 1>
    91 0 0x5e286000 0x13000 0x12000 com.apple.kext.ATIFramebuffer (6.2.6) <69 68 14 13 7 5 4 3 1>

My Hardware:
Mobo: ASUS P5E3 Premium WiFi @N
Video: Dell JJ461 Low Profile ATI x1300 Pro, 256MB DDR2, PCI-E 1.0 x16, Dev ID: 0x7183, GPU: RV516
Displays: 24” LCD: Soyo PrivĂ© Topaz LC MT-GW-PRLM24D4
Projector: Epson PowerLite Home Cinema 720

Misc Notes:
  • SL = Snow Leopard from here on out
  • KP = Kernel Panic
  • QE/CI = Quartz Extreme / Core Image
  • S/L/E = System / Library / Extensions path on your OSX system drive.
  • E/E = Extra / Extensions path (comes into play with bootloaders like Chameleon or PC-EFI)
  • Since there are scores of full blown install guides, I am just focusing on some pertinent observations during my little adventure to get an ATI x1300 Pro running under SL
  • I ran down every lead I could find to get my Sapphire ATI Radeon 3870 HD fully working with QE/CI.
    • The ATI 3870 is a really bad example of how narrow the OS X hardware compatibility path can be…
    • it’s still a very beefy card by any means…
    • and there are actually Mac specific 3870’s that obviously work fine
    • but the run of the mill PC-only ATI 3870 is an absolute no go
    • many have tried… best explanation I’ve read is that the PC version’s ROM space is 64k vs. 128k in the Mac version.
  • The funny thing is, I notice no difference between the ATI X1300 and the ATI 3870 for my actual usage…
    • I found this X1300 card on eBay for only $31!!
    • And it works like a champ in both OS X and Win 7 (obviously I’m not a gamer :)
    • Full QE/CI does indeed work in OSX with no mouse tearing or any other known downsides
    • Aero runs perfectly in Win 7
    • AVI, MOV, MKV videos play great in VLC on both sides
    • It’s fanless (literally silent)
    • I’m kicking myself for going with the noisy, expensive ATI 3870 in the first place! Boy was I wrong about my video hardware requirements.
    • [Update: 30 Jun 2010] Ok so Photoshop CS5 is way cool (try the new “Refine Edge” button under the Quick Selection Tool, they’ve amazingly solved the classic carving-out-hair-from-a-background problem) … anyway, PS CS5 barked at me about a few things it wasn’t going to manage in 3D mode with the AT X1300… and some other motions were a little more pokey than i’d like… so there is some reason to miss my beefier card.
    • [Update: 14 Jul 2010] Loaded the latest ATI drivers (duh) and Photoshop CS5 was then happy with all the OpenGL bits it was previously missing… so the little ATI x1300 really is all I need. [Upate: 28 Oct 2010] Actually, enabling hardware acceleration in Photoshop wasn’t quite as easy as I originally thought.
    • [Update: 01 Feb 2011] Photoshop CS5 on the Mac side has no such issues recognizing this card.
    • [Update: 12 Aug 2011] CS5 under Win7 64bit behaved properly straight away.
  • My main objective was iMovie which requires QE/CI.
  • Twin DVI displays are functioning at full resolution (see SwitchResX comments below).  My x1300 has a “DMS-59” connector which is split into two standard independent DVI connectors via a Y-cable.  Primary DVI is connected to my LCD and the secondary DVI is adapted to HDMI for my projector.
    • for some cazy reason the settings for each display were flipped!?! the projector thought it was the LCD and vice versa… nothing helped…
    • so i used SwitchResX to copy the low level settings from each display and apply them to the other… amazingly that worked great… i can’t change resolutions very conveniently, but i don’t care to anyway.
  • One soon realizes the key to this silly game is rapid reboots… eliminate everything that delays seeing the result of another attempt… because you have to be ready for a TON of trial and error here… SSD’s help!! :)
  • ***Crucial** - Make sure to have something like MacDrive at the ready (see “Handy Utils” below)… one often needs to back out an errant configuration change… accessing your Mac’s system drive from a running Windows environment is one convenient way… make sure to type in “-f” when Chameleon comes up to ignore the previously built kext cache and rebuild based on currently present kexts.
  • I liked the BootCD based guide at: http://tonymacx86.blogspot.com/2009/12/install-os-x-snow-leopard-directly-from.html
  • [Update: 29 Oct 2010] TonyMac has been busy… these are the latest recommended guides for streamlined install and the iBoot
    • but I sure am glad I saved my old iBoot-ATI-10 image!!!
the new iBoots are running on recent builds of a branch of Chameleon 2.0 RC5 called “Chimera”… see my RC5 notes above, we need to hack our legacy bits back in to even get booted into iBoot/Chameleon now... so it's nice to still have an old iBoot handy that "just works" in a pinch
  • This is also a really good no-nonsense run through of all the pertinent points.
    • Noteworthy: SL has a new mkext location, different from Leopard.

  • Handy Utils:
    • 0xED (Mac) – Is your friend when it comes to making the necessary HEX code changes to .kext files (aka “binary or bin editing”)
    • Cygnus Hex Editor (Win) – This is what I use for bin editing under Windows, anything will do.  In Cygnus, make sure you remember to turn off “insert” mode when twiddling bytes… inserting a byte is way different than changing one :)
    • plist Editor (Win)– Windows doesn’t have a native xml value editor like Mac for editing files like info.plist’s… this one is free. But again, pretty much anything will do for these minimal edits, including good ol’ notepad.
    • Kext Helper b7 (Mac) – Good stuff, but hangs up on me after it’s done, it doesn’t quit cleanly, always had to “force quit”… anybody know a more stable alternative???
    • Console (Mac) – find under Applications > Utility 
      • Select the “System.log” – my experience was that Snow Leo would immediately attempt to load new .kexts as soon as they were installed by Kext Helper… reboots still seem necessary to realize the full effect of a new kext… but by watching the system.log, I got immediate feedback if the kexts just installed ran into some kind of error… i.e. you save on some reboots, crucial to this process!!… e.g. “kernel type blah blah” message immediately made me realize I was in 64bit kernel mode and some kexts I was toying with (ATIInject perhaps) were apparently 32bit only.
    • SwitchResX (Mac) – This is what allowed me to get my dual display settings working… see notes under AT1300Controller.kext above
    • Paragon NTFS – only NTFS solution I’ve found so far to work under Lion… unfortunately it’s not free but $20 is very reasonable
    • SL-NTFS – NTFSMounter wasn’t cooperating for me any more under v10.6.8… SL-NTFS is slightly slicker with a prefpane and most importantly, it worked :) Rats, the guy supporting SL-NTFS stopped as of 10.6.8
    • NTFSMounter (Mac) – SL finally has the native ability to WRITE to NTFS. It’s disabled by default (not the most confidence inspiring ;)  I have gotten a few CHKDSK pops when rebooting into Windows 7 after writing to the Windows main system drive but there were never any actual issues in the output… over time I’ve settled comfortably into writing to non-system NTFS drives from OSX or simply waiting ‘til I boot back into Windows and copying pending files over from my HFS drive via MacDrive.
    • MacDrive (Win) – This is great.  Perfectly clean access to your Mac drives from Windows.
    • DSDT Patcher GUI (Mac) – I generated my DSDT.aml and dropped it in the root folder of my Mac system drive… this seemed to eliminate an “AppleUSBUHCI” error I’d see in the flurry of messages during verbose boot.



      Unrelated:
      For my own reference… to see drives connected to the mobo’s Intel Matrix RAID controller (ICH9R) under RAID mode:
      • AppleAHCIPort.kext > info.plist > IOPCIPrimaryMatch: replace 0x3A228086 with ox28228086
      Note: as has been well documented, there are no drivers currently (nor planned??) which fully support the Intel Matrix RAID functionality (aka Intel “Rapid Storage Technology”) under OSX.  However, non RAID –and- RAID 1 volumes connected in to this controller in RAID mode do work just fine (with this little coaxing)… you obviously only want to access your RAID 1 drives in read-only mode since the Mac simply sees them as two distinct drives and any writes to either drive would immediately invalidate the mirror, perhaps to dire consequences.
      [Update: 2011 July 26] I finally went with a cheap HighPoint RAID1 card that has Mac as well as windows drivers… I love it!!

      Word of the Day - Austere

      Adjective: austere
      1. Severely simple
      2. Of a stern or strict bearing or demeanor; forbidding in aspect
           "an austere expression"
      3. Practicing great self-denial
           "a desert nomad's austere life"

      Portable Air Compressor - Dust Out Your PC In Style :)

    • These lists quickly set my bearings on what’s out there in my low end interest bracket:
      00919224000 I found the Bostitch Model# CAP1516 to be an obvious choice based on features, price & ratings
      • + it gets consistently good reviews
      • + excellent price: $80 street
      • + low end weight as far as these buggers go: 20lbs
      • + good air flow @ good psi: 1.8 CFM @ 90 PSI (6.2) bar which is plenty to blast your components with … it actually maxes at 120 PSI (8 bar)
      • + i like the protection the hood provides which is fairly unique if you look around
      • + the built in gauge and regulator are nice
      • - no accessories included – however the 1/4” quick release is VERY standard and easily accessorized… and we don’t lose any extra cost on junky accessories
      • -  challenging to mount water trap – unfortunately the protective hood wraps around the outie such that we can’t hang a typical trap right there (see trap photo below)… i am going to make due with mounting mine on the inside of the hood… there is a 1/4” threaded junction point with decent room to hang something right next to the air tank… the trap will take a while to fill up, you’ll know when it’s time when you see the water and the hood is easily removed… with a little work I might even widen a potential access hole on the undercarriage.
    • Recommended accessories:
      • Hose - $13
      • Attachments & Fittings - $28
      • Water Trap - $20
        • ESPECIALLY IMPORTANT IF YOU PLAN ON HOSING DOWN DELICATE ELECTRONICS … it’s a well known fact that compressing air also compresses the humidity in the air … this ultimately results in spraying a fine mist of water all over your subject if not otherwise accounted for… honestly a little bit probably wouldn’t kill something immediately but it’s jut not the kind of thing you want to be subjecting your precious toys to on a regular basis
      41P2JBVEZXL._SL500_AA280_ 51RKJN1S99L._SS500_ 21aTdJHJfPL._SL500_AA200_

    • BuckyBalls

      20% off promo code: BUCKFRIEND

      buckyballs_photo_one2   buckyballs_photo_two

      MadCon – Soulicious Norwegian Hip Hop <who knew?!?>

      These guys are awesome!  Thank goodness I stumble on this stuff so late so they’ve had time to cough up 3 albums!!  (2004, 2008, 2009)

      “What If” is my favorite song so far.

       coverMadcon - So Dark The Con Man_F An InCONvenient Truth