hearthstone gold hunter progress


making progress on an important life goal! :)

halloween whiteboard weekend

this is a 150 artist co-op on Sketch Club's whiteboard with music from Phoenix!

it was maybe the most fun whiteboard weekend event yet! for these, people just hop into the whiteboard and doodle a bit on the theme then i render it all out as a fun music video at the end. the videos work a lot nicer now too that YouTube supports 60fps.

these are the latest three that are all 60fps: halloween 2015 / underwater / easter 2015


paintbot example

i'm hopefully nearing in on a first release for a fun graphics toy i've been working on periodically that turns photos into cool digital artworks.

it's called PaintBot and is a further evolution of my old strokerizer experiment (which itself grew out of glypherizer)

i made a website for it at paintbotapp.com so you can check out some early examples if you like and follow @paintbotapp on twitter for news as it approaches release! :)

iOS 9 and app store review time

as with iOS 7 and 8, iOS 9 caused a lot of problems with Sketch Club. ahead of its release i had been testing with early versions of iOS 9 and fixing up all the issues i could find. there were also some Sketch Club beta testers with prerelease iOS 9 who helped find issues.

i got a new version of the app sent off to Apple about a week before iOS 9's release hoping it would be reviewed, approved, and land in the store right on time. unfortunately the review times have been extra long and it wasn't until many days after that it did. in the meantime everyone who updated to iOS 9 right away were stuck with some major bugs and incompatibilities and all i could do was let them know an update was waiting review with Apple.

meanwhile new issues with the app on iOS 9 were being discovered that i and the beta testers hadn't bumped into yet. most were fixed by simple changes that just took a few minutes to appease the new OS version. before 2.1.1 made it through the review queue i had a 2.1.2 build with more fixes ready to go. and ..... just had to patiently wait.  ... and answer thousands of emails letting people know updates were on the way and we just had to wait. and wait.  and wait. and after 2.1.1 finally made it into the app store.... now the long wait for 2.1.2 to wait for review. ... and ... still waiting.

with so much waiting one can't help but think about why there is all this waiting and that there must be better ways to approach this! :)

here's my theory: Apple intentionally makes app updates sit in a long queue.

there are a lot of companies in this "internet age" that take approaches like Facebook's "move fast and break things." they aim for fast iteration and getting things out to customers as quickly as possible, getting feedback, and rapidly turning around with changes then repeating again and again to refine the product. this is not Apple. Apple instead holds onto a product a very long time to refine and perfect it before release. they believe in shipping something super polished that has already been through dozens of iterations before the public ever sees it. in attempt to instill this same discipline in the app store they artificially delay release of app updates.

the idea may be that knowing there's a long delay to get updates out developers should take greater care in polishing and testing releases because anything that goes out there people will be stuck with for awhile. Apple may hope artificial delays to help minimize churn and maximize fit and finish throughout apps in the store.

unfortunately it leaves us stuck with situations like a change to iOS breaking existing functionality that people depend on and even though fixes are accomplished within hours they must wait over a week to roll out. yuck!!

i'll propose a solution. for apps in good standing (pass some criteria like have been around awhile, have good reviews, lots of users, whatever) allow users to see and install updates for it that haven't been reviewed yet. so you can imagine going to the updates tab in the app store and seeing a new update is awaiting review for an app you have. you could choose to install it early or just wait for Apple to vet it and get the update normally. this would give a way for particular users affected by an issue to get a solution immediately while still providing a longer delay for it to reach the masses.

we're actually almost there with the TestFlight beta system Apple introduced but there are some big differences with what i am proposing. with TestFlight users must manually contact the developer, give them their Apple ID, wait for the developer to add them to TestFlight, be one of the first 1,000 people to do so, aaaaaaannnnnndddddd inexplicably WAIT A WEEK for the TEST version of the app to be approved for BETA TESTING!  LOL :P

okay, back to waiting. :)  :)

unhacking my wordpress blog

hmmm i think i finally have my blog fixed! it's been a pain because there were all these backdoors hidden around in the wordpress install and they were very sneaky so sometimes would show the blog correctly and sometimes would show crazy spam. it was pretty smart about hiding itself from me. so things would look normal when i visited but then other people would keep asking why i was selling drugs and other weird stuff! :P

for anyone else who may have to deal with this here are some notes from my cleanup that may help.

  • run a command like find $1 -type f | xargs stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head to find the most recently modified files and make sure they are legit.
  • for me there were lots of .phtml and .php files snuck deep into wordpress plugins and themes. they included backdoors allowing remote uploads.
  • unpack the same wordpress version to another directory then diff it with your wordpress install. diff -r hacked_blog fresh_wordpress
  • my /wp-includes/pomo/mo.php file was modified to import a config.php which did the sneaky cloaking and served up hidden compressed spam stashed in /wp-admin/maint/.tmp/


this past month i FINALLY moved into my new house!

being nocturnal, having a house now is soooo nice! waking up in the evening and going to bed in the morning didn't leave much time for noisy things like laundry, treadmill running, and loud movies / games when surrounded by units filled with sleeping noise-sensitive daywalkers.

