http://aaron.vegh.ca/Ghost 0.7Wed, 07 Feb 2018 05:48:54 GMT60As 2018 opens before us, it’s worth noting the parlous state of the Mac desktop. Yes, we’ve just been introduced to the iMac Pro, but elsewhere things are grim.

The Mac Pro is a lame duck computer, un-updated for years while Apple has at least promised its replacement,

]]>http://aaron.vegh.ca/2018/01/the-hackintosh-of-2018/d47a2195-f159-4674-8d7b-bd66acc2da45Thu, 04 Jan 2018 04:01:25 GMTAs 2018 opens before us, it’s worth noting the parlous state of the Mac desktop. Yes, we’ve just been introduced to the iMac Pro, but elsewhere things are grim.

The Mac Pro is a lame duck computer, un-updated for years while Apple has at least promised its replacement, albeit with no timeline.

The Mac mini is a farce. Last updated in October of 2014, even that update was a disappointment at the time. While Apple has said “it remains a product in our lineup”, I’m not holding my breath for an update in the near future.

The iMac, at least, is an active and loved product at Apple, last updated in June, 2017. But let’s face it, the iMac isn’t a great Mac to act as a home server, which brings me to the topic of this post.

My home server needs were being met by a mid-2010 Mac mini: a 2.4GHz Intel Core 2 Duo chip, 4 GB of RAM, and a later-upgraded 250GB SSD. It’s actually a pretty great little machine; plugged into a 2nd Generation Drobo via FireWire 800, it served up 7TB of video for my Plex server, in addition to working as a data cold store and backup destination.

But it’s been showing its age of late: I have family remotely hooking into my Plex server, and the CPU can’t keep up with three simultaneous transcoding jobs. It was definitely time to upgrade the machine.

Given the state of affairs that I’ve opened with, the idea of building a Hackintosh — a commodity PC running macOS — became very appealing. And now that it’s assembled and installed, here’s a little story on how it came together.

Picking the parts

I’ll just say right off the top that, thanks to tonymacx86.com, this whole process is dramatically easier than it’s been in years past. They offer everything you need to ensure a successful install, and that starts with the right parts. A Mac uses all the same parts that any PC uses, of course. But you have to choose the right ones that are either compatible with the drivers in macOS, or that can be supported by third-party drivers. My needs were pretty simple, since I was building a headless server. I wanted a fast CPU, a big RAM upgrade, gigabit Ethernet, and USB-C for my new Drobo 5C.

Using the Buyer’s Guide — updated monthly — I picked out the parts that met my needs. Here’s a #protip: use PC Part Picker to find the best pricing for your rig. I put together this parts list, which you can use as a starting point. As you can see, spending $730 (🇨🇦) for a brand-spanking-new Mac is a pretty sweet deal!

I ended up ordering no two parts from the same vendor, but they arrived within a couple weeks. Putting it all together was the work of 1-2 hours; I wish I’d taken pictures to show the snarl of cables in there, but it was pretty straight-forward. Once the power cables and data inputs were connected to all the components, and everything was mounted inside the case, it was time to plug it into my TV using the HDMI connector, dust off an old USB mouse and keyboard, and get it setup.

Installation

This was easily the most difficult and worrisome part of the process. The guide on TonyMacX86 is thorough, but I wasn’t immediately successful. Here’s a quick overview of how that went...

First, you need to create a boot disk. Download macOS from the App Store, and then use it to create a bootable USB key (a USB drive won’t do!) using Unibeast.

While that’s happening, setup the BIOS on the Hackintosh so it supports the features that macOS needs. They’re listed in the article, but can be difficult to find in the BIOS with its many layers of UI. I found this article helpful because it referred to the same BIOS as my Gigabyte motherboard.

Once Unibeast has made your bootable install USB key, plug it in and startup from it. You have to pick it as the boot disk, but once you’re past that it looks and works like a real Mac! Go to Disk Utility, format the SSD, and then run the installer. I found that the machine would reboot more than twice, but it will ultimately finish the OS install.

Here’s where it gets “fun”. While your SSD has macOS on it, you can’t boot into it because you need an operational EFI (Extensible Firmware Interface); this allows the disk to boot the OS. So you initially boot the hard disk from the USB key, and then, once on the Mac desktop, you run an app called MultiBeast to install the EFI and drivers that will allow you Mac to boot by itself.

Unfortunately, this final step never worked for me: the EFI was simply refusing to work, leaving the Mac stuck in a kernel-panic-reboot cycle. Ultimately, I ended up booting into the install key’s OS, opening Terminal, and copying the EFI partition from the USB key to the one on my SSD. In your face.

But now. Now, my friends, witness the firepower of this full armed and operational Hackintosh!

Meh, it’s just an ugly black box that sits in my basement by the router. But it works really, really well.

How well? Let’s finish with a benchmark. I used SunSpider, a WebKit benchmark that I ran on my current 5K iMac from 2015, my iPad Pro 12, and my new Hackintosh. Here are the results:

5K iMac: 125.6ms
iPad Pro 12: 144.3ms
Hackintosh: 102.1ms

Hot damn. I wish I’d thought to run this on my old Mac mini server, but I suspect the number would be quite a bit higher.

]]>On Inauguration Day, January 20, 2017, I was doing my best to ignore the proceedings in Washington when my friend called to joke about it all. While Kash is a Canadian citizen, his family is from Pakistan and he's a Muslim. We hadn't had a chance to talk much during]]>http://aaron.vegh.ca/2017/01/inauguration-day/d2932f8e-9377-4284-bf25-4838e5dd098aSun, 29 Jan 2017 23:04:44 GMTOn Inauguration Day, January 20, 2017, I was doing my best to ignore the proceedings in Washington when my friend called to joke about it all. While Kash is a Canadian citizen, his family is from Pakistan and he's a Muslim. We hadn't had a chance to talk much during the election, but I'd assumed his feelings to be similar to my own. I was shocked to hear him talk about Clinton as "just as bad" as Trump, and to hear him opine that this isn't so bad. My reaction was one of anger and disbelief, and while we ended the call cordially enough, I felt I had to write him something longer to express what I've been observing. This email took quite a lot of time to write and annotate with links, so I thought it'd be worth sharing here.

Hey Kash,
The last several months have been terribly troubling and painful for me, and I think some of that bled out in our phone call today, and seems to have taken you aback. Maybe I haven't struck you as an alarmist; in general I tend to be more measured in my reactions to elections, both here in Canada and in the US. I remember when Bush Jr was elected, both times, and laughing at those dumb Americans. I knew he was going to be a terrible president, but I knew he wouldn't be there forever. Turns out, he really was a terrible president, maybe the worst in living memory.

But we're at a point where we can see pretty clearly that Donald Trump may be the worst president ever, maybe even the last president. And thinking about it, I can understand how many people, including you, are having trouble seeing through the fog of conflicting opinions, claims of "fake news", opposing viewpoints and general flailing on all sides. That's why I'm writing this. I want to back up what I told you on the phone earlier: that if you look at the primary sources, and separate fact from bullshit, you'll see what I see, and be as scared as I am.

That's right, I want my gift to you to be fear. You're welcome, my homeslice.

The task of enumerating Trump's failings feels pretty overwhelming, to be honest. He is just so incredibly wrong, on so many different fronts, that listing them out is just a huge task. So let's see how I do.

A Word About Primary Sources

