Abstract Puzzle Logo – Iteration / Evolution

Today I uploaded a new version of the abstract puzzle logo to abstractpuzzle.com.

Here’s a compare and contrast:

AP_Logo-old_new_compare

I actually added the white cut-out lines around the text a few iterations back, but just hadn’t updated the website with that new look. But what’s gotten me really excited is the clarity and smoothness of the background puzzle/chessboard. In case it’s not abundantly clear, here’s a corner, zoomed in:

AP_Logo-corner_compare

This is all thanks to my brother John. He came over a few nights ago, and we got to talking about my logo, and he’d actually done a new version of it for me! I’ve talked a bit before about the logo (and name) on this blog, and said then that I wasn’t happy with the quality. I think I must have mentioned that to John at some point also. Anyway, he sent me this new cleaned up version, and for that I’m extremely grateful. Thanks John!

For posterity, and because I think it’s fun, here are two the other versions of the logo that I did, the splash screen for Oppo-Citrus, and ActionChess 1.5.

Default
Default

For The Win is out now!

For The Win is out now and on sale at launch for only $.99 in the App store!

For The Win is probably the most ambitious game project I’ve ever worked on, and represents months of hard work. Surprisingly, I’m not even sick of playing the game, and supporting the project means there is a better chance that I’ll be able to add asynchronous multiplayer (and a universal version) in an update in the near future. The game is already packed with features, including five different AI personalities, with three levels of difficulty each, GameCenter leaderboards for number of games played and won against each AI difficulty. You can quit and resume your game at any time, (great for pass-and play games), and it’s easy to name the players and customize their colors and avatars.

I think it’s well worth a buck, so go download For The Win now!

For The Win

So the “big” freelance project I’ve been working on part-time for the last five months or so was submitted to apple last Friday. It’s public knowledge that I’ve been working on it, but I wasn’t sure if I could talk about it until yesterday.

It’s called For The Win, (app store link), and it’s a tile-laying abstract strategy game for 2 to 4 players. Unfortunately, the app took a lot longer than I’d estimated, and we didn’t get to put asynchronous multiplayer in there, but if the app does well I’m really looking forward to adding that in an update. (I think it will be a really fun addition to all the other games I already play that way on a daily basis.)

The game is played by placing tiles from your pool of five different types (Alien, Monkey, Ninja, Pirate, Zombie — everyone has two of each) next to each other on the gameboard until someone has all five types of their color connected. The difficulty comes in that you can’t immediately place next to your existing tiles, and have to manipulate them into position by either moving them, or using each tile’s unique special ability.

As you can see, the game really has a really great look and feel to it. The app was designed by Luis Francisco Baroni Coutinho, who has worked on art and graphic design for an absolutely ridiculous number of board games in the past. He took the game’s original character artwork (by Eric J. Carter), and designed basically everything else needed for the iPhone version.

The “client” for this project was Tasty Minstrel Games, and if there is one thing Michael Mindes did exceptionally well on this project, it was bring together a great team. The leader of that team was Brad Cummings, (of iOSBoardGames.com fame), and it has really been a pleasure to work with Brad, as he just really has his finger on the pulse of this weird little sub-niche that is iOS board games. He did all the early UX design for the app, as well as keep track of everyone’s tasks and all that other lovely stuff that a good project manager does.

The app also features five different AI personality types, with three different difficulty settings for each. One of the biggest technical challenges (and most rewarding aspects) of the game’s development was working with AI programmer Tysen Streib, whose work was so good that most of the changes we had him make were to make it easier to win against the AI on easy difficulty.

I didn’t work closely with him, but it’s worth giving a shout-out (since it appears that’s what this post has become) to the game’s original designer, Michael Eskue. I actually backed the board game on Kickstarter way back before I had even an inkling that I would be working on this project. Coincidentally, I got my Kickstarter reward copy in the mail about the same time I got started on development. Anyway, the game has real hidden depth and strategy. It can be a difficult one to wrap your head around at first, (and that may be the biggest challenge to this app’s success) but I genuinely think it can be rewarding to learn and play.

I will post again when it hits the app store.

