It feels like trolling, but an article I recently read on The Atlantic Wire describes weakening iPhone demand as reported in the Wall Street Journal. (Aside: I think using the term “fan boy blogs” is just belittling.) But it feels like the real story here is that Apple’s grip on the mindshare of would-be buyers is loosening. I don’t know for sure but there could be truth in this.
A huge weakness for Apple I’ve long felt has been a solid command in web services—or any web services beyond what iTunes scantily provides. I can’t embed or link to Apple maps, link to an Apple-based social feed, or even use Apple-hosted services. What about Keynote presentations or online editing of Pages documents? iMovie or Garage Band galleries or portfolios hosted by Apple would be huge.
Google and Amazon are way out ahead here and because they now pretty much have the backbone of the internet where all the web services live they command the future. Aside from programming in Objective C, I can’t use web APIs to push and pull information, can I? I use APIs and hosted services because I can multiply my developer power by a factor only limited by my access to funds—and outside funding can make that ceiling very very high. These companies are companies I can grow into, not grow out of.
Being a leader in devices is nice, but a saturation point gets reached where everyone has the same phone or the same app and the “cool” factor dictates that a rebel band find a new niche. Is it truly the rebels that define the future? I think there is a strong pull by them at the very least. It’s not just because something is labeled “awesome” that makes an app, a service, or a product a hit. Rather, when eyeballs and creative energy is being applied to something it gets better. And that means the innovation goes there. If innovation is solely left to Apple’s employees they can be hamstrung by layers of management or company directives. Innovation in the wild is unbridled creativity that finds organic applications for technology that a corporate mindmeld can’t achieve.
Does that mean that Apple doesn’t innovate? Of course it does—my iPhone and MacBooks are among the best-built and well-designed devices I’ve ever used on a regular basis. But Apple certainly doesn’t seem to care the web. They are only providing access to it. And if you also believe that the future is in device-agnostic connected information, then you have to look beyond pretty Gorilla Glass and aluminum to see where the data is going—and the data is not going to Apple’s servers.
It needs to be more mass-market.
That is what I keep telling myself. I have been dawdling on a project I have been coding in my spare time. I threw the base of it together maybe a couple of months ago? Then a few weeks ago I started shopping it around to my friends. I saw the warts and I cringed. I saw the directions this thing could take. I seriously contemplated throwing it all into /dev/null and starting over—even up to last night.
But I just had a moment of clarity. Right now.
Just ship it.
I am laid up in bed sick and here I am on my iPhone typing away on the WordPress app and I realized that my original idea is still valid. So very much so. I still might toss the codebase away a fresh copy based mostly off it, but the core of the idea is solid. I am not going to pivot.
I felt when I came up with this idea that it wasn’t a sexy idea. After demoing it to a small number of people I got lured into the trap that it wasn’t pretty enough. That it wasn’t simple enough. That my mom wouldn’t be able to grok it. That I should pivot—is the word veer these days?
No. I am on my bed and fairly lucid and I want—nay, need—exactly what I have built right now and I know of no replacement. I still know that the direction I was going to change to is a potential future but I think my current physical condition validates my efforts.
At the end of the day I know that am the one that must be the primary use case because I saw something that wasn’t available and I know how to solve this.
This post is mostly for me to remember how to do this.
It turns out that getting Devise (or the built-in mailer for that matter) to send email through Amazon Web Services’ (AWS) Simple Email Service (SES) is stupid easy. Most of the work is just getting SES set up properly. After that:
1. Verify some email addresses
- If you just set up SES you are probably still in sandbox mode. You need to add new recipients on the Verified Senders dashboard first.
2. Generate your SES SMTP Credentials
- You must generate a new SMTP User and SMTP Password to connect ActionMailer to AWS SES. These are NOT your AWS login credentials!
- Go to the SMTP Settings dashboard.
- Click the button “Create My SMTP Credentials”.
- Copy the information out—it will not be displayed again!
3. Edit your ActionMailer settings in the production.rb file
That should do it! Send yourself a test message.
Remember: you can only send to verified email addresses while in Sandbox Mode. You must request Production Mode access to send to any unverified email address. Otherwise you will probably see the Rails log error: Net::SMTPFatalError (554 Message rejected: Email address is not verified.)
This is mostly a note to myself on how to do this.
Amazon’s Simple Email Service (SES) seems pretty easy to use but working with the DreamHost DNS management proved slightly tricky because of the large amount of steps and the order of them. Getting the DNS values right was also not completely obvious. Here’s my recipe:
1. Register a Domain
- Log into your DreamHost Panel
- Add a domain (Domains -> Registrations)
2. Change the Domain to DNS-only
- Click the Edit link for your domain (Domains -> Manage Domains -> Edit)
- Scroll all the way down to the DNS Only section
- Choose that
3. Turn on Amazon SES
- Create your Amazon Web Services (AWS) account
- Go to the console page
- Click SES to get to your SES dashboard
- Click Verify New Sender
- Click Verify a New Email Address
- Wait until your new email address shows up in the Email Addresses list (or hit Refresh)
- Click on the new email address to get its Details, you should see Status: pending verification
4. Verify Your Email Address
- You should have gotten an email with the verification link in it: click it
- Go back to the SES dashboard and click on the new email
5. Update DNS custom records on DreamHost
- Return to your DreamHost Panel
- Click Domains -> Manage Domains
- Click the DNS link under your domain
- Scroll down to the “Add a custom DNS record to YOURDOMAIN.com” section
- Add a TXT record with the full value:
- Notice: SES might recommend a text record of _amazonses.YOURDOMAIN.com. Do not paste this full value in! You must remove the “.YOURDOMAIN.com” part. That’s right, just enter: _amazonses
- You might also want to add DKIM to your domain as well.
- Click the “copy record” link to see the full name and value.
- Notice: Again, SES might recommend a CNAME record that looks like abcdefghijklmnop1234567890._domainkey.YOURDOMAIN.com. You need to remove “.YOURDOMAIN.com” for DreamHost.
- It takes a while for the DNS records to propagate. You will also get an email notification that says the sender is verified and the DKIM verification is complete.
I have been working on this thing for the past few weeks. It’s a nifty idea spawned from a need I had recently, and I figured I could package it as a service—you know, SaaS stuff. You input data and the system magically formats it for you. (No, I’m not talking about the idea I tried launching 2 years ago, but something in the same vain…)
Anyways, so over this holiday break I put in some time and crafted a basic working system to demonstrate my concept. Then I put it in front of a few friends who are in my target demographic. What I heard was this:
- Neat idea!
- I love the way it does the magic for you!
- I can see it used for X, Y, and Z purposes!
That’s really encouraging! Yay! Proof of concept … sort of. I also heard this:
- I wish I could import file formats A, B, and C
- I don’t get the formatting syntax
- I wish it also had features D, E, and F
Here I had spent time crafting a syntax I thought was relatively simple. Think of it like Wiki formatting: you type raw text in and then add some special characters and boom you get neatly-formatted data. But because this SaaS is a kind of visualization tool, people want me to be able to import all sorts of spreadsheet formats and other document types. That was exactly what I was trying to avoid.
Do I listen to my users who say they just want to basically have a version of their Office suite replicated in my service? If I go down that route I’m afraid I’ll end up being very feature incomplete. (Which, incidentally, is what happened with that other startup idea I had. There was no way for me to reach feature parity.) I was hoping that by forcing people to edit in a syntax not too distant from Wiki formatting and CSVs I could skip the problem of me having to create a GUI. I’ve learned my lesson about GUIs: never make a pretty GUI because it will always be feature deficient.
And yet, I know it’s not really the syntax that’s bothering my users. Really, it comes down to the same problem I before: users already did the work and they don’t want to do it again. I can totally see that point. They want to copy or import. They want tools to edit. I also know that is a hell of a lot of work.
Being a creator is hard. I’m trying to encourage simplicity in the face of complexity. But I also need to please the people that will carry my dreams forward. The art of all of this is finding the balance between what I think is a “good enough” experience that will get my users to their end goals, at the same time I need to make things easy enough that the amount of work they do is minimized.
I don’t use Chrome on a regular basis, but I use it enough to know it’s pretty boss. I like their debugging tools a bit better than Safari’s new Inspector panels.
I’ve been looking for a text editor that has been as good as TextMate (v1). I finally jumped in to try Sublime Text 2 about a week ago. Here’s a quick review:
- Very fast.
- Better grasp of syntax highlighting in complex situations.
- The Goto Anything/search-all (Cmd+P) command is very quick and really nice.
- Project remember their last state of opened files.
- The Minimap turns out to be really useful as an oversized scrollbar handle.
- Global + user overrides for almost all settings. Immediate effect of settings.
- Package Control.
- Bookmarks—but they’re not persistent.
- Split screen.
- Customizing themes requires scripting. Almost everything requires some configuration.
- No interactive theme customization.
- Almost everything powerful is a plugin. Thank goodness for Package Control.
- To filter dotfiles and other directories that ought to be hidden
is a project-level setting EDIT: can be set globally if you read the unofficial documentation.
- Doesn’t have a good reveal-file-in-project-hierarchy command. There is a way to reveal a file, but if the containing folder is already open nothing appears to happen.
- Documentation isn’t super tight—Google is the best way to get help.
I’m no stranger to taxing computers’ CPUs by rendering video. I’ve been doing it off and on pretty much since I figured out how to work Microsoft’s Movie Maker software—I couldn’t really afford Vegas or Premiere as a student.
These days I use Final Cut Pro X and the projects I work on are long and complex, though not nearly at the professional level. Some of the larger projects use about 80 GB of video and audio from multiple sources and the final rendered projects are approaching 40 minutes. The machine is decently beefy: 2.7 GHz Core i7, 16 GB RAM, 512 GB SSD. That’s pretty much the top spec w/out splurging for the larger SSD.
I’ve found that the best way to edit the video is to load all the sources onto the MacBook Pro. It has a 512GB hard drive but a good portion of that is already used up by work and other projects. That leaves about 200 GB available, which is apparently bare minimum. During the process of editing the intermediary files that get generated quickly swallow up the remainder of the space. To get around this I’ve often been taking project segments and “bouncing” them down (an audio editor term; I don’t know the equivalent video editor term) to high-resolution rendered movies. Then I piece them back together to make the whole.
All in all, the MacBook Pro’s CPU capacity is pushed to its limits but it still crunches video like no other computer I’ve used—including desktops. Plus the added portability lets me work on segments while commuting on the train. The one thing it lacks is storage space. A Thunderbolt SSD would be perfect; spinning disks are too slow for all of this random access work.
Migration time: about 2 hours.
Method: Time Machine backup.
About a year and a half ago I did the upgrade from a 2008 MacBook Air to a 2010 MacBook Air and used a Time Machine backup to go between the two—“Migration Assistant: the most painless system migration ever”. I had the opportunity this morning to repeat that experience since the new Pro w/ Retina display just arrived. (MacBookPro10,1) All I did was do a Time Machine backup on the old Air, then use the Migration Assistant on the new computer. In about 2 hours I had all of my old data transferred over and my user account set up. And while the Time Machine backup and restore were going on I was still working on my “old” Air. When the new Pro booted up into my user account all I did was copy over the files I was currently working on and re-pair the Bluetooth devices. And now I’m working completely on the new laptop.
Talk about painless.* That’s just one more reason to stick with the Mac and all of its “closed ecosystem” trappings.
*One little snag is a number of software packages are authorized to 1 CPU, so it required having to deauthorize a bunch of apps on the old computer.
I’ve only ever built/configured 2 computers. They were mostly for gaming and that was around my college years—I still have the last one as an archive of photos and music. The only things I’ve ever done with them (after building) really amount to: 1) adding more memory, and 2) adding more disk space. I’ve dabbled with a small amount of debugging the hardware but that was more in the earlier days of IBM PC compatibles—anyone remember DIP switches and BIOS?
Sometime after probably 2004 I stopped caring so much about my computers. It’s not that I can’t appreciate fast, optimized hardware that gets great benchmark scores. I think it’s just that I started running out of time. I like my machines to work and I like other people to debug them for me. If I was to get another gaming system, it’d probably just be a console.
Friends have asked why I don’t jailbreak my iPhone or iPad, or I don’t do modifications to my laptops. I just don’t want things to break. I like getting tested updates and just clicking the “autoupdate” buttons. I’ve also stopped monkeying with my laptops (well, mostly because you really can’t do much to an Air), and I’m now at a point where I’d rather just get a new model instead of upgrading the old. I don’t need user-serviceable parts much.
I’ve also started to trend towards trying to only do “typical” things with my laptops’ configurations. For instance, I used to install all sorts of things on the laptops to make them run better or to configure them. Now I tend to use Apple’s recommended storing of all documents and files in my user directory and also the Application Support directory. I try not to create lots of symlinks. And I use Time Machine as my backup and migration device.
I’m writing this because I’m eagerly awaiting a package at the moment which is making its way across the Pacific. When I get it, I’m hoping the migration process will be as painless as it was when I migrated from the old 2008 MacBook Air to the 2010 model. I’ll plug in my Time Machine drive, do a solid backup, then migrate to the new machine. Then I’ll copy a few things over that aren’t part of the backup and hopefully it’ll be up and running.
I like the thought that I don’t have to do too much of anything and my working state will be restored.