Before I do that, though, it's important to understand what constitutes a source worth paying attention to, from one that isn't. One of the chief props in this election was the propagation of "fake news", where people invented web sites, wrote made-up stories and posted them to Facebook and Twitter, where they were breathlessly believed and exponentially shared. The old saying, "A lie will go round the world while truth is pulling its boots on," applies here. People who are already ideologically aligned against someone will give a story less scrutiny (or none, let's face it) when it lines up with their beliefs.

The most damning epithet used in this election was the phrase "liberal media", or "lying press". As individuals, we have to evaluate the news we read. In the normal course of our lives, we have been able to trust to journalistic integrity: this is the notion that the people writing the stuff that appears in newspapers are following the best practices of the trade. This means something. It means representing the events in a way that both explains issues and hews to the truth of matters.

What I've described above is called news, as distinct from opinion, where individual voices can marshal their own arguments to explain events, but can do so by ignoring facts, or interpreting them based on an ideological viewpoint. You find both of them in the newspaper, and you have to keep that distinction in your mind when you're reading.

So it's with that mindset that you can, in my estimation, read The New York Times, The Washington Post, The Toronto Star, and know that what's in their News sections represents the truth, because the journalists writing it are the best in the business: they have interviewed the people, dug up the records, and are presenting the facts as they are known.

However, there are plenty of outlets that you cannot trust. They aren't "news" in the journalistic sense. They are opinion. They're largely on TV, and the worst of them masquerade as news. I'm thinking here of Fox News in particular, though they're not the only ones. They're just the worst. Here's an article about how one organization tested claims made on three major news networks and scored them for how truthful they are:

You should read that whole article, as it really lays out how the consequences of telling lies leads to a misinformed public. This is the very foundation for how someone like Trump gets into power. Because if a segment of the population can be reliably lied to, then all bets are off. During this election, we saw the proliferation of tons of neo-nazi, "alt-right" opinion/lie sites pretending to be news. And those groomed on watching the half/untruths from Fox News gobbled it right up. Today your average Trump voter will simply not seem from the same planet if you cite a fact printed in the Times.

Here's another great graphic that outlines what sources you can trust versus those you can't, on both sides of the political spectrum.

Trump's Truthfulness

You can't really go anywhere without understanding how absolutely, unrepentantly mendacious this man is. When he talks, the amount of it that's technical bullshit (provably false) is damn near 100%. Whether on Twitter, in his stump speeches during the campaign, in interviews... his record of telling the truth is vanishingly low.

The best primary source I can cite for this is from Politifact. They exhaustively collect his statements and rank their truthfulness, keeping a total tally on a five-point scale. As of this writing, a solid 70% of his statements are some form of false. http://www.politifact.com/personalities/donald-trump/

Politics isn't a gameshow. It's a life-and-death practice that affects the lives of hundreds of millions of people. Those who want into the profession must be truth-tellers, because trust is the foundation they work upon. When the electorate can't trust its leaders, government becomes dysfunctional. I believe this dearly, which is why Trump's record as a liar is the scariest thing about him. Because who even knows what he actually believes?

This isn't a primary source, per se, but an important consideration is Trump's mental health. A group of psychologists have been watching him for years, and believe him to be suffering from a condition called narcissistic personality disorder. It's an incredibly dangerous condition to have, because the patient is the last to admit it exists. And Trump's ultimate confidence in himself could readily lead the US (along with us) into disaster. http://www.theatlantic.com/magazine/archive/2016/06/the-mind-of-donald-trump/480771/

Trump's Money and Company Holdings

One of my go-to methods for determining peoples' motivations is to look at how they benefit in a given set of circumstances. He makes all kinds of claims about how rich he is, but Trump has refused to release his tax returns, which would show how much money he has, and most importantly, where it comes from. This is important because where the money comes from explains how people behave.

This is a huge problem. Every president up to Trump has had to take their businesses and other assets and place them in a "blind trust". Practically, it means they sell their assets and hand the cash over to a money manager where it earns a modest interest rate, and they can't know anything about it till they leave office. Yes, this is, in Trump's case, a titanic sacrifice. It means mothballing a global business empire (from what he tells us, anyway). But every president before him has done this and it's the only way to know there are no conflicting interests.

This is clearly not sufficient; his sons have been an ongoing part of his transition team, and it's easy to imagine them talking about business every day. That knowledge can't help but influence him when he's executing policy as President.

In sum, Trump's deeply entangled business holdings around the world mean he can't be trusted to work on behalf of the country.

Trump's Complicity with Russia

Maybe you're okay with Trump profiting from the presidency. In many ways, it's not that interesting to me: corruption and government go hand-in-hand, and if Trump manages to enrich himself beyond even the wildest shame of his most corrupt forebears, that's really just one more tick on the board, and one that won't particularly affect us. But in the realm of international dealings, I think the biggest strike against him is the involvement of Russia.

That's the follow-the-money evidence. You've probably also heard something about the US intelligence community's findings in recent days. That report explains how US intelligence agencies believe, with a high degree of confidence, that Russia directly intervened in the election by spreading fake news with the specific intention of getting Trump elected. They did this by spreading lies about Hillary Clinton.

The Russians spread lies about Hillary Clinton. Which means, the things you might think you believe about Clinton are, in fact, untrue. I'll get to this again later.

The intelligence agencies stopped short of saying that Russia's actions influenced the election. But we can draw our own conclusions about that. Look at the election results: Clinton won the majority of the vote by 2.8 million. Trump won because he earned majority votes in three swing states. You can look at the raw data here. Trump won Michigan by some 10,000 votes, a rounding error in a state where 4.8 million votes were cast. In Pennsylvania, another big upset state, victory was decided by 50,000 out of 6.1 million votes cast. If you recall the stories about Clinton going into the final days of the campaign, I don't think it's a stretch to imagine people who might have voted for Clinton just staying home, or those on the edge choosing Trump. I believe Russia was spectacularly successful in influencing the election, and I don't think it's a stretch to believe that.

The final link hasn't yet been proven: that Trump's campaign worked behind-the-scenes with Putin. The evidence to support that hasn't been found yet, but given everything above, I feel like there's a pretty high probability Trump knew exactly what he was doing, who he was supporting. That makes Donald Trump guilty of treason, a capital offense. That should really worry you.

Trump is an Odious Man and He Is Surrounded By Odious People

Do we have to like the President of the United States? It should help him/her get elected if they're likeable. But being likeable is deeper than it appears. A person we like, we like because they share our values and social mores. Donald Trump clearly doesn't share our values or mores. And if there's someone out there that does share them, well, they're no friend of mine.

We've also seen him make comments during the campaign referring to Mexicans as rapists, and every Muslim a terrorist. These dog whistles were just the trick to convince his low-brow supporters that he's their man.

I've already mentioned Steve Bannon, Trump's chief strategist during the transition period. The Globe and Mail did a good profile of him (http://www.theglobeandmail.com/arts/television/alt-right-media-outlet-breitbart-moves-into-the-donald-trump-administration-with-stephenbannon/article32929482/). His principal sin here is his running of breitbart.com, the so-called "alt-right" news blog that has become enormously popular among Trump supporters. If you're looking for the racist, Islamophobic, woman-hating underbelly of the Internet, look no further. There's no "news" there, just hateful rhetoric disguised as same. This is the sort of news that Trump can love, so Bannon is by his side, helping him plot policy in the new government. Just to clue you in here: the term "alt-right" is really just a way of saying "far, far right." You know who else was far, far right? Yeah: Hitler. These assholes are basically Nazis. Here, read more: https://en.wikipedia.org/wiki/Alt-right, with attributions.

And then there's Trump's cabinet. His picks to run the critical policy portfolios of the US government have to be vetted by Congress and the Senate, and it's going pretty slow. They're so dicey that even the Republican-dominated branches of government are having a hard time swallowing them. Here's an overview: https://www.theatlantic.com/politics/archive/2017/01/trump-cabinet-tracker/510527/, but some highlights:

Rex Tillerson, as Secretary of State, the Exxon Mobil CEO, has zero government experience and those ties to Putin.

Steve Mnuchin, as Secretary of Treasury, was a senior exec at Goldman Sachs, and who raped the country during the financial crisis in 2009.

Jeff Sessions, as Secretary of Justice, hates immigrants, and is a flaming racist who wants to take the vote away from black people.

Rick Perry, as Secretary of Energy, who campaigned to shut down this very department, though it turned out he didn't actually know what it was responsible for (largely, turns out, the management of the US nuclear arsenal).

But... what about Hillary?

I personally didn't consider Clinton the finest person to run the country. But I would literally take Mike Pence — a racist, misogynist scumbag — over Trump at this point. Pence is at least a politician, and would operate under the rules, which Trump is all too happy to flout. So to me, the debate isn't about Hillary at all.

But it needs to be clarified that she was utterly sandbagged by lies and false provocation, and the things you hate about her stem from misinformation at best, and your own potential misogyny at worst (when it comes to prejudice, it's all of our duties to be brutally honest with ourselves and identify those pernicious thoughts that unfairly colour our own opinions). There are tons of sources all over the place showing why Clinton was being unjustly blamed for Benghazi, for her handling of confidential emails, and for "pay-to-play" schemes within the Clinton Foundation. Here's an article lining them up and shooting them down (for the most part): http://www.vox.com/2016/9/13/12770636/hillary-clinton-email-scandals-explained.

But here's the thing I can't even come close to understanding. Let's say that the worst of these accusations were true. For the sake of her own staff's convenience Clinton used Blackberries to communicate rather than State Department servers. Let's also say that she evaluated the risk of terrorist attacks at Benghazi and decided that embassy didn't need more military support. That once or twice, some diplomat who made a big donation to the Clinton Foundation got a personal meeting with the Secretary of State. Does any of that compare to the horrors I've played out above with regards to Trump?

I see it sort of like this: there's a politcal realm, where there are specific rules of engagement. The players are not always perfectly above board, and sometimes they make decisions out of self-interest, or their careers, or the whims of the large companies who funnel money into their re-election campaigns. But the motivations of those politicians is often well-understood, and they are always subject to the laws of the constitution, the three branches of government, and ultimately their constituents, who can vote them out the next time.

With Trump, every standard of discourse has been systematically shat upon. He can't be relied upon to tell the truth, he has no respect for the rule of law, and he makes no effort to disguise his own efforts to enrich himself from his presidency. The result will be a global weakening of the American influence, which will have a catastrophic effect on everyone. Everyone. All because a shitload of white, racist, homophobic half-wits in middle America have far too much influence in the Electoral College.

So when you say there's no difference between Clinton and Trump, I tend to lose my shit a little.

So I hope this letter explains my reaction during that week-ago phone call, and I hope it gives you the motivation to pay attention to the right sources when you're formulating your own thoughts about what's happening in the US now.

]]>
Throughout this awful US election season, I've been talking a lot of trash about Donald Trump, and justifiably so. There's plenty of documentation to support what makes him a repugnant human being, and there's no sense in covering it more.

The fact is, the people of the United States elected

]]>http://aaron.vegh.ca/2016/11/living-with-the-consequences/4e64a746-0f36-49c5-a477-c4a399e12113Wed, 09 Nov 2016 15:31:07 GMT
Throughout this awful US election season, I've been talking a lot of trash about Donald Trump, and justifiably so. There's plenty of documentation to support what makes him a repugnant human being, and there's no sense in covering it more.

