Microsoft PowerPivot
iaian7 » blog John Einselen, 12.11.09Normally I wouldn’t give Microsoft the time of day, nor would I even know about plugins for Excel 2010. But I happen to work on a lot of Microsoft projects, and I just so happen to be the lead artist on a series of PowerPivot videos (yes, there is still more coming!).
I’ve actually been holding on to the news for several months now, waiting anxiously for approval to publish the results of a very, very tight deadline. At long last; not only has the first video been posted to YouTube and Vimeo (visit! rate! love!), but I wrote two articles covering workflow development and effects for the series. They’re both in the After Effects tutorials section above: Lipsyncing with Papagayo helps explain the character animation process (along with a custom OSX Widget I wrote for translating lipsync files into keyframes), and Dynamic Paper Cutouts details how the torn and crumpled characters were generated on the fly during compositing.
bookmark
Trailers
iaian7 » blog John Einselen, 2.11.09It’s been far too long since I posted movie trailers. In part, I’d like to say, because of the lacklustre performance of recent storytellers. I have no interest in a movie where Jessica Alba plays a woman unable to get a date for Valentine’s Day. Really, it’s not even funny, the woman can’t act. The latest Robert Zemekis abomination even stars Jim Carrey; barely palatable when he’s not a pointlessly-CG old man playing Scrooge. Nor do I, in a particularly twisted piece of irony, want any part in promoting a disaster film that appears to be one long VFX shot set in the year 2012. There may be people in there somewhere, but they’re hard to see, and I doubt anyone cares if they’re saying anything. Apparently watching a digital California crumble into the ocean is more important than a good story. On second thought, I’ll probably watch that. I hated LA.
(no offence to my friends that live in CA, of course, nor any future employers located there; who I am sure are awesome enough I can brave unbearable heat and deadened landscapes without so much as a whimper of despair!)
The other part of the blame, of course, rests with me. I missed a few cool trailers in the past few months, such as Daybreakers (Sam Neil is a vampire, and so is most of earth’s population), Zombieland (America’s own Shaun of the Dead cult classic), and The Men Who Stare at Goats (George Clooney, Jeff Bridges, Ewan McGregor, and Kevin Spacey all in one film!).
Anyway, there are a two trailers that caught my eye this week. First up is a new trailer for Prince of Persia. I normally wouldn’t give this much more than a cursory glance, but the Prince of Persia series (on the original Xbox) is one of the few xbox games I’ve ever owned. Sure, I love a good game of Halo with friends, but on my own? It’s pretty much the only console title to ever hold my attention. Back in 2004, it was, well, kinda beautiful! And now? It’s going to be a film. Don’t get me wrong, that’s usually a horrific proposition, but Prince of Persia should have some decent story arcs to play off of, and given some good writers, the right actors, and action packed cinematography, it could pull off a feat that no one has, to the best of my knowledge, pulled off before; a decent film based on a computer game. Unfortunately, I do have a lot of issues with the cast. Somehow they skipped a thousand actors better suited for the role, and hired Jake Gyllenhaal as the lead. Sir Ben Kingsley is even deplorably typecast as a bad guy. But it’s sometimes hard to tell how things will come together based only on the trailer; can’t say this will actually pull through, but I’m hoping it’s cool.
DreamWorks films are hardly a shining example of animation or even basic film making – compared to Pixar (the end-all/be-all of good storytelling … and they’re pretty good at 3D animation too), the films from DreamWorks Animation just don’t measure up. Maybe they’re not quite as family friendly, maybe the animation quality isn’t as good, maybe the story isn’t worthwhile, maybe they’re just dumber … usually it’s all of those issues and more. Of course, any diatribe of mine against Dreamworks must be prefaced with an acknowledgement that I really liked Shrek. Yes, it had many of the aforementioned issues, but I found myself identifying personally with the whole pretty/ugly dichotomy (probably why I loved Hellboy so much as well!). I enjoyed it enough that I even like the second film a little. And to be very honest, I did watch Kung Fu Panda. Not a great film, but the character rigging really stood out – as someone who’s done 3D for a wee bit of time, good character TDs are unsung heroes.
Well, enough of that, and now that my soap box is handily stowed away in an easily retrievable location, I can finally get to the trailer for How To Train Your Dragon. A DreamWorks film I may not hate! It’s written and directed by some of the same people that did Lilo and Stitch, not a favourite movie of mine, but strangely charming. I’m hoping we get something similar from this film – a little odd, just enough quirkiness to be endearing. I’m actually looking forward to how this turns out! Be it the dragon design (more unique than most, I would say, even cat-like), the overly dry comedic delivery (heck, Craig Ferguson is involved, clearly recognisable in the trailer!), or the wetter, grayer palettes employed by the look department. Of course, it’s also being made for stereoscopic projection. That’s a whole other diatribe, and there’s just not the time. At least, not right now. Maybe the next blog post.
For now, let me know your thoughts in the comments!
P.o.Persia looks like quite a treat for the eyes, story notwithstanding. I in particular fancy the 80’s reflective chrome Syd Mead revival-esque titles myself. =]
bookmark
Apple's Colour Picker
iaian7 » blog John Einselen, 19.10.09I have had a seemingly long and sordid history with digital colour calibration. Back in college it was all about matching print output. Then it was web-safe (as in not web-safe). Then video chromaticity, gamma values, and black level IRE. Now I’m just constantly screwed by Apple and the OSX colour picker – it’s perfectly simple, has an easy to use colour swatch system, and … never keeps the right colour values. Ever.
In Lightwave, if I select a colour with a hue of 30 degrees, saturation and value set at 50%, next time I open it in the OSX colour picker? It’s a degree off, and perhaps 7% darker. Inexplicable. Same thing happens in Apple’s own developer tools, albeit without opening the colour picker at all – just by editing an element’s width or height in Dashcode, for example, can cause the object colours to: darken, skew, desaturate, and, if you have an alpha value selected, slowly fade into oblivion. It’s maddening I tell you!
What’s worse, Snow Leopard apparently is expanding colour management issues to inconsistently do the same thing to random UI elements. Such as the dock icons, which are now a pale imitation of their former glory, while still showing up in full vibrancy when viewed in a finder window. Utterly inexcusable.
It’s truly a bad position for Apple, as they have typically catered to those with keen eyes for colour – with colour management and ICC profiling built into the very OS, you’d think this the type of thing that wouldn’t happen. I’ve always loved the monitor calibration utility, but I have serious doubts as to how it’s affecting colour values across the board.
Yet, (and perhaps this is the mark of a sold-out fanboy) even with all these issues – the OSX colour picker is pretty dang helpful, if only because it is ubiquitous. I don’t trust it like I used to, but there are some plugins and tools that can make it, perhaps, useful again.
From Panic software, there’s the Developer Color Picker for easy copying of values for any number of Apple development tools (including full declarations for HTML or CSS code). There’s also the HEXcolorpicker for simpler HTML and CSS styling. You can even get Kuler integration with Mondrianum, which lets you load and browse colour schemes created with the online Adobe tool.
Mac OS X Hints posted an article recently detailing the simple steps needed to make the system colour picker into a standalone application. Especially useful when picking colours, as you’re able to use the magnifier icon to select any pixel value from, well, anywhere on your screen!
There are plenty of other plugins are out there, let me know if there’s something I should add to the list above.
bookmark
Alphanumeric sorting
iaian7 » blog John Einselen, 8.10.09I came across a dark realisation last month – Javascript sorts lexicographically, not alphanumerically. After days of failed attempts and scouring the web for snippets, I finally came up with my own solution.
The first few lines are designed to prep results from an OS X file array (quite useful for developing Dashboard widgets in Dashcode!), but can be easily modified for other situations. The most important part to note is the .split(/(\d+)/)
regular expression. This both splits and returns the string at every numeric section, giving us an array of alpha and numeric chunks. Each chunk is then compared; if one is greater or less than the other, the function returns the sorted value. If not, it keeps on checking to the end of (in this case) the file name. Not only does it allow for very specific alphanumeric sorting, but easily customizable results as well. For example, OSX places file names with a longer alphabetical string at the end before those with the same, but shorter, titles. This script accurately mimics the same behaviour.
function sortAlphaNum(a, b) { var x = a.split("/"); var y = b.split("/"); x = x[x.length-1].replace(/\\\s/g," ").split(/(\d+)/); // the split formatting is imperative, everything else can change y = y[y.length-1].replace(/\\\s/g," ").split(/(\d+)/); // the split formatting is imperative, everything else can change for (var i in x) { if (x[i] && !y[i] || isFinite(x[i]) && !isFinite(y[i])) { return -1; } else if (!x[i] && y[i] || !isFinite(y[i]) && isFinite(y[i])) { return 1; } else if (!isFinite(x[i]) && !isFinite(y[i])) { x[i] = x[i].toLowerCase(); y[i] = y[i].toLowerCase(); if (x[i] < y[i]) return -1; if (x[i] > y[i]) return 1; } else { x[i] = parseFloat(x[i]); y[i] = parseFloat(y[i]); if (x[i] < y[i]) return -1; if (x[i] > y[i]) return 1; } } return 0; }
Lastly, we ask Javascript to sort an array using the above function, like so:
array = array.sort(sortAlphaNum);
Let me know if you use this in any projects, I’d love to know!
bookmark
Widget.System Limitations
iaian7 » blog John Einselen, 26.09.09Development of the Chroma dashboard widget has been moving along nicely, but I hit a pretty catastrophic error today; the library file was getting truncated. A lot of changes have been made recently to the formatting of the data, so the most plausible culprit was myself. Surely, somewhere in the reading, modifying, and writing back to the library file via command line interface, I’d screwed something up.
After 4 hours trying innumerable possibilities, hacks, tests, and workarounds (all of them failed), I discovered it wasn’t me at all; my macbook was limiting the outputString
from widget.system
to 4096 bytes. What truly makes this bizarre is that the Mac Pro at work does not have this same limitation, and they’re both Intel 64bit processors running the same version of OS X. I still don’t know how this is even happening; most online sources claim running widget.system asynchronously removes the limits. Well, I now have plenty of proof that says otherwise!
The good news? I finally worked out a solution. Using the myCommand.onreadoutput function, I was able to add each block of 4096 bytes back into a full length javascript string. Perhaps not the most elegant solution, but should work across all systems.
var libString = ""; var commandString = "cat /directory/file.txt"; function getLibrary(event) { var myCommand = widget.system(commandString, processLibrary); myCommand.onreadoutput = processLibraryConcat; } function processLibraryConcat(event) { libString = libString+event; } function processLibrary(event) { // library processing should use libString (full length output) // instead of event.outputString (truncated to 4096 bytes) }
bookmark
Dashboard Development
iaian7 » blog John Einselen, 14.09.09Last summer I had been working on a project that required a rather large amount of lipsync animation in a short amount of time, and developed a workflow involving Papagayo, Lightwave endomorphs, and some custom javascripts to translate between the two.
Hobbled somewhat by the lack of system integration and javascript security limitations, I had to copy blocks of phoneme frames in, and copy out blocks of translated keyframe data. The project died down, and I didn’t need to revisit the workflow till early this summer. That’s when I finally gave widget programming another chance, and got into using Dashcode, part of Apple’s free Xcode development suite.
Let me preface by saying — Dashcode has issues. Long standing issues that haven’t been fixed for quite some time, even through several update cycles. Colour values inexplicably shift during editing object properties (degenerating into a completely different value headed inexorably south), objects loose properties, elements take on properties from other elements deleted the week before, etc. But once that’s out of the way (and you learn to watch out for disappearing styles), it’s a pretty cool system. Not only did it open up doors for interfacing with basic system events (dragging and dropping files, could it really be any easier to translate a .moho file?), it opened up full access to the OSX command line as well. All using a familiar javascript basis.
And that’s the back story to how I started developing a small collection of utilities for Mac OS X, and my earlier post introducing iaian7.com/dashboard. It’s mostly stuff I’ve needed at work — first the lipsync conversion utility, then a widget to help calculate screen resolutions and ratios.
Yesterday I finished up the the latest addition to my collection; first public release of Chroma, a basic colour conversion utility and swatch library. I also posted everything to macupdate.com I certainly didn’t expect such a dramatic response, but traffic has increased substantially with scores of downloads for each widget just within the first hour or two. I sure hope I don’t regret this, there simply isn’t time for me to keep taking on more projects like this! Even so, I really hope they prove useful to others, and plan on continued development as I have time. Hope you enjoy!
Prowler — interface for the Prowl push notification platform, letting you send notes instantly to your iPhone or iPod Touch.
Sheets — generate sprite sheets from image sequences or group selections. It requires an ImageMagick command line installation, but I have yet to find a good Photoshop solution for this, and Sheets doesn’t crash as often. Oh yeah, I went there!
Chroma — a colour management and conversion utility. The library is a little basic so far, but I’m hoping to continue developing the feature set to include more features and better management. The data is all there (swatches are given a group title and name when added), but how it looks and performs is yet to be defined. For now, I’m just excited to finally have a good solution for colour swatches and web development.
Feel free to head over to MacUpdate.com to rate and leave comments for Lipsync, Ratio, Prowler, Sheets, or Chroma.
bookmark
Syncing via Dropbox
iaian7 » blog John Einselen, 11.08.09I’ve been a long time fan of Dropbox. Not only does it let me sync files across computers, but it does it seamlessly and reliably (I’ve never once had a file corrupted or lost). A free account gives you 2Gb of cloud-synced storage space, with updates pushed to any connected computer running the menu bar app. Paired with Fruux for automatic address book, calendar, and bookmark syncing, you can get a fair bit of Apple’s expensive MobileMe service for free.
However, one problem with using Dropbox as a sync solution is that it doesn’t sync multiple locations – only a single Dropbox folder located, usually, in your user directory. Some applications have catered to this, such as 1Password’s development of the Agile keychain. Most, however, do not.
The answer? Symbolic links. Based on the excellent tutorial from SmileOnMyMac.net, this is a sample terminal command for setting up the Snippet database to sync using Dropbox (all one line):
ln -s ~/Dropbox/Sync/SnippetDB.plist ~/Library/Preferences/SnippetDB.plist
Make sure you copy the actual plist file to your Dropbox/Sync/ folder first, but that should take care of it. I’ll be running through a few tests in the next few days to make sure it operates smoothly. If my past experience with Dropbox holds true, it’ll be completely painless. It should also work with any similar application setup, just update the above directory links with the appropriate file locations (keeping in mind that not all apps play nicely when files are updated while still opened on another computer).
Addendum 2010: Microsoft’s Live Mesh offers 5Gb free storage, and syncs any folder you select. However, it’s exceedingly cumbersome, requires a full dock-based app to be running at all times, and is easily confused when content changes. I’ve never used it for syncing preferences or databases across computers, because it’s nearly unusable just for storing files.
Addendum 2012: Dropbox has added the ability to sync specific folders, but to keep things simple, I actually still use the symlink method! It lets me overview every pieces of synced data rather quickly in the same directory, and keeps things simple to set up on a new computer (I just keep a text document of the terminal commands needed to set up each folder).
Also, Google released Google Drive, in case you’re interested. Similar concept, different company.
Dropbox is designed to simply sync files and folders, but you can use it to trigger other tasks by simply adding files
bookmark
New Widgets
iaian7 » blog John Einselen, 31.07.09I’m not much of a programmer; it’s a hobby from time to time (especially when I’m bored), but not exactly a talent. My dev cycle consists mostly of mashing together code till it stops crashing all the time. Not exactly the most efficient way to work, but the best I can hack together given my non-programmer logical processes and limited knowledge of javascript. That said, the past month I’ve been able to refine some basic utilities and expand my programming knowledge a bit; as of this evening, there’s a new section here on the site (iaian7.com/dashboard) and I’ve posted my first official widgets. Enjoy!
Ratio – an Apple OS X Dashboard widget for calculating common screen resolutions of various sizes. Includes presets for HD, NTSC, PAL, Apple iPhone, Microsoft Surface, Fullscreen and Widescreen PC, and more. My first actual widget, so it’s been redone a few times… certainly a learning experience, but I’ve found it pretty useful myself.
LipSync – a dashboard widget for converting Moho format phoneme animation files into Lightwave envelopes or After Effects keyframes. Preston-Blair and Simplified Flash phoneme sets are included along with user definable sets. If your lipsync needs are basic, this is one of the faster (and cheaper) solutions I’ve found so far.
bookmark
On the art of writing, and Twitter
iaian7 » blog John Einselen, 12.06.09140 characters demands of an author a certain degree of terse eloquence. Regrettably, it often ends as merely terse; eloquence forgotten. – @iaian7
Such grievous pomposity aside (who quotes themselves so brashly?), it’s an important topic as communication moves online, and oratory fades.
I often wonder if in the pursuit of brevity and clarity, Twitter’s limitations could spur greater creativity, or even mastery of a language?
While one might decry (and rightly so) the short-form nature of the internet’s vast inanity, does the meticulous word play prove profitable?
Far more should be said, but as show of form I’ve kept these paragraphs precisely 140 characters. Leave your thoughts in the comments below!
bookmark
New server
iaian7 » blog John Einselen, 23.05.09Maybe not much of a visible change, but I’m switching the site over to a new host. GoDaddy has been surprisingly good (especially considering the price I paid and the amount of traffic this site generates), but it’s time to consolidate my hosting plans, and I need a server that supports IMAP. GoDaddy doesn’t, and the IMAP access at HostNine isn’t remotely reliable (host for my other sites, such as symboleffects.com, johneinselen.com, and greenteadiary.com). At the suggestion of Ryan Keberly (The Snowsuit Effort) I’m giving DreamHost a try.
Iaian7.com will have some downtime this weekend, but should be back up and running by Tuesday!
Have you seen or played the most recent Prince of Persia game? Jake Gyllenhaal seems like a reasonable fit for the prince in that game, both in appearance and personality.