Abstract Puzzle, the name, the logo

How clever is too clever? If a puzzle exists in the forest, but nobody is around to solve it, is it still interesting? (Translation: If you make a puzzle, but tell nobody that it exists to be solved, will anybody ever solve it? …probably not likely.)

I like my puzzles with well defined rules. I tend to get frustrated with really open-ended puzzles. (One of the reasons I never really got into crosswords, that and my brain is rubbish for trivia.) That makes the following admission all the more worthy of admonishment. Essentially, I was chatting with the designer for Oppo-Citrus yesterday, and it became clear that he hadn’t understood the logo I created for Abstract Puzzle (that’s it on the right). Now, I know the logo is rather amateurish in terms of graphic design, but I mentioned that I liked the idea behind it if not the execution. That’s when I got the blank stare. I had to explain to him that it’s meant to be a chess board made out of puzzle pieces. It’s a hybrid of puzzles and games. It’s a puzzle game. That hadn’t been clear to him, which of course had me questioning whether it was clear to anyone.

Now I actually think that one is okay. It’s just a logo. Its importance is in recognizability, not necessarily understandability. And I think it looks fairly unique. (Though, again, I’m thinking of it more as a first-draft than the final representation of my business.) It’s not what prompted me to write this post.

What prompted me to write the post was realizing that the name of the business actually suffers from the same issue. Only, I think there’s even less chance people are going to understand the name. So that’s why I’m writing this. To explain it. To give it away. So… um, spoiler alert. I guess. If you consider a puzzle nobody actually knows is a puzzle to be spoilable.

Abstract Puzzle — two words, meant to evoke another hybrid concept. “Abstract strategy”, my favorite kind of board game, and “action puzzle”, my favorite kind of video game. It’s just like the name of this website, Chesstris, only instead of combining specifics, it’s combining general terms.

So there you have it: Why I chose the name that I did for my new business.

How I keep track of TODO items

I came to a realization this morning. I am a programmer. I am not a professional emailer. When I want to get work done, I open XCode, I do not open my email. For this reason, it makes literally no sense for me to keep my tasks in a browser window. From now on, I’m keeping all my tasks in a TODO file with the project, where they belong.

Read-on for some history and analysis of my project management habits.

Continue reading

MailChimp signups from iOS – How to add a subscriber to a MailChimp Group

This week, I’ve spent some of my time integrating MailChimp into the client work I’m doing. I found some of the documentation lacking, and there is no example for how to add your email signups to a MailChimp’s list “Group”, so I thought I’d document that here.

(Astute readers who are actually reading from chesstris.com will notice the fact that I’ve got a MailChimp signup form on Chesstris.com also. I haven’t done anything with it, and so far, I’m the only person who has signed up, but it’s there. I’m still sort of trying it out.)

MailChimp has an iOS SDK they call ChimpKit, which is available up on github. In general, it’s a great SDK, but the README has some installation instructions that are both incomplete and also pretty stupid, as far as I’m concerned. After fiddling around with it for a couple of hours yesterday, I’ve concluded that there is no reason to include their sample project as a git submodule of your project. The instructions I’m going to suggest basically don’t do that, so if you are ultra concerned with keeping up to date with the ChimpKit project (keep in mind it hasn’t been updated since 9 months ago), then read-no-further, and go figure out how to actually use the classes in their sample project yourself (since that’s what’s missing from their instructions). Personally, I think git submodules are a PITA, and not worth the effort anyway.

OK, so what you really want to do is the following:

1) Download the ChimpKit code. You can clone it on github, or just download, your preference.

2) ChimpKit requires SBJson, so you’ll need to include that project’s files in your project. You can do this as a git submodule if you really want, but you already know how I feel about those. You can also just add the files to your project and be done with it.

3) Grab just the files in ChimpKit’s “Core” folder and drag them into your project (or use the “Add files…” dialogue). Personally, I like to organize code in my projects in a certain way, so I copied the directory into my project’s “Externals” directory, and renamed it from “Core” to “ChimpKit”.

4) If you don’t care about adding your subscriber to a group, you just need to do the following:

4.a) Add the include: #import "SubscribeAlertView.h" to the top of your view controller or wherever.

4.b) Add this code somewhere, maybe after an IBAction or something.

SubscribeAlertView *alert = [[SubscribeAlertView alloc]
initWithTitle:@"Newsletter Sign-up"
message:@"To sign up for the newsletter please input your email address below."
apiKey:mailChimpAPIKey_
listId:mailChimpListID_
cancelButtonTitle:@"Cancel"
subscribeButtonTitle:@"Confirm"];
[alert show];

Of course you’ll need to define mailChimpAPIKey_ and mailChimpListID_, but both are strings. If you don’t know your list ID, you can find that on the mailchimp website. (Or by using the “lists” api method, and you can see an example of that below.)

…and you’re done!

5) But assuming you care about adding your subscribers to the group, there are two ways you could go. You could modify the code in SubscribeAlertView, or implement the subscribe form yourself. I’m going to assume the former, and not go into the latter, even though it’s what I’m probably going to do since I think their popup looks like toasted a$$.

6) Next we’re going to find your list’s groups. You might be able to skip this step if you already know the name of your grouping and groups, because the API also supports adding by name, but I think this is a better way because a) you can use the ID, and b) you are sure to use the right strings, because you’ll be copy/pasting them out of the JSON. I actually had to perform this step because I’m not the MailChimp admin, I just have access to an API key.

6.a) First, set up the object you’re going to be calling this code from as a <ChimpKitDelegate> in your header, and #import "ChimpKit.h" in the source file.

6.b) Then implement the chimpkit delegate methods:

#pragma mark - chimpkit delegate methods

- (void)ckRequestSucceeded:(ChimpKit *)ckRequest {
NSLog(@"HTTP Status Code: %d", [ckRequest responseStatusCode]);
NSLog(@"Response String: %@", [ckRequest responseString]);
}

- (void)ckRequestFailed:(NSError *)error {
NSLog(@"Response Error: %@", error);
}

6.c) Finally, you’ll need to run the following code to call the MailChimp’s ‘listInterestGroupings‘ API method. Again, you’ll need to define mailChimpListID_. (I just ran this in a ViewController’s viewDidLoad method.)

ChimpKit *ck = [[ChimpKit alloc] initWithDelegate:self
andApiKey:mailChimpAPIKey_];

// get the lists
// [ck callApiMethod:@"lists" withParams:nil];

// get the list groups
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setValue:mailChimpListID_ forKey:@"id"];
[ck callApiMethod:@"listInterestGroupings" withParams:params];

(There’s your example in there of how to get the lists.)

With any luck, you’ll get a response that is a big block of JSON. Use your favorite online JSON parser to turn that into something readable, and it’ll probably look something like this:

[
{
"id":9501,
"name":"Web Signups",
"form_field":"hidden",
"display_order":"0",
"groups":[
{
"bit":"1",
"name":"likes chess",
"display_order":"1",
"subscribers":0
},
{
"bit":"2",
"name":"likes go",
"display_order":"2",
"subscribers":0
},
{
"bit":"4",
"name":"likes puzzle games",
"display_order":"3",
"subscribers":0
}]
}
]

7) Add your group subscriptions by modifying SubscribeAlertView.m around line 140 to look like the following:

NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setValue:self.listId forKey:@"id"];
[params setValue:self.textField.text forKey:@"email_address"];
[params setValue:@"true" forKey:@"double_optin"];
[params setValue:@"true" forKey:@"update_existing"];
NSMutableDictionary *mergeVars = [NSMutableDictionary dictionary];
[mergeVars setValue:
[NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:
@"9501", @"id",
@"likes go, likes puzzle games", @"groups",
nil],
nil]
forKey:@"GROUPINGS"];
[params setValue:mergeVars forKey:@"merge_vars"];
[self.chimpKit callApiMethod:@"listSubscribe" withParams:params];

You’ll also note that double_optin was set to false by default. That’s a stupid default, IMHO.

So there you have it. I think you could probably replace the @"9501", @"id" key/value pair with @"Web Signups", @"name", according to the API docs, but I only tried the ID. I also added some code to the SubscribeAlertView‘s requestCompleted:(ChimpKit *)request method to actually let me know that the submission was successful, but other than that, I think I’ve outlined everything pretty well. Let me know if you find this useful.