The fact is, the people of the United States elected him President. And they handed him a cooperative House and Senate, paving the way for a fully-stacked deck for the first time since the 1920s. For those of liberal bent, this is a pretty dark time.

My daughter, age 12, has been listening to me talk throughout this election, and has crafted her own ideology based on mine, believed more rigidly, more intolerantly because she is so young. When the results came in early this morning, I had to decide how to tell her that every horror story I related had actually come to pass.

It's a question I've seen repeated on Twitter today: what do I tell my child? For what it's worth, here's what I told mine on the way to school:

You're feeling angry and betrayed this morning. You believed that your world was a stable place, that it made sense to you, and what's happened today has forced you to realize the world isn't what you thought it was. Your first reaction is going to be to spread that anger to others: you're going to say angry things about the President-Elect, about his policies, about the people he's going to put around him.

Don't fall into that trap. Hate is what got us here, but love and understanding are the only things that can set things right. The people who voted for Trump are hurt and angry too, and we have two choices: we can treat them as aberrant, idiotic, uneducated losers, or we can realize they're people too with complaints about a system that has failed them.

As Canadians, we are especially powerless to effect US political discourse, but we are still atoms in a chain reaction that can spread care, love and understanding.

So when you hear people talking about the election, or about Trump, you have a choice to either say nothing, or to help talk people down, to defuse the anger. But what I hope you can not do is light the fires of hate in other peoples' hearts, to help separate people, to make our problems worse.

I hope these things for my daughter, knowing that I'm going to struggle to that same standard.

I'll finish with a quote from that wonderful monument to liberal democratic values, The West Wing, and its first episode of the third season, Isaac and Ishmael. This quote referred to Islamic extremism, but it applies equally well to how we should respond to last night's events.

Learn things. Be good to each other. Read the newspapers, go to the movies, go to a party. Read a book. In the meantime, remember pluralism. You want to get these people? I mean, you really want to reach in and kill them where they live? Keep accepting more than one idea. Makes 'em absolutely crazy.

]]>It's Sunday morning and I'm reflecting on my failures. A few minutes ago I removed Magpie from the App Store, bringing to an end yet another in a long series of experiments that validate the hypothesis: Does Aaron know how to fail?

Oh hells yeah, Aaron knows how to fail.

]]>http://aaron.vegh.ca/2016/08/failing-early-failing-often/52572999-4962-4503-9fe0-d9e121b76dfeSun, 14 Aug 2016 16:11:20 GMTIt's Sunday morning and I'm reflecting on my failures. A few minutes ago I removed Magpie from the App Store, bringing to an end yet another in a long series of experiments that validate the hypothesis: Does Aaron know how to fail?

Oh hells yeah, Aaron knows how to fail.

On my podcast last week we received a question from a listener, which was essentially, "why does nobody talk about their failures? Why do we only hear about the success stories?" My answer at the time, glib though it may be, is pretty accurate. Nobody wants to bring attention to their lack of success, for fear of letting slip the idea that you aren't good at what you do.

On the other hand, I've had so little success bringing attention to my products, I have little fear of letting the news of my failure reaching too many ears. So here's what I want to do: lay out the failures I've had over the years, and describe in quick terms why I thought they failed. If you're into failure, this is going to be a goddamn clinic on it.

Let's go in order.

Macinsite Magazine

When: 1999 What: I thought a magazine for Canadian Mac users would be the best thing ever. As an experienced newspaper editor, and coming out of a master's degree in publishing, I thought I could make this happen. I put together an editorial team, sold ads, and published issue 1 on July 1, 1999. Why it failed: Pure and simple, there was not nearly enough money. While we sold 1600 copies of the first issue, advertisers didn't come back for issue 2, and I couldn't afford to print it. It was an ugly and embarrassing episode that saw my name mocked in the pages of Masthead magazine, an industry journal which has also since died (hey, magazines are a tough biz).

