Hi! I’m Frank - a software developer in Seattle specializing in mobile apps that do nerdy things. My blog is a collection of technical articles, presentations, and app and library announcements.
All Posts
I Built the World's Largest Translated Cuneiform Corpus using AI Jun 9, 2023
TL;DR I used a custom-trained Large Language Model (T5) to create the world’s largest online corpus of translated cuneiform texts. It’s called the AICC (AI Cuneiform Corpus) and contains 130,000 AI translated texts from the CDLI and ORACC projects.
How I Re-implemented PyTorch for WebGPU May 19, 2023
TL;DR I’ve been working on a WebGPU optimized inference and autograd library called webgpu-torch with an API that matches PyTorch. The goal is to run neural networks in the browser at speeds comparable to a Linux workstation. Many kernels have been implemented and its design is easily extensible. It’s available on NPM now and works in both the browser and Node.js!
Generating SVG Images with ChatGPT Apr 3, 2023
TL;DR I used ChatGPT, with varying levels of success, to generate SVG images. With enough patience and prompting, you can get it to draw basic shapes and simple scenes about as well as a five year old can. (Which, hey, let’s face is, is good enough a lot of the time.)
Transformers-js - Neural Networks in the Browser Aug 25, 2022
TL;DR I wrote a javascript library that lets you run modern transformer neural networks from Hugging Face 🤗 in the browser. It works on mobile browsers, desktop browsers, pretty much everywhere. Check out transformers-js on GitHub to see how it works and checkout out the live translation demo running on my static website: https://transformers-js.praeclarum.org.
Practical Guide to Solving Hard Problems Feb 19, 2022
I sometimes find myself in a position of needing to write some code that I’m just not sure how to write. Been there have you? Here are the steps I take when I’m stumped. No huge revelations here, just hard-earned advice.
The Technology of iCircuit 3D Feb 8, 2021
Today I’m pleased to announce the macOS release of iCircuit 3D! Last week I released the iOS version to a wonderful reception and I’m happy to now be able to give all the Mac users out there the same experience. iCircuit 3D has been a work of passion over the last couple years and I thought I would take a moment to describe some of the more interesting technical aspects of it.
F# Advent - Functional Motor Control Dec 8, 2020
TL;DR I implemented a proportional-integral feedback controller to control the speed of a DC motor using a gyroscope. I wrote it in F# using a functional programming style. The work was easily ported to run on Wilderness Labs’ Meadow IoT hardware.
Mac Catalyst Support for Xamarin.iOS Nov 10, 2020
TL;DR I have written a tool that will convert your Xamarin.iOS app (including Xamarin.Forms and MAUI) to a Mac app using Mac Catalyst. This makes creating a macOS app and selling it on the App Store easier than ever. If you sponsor me on GitHub, subscribe to me on Twitch, or support me through Patreon, I will send you a link to try a beta version of it.
Azure Resource Organization Cheat Sheet Apr 23, 2020
It’s taken me some time, but I think I finally have a handle on how all the various Azure resources are organized and how exactly I’m paying for things. I summarized what I know into a handy little cheat sheet that I hope will help you if you’re as confused as I was.
Appstat - App Sales and Analytics Menu Feb 20, 2020
TL;DR I have written an app, Appstat, that I think every Apple app developer will want. It is a macOS status menu app that displays all your apps that are for sale on the App Store plus a whole bunch of data about them including proceeds, sales, ratings, and uploaded builds.
.NET Vector Performance Oct 15, 2019
TL;DR I wanted to know what the fastest vector types were on .NET. Turns out, performance varies wildly across platforms.
System.Numerics.Vector4
and friends give good performance overall, especially for .NET Core apps, while homemade vector types do not get auto-vectorized. AvoidVector<T>
like the plague. Oh, and iPhone 11s are stupid fast.Containing Null with C# 8 Nullable References Dec 17, 2018
C# 8’s nullable reference types are designed to help rid your apps of the dreaded
NullReferenceException
. This article walks you through the common errors that you will encounter while updating your app and offers a few of my opinions on how to fix them. It’s a long and windy road to update to nullable references, but you will come out at the end more confident in your code and with fewer bugs.Oops, I Wrote a C++ Compiler Aug 27, 2018
TL;DR I wrote a .NET library that can compile C/C++ code into a byte code that it can also interpret. It is used in my app iCircuit to simulate Arduinos. You can use it yourself with the nuget package CLanguage.
C# Code Prediction with a Neural Network Jul 20, 2018
TL;DR I used Python to create a neural network that implements an F# function to predict C# code. The network was compiled to a CoreML model and runs on iOS to be used in my app Continuous to provide keyboard suggestions.
Introducing fuget.org May 31, 2018
Have you ever wondered what exactly is in a nuget to see if it’s right for you? You read the description, you like the name, but, if you’re like me, you probably ended up in GitHub reading the source code to decide if you want to use the library.
Calca in the Microsoft Store May 21, 2018
Calca is my crazy symbolic math calculator/markdown editor designed specifically for mad scientists. Today, I am very pleased to announce that Calca 1.5 is available in the Microsoft Store!
Ooui.Wasm - .NET in the browser Mar 15, 2018
I’ve been obsessing over my little .NET web framework Ooui and am excited to announce that it is now capable of running fully in the browser as a web assembly. This means that Xamarin.Forms apps can run completely in the browser - without a smart server - giving .NET developers even more reach and options for distributing their apps. Try the Xamarin.Forms XAML editor demo online or read the getting started guide if you want to try it yourself.
Xamarin.Forms on the Web Nov 15, 2017
TLDR: I implemented a web backend for Xamarin.Forms so that it can run in any browser. It achieves this without javascript recompilation by turning the browser into a dumb terminal fully under the control of the server (through web sockets using a library I call Ooui). This crazy model turns out to have a lot of advantages. Try it here!
"Hotdog or Not" Using Azure Custom Vision, CoreML, and Xamarin Sep 27, 2017
TL;DR I used Microsoft’s Custom Vision service to train a CoreML model and wrote an iOS app in Xamarin to execute it in less than two hours. It has a loose tie-in with a popular television show. Code on GitHub. You can hear James and I discuss this on Merge Conflict.
Overview of iOS 11 - Seattle Mobile .NET Presentation Jun 11, 2017
An overview of new features in iOS 11.
How I Made Zoom and Enhance - Seattle Mobile .NET Presentation Apr 4, 2017
I trained a neural network to perform “zoom and enhance” of faces. It is able to scale faces 16x to make them recognizable. Here’s how I did it.
Fashionable REPL Prompts Feb 27, 2017
I was writing a new language the other day and I thought, “this puppy needs a REPL”!
Algorithms for More Intelligent Apps - Future Decoded Presentation Nov 1, 2016
I present some of my favorite algorithms including “Fuzzy Logic”, “Eval”, “General Problem Solvers”, and “Simulated Annealing”.
Continuous - C# and F# IDE for the iPad Jul 6, 2016
Over the past six months I have been working on a new .NET IDE for the iPad, and today I am very pleased to release it on the App Store.
Calca 1.4 for iOS - Awesome and Free Mar 21, 2016
Today I’m pleased to release Calca 1.4 for iOS.
Live Coding with Xamarin iOS Nov 9, 2015
TL;DR I wrote a new Xamarin Studio add-in that dramatically reduces the number of Build and Run cycles you need to perform while developing an app. Please follow the instructions to install Continuous and let me know what you think!
Drone Builder - A Story of Drones, React, and F# Sep 14, 2015
Drone Builder is a site I created to play with different DIY drone (multicopter) designs. I wrote it using F# and React.
My Complaints with Nuget 3 Sep 4, 2015
Warning This article is garbage. Don’t read it.
Introducing the iCircuit Gallery Jun 3, 2015
TL;DR I wrote a website to share circuits made with my app iCircuit and I hope you’ll check it out.
Coding in Your Head May 28, 2015
I’m terrible at coding interviews - some busy bee dusts off a tricky algorithm that they studied in college and asks you to (1) originate it from a poorly stated problem and (2) live code it in front of them.
Many Levels of App Store Rejection May 25, 2015
Submitting apps to the App Store is filled with many wonderful opportunities to be rejected. Let’s count them!
Functional GUIs with F# - .NET FRINGE Presentation Apr 15, 2015
How do you write a GUI app in a functional programming language that prefers immutability? From Visual Basic on we have been taught how to compose interactive UIs using events and mutable properties. Is there any other way? The answer is, yes, indeed there is. Not only can you build UIs using functional concepts, but I will argue that the architecture of such an app is more modular and more robust than the standard architecture resulting from objects sending messages to each other. This talk is an introduction to the fringe world of functional programming using F# and will have information useful to both beginners and practitioners.
Functional GUI Apps with F# at FRINGE Mar 20, 2015
I’m speaking at FRINGE!
Excited for FRINGE Mar 17, 2015
It’s been too long since we’ve had an open source .NET conference. Since monospace/monkeyspace imploded, we’ve been left with just Xamarin’s Evolve. And while I love Xamarin, and Evolve is glorious, it’s just not the same thing as the free-wheeling brain fest of an OS conference. Only at an open source conference do I get to see free thinkers unabashedly demo’ing their latest library or idea without having to bend it to a corporate initiative. It’s liberating and exciting!
Introducing NGraphics Mar 16, 2015
Many moons ago I created a cross platform library for rendering vector graphics called CrossGraphics. It was good. It supported lots of platforms and was fast. Very fast in fact because it was designed for my app iCircuit which was already a CPU hog and had to run on 2010 era mobile hardware. To be fast, I played loosey goosey with cross platform accuracy (they mostly rendered the same) and features (who needs gradients?).
Open Source CLRs - Seattle Mobile .NET Presentation Mar 3, 2015
This presentation walks through the history of open source CLRs. From Rotor, to Mono, to .NET Core we’ve had our share of implementations and this presentation tries to organize all of that.
Building and Running .NET's CoreCLR on OS X Feb 9, 2015
What you heard is true, Microsoft has open sourced the CLR and it runs on more than just Windows. They didn’t just dump some ZIP file on an FTP; no, we have another fully functioning, easy to compile, and easy to contribute to CLR hosted on everyone’s favorite file share. Microsoft has even gone so far as to setup a two way mirror with GitHub so that their internal systems stay in sync with what we see. Color me impressed.
Two Hot New Features for Calca Nov 25, 2014
Calca 1.3 has hit the Mac App Store and it contains two features that I hope you’ll love: plotting and quick entry.
Stop Crashing! Nov 7, 2014
TL;DR I wrote a script that lists functions in your Xamarin app that could cause it to crash. StopCrashing.fsx on github.
Programming Augmented Reality - Xamarin Evolve Presentation Oct 11, 2014
I present the techniques used to build an AR app on iOS before ARKit was available.
Mocast Jul 17, 2014
For the past couple months, I have been working on a top secret project that aims to redefine the way work will get done, address key industry mobility challenges and spark true mobile-led business change. I’m just kidding, it’s a podcast player!
My Xamarin Studio F# Wishlist Jul 11, 2014
I am writing a large iOS and OS X app in F# and am totally digging the honeymoon phase. Not only is F# a crazy powerful language, but it has a great interactive code executer built right into the IDE. In all, it’s a wonderful development experience.
Mocast Postmortem - Seattle Mobile .NET Presentation Jul 1, 2014
After writing an app, I like to look back at what went right and what went wrong. This is the postmortem I wrote for Mocast where in I realize that observable objects are good but multi-threaded observable collections are not.
Automated UI Testing with Cucumber and Calabash Jan 17, 2014
There comes a day in every developer’s life when they have to admit that they just aren’t good testers. We don’t think to hit buttons in strange combinations, we test features in isolation, we don’t re-test for regressions, and we simply don’t do it often enough.
Microsoft's New Systems Language Dec 29, 2013
As a programming language nerd I had mixed feelings when Jon Galloway tweeted about Microsoft’s new programming language.
Audio Tales - Something a Little Different Nov 6, 2013
One morning, I walked into a random presentation at WWDC. I didn’t know what it was about, but I was on autopilot and determined not to miss one session. It turned out to be Accessibility - not something I tend to think about as evidenced by my apps - but what else is a conference for but to break your habits?
Calca 1.2 - Experiments in Text Editing Nov 1, 2013
Let’s face it, text editing text on iOS isn’t the most enjoyable exercise. Text input is fine and dandy, I love flinging my thumbs or resting the iPad on my lap. But editing, no sir. That just sucks.
Buttons Considered Harmful Oct 30, 2013
I realized that my favorite apps on the iPhone are the ones that minimize the number of buttons in their UI.
Calca for Windows, you asked for it! Oct 21, 2013
Calca for Windows has been the #1 asked for “feature” since Calca for iOS debuted in July. Today, I’m happy to announce that it’s finally available for purchase! For just $9.99 you can own this powerhouse of a calculator.
Async Application Patterns in C# - MonkeySpace Presentation Jul 23, 2013
I present a variety of ideas on how the new async support in C# can be used to build better apps. I try to go beyond “waiting for IO” and present crazier things such as interactive help and automatic Console App to Web App conversion.
Calca OS X Now Available & Code Reuse Jul 15, 2013
Calca is my latest app - a text editor and computer algebra system happily married together. The reaction to Calca has been overwhelmingly positive. I am very excited that people are finding it useful. Make sure to leave reviews and tell your friends. :-)
Calca - the text editor for engineers Jul 9, 2013
I am very pleased to announce the availability of Calca, my newest iOS app (and soon OS X app).
Asynchronous Talk Proposal for MonkeySpace 2013 Apr 24, 2013
Here is the abstract of a talk I hope to give at MonkeySpace in July - submitted a mere one week after the deadline. Let’s hope the organizers like the idea!
Easy Layout - a DSL for NSLayoutConstraint Mar 18, 2013
Layout has changed in iOS 6. We no longer are supposed to calculate
RectangleF
s and set springs and struts (AutoresizingMask
), we are to use this very advanced constraint solving system. I wrote a library to make writing constraint-based UIs easier.Await in the Land of iOS - Scripting Users Mar 13, 2013
TL;DR I show how to use the
await
keyword in C# to build an interactive help system.Await in the Land of iOS - Drag-n-drop Mar 13, 2013
Today is a big day, Xamarin has released (in alpha) support for the await keyword in C#.
iCircuit Code Reuse, Part Cinq Feb 5, 2013
I have toiled away with the new Windows 8 OS, the new Visual Studio 2012, and the new Office 13/365 to present you, dear reader, with this fine set of charts:
Mobile Network Performance while Touring Seattle Dec 5, 2012
I recently journeyed around Seattle to get a sense of the impact motion has on the network performance of mobile applications.
Programmatic Panning and Zooming with a UIScrollView Nov 27, 2012
Let’s say you have a zoomable and scrollable UIScrollView all setup in your app. Great! Good job. But how do you programmatically zoom in on something particular? (For example, you may want to pan and zoom into an object that was double tapped.)
iCircuit Code Reuse, the Fourth Edition Sep 18, 2012
Hell has indeed frozen over and I have released the Android version of iCircuit! iCircuit is now on 4 platforms!
Speakers I can't wait to see at Lang.NEXT 2012 Mar 16, 2012
The speaker list for Lang.NEXT 2012 has been released, and I found myself trying to decide which speakers to go see. There are a lot of fine choices so I thought I had better get organized!
A Two-year-old Bug Found by Microsoft Jan 20, 2012
I submitted the Windows Phone 7 version of iCircuit to Microsoft a few days ago and was shocked (shocked!) that it failed certification by their testers.
iCircuit Code Reuse Part Trois Jan 13, 2012
I have recently finished porting iCircuit to Microsoft Windows Phone 7 (WP7) and wanted to see how I performed on the code reuse front.
3 Mobile App Dev Problems - Monospace Presentation Jul 23, 2011
This is my first public presentation! I try to sum up my experience being an iOS app developer using Xamarin and offer solutions to common problems I continually run into.
My Great Wumpus Hunt Jun 18, 2011
There is a bug in iCircuit that is tarting to feel like my white whale, my wumpus. I know all about the bug: I know why it’s happening, I know all its symptoms, and I know at least one way to squish it.
Quantifying reflection's slowdown in sqlite-net Nov 14, 2010
Yesterday I posted R64 of sqlite-net which included some performance upgrades thanks to Joe Feser.
INotifyCollectionChanged for cleaner more reusable code Nov 13, 2010
My last post briefly described the work I did to port iCircuit to Windows Phone 7. In it, I described how the UI was broken into two large chunks: the graphical circuit editor and the “chrome”.
Interfaces + caches = Cross Platform Nov 9, 2010
iCircuit is a mobile app that lets you experiment with circuits on your iOS devices. Well, soon, it will also let you do it on your WinPhone7.
My First MonoMac App - Spy Touch Jul 4, 2010
The Mono team has recently given the world MonoMac, a framework that allows C# programmers to write native OS X (Cocoa) apps. This is wonderful news for those who simultaneously love OS X and C#.
Jabroni, Jabroney, or Jaboney May 30, 2010
Long story short: Jabroni is the modern form of Jaboney, American slang used to mock someone, somewhat vaguely, since at least 1931. The online etymology dictionary defines a jaboney as a “naive person, immigrant, hoodlum.”
Knuth’s Solution to the Permutation Problem Apr 14, 2006
Dr. Donald Knuth considered the problem of generating all permutations of an n-tuple whose integral elements were less than some number m in Section 7.2.1.1 of The Art of Computer Programming. Let’s look at his Algorithm M and consider how it can be used to solve permutation problems. To demonstrate the power of the solution, we’ll use C# and investigate the most idiomatic solution in that language.