• BeSpell
  • Gridus
  • Hamburger
  • Tug
  • Mood Board
  • Search results for 'development'

    Mood Board Update

    I just spent the weekend working on nothing but Mood Board. It’s an application that helps you quickly put together concept documentation for creative projects like jewelry, paintings, illustration, concept art, weddings and pretty much any kind of project where style or visual look development is important.

    I’ve been meaning to get a bunch of updates done for a while but I’ve let other projects take precedence and that just isn’t right. So without further ado, here are a list of the changes that went to Apple for approval today:

    • (Fixed) Image sorting when adding new assets to your Boards. This means that new materials will always be at the top of your stack in the document, ready for you to move into position as you see fit. It also inadvertently means that assets stay “in order” more reliably.
    • (Fixed) the crashing bug reported from users attempting to drag images directly from the new “modal” google image search results into a board. This was caused by my erroneous assumption that the urls posted to the clipboard by Safari (ne. google) would actually be sane strings. Short answer, they are nothing like what you’d consider to be an actual url.
    • (Feature) Added the ability to pan the view. This is done using two-finger scrolling on the trackpad. Implementation should work similarly on any supported device for multi-touch input. (I’m working out how this should function for non-standard devices, would love to hear from users if this is a big issue.)
    • (Fixed) Export and Edit Node were conflicting on Command+E. Export is now (the more standard) Command+Shift+E while edit remains Command+E.
    • (Feature) Implemented the ability to zoom into boards. This is a pretty big feature and I am almost positive that we’ll be revisiting this. When you bring in assets at native scale we should be able to up-sample those assets while you’re zooming so that if you have the resolution in an asset you get to see more detail. Whether or not this is happening natively is hard to tell because my display is higher resolution and everything pretty much always looks awesome.
    • (Fixed) The scale tool now responds in the way you’d expect a state-ful tool to act. Instead of snapping to min-scale when you drag in either direction, scaling now only offsets the current asset scale making things feel far more natural. While I’d agree that Mood Board doesn’t scale things normally (always from the bottom right edge?!) this is for a reason that should be come more clear in the next update.
    • (Feature) I’ve improved rendering performance by almost 30% so even boards containing large numbers of assets should render more quickly. The background plane is now ready for you to be able to assign custom art and overload the color selection models to be able to produce exactly the kind of board you want.
    • (Feature) I’ve also implemented a new color selection setting called “Most Unique” This works by calculating the average of all selected assets and then picking from that set the one color that most deviates from the selected average. If you work with pictures of jewelry this is really going to help you find better background colors to let you focus on your overall color-styles. If you had a silver band with a colored gem in a setting, shot on a white background; you would get the color the gem almost every time in your board background selection.

    This is a really huge update and I’m proud of what I’ve done here. I feel kind of bad about the time it took to get this update out but I think it was worth the wait.

    6mood board, urbanfort, mac app store, development, indie dev,

    node-webkit f

    Very interesting: node-webkit - Call all Node.js modules directly from DOM and enable a new way of writing applications with all Web technologies.


    The Twelve-Factor App f

    Worth a read even if you only build for direct deploy (the Desktop/Phone.)


    Mood Board Beta 7

    I had a really productive work session today despite doing the LD48 this weekend. I was able to carve out around 7 hours straight working on Mood Board.

    As I get closer to the “MVP” candidate that I’m hoping to release as version 1.0 I am getting more excited. In addition to the increased energy around getting closer I’m thinking about a ton of things I’d like to add before I launch.

    The beta squad has been fantastic! I’m seeing at least one or two issues every day that are either me being dumb, or things I hadn’t thought of, which I suppose is really the same thing.

    I think it’s critically important though to stay focused on the least amount of stuff that the app needs to do for it to feel useful. I’m doing my best with it.

    Today I implemented Marquee selection. If you’d have told me that the app felt broken before 3pm today (roughly when box selection started working) I wouldn’t have believed you. Now, however, my attitude has changed. I’m not clicking single assets at all to move stuff around now; rather I’m dragging a rectangle and moving whole chunks of content. It is probably my single favorite feature.

    CoreAnimation is a bit of a bear. When you implement views to support it you have to be very careful what kinds of settings you apply. A lot of transforms that you want to perform, even on things that are animated otherwise, you want to skip animations for (like changing the size of an item 300 times in a second… does that really need to be animated?)

    CATransaction is a lifesaver in this regard.

    Ok, that’s todays development update. Tomorrow I’m hoping to get back to some Processing sketching while I wait to see what my beta testers have to say about version 7. If you’re interested in getting on the beta list you can sign up here http://www.tinyletter.com/tingham

    6development, indie dev, mood board,

    Working with App Sandboxing

    Writing process automation software on the Mac has been something I’ve always been interested in. Basically you set up a working folder somewhere that you drop files in to and then your application does a bunch of crazy stuff to the file along a specific workflow chain.

    Recently I had the opportunity to write some software that does this kind of thing and I wanted to submit it to the app store for sale (more on this later.)

    When you first access a file using the NSOpenPanel you are granted rights to use the resource you select whether it’s a folder or a file. Ordinarily we would store this location in our user defaults (preferences) for later reuse; with sandboxing however this becomes a bit trickier. It’s actually pretty simple once you understand the process that Apple wants you to follow.

    Instead of storing the string value of the path to the resource on disk, you capture the path as an NSURL. From this url you make a “Bookmark.” Actually, this bookmark is encoded NSData. You can think of the contents of the bookmark as a record of the event of the user selecting the resource using the open panel.

    You then store the bookmark in your preferences as normal; along with the path if you’re feeling spry. When you need to access the resource again later you simply resolve the bookmark and start using it.

    In your NSOpen handler

    NSData *resourceData = [openPanel.URL
    [defaults setValue:resourceData forKey:@"resourceBookmark"];
    // Check for error and provide the user with some feedback if things go badly.

    Later when you need the resource again:

    // ## Hydrate Bookmark
    // Return an URL that encapsulates our working resource.
    - (NSURL *) hydrateBookmark
        if ([defaults valueForKey:@"resourceBookmark"] == nil) {
            NSLog(@"Don't even think about it.");
            return nil;
        BOOL stale;
        NSError *bookmarkErr;
    // The crucial element here is NSURLBookmarkResolutionWithSecurityScope
    // Which allows us to take advantage of the com.apple.security.files.bookmarks.app-scope
    // entitlement - Don't forget to add that key to your entitlements plist!
        NSURL *resourceUrl = [NSURL URLByResolvingBookmarkData:[defaults valueForKey:@"resourceBookmark"]
        BOOL accessAllowed = [resourceUrl startAccessingSecurityScopedResource];
        if (bookmarkErr || stale) {
            NSLog(@"Bookmark cannot be accessed or is stale.");
            return nil;
        return resourceUrl;

    6objective-c, development, mutiny,

    http://dave.smallpict.com/2013/07/25/changesAtSmallPicture f

    It’s always crazy when key personnel moves on. I’ve been following Fargo since it’s public announcement and it is a very intriguing platform. The way the local data model works, I’m sure, is going to be the prevalent model for web-based replacements for desktop tools moving forward. Refocusing the app to be smaller is sure to make it better in the long run. I wonder how many Node devs out there are trying to figure out how to email Dave directly right now for resume submissions? :)

    6development, indie dev,

    Been busy today working on super-secret feature for Gridus. (Shhh..)

    6processing, prototype, development, mutiny,

    Understanding App Store Pricing — Part 1 f

    Must read if you build things.

    6development, marketing,

    WebCamMesh f


    This is pretty ridiculous.

    Source: nullpandaexception


    MongoDB 2.4 Highlights


    (via nullpandaexception)

    Source: nosql


    Just got my acceptance letter from Leap Motion! 100% excitement! @leapmotion

    6leap motion, development, hardware, processing, unity3d,

    One Week Game: Basic Game Loop with Block Entity f


    This is part 2 of my basic canvas/html game tutorial. To see part 1, go to Tiny Game Loop

    The game loop from my last post, Tiny Game Loop, is great and all, but if you’re a beginner, you probably want to know how to put that into practice.

    1. Base HTML

    First we start off with some basic…

    This is such a great post.

    Source: oneweekgame

    6javascript, development,

    A progress indicator in Processing.

        int width = 128;                                                                                                                                                                                    
        int height = 128;
        float amount = 1.0;
        float spokes = 0;
        boolean storeResults = true;
        void setup () {
            size(width, height);
        void draw () {
            fill(0, 0, 0);
            rect(0, 0, width, height);
            stroke(255, 255, 255, 128);
            fill(255, 255, 255, 128);
            float cx, cy;
            cx = width * 0.5;
            cy = height * 0.5;
            for (int i = 0; i < amount * spokes; i++) {
                float angle = i * TWO_PI / (amount * 360);
                float x = cx + cos(angle) * (cx * 0.9);
                float y = cy + sin(angle) * (cy * 0.9);
                float x2 = cx + cos(angle) * (cx * 0.1);
                float y2 = cy + sin(angle) * (cy * 0.1);
                point(x, y);
                DrawLine(x, y, x2, y2);
        void DrawLine (float fx, float fy, float tx, float ty){
            float res = width * 0.9;
            for (int i = 0; i < res; i++) {
                float x = lerp(fx, tx, i / res);
                float y = lerp(fy, ty, i / res);
                rect (x, y, 1, 1);

    6development, processing,

    I’ve posted a new version of my @fogbugz PlayPause control on Github. Check it out!

    Source: github.com

    6development, javascript, fogbugz,

    Gitlab f


    Self-hosted git management with a web-based UI, issue tracking, merge requests and code browsing, powered by Gitolite.

    Source: onethingwell


    Follow me on App.net