In the intervening years between Macinsite and the Aaron you know and love as the nerd-programmer, I got married, worked for The Man, and then learned to program. And then...

Code: Source Code Viewer

When: 2010 What: This was my first shipping iOS app. I was lured in by the size of the App Store market, and the stories of small developers striking it rich. An HTML source code viewer, I thought, would appeal to mobile developers, and bridged a gap missing in mobile Safari. I charged $1.99. Why it failed: Even in 2010, there were too many apps in the store. I did the usual stuff announcing my app, sending out press releases to journalists and talking it up to everyone I knew. It sold a handful of copies. Ultimately, I didn't even use it that much, and it was a first-time app; it honestly wasn't that good! So it was with some relief that I removed it from sale a couple years ago.

Tiberius

When: 2011 What: I really felt that Code wasn't a good-quality app, and with more practice I could write something better. I had the idea for Tiberius watching Star Trek VI: The Undiscovered Country, where Kirk's personal log is used as evidence against him. I really admired the UI of that log, and sought to emulate it in an app. You can see more about Tiberius on my resume page. I made the app free, and charged $.99/month for an online service that let you store and share your log entries. Why it failed: Again, getting the word out was tough. There was no specific audience for this app, except perhaps Star Trek fans. But even those I could identify didn't seem to be that interested, so I imagine the appetite for people creating selfie videos in a futuristic interface was lower than I'd imagined. And guess what: I rarely used the app as well. I pulled the app after a few years, and nobody noticed.

ThreadOne

When: 2013 What:App.Net was an alternative to Twitter meant to be more open, and had gained a following. As enthusiastic ADN users ourselves, my friend Adam and I agreed to write a Mac app that brought the capabilities of the iOS app Whisper (alas, nothing remains to link to about this terrific app!) to the desktop. Adam brought his wonderful design sensibilities to the app, and I coded it up. I charged $4.99 for the app. Why it failed: In the early going it really felt like this one had legs. I ran a beta test, got terrific levels of interest and feedback. The launch went pretty well also, and early sales were substantially non-zero. But then this happened — App.Net was essentially shutting down. Overnight sales of ThreadOne died, and people left the service. It was like a giant pair of scissors snipping through the cord. It was over, no question. Lesson learned, kids: don't build your shit on other peoples' services.

Magpie

When: 2015 What: Essentially, think of a read-it-later service like Instapaper, but made for web video. Just the ease with which I could communicate the idea made it feel like a winner. Who wouldn't want that? Who, dammit? So I built my most ambitious app yet: one for iOS, for Mac, later for Apple TV, and a small web service to support it, all based on Apple's Cloud Kit. A lot of moving parts, and it worked. You could readily save a video on many web pages to view later in a native video player. This was especially interesting because it scratched an itch that I had; I used, and continue to use Magpie regularly. I charged $4.99 for it on Mac and iOS/AppleTV. Why it failed: Who wouldn't want it? Everyone. Turns out the biggest problem with making an app for "everyone" is that you can't just tell "everyone" anything. I'm pretty sure there are 100,000 iOS users out there who would pay $5 for this app, but I have no way to reach them. Instead, I was selling five copies a month.

#

When I think about this streak of mine, I can see clearly the line of thinking, the progression of ideas that are getting refined over time. As of August 2016, I have distilled the question of "what makes a successful app?" down to these bullet points:

Something for a niche, so you can reach them with your marketing message;

Something that pays via subscription, so you don't need to sell to everyone, but rather a smaller group;

Something that relies on your own web service, so you control your infrastructure; and

Something that you need yourself, to sustain interest and drive continual improvements

Of course, this list isn't complete without the usual standards of quality development, a novel, useful idea, and the drive and care to make it, which are intangibles and difficult to describe.

However, my next idea currently under development, ticks all these boxes. We'll see if that makes any difference.

]]>I just read Brian Gilham's piece, You Don't Need a Computer Science Degree, which simply makes the point that prospective iOS developers (or let's face it, any developer) don't need a computer science degree to become successful in this field.

As the holder of a bachelor's degree in English and a Master's degree in Publishing, I can't help but agree; but I also find myself moved to expand on that point. After all, the study of computer science is, at heart, an academic pursuit into the workings of computational devices. The skills you pick up during that pursuit are often applicable to the modern job of programming, but I think a comp sci degree makes you wildly overqualified for being a paid app developer.

Here's an analogy from a different world: imagine you wanted to be an electrician. You could take physics in university and understand the underlying principles of how electricity works... or you could attend a trade school and learn the practical skills.

Yes, I do think of programming as a trade, not unlike electricians, plumbers and carpenters. And like those trades, there are many paths to becoming one: a college diploma, apprenticeship, or self-teaching.

Brian's reference to Bitmaker Labs in an earlier piece points the way to a trade-school-equivalent for programmers. I can't speak to the quality of institutions like Bitmaker, but I can say with confidence that formal instruction alone won't qualify you for this type of work.

You've heard it before: "programming is hard". It is.

I mean it: programming is fucking hard. I think the only way you can be truly successful with it is if you have flipped a switch in your brain that will simply not endure a world in which you don't become good at programming.

It's easy to gloss over how much work went into my journey from novice to professional programmer. I've been doing it since 1999, and you can do the math and say to yourself, "wow, he's been programming for 17 years", and that doesn't get to the heart of it at all.

In those years there are periods where I'm fixated on getting something to work. I'm poring over books, scouring web forums, sitting on the toilet thinking about it, talking it out in the shower, noodling the problem in my head while I'm vacuuming the house, losing sleep at night, staring off into space while I'm eating dinner, and constantly, always, always, always coming back to the computer to push it one pixel further.

I would have to push myself to sit in front of the computer sometimes, at night after working a full day at my day job, just to keep learning, keep improving. It's a terrible slog.

And it's all in your head. This period of learning reminds me so much of my youth learning karate. I went into the dojo a cowering weakling, the constant victim of bullies in school. Over a few years I gained the skills to hone myself into someone with confidence, poise and, perhaps, a certain look in the eye that made the bullies move on to another target.

I hated karate. I hated the physical fitness, and the fighting. But it was a place where I forced myself to be, to improve and be better.

Fortunately, I fucking love programming. Like, in a weird way. I can't not program. Which is why all that suffering and pain over the last 17 years (and counting!) is the best way to become a programmer.

You can take a course and get a nice piece of paper from Bitmaker Labs. You can hang out with another programmer, "pair" with them for days at a time. You can read a book.

But you're not going to be a programmer unless you accept no world in which you are not a programmer.

As a postscript, I'll read to you from the book of Hillegass, one of my first programming books. Two passages in the beginning are particularly relevant:

All sorts of people come to my class: the bright and the not so bright, the motivated and the lazy, the experienced and the novice. Inevitably, the people who get the most out of the class share one characteristic: They remain focused on the topic at hand.

And on the subject of being smart enough:

...stop thinking about yourself. While learning something new, many students will think, "Damn, this is hard for me. I wonder if I am stupid." ... Before going any further, assure yourself that you are not stupid and that some things are hard. Armed with this silly affirmation and a well-rested mind, you are ready to conquer Cocoa.

]]>
I've spent most of the past decade with a near-maniacal, laser-guided focus on one ambition: to become an indie software developer. It officially kicked off after seeing Daniel Jalkut give a talk at C4 in 2007. Success hasn't turned out to be exactly what I thought, though it would be]]>http://aaron.vegh.ca/2016/05/microelectronics-are-my-new-jam/c6d425bf-a8d5-4497-a989-0a46a270b180Fri, 06 May 2016 17:20:24 GMT
I've spent most of the past decade with a near-maniacal, laser-guided focus on one ambition: to become an indie software developer. It officially kicked off after seeing Daniel Jalkut give a talk at C4 in 2007. Success hasn't turned out to be exactly what I thought, though it would be churlish to complain overmuch: I run my own consulting business and I'm a full-time iOS developer.