having more space is cool too. i wonder though... when you put a pet fish in a bigger tank they end up growing bigger right? is the same true for cats?? Scratchy is already pretty big so it'll be interesting to see how he transforms to fill the new space available to him. :)

moving has been brutal and i'm still not totally done yet. O_o i've got a lot of projects i've been trying to finish up that moving has made really difficult. i'm excited to finish up so i can get back into my normal routines.

Invader Zim #1

it's heeeeeere!! first issue of the new Invader Zim comic! 200,000 years of human progress has finally culminated in this


apple lock in

this years' Apple developer conference has made me reflect again on the strong platform lock-in that Apple has developed. (if you're unfamiliar, lock in refers to a company making it difficult for developers or users to switch to other platforms)

this is behavior i got to see a bit from the inside of Microsoft when i worked there. when they dominated the industry they used that advantage to prevent others from succeeding and consciously trap users and developers into their ecosystem.

last year apple introduced a proprietary graphics API for iOS devices named Metal. this year they announced Metal is now also coming to Macs as the preferred graphics API. its use replaces the industry standard OpenGL. Metal is streamlined for modern graphics processors and eliminates a ton of overhead which is great for performance and battery life. these goals are also addressed though with OpenGL's successor Vulkan.

it's unfortunate that Apple has focused on creating their own platform specific solution instead of embracing the new standard. sure it lets them innovate at their own pace and tailor the API to the specifics of their platforms but it also serves to make things more difficult for developers to simultaneously support non-Apple devices and operating systems. this is a sad change from Apple's embrace of OpenGL which allowed nice code sharing with Android, Linux, WebGL, and Windows.

last year Apple also introduced their own new programming language Swift to replace Objective-C. while Objective-C was already pretty specific to Apple's ecosystem it's really just a bit like some extra macros and libraries on top of the widely supported C language. you can write code in C and build it for pretty much any operating system and device. this year they announced they will open source Swift and support Linux but i still suspect code written in Swift will wind up pretty strongly tied to Apple's platforms and be much more difficult than C to target Windows and Android.

Microsoft and Google despite having their own operating systems and devices have created cloud infrastructure that is easy to use from any device and language. Apple on the other hand with CloudKit chose to make a system only for their devices. new javascript APIs may open this up a bit but it's still quite different from Microsoft and Google providing nice Objective-C bindings for their APIs and full iOS and Mac apps.

years ago when i switched from Windows to Mac it was quite refreshing to see Apple's use, embrace, and creation of open systems and standards like GCC, LLVM, OpenCL, OpenGL, Collada, sqlite, Unix, WebKit, etc, etc. now it seems as they've risen to dominance they're trending towards more and more proprietary solutions providing strong lock in and making cross platform development increasingly difficult. hopefully Apple's intentions aren't malicious, but it's still a bit disappointing.

summoners war addiction

Summoners War

last thanksgiving i got my nephews addicted to Bitcoin Billionaire but it seems they've gotten me back now by getting me hooked on Summoners War. these free to play mobile games are dangerous!

it takes hundreds of hours of hard to work to achieve something special and get that nice shot of dopamine from your nervous system rewarding you for a job well done... or you could play one of these games for like 30 minutes. why spend ten years leveling up your coding or drawing or composing skills when you could get to be a wicked cool level 35 5-star awakened fire monster in just a few weeks (or like right away if you throw down some cash)??

they've done a good job capturing the addictive aspect of Diablo (which i think should be called Dopaminecraft to fit with Starcraft and Warcraft). play over and over and over again not because it's fun really or you're doing anything different, but because you're going to see your characters' numbers go up and up and get that occasional epic drop that makes you go WHOOOAAA just because the text is in a different color and the number next to the item is bigger than the last one you got.

it's so sad that this works and our minds are so weak and easily manipulated. exploiting these natural weaknesses for profit (as marketing, sales, advertising, junk foods, sugar drinks, casinos, drugs, and others also do) seems really immoral. still... i'm glad Summoner's War exists and have become pretty attached to my little monsters. i hope people find ways to harness these manipulative powers for good like working in useful education or side effects while playing. or just focus games more on strategy and skill mastery and less on time played and money spent.


i've always wanted to code up and play with some of the texture synthesis algorithms out there since reading the Graphcut paper from Siggraph 2003. i remember thinking it was the coolest thing ever and wondering why it wasn't being used for everything everywhere all the time. back then i found a Gimp plugin that purported to implement it but the results i got with it were absolutely awful.

anyway it came up while chatting with Kirill a few month back and led to me experimenting a bit with image quilting between matches of Hearthstone one sunday. the image quilting paper from 2001 preceded the graph cut stuff and looked much simpler to implement so that's what i decided to try first.

i was hoping to use it to stick together bodies in horrific arrangement like the panoramic fails but i think to get reasonable results you really have to go all the way to graph cuts for that. fortunately i did find something image quilting really excels at: MEXICAN FOOD SYNTHESIS! and so was born INFINIMEX. :)

after the first experiments i upgraded it a bit with laplacian pyramid blending to smooth out sour cream and cheese transitions. (so you might see those are kinda rough on earlier screenshots and vids but better on the later ones)