Categories
Development

Evergreen ODB

Brent Simmons: “And: different syncing systems might need different properties, and I don’t really want to create an uber-schema which is the union of all of these. (And I don’t want to create a Feed protocol, because Set is then impossible.)”

I too am working on an RSS reader for Mac and iOS but I’ve chosen to make what Brent refers to as an uber-schema. We’ll see how it works. I think it’s going to be fine but I’m really curious to watch what Brent’s ODB turns into.

His idea of a more document centric storage mechanism is probably going to be really nice for an RSS reader. It doesn’t need to keep data around forever and requires a very small amount of data to work well.

There are, of course, document — NoSQL — databases readily available. The first one that comes to mind is CouchBase Lite.

Categories
Apple Development iOS

Old Devices

I don’t like to install beta versions of iOS on my daily driver device so I tend to use old devices I have left around from years past. This year, however, I didn’t have a device capable of running iOS 12, so I bought a used one on Letgo.

For $60US I was able to purchase an iPhone 5s with a cracked screen that works just fine. I decided to pickup a new screen from iFixit for another $40US. All in, $100US and I have a great new test device. It actually runs iOS 12 really well.

So, if you’re short on cash, try a used device for testing.

Categories
Apple Development Hardware iOS

iPod Touch

Why doesn’t Apple improve on the iPod Touch every couple years? Why not take older chip sets — maybe a model from last years iPhone — and leave the form factor alone? Just keep stuffing updated tech into the existing design.

There are folks that can’t afford to buy their kids an iPhone but the iPod Touch may fit nicely into their budget.

Yep, it's a rooster.As a developer this is also a nice machine for testing. The only issue I see is it hasn’t been revved in a long time. It’s still using an A8 processor but it is still slightly ahead of the iPhone 5s which uses an A7. that’s important because the iPhone 5s is the lowest end iPhone that supports iOS 12. That means we could get another couple years use out of the current generation iPod Touch.

The iPod Touch with 128GB of storage sells for $299US.

Fingers crossed Apple updates it soon.

Categories
Development

Just Code

Becky Hansmeyer: “For instance, I can take just about any Objective-C code and do a word-by-word translation to Swift that will compile and run, but it won’t be very “Swifty.””

The notion of being Swifty kind of bugs me. If you work in a language long enough you’ll naturally gravitate to language conventions or you won’t. If you’re an Indie, like Becky, I don’t think it really matters how Swifty your code really is. What matters is you’re willing to learn and adapt with the times and you can ship. If you don’t ship you don’t get paid.

I’m probably not very Swifty either, but I don’t really care. I can write code in Swift and it works just fine. During code review with my peers they’ll let me know of a more Swifty way of doing things so I can either make a change or get it the next time. I’m willing to do the new thing and I think that’s what we need to be willing to do if we’re going to survive as developers.

Be ready for change and adapt. That doesn’t mean you have to do it all on day one. Just be willing to make the change.

Categories
Design Development

Higher

Quora: “Total cost for creating Tinder-like app for one platform would be about $5k – $10K.”

Charging $5-10$K for a Tinder-like application is how you go out of business. I’m speaking from experience here.

Watch out for the blowfly.Back in 2014 I made my second run at freelancing. This time around I failed. I learned a lot about who I am and how not to  run a business. Two of the primary reasons were charging too little for my work and not being a blazing fast coder.

I’m going to step out on a limb here and park a Tinder-like app — a service really — at around $100,000.00, not 10.  Call me crazy, it’s fine. Let’s take a look at some estimates given by folks that have actually built some great software.

First up, Craig Hockenberry: “With such a short schedule, we worked some pretty long hours. Let’s be conservative and say it’s 10 hours per day for 6 days a week. That 60 hours for 9 weeks gives us 540 hours. With two developers, that’s pretty close to 1,100 hours. Our rate for clients is $150 per hour giving $165,000 just for new code. Remember also that we were reusing a bunch existing code: I’m going to lowball the value of that code at $35,000 giving a total development cost of $200,000.

Emphasis is mine.

In the same Stack Overflow post we find Jonathan Wight weighing in on the cost for the Barack Obama App: “The Barack Obama app took 22 days to develop from first code to release. Three developers (although not all of them were full time). 10 people total. Figure 500-1000 man hours. Contracting rates are $100-150/hr. Figure $50,000-$150,000. Compare your app to Obama.app and scale accordingly.”

Both of these guys are world class software engineers. I have no reason to doubt their estimates because they have the experience needed to build any application.

Here’s Kyle Richter of the excellent Martian Craft: “In February 2013, the average cost of a house in the US was $152,000. By our estimates inside of MartianCraft, the average cost of an app is approximately $120,000.

If you want a high quality application be prepared to pay for it. Sure, you might be able to get your Tinder-like experience for $5-10K, but it may behave and scale like a $5-10K application and service.

Know what you want and what you’re getting into before you talk to developers about building your dream application or service.

Categories
Development Uncategorized

Far from perfect

Free Code Camp: “VS Code’s success story is interesting because it’s far from perfect: its UI has that Microsoft-y clunkiness that seems to infect all their products, it’s a big resource hog, and it can be kinda slow to initialize.”

If you go read the article and don’t see the irony in the above statement I’ll point it out for you. Visual Studio Code uses Electron which allows developers to write desktop-like applications in JavaScript. Is the author saying Electron is slow, JavaScript is slow, a combination of the two, or that maybe Microsoft developers made it a fat — slow — pig?

Categories
Development Uncategorized

Making your iOS App embrace the iPhone X notch