But my ambitions to be a product maker have mostly faded. I think Josh Centers' column today for Tidbits really sums it up. Sure, it's totally possible to be successful, but I no longer believe there's profit in the venture for someone like me.

I spent a lot of the last couple months in some kind of funk. I'd been working on a "super-seekrit project" — yet another stab at creating a viable product business for myself. Rather abruptly I became convinced that there was no way this would ever work. How could it? I stopped working on it.

But I'm not here to talk about that. Instead, I'm here to tell you about what's replaced it right now. Not a hare-brained scheme to attain the independence and success I've always wanted, but a neat hobby that has been giving me a lot of joy. Electronics!

Zip. Clank. Pop.

As someone steeped in the world of software, it's sometimes easy to forget how ephemeral our work is. I can write thousands of lines of code and the result can be as banal as an image animating just so, which would only be appreciated if it didn't work correctly, and then not at all.

Diving into the world of electronics, it is shockingly (see what I did there?) tangible, ever-present even when not in use. When I work with electronics, it feels like I'm playing with Lego: I have to collect all the different kinds, and I'm engaged in finding the right ways to put them together. My most helpful guide on this journey, Stefan Arentz, joins me on what used to be my Monday night coding times at the local coffee shop. With our boards and wires and chips all over the tables there, it occurred to us that we look like young radicals building a bomb! Good thing we're not brown, huh?

My first learning project is actually something I want: a wearable thermometer. It consists of a temperature sensor, a four-digit, LED 7-segment array, power button, controller chip and battery. Here's an early prototype with the components laid out on a prototyping board:

The project is crazy-simple, of course, but fascinating and illuminating (see what I did there? Again?). That seemingly basic display actually introduces a host of problems, requiring some 12 pins to address all the segments. Which means I need to find a way to get a second controller in there to just handle the display.

There is software involved, of course. You start with an Arduino and write some pretty simple C code to control the signal. If you can write multi-threaded networking code and interact with Core Data, this'll be a cakewalk.

Ultimately, once I have this working, I want to re-build it from scratch, using smaller components (the temp sensor is HUGE, and that controller, the ubiquitous ATMega328P, comes in a package smaller than a postage stamp). I can design and have a professional printed circuit board made, then solder my components to it. Then I can design and print a case with a 3D printer, put the completed project inside, and clip it to my shirt. Boom, instant local temperature at a button push!

Okay, so maybe that's not interesting to you. But the more I learn about this stuff, the more interesting projects occur to me. I have access to a galaxy of components that can sense, act and communicate with the rest of the world; Creatron has become my new favourite store. Here's my last haul:

It's a limitless fun zone. And I love that it comes with no strings attached. No expectations, no business plan, no app review team telling me what's possible. It's the start of a new journey for me, one where I have a very dim understanding of how things work, and the near-maniacal, laser-guided focus to figure it out.

]]>I've been writing on this blog since 2008, and in that time it's been all Wordpress. In these last eight years I've seen Wordpress rise, become enormously popular, turn into a CMS and a replacement for web development altogether. I've also seen it turn into a popular vector for hackers.]]>http://aaron.vegh.ca/2016/02/new-blog-new-something-something/176c8e1e-4b2d-449e-9d5f-6cfb262416f2Mon, 15 Feb 2016 01:45:24 GMT

I've been writing on this blog since 2008, and in that time it's been all Wordpress. In these last eight years I've seen Wordpress rise, become enormously popular, turn into a CMS and a replacement for web development altogether. I've also seen it turn into a popular vector for hackers.

In the face of both increasing complexity (it just does so much more than blogging!) and decreased security, I've been casting about for an alternative. The solution had to be both pleasant to use, more secure, and provide some mechanism for migrating my existing blog articles.

As of today, that solution is Ghost. I spent the weekend moving things over from the old blog, and the process was far from seamless. Ghost has been around for a couple years, but it's still considered beta software. Here are some of the issues I ran into:

Ghost runs on Node.js, which I'd never tried before. A quick

apt-get install node nodejs-legacy

and I was on my way.

I followed this article to perform the migration from Wordpress. One piece of advice they give, which I ended up regretting: moving all images to Cloudinary. Don't do it! Instead you should move all your images to the new installation, and then, in the JSON that you get out of the Wordpress export, do a search 'n' replace for those file paths.

The permalink situation is pretty rough. While you can set the blog to use a date-based permalink for blog posts, you're stuck with

http://domain.com/year/month/day/slug

To change it to match your Wordpress install (and thereby preserve your existing links) you have to edit the settings in the SQLite database by hand. Nerdy, but not for everyone. Here's a page to show you how.

To run it on your Linux box in production, you have a lot of choices, but by far the best (to my mind, anyway), is to use either Apache or Nginx as the front-end with a proxy to the locally-running instance of Ghost. Scroll down to "Init Script" on this page for details.

I wanted to give up a few times through the weekend, but here I am. I'll see how it goes over the next little while before deciding to migrate other Wordpress blogs that are on my server.

Sure is pretty though.

]]>I got my first job out of school back in 1998. I was responsible for building and maintaining a website for a Hamilton-based magazine publisher. Less than three months into it, the publisher fired me: we appeared to have fundamental differences of opinion on what my job actually was. I]]>http://aaron.vegh.ca/2015/11/why-contracting-is-the-answer/32d8ef8a-2b1d-48d4-9adb-24db0f4ed5eeTue, 03 Nov 2015 14:26:53 GMTI got my first job out of school back in 1998. I was responsible for building and maintaining a website for a Hamilton-based magazine publisher. Less than three months into it, the publisher fired me: we appeared to have fundamental differences of opinion on what my job actually was. I thought it was a technical and editorial position, while he thought I should be selling ads and building business partnerships.

A year later, I was hired by a securities firm in Toronto as part of a team building a new intranet (remember those?). I had just gotten engaged with the amazing Erin Thomas, and we had rented an apartment together in town, in advance of our wedding in September 2000.

Three weeks before our wedding, my entire team was laid off in an internal management war that my side apparently lost.

Months later, I had a new job, with Compaq Canada. I was a content producer for compaq.ca. There were good years there. And then HP and Compaq merged (or something). I managed to survive the initial layoffs, but then three or four rounds later, in 2006, they got me.

I was sensing a pattern here. When you get hired by a company, you are building a relationship with the employer that’s founded on loyalty. That’s the theory, anyway. In practice, at best you’re a cost centre that needs to be justified. At worst, you’re a pawn in a game you have no control over.

The part of the story I’ve left out in each vignette above is the after effect. Losing your job is fucking hard. As an employee, living paycheque to paycheque, having that flow cut off is like having your world torn away. Each of those periods were devastating pain points in my life.

My solution was to incorporate my own business. After all, I can’t fire myself.

My business is contracting: from then on, I was selling my services to companies. They can fire me, not renew my contract, go out of business, or just fall off the face of the earth, and it’s not a disaster; it’s just a part of my business’ life cycle.

Contracting is not for everyone. Sometimes it’s not even for me. There are definitely pros and cons. Let’s look at The Ugly first:

Cons

You should incorporate your business. It’s a great idea for protecting yourself from liability, and taking advantage of the special privileges that corporations enjoy with your local tax agencies. But it’s annoying and expensive.

You need to supply your own benefits to replace those an employer might provide. I went through my local Chamber of Commerce.