Oh, and so life happens and it’s July and Oppo-Citrus isn’t out yet. It’s still “right around the corner”, but as you can see I’ve started this exciting (no really!) freelance project. I was definitely hoping this would happen when I set out on my own, and it’s been going great! It’s 20 hours a week of my time, and it turns out that’s actually more than half my time as an indie. (I don’t think it’s because I’m not working 40 hours either, I think there are just hours you end up “losing” to email or twitter or whatever.) Anyway, last week was a holiday week (the boss gave me two days off!), and I’m planning on slacking some this week too, so I haven’t worked on Oppo-Citrus as much as I’ve wanted. The next goal is to get it at least submitted to apple before I leave for vacation the last week of this month. We shall see. We shall see.

Music for Oppo-Citrus

I have spent probably about a day of the last 2 & 1/2 weeks playing around with Pure Data and its iOS counterpart, libpd. After some digging and asking around, I think this is the best way to synthesize music on the iPhone. (By that, I mean generate music “from nothing”, rather than just play mp3s and stuff like that.) I now feel I know enough to be dangerous, but also have reached the point — inevitable in every learning endeavor — where I’ve realized and feel a bit overwhelmed by how very much there is yet to learn. Pure Data (and it’s closed-source predecessor Max) is one of those programs that is so open-ended that you could probably spend your entire life working in it. It’s not so much the program that is overwhelming though. It’s the realization that ultimately what I’m doing is making music. Even if I want to cheat in every possible way, it still comes down to composition. I am composing music. Pure Data is just like any other musical instrument (although possibly the most complex one I have ever encountered), and I’m just not sure whether my compositions are worthy of inclusion in a game.

So I’m going to look for a musician for Oppo-Citrus. One who can work for peanuts, or better yet, virtual peanuts, because that’s what I can afford to give them. Ideally, I’m looking to turn a grid of numbers into a looping sound mosaic. But more importantly, a mosaic that doesn’t completely suck.

I actually came here to write a post about having registered my LLC officially with the state. The name of my new company is Abstract Puzzle, and I’m sure you’ll read more about it in the near future. It’s already got it’s own facebook page, and if you’re reading this, and you haven’t already, it’s be super great if you could go over there and like it.

But then I started listening to my old friend John Keston’s music on SoundCloud, and felt inspired to write about my libpd “research”. Music is incredibly inspirational, and I’ve been reprimanded in iTunes reviews (well, maybe only one) for not including some in ActionChess. My reasoning was always that it’s also incredibly subjective, and one person’s mozart is another person’s … well, mozart. Anyway, music can be as abrasive as it is immersive. I really like the idea of creating a truly unique and interesting sound experience though, and I think if done correctly, that might be worth the extra effort.

Indie .plan

I did it. I quit my job to make games.

It’s been a long-time dream of mine. Now I just have to make it work. Here’s my basic strategy: I’m going to make games about 50% of the time (probably more this first month or two), and do some freelance the other 50% of the time to make ends meet. I’m hoping the games I release will eventually make up for the difference, and (ideally) eventually become enough income that I can stop working freelance.

I’m going to prefer freelance projects that are games. With any luck, I’ll be making board-game conversion apps for most or all of that time. If you have a board game you want to turn into an iOS app, please do get in contact with me. (You can send email to any address at chesstris.com.)

It’s a great time to be an iOS developer, so I’m not terribly worried about what happens when/if I can’t make enough money with my games.

So what am I doing day-to-day? I haven’t exactly been secretive about my latest game project, but I have yet to write about it here on my blog. It’s scary for me to do this, because my game isn’t all that complex, (and we all know how rampant cloning is these days), but that’s about to change in a big way. I’m planning on writing a blog post at least once a week about my progress, with the first one to come either tomorrow or later this week. In the mean time, a brief description: The game is called Oppo-Citrus (say it out-loud), and it’s one interpretation of the opposite of Tetris. (One that I haven’t seen before.) It’ll also have a fruit theme, which practically guarantees success, right?!? The artist who created the logo you see will be doing all the art for the game, and I’ve been really happy and excited about what he’s come up with so far.