After yesterdays announcement I decided I’d rebuild RxCalc with the iOS 11 SDK. I figured things would rebuild and my app would fully embrace the new iPhone X without change, but it didn’t work. When I built the app it ran in what I’d call letter boxed mode. The top and bottom were cropped. It was like running an older app on iOS 7, if you’ve ever seen that.

UGH! Why you letterboxed bro?
UGH! Why you letterboxed bro?

I was puzzled. I tried all kinds of jiggery-pokery and nothing worked. So I finally did what any self respecting lazy developer would do. I asked Twitter for help, and Jeff Johnson saved the day.

I was — quite honestly — surprised something so little could make it work, but darn it, you gotta trust the experts. I added a new launch screen at the recommended 1125×2436 size and it worked! Yippee!

Hey, that worked!
Hey, that worked!

So, thanks Jeff! Also, if you’re looking for a bonafide Mac and iOS Developer you should consider reaching out to Jeff — he’s available for work — and has a history of shipping great Mac and iOS Software.

And remember — EMBRACE THE NOTCH!

Categories
Development iOS Work Note

Work Note: Loading View Controllers from a Storyboard

When I need to load a view controller from a Storyboard I like to create an extension to the view controller’s class and add a class function to it that does the work. It keeps things looking clean in the code where you use it.

I’m not sure if this is smart or dumb. I’m sure very smart people will let me know. Here’s an example.

Here’s how you’d use it in your code.

Categories
Development iOS Mac

Old Apps

A cute little monkey.I got an email from Apple a week or so back letting me know I needed to upgrade one of my apps to 64-bit. I knew right away it was Arrgly but wasn’t really sure if I wanted to update it.

On Sunday morning I received an email from an Arrgly user asking if I was going to update it because he likes the app. It felt good to know someone else found my goofy app useful. I decided at a minimum I’d publish a little framework someone else could use to write their own version of the app if I couldn’t get to it, or couldn’t finish it on time.

It took less than an hour to create the project and get it published. If you’re doing Mac or iOS development and you need to shorten or expand URL’s for a YOURLS based service you’re welcome to use YOURLSKit. It’s all Swift 3 but should be fine with Swift 4 projects and iOS 11 or macOS High Sierra. It’s a tiny bit of code, but it does the job.

Categories
Apple Development iOS

Scripting iOS

Last week Apple acquired automation workflow application Workflow. Of course there was a nice buzz around it and it was a big topic of conversation on various podcasts and websites.

This, of course, got me thinking about automation. I’ve always been a fan of open API’s and the ability to automate applications. We’ve also seen recently that Omni Group is opening up OmniGraffle to automation via JavaScript.

Back in 2010 x-callback-url was created as a way to allow applications to call into each other and return results so you could chain together calls to build custom workflows. Apps like Launch Center Pro and Workflow took advantage of x-callback-url to let you build those workflows and execute them. Now we have a bonafide standard, without a standard. The app ecosystem found a way to support automation without Apple’s help.

I’ve used Launch Center Pro but until recently I’d never used Workflow, and it’s pretty amazing. The Workflow guys did an amazing job creating a drag and drop UI for building what amounts to a program. Well worth a look.

So, this brings me to what I’ve been thinking about over the past few days. Given x-callback-url and App URL schemes in general it would be extremely cool to use those to create object hierarchies using JavaScript. Why JavaScript? Well, it’s native to iOS and applications can use the runtime. Given the advances made by the Workflow team why not take it one step further?

Allow applications to specify a  Scripting Dictionary or Type Library as part of the application bundle, this should allow runtime creation of objects. I know this isn’t rocket science and it’s been done many times over.

Short of adding support to the OS it would be pretty sweet if an App like Workflow, Launch Center Pro, or Pythonista would standardize on a way to parse a URL Scheme into an Object Hierarchy.

I’m going to use Evernote, Bear, Overcast, and Arrgly as examples.

What do you mean by Object Hierarchy?

That’s a good question. Here’s what I’m thinking. Since the Apps mentioned above all support URL Schemes we can derive an Object Hierarchy from them. Basically the beginning of a URI begins with a scheme. The scheme is the name. In the case of Evernote it’s evernote. Pretty simple, right?

Given the scheme name we follow that with a path. In the case of x-callback-url based URL schemes we will skip over that part and move to the second item in the path. This will be the action, or function, or the object we’re going to execute.

evernote://x-callback-url/new-note?type=text&title=EC%203

The above URL will tell Evernote to create a new note of type text with a title of “EC 3”. If we had a way to parse that in a runtime application we could present the user with an Object that has methods that take arguments, like this.

evernote.new-note(type, title)

Let’s do a couple for Bear. First the URL Scheme.

bear://x-callback-url/create?title=My%20Note%20Title&text=First%20line&tags=home,groceries

Now translated into code

bear.create(title, text, tags)

Overcast URL Scheme.

overcast://x-callback-url/add?url=

Code

overcast.add(url)

And finally, my favorite, Arrgly URL Scheme.

arrgly://shorten?url=

Arrgly Code

arrgly.shorten(url)

Pretty simple to turn all of those into objects. When I say you can create a hierarchy it means you could, by convention, lump groups of actions into objects, or like the above examples have a set of actions that all live on a single object.

Here’s what a object might look like as a URL Scheme.

thing://x-callback-url/document/add?title=
thing://x-callback-url/document/delete?id=

That would result in using it like this

thing.document.add(title)
thing.document.delete(id)

Of course this need more fleshing out and it would require app developers to decide on a well known convention to make it work as expected, but it could be done with a bit time and effort. It could be these become an extension of the x-callback-url specification?