OmniGraffle 6
OmniGraffle 6 is here and looks fantastic. I was using OmniGraffle 5 last night.
OmniGraffle 6 is here and looks fantastic. I was using OmniGraffle 5 last night.
Valve (the people who made Portal, Half-Life, Team Fortress 2) are making their own OS. They’re also going to ship two of their own consoles: a $100 box that streams games from your computer, and a $300 one that’s standalone.
Steam is already extremely popular, and has a TV-centric mode, so if they can take that mode and get rid of the whole needing other people’s OS to run Steam games thing, this seems like it could really work. I’m not sure it changes Nintendo’s situation that much (which is not great), since their success is based more on creating fun games with unique gameplay, but if I were Microsoft or Sony, I’d be shitting myself.
The Verge has a big article on the whole thing.
Marco Arment’s Core Data alternative that sits on top of SQLite and FMDB is on GitHub and looks excellent. Core Data has generally worked well enough for me, but maybe not so well that I’m not interested in alternatives. What he’s done is make something simple with a couple of great features built-in:
The whole thing is pretty similar to what Brent Simmons describes in his objc.io article about using SQLite instead of Core Data. Brent raises a couple of reasons for wanting to do something a bit different in his article. Mostly it comes down to hitting performance walls and wanting something that’s just a bit simpler and less general. The truth is that because Core Data is a general solution which completely abstracts you away from the idea of using a database, I’m not sure there’s anyway that it couldn’t be a bit complex in places and that there wouldn’t be walls to bump up against. In my experience with Core Data everything works great except when it doesn’t, and because you’re so abstracted away from the implementation detail of it using a SQLite store, when you do hit those walls, you hit them hard. Some things I’ve run up against with Core Data are:
NSManagedObjectContext
to do just about anything.All of that being said, I still think that Core Data does do a lot for you. The first three issues I raise are mostly mitigated by having good code hygiene and also by using MagicalRecord. Taking the time to read the documentation and also Marcus Zarra’s book on the topic (before you start using MagicalRecord), would probably solve a lot of problems for people as well.
As far as performance goes, it wasn’t easy to get there, but Pinbook imports bookmark collections in the range of 20,000+ in a few seconds on an iPhone 4S, so it is possible to get very high performance when using Core Data. I can’t imagine there’s too many iOS apps out there that have those kinds of performance requirements.
There’s also some specific things that Core Data really makes a lot easier. For example, it’s batching and faulting mechanisms work really well. One thing that I did not have to think about very much when developing an app that might need to display 50,000 items in a table view was managing memory for those items. I’m sure I could have come up with a way to handle that using a custom solution, and it wouldn’t have even been that hard, but with Core Data it was practically free. I’m also hearing from friends that Core Data sync might be finally working the way it should in iOS 7, and if that’s true, and I write an app which really just needs to make sure a users data remains in place between iPhone, iPad and Mac versions, would be awesome, although I’m not holding my breath until I have time to play with it myself.
No general solution will ever be perfect fit for every case. In those cases writing a custom solution is nothing to fear. If you’re writing a Mac or iOS app, however, Core Data probably is the right fit most of the time, and you should really consider what you’re doing when it’s not.
I'm excited to be given the opportunity to speak at 360iDev again in 2013. As usual, it's a great lineup this year, and there's a few talks this year that I'm really excited about. In particular Brent's SQLite and Justin's Core Image talk are two that I'll definitely be at. I'll be closing out the first day with a general session talk called App Making for Deadites about what Ash's journey in The Evil Dead movies can teach us about making great apps 1. I'll also be on a panel with my friends Matthew Henderson and Samuel Goodwin in the same room Tuesday morning.
360iDev will be held in Lone Tree Colorado September 8-11, 2013. You can buy your ticket now, or check out the schedule.
About seven years ago — when I was twenty-one and had just been hired at the Guitar Center in Sacramento — I bought a baby guinea pig and named her Izze (like the soft drink). Last Thursday she died. Friday I cleaned all of her stuff out, took her cage to the recycling, and put her food bowl in a drawer in the kitchen. Seven years old is a long time for a guinea pig to live, and a quarter of my life so far. The day I got her I could hold her in the palm of one hand. On Thursday I had to take her on the bus in a box to the vet so that they could cremate her and dispose of her ashes.
Before Izze, I had two others — Teddy and Dolly. Teddy I got when I still lived at home and worked at a Petco. She was one of these animals someone at the store decided couldn’t be sold for one reason or another, so they left her in the back with all of the sick animals. Eventually she would have gotten sick and died back there, so I took her. I had Teddy for about three and a half years, and she died while I was in Germany about a year before I moved to Portland. Dolly I got from a guinea pig rescue in the South Bay right after I moved out of my parents house. She only lived a couple of months; she was probably older than they thought when I adopted her from the rescue.
While Teddy was still alive — right before I was about to go to Germany to work with Cultured Code for a couple of months — I bought Mooby (like the fast food mascot from Kevin Smith movies). Mooby was big and had a lot of personality from the day I bought her. Since Teddy died while I was gone, the next four years it was just Izze and Mooby. When I moved to Portland, They sat next to me as I drove a U-Haul truck to Portland. The first month I was here, they stayed with me in a hotel and chewed up some of the furniture (oops). After that they both came with me to the three different places I’ve rented since moving to Portland. When Mooby died last year I was pretty broken up about it, and Izze was all by herself for the first time.
I was a little afraid to write this, because I thought people might make fun of the fact that I’m talking about a guinea pig, and not a dog or something. Really though, why should it be any different? Seven years is a long time. I’m twenty-eight now, and that pig went with me to every place I’ve ever lived — from before I had any idea what I could do with my life, to finding a career that I love, to moving to an entirely different state. She was there for every part of what I consider my adult life so far.
Izze was a sweet little brown guinea pig who squeaked whenever I opened the refrigerator, peeked out her cage to see what I was up to, never bit anyone her entire life, and who was the companion who’s stayed with me the longest so far in my life. I’m going to miss her a lot.
The Tumult guys sit behind us at our office in San Francisco, and I’ve known them for a few years besides. Hype is an really great HTML5 animation builder for Mac, which now has an iOS companion app. Go read their post about it to find out more.
Braid Lab’s own Jason Corwin questions whether t-shirts are a worthwhile investment for startups on in a post titled “The Startup T-Shirt Stereotype.”
You're at the bottom of the barrel, nothing left to wear, and you're forced to dig into the dresser equivalent of a junk-drawer. A graveyard of shirts, it's almost like having your own personal crunchbase in your dresser.
Stickers on the other hand? No question. Yes. My house is primarily decorated by various Octocat variations and stickers from my friends companies.
When we started developing the iOS app for Braid, a decision I made early on was to use Storyboards. If you’re not familiar, storyboards are a way to create iOS user interfaces visually and draw connections between the different screens in your app. In storyboard-speak, each screen is referred to as a “scene,” and the transitions between each scene is called a “segue.” Storyboards are a fantastic feature for a couple of reasons, including that when using storyboards you can set up static and dynamic table views visually, drag and drop container view controllers and get a visual picture of what you’re entire app looks like.
One part of coding with storyboards has always bothered me though — the strange way that Apple’s example code shows how to set up a view controller before a transition (setting a delegate, detail object, etc):
https://gist.github.com/collindonnell/11484b74e489575c2275.js
The string comparison felt a little gross to me, and if you have a lot of different segues, the if/else
in this method could get long pretty fast, even if you’re breaking out what happens in each condition into it’s own method. If you do end up writing a method for each segue, all of those -[prepareForSomethingWithSegue:sender]
methods could get repetitive pretty fast.
A nicer way is to use a block for each segue you need to prepare and to encapsulate that into it’s own class, which I did. The class is called BRLSeguePreparationController
and makes it very simple to deal with preparing for segue’s in this way.
-[BRLSegueController setPreparationBlock:forSegueIdentifier:]
-[BRLSeguePreparationController prepareSegue:identifier:]
from your view controllers prepareForSegue:sender:
method. Here’s an example:
https://gist.github.com/collindonnell/cb8654a97ecddda04704.js
I’ve given the class it’s own GitHub repo and an MIT license, so use it in your own projects. If you make any improvements, make sure you add a pull request on GitHub. If you find the class useful, please check out my companies website to find out what we’re working on, and download our Passbook pass from there to keep up to date when our app comes out.
I’ve been a bit quieter the last couple of months on my blog and Twitter, and it’s not for no reason. Since the beginning of June I’ve been working on a new project with a team in San Francisco (I go back and forth), and I wanted to wait to talk until I had part of it to show. First though, let me tell you about the team and why I was so excited to work with them.
(Short version: I have a new app I’m working on with a team, we made a Passbook pass, and you should go get it.)
I’ve known my friend Zain — who’s been a longtime Django developer — for about four years. We met around the time that I had just spoken at the first or second 360iDev, and Zain at DjangoCon, before having a crazy fun time hanging out in Boulder Colorado for a couple of days. We’ve been friends ever since, and in between Zain went through Y Combinator, worked for Trulia, been a big Django contributor and continuously worked on neat things. He’s absolutely one of my favorite people. Which is why — even though I’d never considered doing this sort of thing before — when he told me he had a new company he was working on and they needed a fourth guy who was an iOS developer to be a founder, I was interested to find out more.
The other two guys are Jason and Idan, who are also Python developers (everyone on the team has a technical background). Jason handles the business side of things, and also helps Zain with developing the backend for our app. I’d describe him as one of the nicest and most immediately likable people I’ve ever met. Idan works on design, and if you’ve ever worked with someone who considers their designs sacrosanct and is unwilling to consider the opinions of others, then something like the opposite of that is Idan. He’s a great designer and will absolutely defend things he thinks should be a certain way, but he’s never made me feel as though we weren’t designing the app together. Because I love design myself, and care so much that the end product is the best it can be, most of the times I’ve worked with someone else it’s felt stifling more than anything else. With Idan, I feel like we’re able to collaborate and that our mutual goal is to make the best app possible.
Of course, the best team in the world wouldn’t mean much if I hadn’t also been excited about what we’d be working on. The app is an e-mail client, and it’s called Braid. One of the first decisions I was a part of making was that it would be iOS 7 only, and we’re working hard to get Braid ready for the release. I’ve almost always used Apple’s Mail clients, and although they don’t have the most features, they’ve always worked the best for me. The reason is that everything else I’ve tried that’s different has wanted me to treat my e-mail in a special way to take advantage of it, or tack a bunch of things onto e-mail that don’t feel like they belong. Braid is about making e-mail better, not about fundamentally changing the way you think about it or turning your inbox into a to-do list.
One way we’re doing that is with our follow-up feature. Follow-up in Braid isn’t about pushing things out for a specified amount of time regardless of what happens between now and then, it’s about saying “If I don’t hear back from this person by a certain date, remind me to follow-up.” You tell Braid to do this at the time that you send your message, because usually that’s the time when you have the most context for what’s going on with this person. Instead of turning your inbox into a to-do list, we’re giving you an additional “waiting for” list. To us that’s a lot more useful, because the alternatives have always been flagging/starring messages — which have limited context — and apps that continuously pop the same messages up over and over again in your inbox, turning it into a to-do list.
The app can’t come out until iOS 7 does, but we wanted to give people who are interested something sooner. So today, you can add us to your Passbook. It’s be the best way keep up to date with us, and we’ll even periodically send you interesting stats about your e-mail (and possibly other goodies). Go to our website from your Mac or iOS device, select “Get a Pass”, login with Gmail and we’ll show right up in your Passbook.
As long as I’ve had my iMac (about six months), I’ve been unable to connect to it through either Back To My Mac, or even locally on the same network. Whenever I tried, Finder would spin for a second and then report “connection failed.” The solution for me ended up having something to do with the Apple ID associated with my user account, because what ended up fixing it was to go to the Users & Groups preference pane, click change, remove the Apple ID and re-add it. Afterwards I can connect remotely and locally. I couldn’t find this anywhere else as a solution to this problem, so I figured it might be helpful to someone else having the same problem.
The San Francisco Rent Explosion:
In San Francisco, the median rental price for an apartment reached $3,295 in June 2013. During this most recent quarter in San Francisco, a one bedroom will cost you $2,795, a two bedroom $3,875, and a three bedroom $4,750.
This article demonstrates exactly how insanely expensive trying to rent an apartment in San Francisco is right now. If you have a dog, it’s hard to imagine someone who’s moving from somewhere else even having a shot at finding a place.
Since I’m working in San Francisco now, I’ve been traveling back and forth a lot, and every time I talk to my mom she always asks me to let her know that I got there and home safely. A neat feature I just discovered in Find My Friends is that if you go to the “me” tab, you can set it to notify whoever you want every time you arrive at a specific location. So, I can set it to notify Mom whenever I reach SFO or PDX.
Pat Metheny is a well known jazz guitarist with three gold albums and twenty Grammys. He also really dislikes Kenny G. Somehow I ended up on this article where he talks about it, and it’s just great from beginning to end.
The best part is that if you ever meet a Kenny G fan, you now won’t need to be a jazz expert to explain in detail why he sucks. I can’t imagine that you ever will, but it’s good ammunition to have incase you ever met that one fan who won’t let “not for me” stand1
Besides thinking he sucks as a musician, he’s also pretty pissed about the time Kenny G overdubbed himself over a Louie Armstrong track, and in the paragraph after this one calls it “musical necrophilia”:
Not long ago, Kenny G put out a recording where he overdubbed himself on top of a 30+ year old Louis Armstrong record, the track "What a Wonderful World". With this single move, Kenny G became one of the few people on earth I can say that I really can't use at all - as a man, for his incredible arrogance to even consider such a thing, and as a musician, for presuming to share the stage with the single most important figure in our music.
Read the entire original article.
The second episode of myself and Bob’s wonderful self-help podcast — North by Midwest — is available now. This week we discuss our trips out of town, soy yogurt and the risks of defying me. Check it out, or subscribe in iTunes.
Last month, before headed to WWDC I wrote a review of all the different external battery packs I’d used up until that point, and mentioned that I’d gone for a 10,000 MaH brick style one called the Satechi Portable Energy Station on the recommendation of The Wirecutter. Since then I’ve used it at home, at WWDC, and during my current six day trip to San Francisco, and it’s worked great.
I usually have my backpack with me, so if I need to charge, I can just put it with my phone in one of the pockets for 30 minutes and have my phone mostly charged. I’ve used it a few times on this trip, haven’t charged the Energy Station itself, and it’s built in power indicator is reading three fifths full.
If you need to buy one locally, or can’t order the Satechi from Amazon in your country, I’d suspect that any other similar capacity charger will probably be just as good.
Using pragma marks to organize source files is one sign that the person who wrote the class put a little bit of care into what they’re doing, but they can actually be more useful than just a way of breaking up an implementation file.
My favorite trick is to use how I name my pragmas to jump to protocol definitions more quickly. I always use a pragma mark before the implementation of a protocol in my source, and in most of the code I’ve other people write, they do something like this:
#pragma mark - Table view data source
A better way is to use the actual name of the protocol you’re implementing instead, like this:
#pragma mark - UITableViewDataSource
Now, if you command+click on that Xcode will jump right to the protocol definition, and option+double-click will take you straight to it’s documentation.
NetNewsWire has been my favorite feed reader for the Mac since I’ve known what a feed reader is. When the great folks at Black Pixel took it over, I knew they’d do something great with it and — since I love being right — I’m happy to say the new beta really is just as great as I’d hoped. Syncing will come in time, and in the meantime it’s absolutely worth it to download the beta and spend the $10 to pre-order the final version.
The hardest, scariest, thing I can imagine is to take something so many people love, and that does so much, and dramatically simplify it without ruining the essence of why people loved it in the first place. The public beta of NetNewsWire 4 shows not only that Black Pixel gets it, but that once again they can deliver on taking something outstanding and making it even better.
My friend Bob Cantoni and I first met at Çingleton Deux about nine months ago, and came up with the idea of starting a podcast together. So, we’ve done that, and we’re calling it North by Midwest (I’m from Portland and Bob i s from Cleveland).
In our first episode we talk about Skype ringtones, expensive dates, my crazy ergonomic keyboard and self checkout lines at the grocery store. Go check it out and subscribe in your favorite podcast listening app.
This interview with Kim Jong Il’s personal chef of ten years kind of blew me away. The man himself is from Japan — and does not come off as a great person — but for several years he was maybe the only person who was able to talk to the dear leader like a human being without getting shot for it.
Brent Simmons slides from AltWWDC on how he made Vesper are really informative. I’m strongly reconsidering my use of Core Data in a new project partially because of them.
Really good article that covers most of the high level changes in iOS 7 that designers need to be aware of:
We’ve scoured Apple’s Transition Guide and picked out the 10 most important considerations for designers. Read on to find out what you need to know about iOS 7 and how it will necessitate changes to the way you present your content.
You can read the entire thing here.
If you’re near Moscone West during WWDC and looking for coffee, you might find yourself defaulting to the nearest available option: Starbucks1. If, however, you want something a lot better and a lot more local, there’s no reason to settle for something you’re not crazy about. San Francisco is full of great local establishments. I know of at least three within walking distance I can recommend.
Right around the corner from Moscone West, there’s Blue Bottle. It’s definitely the place you’ll see the most fussy coffee loving Apple nerds are headed to, partially because its great, and partially because its great. They also have a good variety of other snacks2. On more than one occasion I’ve run into other conference goers while waiting in line who I either knew or didn’t know but was able to start a conversion with. Speaking of the line: it’s usually around the corner. It can be a bit unpleasant when it’s hot out — like it was last year — and although you will meet people in in the line, it’s probably not a great choice if you want to sit down and talk since seating is very limited.
Besides being long, the line actually tends to move pretty fast. If you just want to grab a coffee to go, Blue Bottle is a really good choice.
A little further — but still totally walkable if you’ve got a little time to kill — is my personal favorite place in the city: Sightglass Coffee. The shop itself reminds me a lot of some places here in Portland, and I actually get their beans from a local shop that sells them here pretty often.
When you walk in, the first thing you notice is that it’s surprisingly large. I’m used to things in San Francisco being a little smaller, and Sightglass is the exception. Because of that there’s ample seating upstairs, making it the best place I know of to meet someone if you want to sit down and talk for a while.
You won’t run into as many people from WWDC as you would in the Blue Bottle line, but they make all the same things you’d get Blue Bottle at least as well, and you can actually sit down and relax for a bit.
Granted, I walk a lot at home, and I’m not attending the actual conference this year, so you may be less willing to walk nearly two miles round trip for coffee than I am. If you do want to explore a bit though, Philz is worth checking out at least once. It’s a chain, but only in the Bay Area. The atmosphere is nearly the opposite as Blue Bottle or Sightlass — more hippy than hipster, and what they specialize in making is a pseudo-pour over in these metal pots I’ve never seen anywhere else. Instead of stating a country of origin, the coffees at Philz have names like “Philharmonic” and “Ambrosia Coffee of God.”
It’s worth checking out for a couple reasons. First, you get to walk by AT&T park to get there, which I recommend. Second, the coffee is surprisingly good and the atmosphere seems like something you’re unlikely to see outside of San Francisco.
If you’re the kind for whom half of the fun in a new city is exploring the local coffee culture, San Francisco is a great place to go, and these are just three of a bunch of great options. If you’ve got any suggestions for me, or want to do some exploring, or just want to grab coffee this week, get in touch.
Like everyone else, I have no idea what Apple might announce tomorrow morning. Tim was clearly not blowing steam when he said they were doubling down on secrecy. So here’s my one prediction:
I was hoping for Myriad Pro – It has similar proportions and I think would fit great as a direct replacement for Lucida Grande that looks better on retina screens, but I’m pretty sure it’s Helvetica Neue.
Gabe has one of the best takes on the dangers of giving away our privacy to companies like Google and Facebook I’ve heard:
The danger in Facebook collecting conversations in a restaurant is not that they will know what kind of perversions you might enjoy and sell you appropriate paraphernalia. The danger is that Facebook holds an enormous index of identifiable, personal information in one place.
Of all the people I’ve had the opportunity to spend time with over the past few years, three of the smartest and most talented are Brent Simmons, Dave Wiskus, and John Gruber. Today they’ve released Vesper, an app I was lucky enough to help test. Vesper is a note taking app, but instead of being a replacement for Evernote or Notational Velocity — it’s sort of its own thing.
While other apps do a lot more, the amount of more that’s there usually makes getting to the simple things kind of a kludge. Vesper — in contrast — is painstakingly simple, and designed by someone who was totally okay with people either loving or hating it. I don’t mean that I think anyone was inflexible in creating it — during the beta I saw them take a great deal of care in selecting the best feedback and integrating it into the app. What I mean that I can’t imagine anyone being “just okay” with this app, and that I think the reason for that is that there was a clear vision for what Vesper is and isn’t, and that it’s been adhered to without compromise. My guess is that a lot of people are going to fall into the love it category.