You need to hire an accountant at the very least, and perhaps a lawyer too (I’ve avoided the latter thus far). Make sure you hire a good one, though. I had a bad one, and I got fucked so hard that my grandchildren are going to feel it. That’s another story.

You can never rest. If you’re currently employed in a contract, things might be going great, but that other shoe is going to drop at any moment. Diversify your income as much as possible in order to survive that shoe.

It’s not all bad news, though.

Pros

Freedom. Oh by the Beard of Zeus I love the freedom. A job is a commitment to work when and where the boss tells you to work. A contractor can work from anywhere and anytime she likes. Its the work product that matters, not the time spent in a chair.

Income. Whenever I test the J-O-B job market, I find the salaries disappointing compared to the revenues I pull in my average year. To be sure, an employer is also providing benefits with that salary. And I have to pay myself out of that revenue, along with benefits and payroll taxes. But I have more levers to pull to control what I make, than I would as an employee.

Diversity of work. It’s pretty hard to get bored with your work when you contribute to multiple jobs a year. 2014 was crazy: I did work on things as diverse as a hockey app, a trade show app using iBeacons, an internal business tool with some significant PDF involvement, and a few more. You learn a lot of different skills; the number of clubs in your bag multiply faster when you contract.

I hear there are regular jobs that have some of the pros I list here: they accept remote workers, pay them well, and give them varying responsibilities. But they’re pretty darn rare, and I’ll never believe they won’t unload me at some point of their own choosing.

As I write this, I’m just coming off a contract that ended with the suddenness of a balloon popping (the curious can always keep track of my current state through my Now Page.). I’ve fielded contacts with opportunities that include those looking to hire full-time employees, and those looking for freelancers. It seems, as usual, that the former are more plentiful.

And while some of these full-time jobs look really interesting, I have to take a deep breath and remember why I’m here.

]]>First, the good news: Magpie for AppleTV is coming. Here’s proof!

Nothing too fancy, but it does what it says on the tin. Here’s a shot of the home screen so you can see the icon and “top shelf” image.

Nothing too fancy, but it does what it says on the tin. Here’s a shot of the home screen so you can see the icon and “top shelf” image.

Beauty!

In order to get to the bad news, I have to talk a bit about how Magpie works. It uses Cloud Kit to store your saved videos. This saved information is part of your iCloud account, so it automatically follows you around to any device that you’re logged into iCloud with. It’s pretty goddamn magical, and it works great.

Having used iCloud since its inception, I’ve been able to happily ignore one shortcoming of the service: your iCloud login is a universal setting on the device. Only one iCloud account can be in use on your iPhone, your iPad, your Mac… and now, your AppleTV.

That limitation means that, for Magpie and other apps that use CloudKit to store its data, only one user’s data is available to an application at a time.

To bring it home with an example: if there are two Magpie users in the same house (ha ha! but anyway, use your imagination), only one of them will be able to watch their stuff in Magpie on the AppleTV. To see the other user’s videos, you’d have to laboriously visit the Settings and re-login as the new user.

Ever since the iPad came out, people have clamoured for a multi-user experience, so that different members of a family can share the same iPad. Apple has ignored that request, but it was presumably under the auspices of wanting everyone to own their own iPad.

With an AppleTV, that’s just downright impossible. The family room television can only reasonably have one AppleTV plugged into it.

Unlike with the iPad, I think real end users are going to get burned by this limitation. Ha ha, not Magpie users, but users of actually popular apps. I’m frankly amazed that Apple didn’t think of this use case. Maybe I’m just missing something (in which case I’ll update this post and burn with the everlasting shame that comes from being publicly wrong).

Update
Just days later, and Apple has responded: this Radar has been closed as a Duplicate. Good news; hopefully a fix is planned.

]]>This is a post about Marco Arment’s decision to implement patronage pricing for his app, Overcast. It serves simply as a means for me to reach a conclusion about a group that I looked up to until now.

The word I keep coming back to is “disingenuous”. I looked

]]>http://aaron.vegh.ca/2015/10/disingenuous/51987301-ff62-483c-ae24-380dd5ac1211Thu, 22 Oct 2015 00:04:52 GMTThis is a post about Marco Arment’s decision to implement patronage pricing for his app, Overcast. It serves simply as a means for me to reach a conclusion about a group that I looked up to until now.

The word I keep coming back to is “disingenuous”. I looked it up:

not candid or sincere, typically by pretending that one knows less about something than one really does.

In both cases, Marco wrote long and thoughtfully about his reasoning for his actions. And both times he used a lot of words to, in my opinion, say everything but the truth.

I simply wasn’t satisfied with Marco’s explanations about pulling Peace. While speaking passionately about the need for such an app, when faced with a surprising success on launch, he decided he didn’t want to be a part of that industry (as it were). That’s possible. But never said was the more likely explanation: his public, well-established and healthy relationship with the members of the Apple press that cover him so well. They stand to lose from ad blockers in general, and his in particular.

Marco never mentioned that rationale, even to dismiss it; I can’t be sure that it was a factor. But at the time I looked askance and said “hmmm”.

The Overcast move is far more probative. By making his app free and relying on “patrons”, he is doing two things at once: taking advantage of his social capital (well-earned), and deploying his position as a millionaire who doesn’t need this experiment to succeed. I’m totally cool with the first — I’ve always been a great fan of Marco’s work.

But that second…hoo boy. Never said. As an early employee at Tumblr back in the day, he had stock options which converted into great bags of cash when Yahoo bought the company for ONE BILLION DOLLARS.

Maybe when you’re rich, you stop thinking about how much of an advantage that money is. Because the only thing Marco talks about is how he got where he is through hard work, and that anyone can do it.

This is demonstrably false. Even for Marco, there was a lot of luck working for him, not the least of which was getting that windfall from Tumblr. As he himself said in his most recent episode of his podcast, his apps alone have not been successful for him over the long term. Instapaper was overcome by free competitors, so he sold it. The Magazine didn’t really take off, so he sold it. Bugshot didn’t really take off, so he dispensed with it. And Overcast? Obviously not doing as well as he’d liked.

If this is “making it with hard work”, well, that’s an indictment of being a successful indie developer in 2015. So who could blame Marco for taking the route that his unique position grants him? Make it free. Take the chance. He can afford it.

And you know what? I’m totally cool with that. If he’d just come out and said it: “yeah, I’m loaded, so I recognize this is a club I have in my bag” (of course, he would never reach for a sportsball metaphor, but hey, I’m already putting words in his mouth), then it would have ended right there.

But no. Instead, “anyone can do this, if they work as hard as I did”.

And that really grates the nerves. Because as I just said, even in his own case, that is demonstrably untrue.

And then it got worse. Anonymous commentator Samantha Bielefeld put a well-crafted finger on the problem, and a huge pile-on ensued. Her Twitter account is a cesspool of contempt, and it seems to be exclusively men yelling at her. It’s been going on for over a week.

The essayswrittenabout this issue have taken on the usual volume of an Internet blow-up in the tech community, and I’m embarrassed to say that what you’re reading now only represents just another contribution.

But what they don’t say is this: Marco Arment has behaved very badly through this, and he’s been abetted by his friends, particularly in the press, who either backed up Marco, or said nothing while his critics were getting harassed. Even people who should stand up for the rights of women backed off. John Siracusa, perhaps the man whose insight and intellect I respect the most, shocked me by lobbing softball questions at Marco during that podcast. I kept hoping he would say “what about your overflowing bank account, Marco???”.