Astute readers will note that I’ve created a new blog category for this post. I’m anticipating there will be other posts down the road about the business and how I’m doing. I’m actually torn about whether I should register an LLC for my freelance work or just “wing it”. Consensus seems to be that I should do the LLC. I’m going to try and get some advice from people who probably know a lot more about this kind of thing than I do, and if that’s you, feel free to chime in via comments or email or wherever. Thanks for reading!

iPhone Marketing Strategies

I’ve been brainstorming ways to overcome the visibility problem in the App store. When releasing an iPhone application, visibility in the app store is your biggest problem. It is very easy for an app to get “buried” in the store. There are literally hundreds of applications that are launched on a daily basis. How to get the potential customer to “discover” your application is the key question that must be answered after (or when considering) development for the iOS platform. It’s worth noting, however, that the vast majority of the applications released daily are really awful, so the sheer number alone should not be a deterrent. (Yet, those crap apps are often what pushes down the visibility threshold for the rest of us.)

I am not claiming that I came up with the following solutions and/or techniques, just documenting them here for my own brainstorming purposes.

Solution 1: Marketing a recognizable name. Having a title that people recognize is certainly key. In fact, that’s the basis for any marketing effort. Get more people to recognize your product, and they will be more likely to purchase it. If you start with an existing product, it’s possible you could leverage the community that is familiar with said product (for instance, fans of a board game, if that’s what you’re making). These fans would help generate “buzz” before the game’s release, as well as ensure you have some target market upon the game’s release. This also opens up an important secondary channel for application discovery, through traditional marketing to those existing fans, whether it’s in print advertising, or online targeted marketing. (Second to discovery in the app store itself, which is by far the most effective at selling your application.) Traditional board game marketing avenues, for instance, would include Board Game Geek, (of course) traditional board game review sites or blogs, (banner ads, or better yet, actually getting reviews). Even if only a fraction of your audience have iPhones, that visibility would not be wasted.

Solution 2: Getting reviews. Another important marketing strategy is to email and otherwise contact the large number of iPhone app review sites out there. (I personally maintain a spreadsheet with a list of over 100 iOS review sites.) The most important of these by far is Touch Arcade, who also maintain a fairly influential online forum with discussion threads on almost every game for the iPhone that is released. (I think this is probably the most well known and documented of my solutions, but I’m including it here for consistency. Even though I maintain that list, I still have never sent out the press releases required for this step for ActionChess. I keep saying I’ll do it after the next major update… and maybe I will!)

Solution 3: Visual affluence. Having a very “nice looking” game will have a couple of possible effects: 1) iPhone owners (as well as Apple computer owners in general) are probably biased toward excellent design. It is certainly how Apple have continued to differentiate themselves in the desktop market, and one of the key reasons oft cited for the iPhone’s runaway success. Simply put, Apple customers are more apt to purchase a game because of how pretty it looks. It’s obvious that Apple knows this, and that it contributes to the following secondary effect: 2) Apple is more likely to “feature” a good looking app than one with the same functionality that does not look as great. There is quite a bit of precedent for this, but essentially, if your app looks good enough, it is much more likely to make it onto the front pages of the App store. (See next solution.)

Solution 4: Getting featured by apple. This is the equivalent of getting your physical product into one of the major retailers. (Target or Wallmart, for example.) You will sell hundreds, or even thousands of copies per day. In fact, getting reviews onto as many review sites as possible is not so much to get customers aware of your product, although that certainly helps, but to get the folks at Apple more aware of your product, and thus, more likely to feature it.

There are probably a lot more solutions out there. Noel of Snappy Touch has had a lot of success with in-app purchases and setting the price of his app to free. He and some other indie developers do a lot of cross-promotion that has proven successful for them as well. (I’ve read someplace that having more than one app in the app store, and cross-promoting them has a very noticeable effect on sales. Wish I could remember where.) Anyway, this isn’t comprehensive. Feel free to post your suggestions in the comments here.