Rendering Basics with Metal iOS

Model3D – 3D modeling software we’re in the process of launching for iPad – is built on the new GPU API Metal. Metal lives up to its name (close to the metal) and is decidedly pretty awesome, especially when working with the more powerful iPad Pro. There isn’t that much written about Metal so I’m going to cover some of the basics, as well as some 3D basics, here.

Why my Nom de Guerre is Latte Jed

I’ve been asked a few times why I go by “Latte, Jed?” online. I know I’m dating myself here but I grew up on the cartoonist Gary Larson’s The Far Side. If you haven’t already, avail yourself of his work. He’s undoubtedly the king of surrealist cartoons – lighthearted but intelligent. The panel in question is this: Keep in mind that at the time he drew this coffee culture in America was nothing like it is today.

Why I've Lost Faith in Ethereum and Won't Invest in ETH

A discussion of the immenent fork of Ethereum came up on Hacker News today (I think the fork actually happened as of the time of writing this) and someone suggested that the ability to fork, e.g., change the rules of the game gives Ethereum an advantage over “more conservative” alternatives such as bitcoin. I think to say that totally misses the point. Quoting myself: I think [saying forking is somehow positive is] entirely too apologetic.

Why this Site is now Self Hosted

Note: While this site is still self-hosted, it’s now managed by Hugo so most of what’s below doesn’t apply This site, now in its current brutalist form, has been hosted in a few different places over the years. I don’t write that often but I’ve made some effort to maintain a site since I got into software. That’s usually meant picking a decent blog hosting platform and writing something about 1/10th of the times I’ve thought I should.

Writing an Embedded Full Text Search Engine

Note: While this monster post should be of interest to anyone working on full text search, I no longer recommend the approach outlined here. 1) In practice, Levenshtein indexes don’t give a real advantage vs a properly implemented n-gram index. 2) Levenshtein indexes, even using the technique below, take up too much space. 3) LevelDB isn’t a good choice for this I’m currently working on a project and had the opportunity to write an embedded search engine for it.

First Five (and a Half) Minutes on a Server with a Shell Script

About a year ago I wrote this about hardening a fresh server using Ansible. This post has received about 10x as much traffic as anything else I’ve written. Oddly, admin is the area I’m probably least knowledgable about when it comes to software. Anyway, the Ansible script I wrote about in that post is out of date. I realized this recently after trying to use it on a fresh install.

That ToDo App you Always Wanted

Note: This was originally titled: A Simple ToDo App in Swift I decided the best way to learn Swift would be to whip together a simple Core Data app with a single view controller. That gives us a project with some depth but doesn’t waste too much time on breadth by minimizing the time spent in IB and wiring up UI components. A ToDo app seemed like an obvious choice.

[Ab]using Blocks for Cleaner MVC in Obj-C

As I’ve started to utilize blocks more in iOS/OS X development I’ve noticed a patter emerge and wanted to talk about it. It’s using the same building blocks (excuse the pun) are you’re likely to find in any Cocoa project but leveraging blocks to the fullest extent has sped up development time for me and led to both thin controllers (which I think are good) and a very strict separation between the different layers in MVC.

First Five (and a Half) Minutes on a Server with Ansible

Note: The Ansible script below is unusable due to breaking changes. I’ve written about a similar approach here using a simple shell script This is a response/addendum to two really good “first five minutes” style posts discussing the setting up and basic hardening of a remote server. Brian Kennedy discusses his first five minutes here1 on Ubuntu. It’s a great tutorial covering the basics of security. Of course, if you’ve gone through it once you’ll want to automate it.

Implementing Porter Stemmer in Haskell

I recently started learning Haskell. Like many programmers who get interested in the language I’ve spent as much time studying the language as I have trying to find an excuse to actually use it. It’s a somewhat difficult language to learn – at least if you haven’t worked with functional programming before – and it’s not really a go-to language for most situations. Finding a reason to use it can be challenging.