There can be no doubt in my mind anymore. There is a circle of friends at play in the midst of the indie app scene, a collection of journalists and developers who represent the cool kids. Just like in high school, most of us are looking in at them, envious and ever-angling to achieve our own place among their ranks. It’s certainly attainable, but when attacked, they look inward, ignorant of the damage they cause.

I think I’m done with reading marco.org. I think I’m done with ATP. I think I’m done with my constant attempts to get the cool kids to pay attention to my apps. I think I’ve learned my lesson: I’m going to reach my customers not through the press, and not through the reach that comes via the cool kids’ retweets. I’m going to find my customers directly.

That project has already begun.

]]>

Warning: Spoilers

This is a brief rant on Seveneves, Neal Stephenson’s latest novel. I was pretty enthusiastic about the book when I first got into it. To wit:

People, people. Are you reading @nealstephenson’s new book, Seveneves? Holy shit get on it, I can’t put it down

But later in the book my excitement waned, then became bitter disappointment. This is why I’m writing this post today. To share my disappointment, to make your day a bit worse. You’re welcome.

Suffice to say, if you’ve begun reading this book and you haven’t reached the point, then you should close this window and move on with your life. Then come back.

Okay? Okay. You’ve been warned.

Seveneves is an epic tale that grabs hard from the first sentence. In our present day, our moon is destroyed by an unknown agent. Over time it becomes apparent that the fragments of the moon will get pulped by each other, and they will turn the Earth into a fiery hell for thousands of years: all life on Earth will end.

The world chooses to collaborate on launching as many people into low Earth orbit as they can. So the story is essentially the struggle of these people to live through the “hard rain”, and find a way to become a long-term viable race of humanity while the Earth burns.

It’s gripping. It’s full of amazingly well-researched facts about current space capability, orbital mechanics and (oh man, oh man) the dangers of using nuclear power for propulsion. This is science fiction at its very best. It uses our real world as the jumping-off point to speculate about a potential future. Aside from that mysterious “Agent” that destroyed the moon in the first place, this novel is grounded and present: you are invested in what’s left of the human race.

But events end up not going so well for our characters. Life in Seveneves turns out to be surprisingly cheap, and the people you’ve been getting to know tend to meet miserable ends. All this time, at the 50 percent and 60 percent point, I’m finding myself wondering, “why is this book called Seveneves, anyway? I’d have thought I’d know that by now…”

By the time our humans arrive at a point of relative safety, it becomes clear. Only eight women are there. Only seven of them are of reproductive age. They will become the new “Eves” of the human race (thanks to some genetic prowess and the saved data of all the DNA of old Earth). Wow: what a powerful, effective story. Amazing. What will happen to them next? I wonder as I turn the page taking me into the final third of the novel.

5000 Years Later

That’s what it said at the top of the next page.

What.

The.

Fudge.

I don’t know. I’m no famous book author. But it seems to me that, in the tradition of storytelling going back thousands of years, a single story is one that connects our characters from beginning to end. Not beginning-to-two-thirds-through. And you’d think that the genre of the story would also remain the same. But this one starts as solid science fiction, and then becomes fantasy, the sole product of the author’s imagination, with only the barest touchstones to the previous work.

The second story concerns the nature of humanity after the Earth is ready for resettlement. There are seven “races” of humanity, each modelled after an original “Eve”. Over the course of the final third, we get to know how their civilization worked, how they developed from that safe spot, and how they run into the descendants of some unexpected survivors on Earth.

And then it’s over.

I felt like Stephenson had a cool idea about seven women restarting humanity, got a cool title, and then built a book around it. He put his heart and soul into the lead-up, got to the Seven Eves, and then… kept writing.

As the reader, I wish he had stopped writing. And then maybe written a sequel. Because there’s even more going on here. There are tantalizing questions about the “Agent” that destroyed the moon in the first place, for example. Hinted at but unanswered.

Of course I’ll still read whatever Neal Stephenson writes, but this was one disappointing finish.

]]>Here’s the short version: I’m looking for someone to team up with, hopefully for the long term. Someone who can take what I build, and make sure the right people know about it. A “business person”, if you will.

Here’s the long version:

I’m a maker

]]>http://aaron.vegh.ca/2015/08/im-looking-for-a-partner/d9594a31-fba7-44f9-a8bc-1d9a67db819aSun, 16 Aug 2015 16:12:51 GMTHere’s the short version: I’m looking for someone to team up with, hopefully for the long term. Someone who can take what I build, and make sure the right people know about it. A “business person”, if you will.

Here’s the long version:

I’m a maker of software. I’ve been doing it for something like 15 years. I’ve built web sites, but nowadays I write iOS and Mac apps. I really love doing it. I started my own business, and I make a fair living by contracting my services to companies. But while I’m doing that during the day, I’ve got a side gig at night, trying to create my own product to sell. Over the years, I’ve put together several apps for web, Mac and iOS. Things that, to one extent or another, I’ve hoped to parlay into the ultimate freedom: to become independent, to earn more than I could make hourly, to have greater control over my own life.

But every product has failed. After I spend months of evenings and weekends on it, I get it out there and nothing happens. People aren’t magically aware of it. They don’t try it. Sales have an initial bump, then flatline.

I’m getting pretty fed up with it, especially because I have a growing sense that this is going to happen for the rest of my career. I’m about to turn 42, and while I’m sure my technical skills will continue to improve, I’m also getting smart enough to realize that I can’t do this alone. I need a partner.

A partner, in my imagination, has the talents I’m missing, while sharing my view of the world. Someone who believes in the power of software to grow a business. Who has an understanding of how the tech industry works, to know what will work and what won’t. To collaborate in making a product that we can build a business upon. To bootstrap this in our spare time while building, with a plan to go full-time when it makes sense. Someone who can survive that long haul of the buildout, maintaining the same passion and drive that I would bring to the venture while laying the groundwork for the marketing and partnerships needed to give that product every chance of success.

I don’t know what that product would be right now. That’s where you come in. I have ideas, and I have experience building many types of products. I have the confidence to say I could build most anything; it’s blue sky, as far as I’m concerned. You might have areas of expertise, industries you have good ties to, that can guide that decision.

If you like the sound of this, then let’s talk. I’m a remote worker by nature, so I could technically work with anyone, anywhere. But I would ideally like to work with someone local to me, in Durham Region. If you’re in Toronto, I could work that at a stretch, if you’re willing to meet part-way.

App development is seriously difficult work. The competitive landscape is brutishly crowded. The APIs that developers use to write apps are complex and ever-changing. The tools that we use to

]]>http://aaron.vegh.ca/2014/12/apples-indifference-to-developers/c21ed0cb-cfc9-4a4a-a87c-d15ed9c35c4dTue, 09 Dec 2014 11:59:21 GMTDeveloper Greg Gardner, whose app was rejected in September for violated unpublished guidelines, wrote a detailed account of the process.

App development is seriously difficult work. The competitive landscape is brutishly crowded. The APIs that developers use to write apps are complex and ever-changing. The tools that we use to compose code and run it on our devices are byzantine, unreliable and becoming increasingly more so. And even when everything is going smoothly, developing a high-quality app is a huge endeavour, best done with the contributions of several people with multiple skill sets. It costs a lot of money, or like Gardner, even more: he gave up a job to chase his dream (and mine, incidentally) of being an indie developer.

Too bad he didn’t get the memo. Despite hundreds of millions of potential customers, Apple has configured the App Store to be an inhospitable environment for indie developers. Gardner’s account of the rejection process lays it all clear: take a chance on new technology and you will most likely get chewed up in the wheat thresher.

To Apple, developer time is expendable because they don’t bear the brunt of the wasted months of development. As far as they’re concerned developers are an infinite number of monkeys on an infinite number of Macbooks and every once in a while, one of us stumbles upon an app that not only passes all of their written and unwritten guidelines, but is actually successful too. The opportunity cost of developers either not working on an app for fear of rejection, or wasted developer time when an app is ultimately rejected appears to be of no concern to them.

Gardner goes on to state that App Review told him his app was being used as an example to others: a widely-publicized rejection would do more to warn other developers than systematically rejecting all similar apps. And it is apparently their preferred technique to, say, updating their actual published guidelines.

It’s becoming increasingly clear that the App Store is a toxic environment for independent-minded developers. Yes, we’ve known this for a long time, but I think we’re moving from feeling to action. Another spot of evidence came just yesterday, as the developer of a highly-ranked app revealed his profits. They’re nice, but let’s just say that you shouldn’t quit your day job.

Apple is screwing this up. Instead of creating a vibrant market where we can participate democratically, the company is using us like cheap replaceable parts. I guess the crowds jostling to get WWDC tickets make us look that way.

It makes me wonder how far the company has to go before fewer people want those tickets. Or whether any developers there will bring protest signs.

]]>While working on my sooper-sekrit project today, I came across a surprising hurdle. I wanted to accomplish the following feats using Interface Builder inside Xcode 6 (running iOS 8):

A fixed-size UITableView, one that doesn’t scroll, but rather alters its height in its superview as the contents change;

The

]]>http://aaron.vegh.ca/2014/08/fancy-footwork-with-ios-8/def0b035-2b1d-4d46-b1fc-1f55ab798413Thu, 14 Aug 2014 22:02:46 GMTWhile working on my sooper-sekrit project today, I came across a surprising hurdle. I wanted to accomplish the following feats using Interface Builder inside Xcode 6 (running iOS 8):

A fixed-size UITableView, one that doesn’t scroll, but rather alters its height in its superview as the contents change;

The table view has rows of varying height;

Inside a UIScrollView that contains other views, above the table view, such that the full view, including the table view, scroll together;

Using AutoLayout and iOS 8’s new Size Classes

Turns out that it wasn’t easy! But with the help of Stack Overflow, various blog posts and some elbow grease, I got it done. Let’s take a tour.

Layout In Interface Builder

As Apple outlines in TN2154, Auto Layout works a bit differently when scroll views are involved. In a nut, while Apple talks about a “mixed” vs “pure” approach to setting your constraints, I recommend the former. When putting content inside a scrollview, embed the content into a separate UIView class first. That way, you only need to adjust the constraints on the view.

In the sample project, take note of the constraints that match the width of the container view to that of the scroll view. This is the only way I was able to avoid an ambiguous scrollview warning; constraining the leading and trailing edges isn’t sufficient.

In IB, I’m also setting two properties as constraints: the height of the container view, and the height of the table view. At runtime, I’m going to reset the height constants on both properties in order to accommodate the change in row heights.

The table view cell contains a UILabel that is constrained to each edge of the cell, so it will expand. Set the UILabel numberOfLines to 0 and turn on Word Wrap. In code, we’ll have to set the preferredMaxLayoutWidth, so it knows where to wrap the label. We’ll get to that shortly.

Setting up the View Controller

In the VC’s viewDidLoad: function, there are a pair of important lines required in iOS 8 to manage variable row height:

The estimatedRowHeight property should be set to whatever the most common row height might be. This doesn’t have to be accurate all the time. The table view’s rowHeight property tells the table to calculate row heights using Auto Layout.

The view controller in this example is also the table view’s data source, and the noteworthy line is in the cellForRowAtIndexPath function:

Auto Layout requires this value to know where to wrap the text. Without an accurate value here, you’ll get some pretty whacky results!

Finally, there’s the viewDidLayoutSubviews() function. There’s some crazy stuff in here, but it’s the result of a great deal of trial and error.

The purpose of this function is to set the new height constraints on the table view and the container view (setting the height of the container view with Auto Layout will trigger a change in the enclosing scroll view’s contentSize property, enabling accurate scrolling). Throughout this function I’m calling layoutIfNeeded(), to ensure that all objects are being accurately represented. The whole thing is enclosed in a dispatch_async block. Why? Because otherwise it doesn’t work right, dammit. That’s why.

Testing it out

The end result is a view that has a fixed table height which scrolls along with the image above. You can rotate the device and the table will resize correctly. You can open the thing on the iPad simulator, and it still works. I’ve also added support for Dynamic Type, so you can change to a larger version of the text, and the table will reload accordingly.

I hope you find it useful! Code on, my friends.

]]>I’m working on a sooper-sekrit project right now, which I’m hoping to launch before the end of this year, and which will support iOS 8 only. I’ve been enthusiastically picking up as many of the new technologies as I can, and one of the most exciting, to]]>http://aaron.vegh.ca/2014/08/the-limitations-of-ios-8-size-classes/29f87dcf-4324-48aa-83f6-ec2954566888Fri, 08 Aug 2014 16:09:29 GMTI’m working on a sooper-sekrit project right now, which I’m hoping to launch before the end of this year, and which will support iOS 8 only. I’ve been enthusiastically picking up as many of the new technologies as I can, and one of the most exciting, to me, is the introduction of size classes.

This technology brings a change of thinking for developers: we discard the idea of fixed-size layouts, and use the power of AutoLayout to ensure our apps fit a variety of screen sizes.

I think this change is going to blow the doors open on all kinds of new form factors from Apple, including larger phones, larger tablets and even little watches.

But as I worked on my sooper-sekrit project today, I realized something about size classes that made me a little sad. While the technology makes it easy to adjust your layout for multiple device sizes, the path of least resistance is that your design will be largely the same, no matter what size device you’re using.

Here’s an example from my project. On the left is the standard layout for a screen I’ve created. On the right, the version of the layout with a “compact” height — in practical terms this would be on an iPhone in landscape orientation.

This is the same file with essentially a switch flipped, allowing me to move between size classes. The first size is the “base” upon which others are customized. In this case, I’ve decided to juggle things around quite a bit to best-suit that shorter height.

I think this is a terrific technology, but it made me realize that it only works well in certain circumstances. Specifically, if I wanted to use a completely different set of views between iPhone and iPad, I’m not sure how I would do that. Think of an example where, on the larger iPad, I don’t want to have a detail view in a separate screen; instead I want to integrate it into the overview screen.

This could simply be the result of my not knowing enough about size classes (I should probably go back and watch the relevant WWDC 2014 video!) — and I’m happy to hear otherwise.

But I suspect it speaks to an attitude on Apple’s part that has played since 2010, when the iPad was introduced. Yes, an iPad is “just a big iPod touch”, in that the UI has been scaled up for the larger screen. If you think about the iPad, and the best apps for it, you realize they provide more than just extra real estate for the same UI to move around in. They don’t have the same screens at all — they’ve been completely re-conceptualized for the iPad.

I’ve always been a big believer in the iPad as a replacement for the PC. Not everyone shares my vision, especially since Apple hasn’t done enough to distinguish the iPad’s software from the iPhone. Every summer at WWDC I hope that Apple will change the game by providing more-powerful features that take the iPad to the next level, providing a way to work with multiple apps at once, more-readily enter text, interact with files on a global basis, and more. Some of this stuff is happening, so I haven’t given up hope yet.

With size classes, though, Apple is clearly giving developers an almost too-easy way to add the iPad to their iPhone-only apps, upping the number of Universal apps. I just fear it will come at the cost of truly great, unique iPad apps.