Console 49

Coqui, Biff, and Flashlight

Sponsorships

SafeBase

SafeBase helps companies organize and share their security program information to close deals faster.  Their security status page stores security program information for easy sharing and provides insights about the security review process to help you streamline your workflow. Companies like Crossbeam and ReadMe are using SafeBase to automate their interactions with prospective customers during the security review process. Save time and reduce complexity with SafeBase today.


PhoneInfoga

PhoneInfoga is an information gathering & OSINT framework for phone numbers.

language: Go, stars: 4276, watchers: 389, forks: 1264, issues: 20

last commit: April 14, 2021, first commit: October 25, 2018

https://twitter.com/sundowndev

TTS

TTS is a deep learning toolkit for Text-to-Speech, battle-tested in research and production.

language: Python, stars: 1146, watchers: 41, forks: 64, issues: 14

last commit: April 16, 2021, first commit: January 22, 2018

https://twitter.com/coqui_ai

Flashlight

Flashlight is a fast, flexible machine learning library written entirely in C++ from the Facebook AI Research Speech team and the creators of Torch and Deep Speech.

language: C++, stars: 2077, watchers: 87, forks: 248, issues: 57

last commit: April 16, 2021, first commit: December 21, 2018

https://twitter.com/facebookai

Biff

Biff is a web framework + self-hosted deployment solution for Clojure.

language: Clojure, stars: 190, watchers: 10, forks: 6, issues: 37

last commit: March 05, 2021, first commit: March 27, 2020

https://twitter.com/obryant666


An Interview With Jacob O’Bryant of Biff

Hey Jacob! Let’s start with your background. Where have you worked in the past, where are you from, how did you learn how to program, what languages or frameworks do you like?

I was first introduced to programming (Visual Basic 6) by my dad when I was 10 or 11, and I got into Linux when I was 15 which accelerated things. I finished my CS degree about 3 years ago, worked for a year at Lucid Software and then quit to become a full-time startup founder. I work on recommender systems, applications that try to introduce you to new things you might like. More broadly I’m interested in the field of information discovery (or at least that’s what I’ve started calling it), which (I’ve decided) encompasses recommender systems, search engines, social networks, etc.

What's an opinion you have that most people don't agree with?

I think a lot of people give algorithms too much credit for bad things in society. For example, filter bubbles are a popular topic, even though the empirical evidence indicates they’re not much of an issue. But it makes a good story, so the idea persists.

What are you currently learning?

How on earth to get a startup off the ground, especially from the perspective of a solo technical founder. I think I’m almost there, and objectively, the numbers are improving. But along the way I have discovered some unexpected downsides of doing a startup (besides just “it’s really hard,” which was expected).

I often feel like society just doesn’t have a good place for me, and being a founder is simply the least bad option. One of my dreams is to create some kind of organization for people like that--I’m envisioning something like a mix between Y Combinator and grad school.

What would you have considered an expected downside, and what do you consider an unexpected downside?

The most common reason people give for why they think you shouldn't do a startup is roughly "it's really hard and it probably won't work." However, if you're ambitious, that's a positive signal--better that than doing something easy with guaranteed success, know what I mean?

However, being hard doesn't necessarily mean it's worth your time, and that was basically the surprise: being a founder is not necessarily a high leverage activity, even if you think of yourself as being smart, ambitious, etc. If Linus Torvalds had been obsessed with starting a company, would we have Linux?

The question is, do you spend your time chasing customers and figuring out what's providing value to them (a la Paul Graham), or do you instead focus on interesting ideas (a la Linus)?

For customers/users vs. interesting ideas, it's a mix. I am trying to build a business, and I want to do that by working on things I'm interested in (otherwise what's the point?). Feedback from people influences but doesn't drive my decisions. I make most important decisions with intuition. When I started being a founder, I wish I had focused entirely on interesting ideas and then switched to "business mode" only after I found something that gained some traction.

Psychological pressure is an issue. Quitting your job feels amazing for the first few months. After that, I constantly felt weighed down by "how in the world will I ever make any money doing this, what if I have to go back to square one and get a job again," which is incredibly distracting. Maybe I should've just told myself "I've got one year to work on whatever I want without trying to build a startup, and then I'll decide where to go from there." Alternatively, maybe part-time work is the answer. But that has downsides too.

I've written a few relevant essays on this topic which you can read here: The trade-offs of being a startup founderWhat I wish I could've done instead of college

Why was Biff started?

Biff was the result of spending a year and a half trying to figure out the best way for me to do web dev in Clojure. Clojure doesn’t have a default web framework like Rails or Django; rather you pick and choose various libraries and effectively build your own framework. I think that’s a fine way to do things, but I also think if I’ve gone through all the effort of making my own framework, I might as well polish it and write some documentation so other people have the option of reusing my work.

Where did the name Biff come from?

I spent approximately ten seconds on it. I wanted something short because I knew I would be typing it a lot. I thought of the punching sounds that Batman makes in the old TV shows, like “wham,” “pow,” and (I guess) “biff.” I retroactively attribute it to Biff Tannen from Back to the Future. I like the humorous unpretentiousness of it.

Are there any overarching goals of Biff that drive design or implementation?

Biff is designed for myself, a solo, early-stage startup founder. Everything flows from that. For example, speed in the early stages of a project is important; I want to be able to try out new ideas quickly. Thus Biff is end-to-end, it covers back end, front end and deployment. Scale on the other hand is not an immediate concern, so I haven’t optimized for that--though I don’t want to have to throw everything out if (when!) my startup takes off, so I try to avoid doing anything naive.

What trade-offs have been made in Biff as a consequence of these goals?

An important part of Clojure culture is the idea of “simple” vs. “easy,” which have specific, separate definitions in this context. Simple means “untangled,” the opposite of complex, where you have a mess of things all tied together. As a system grows, complexities tend to multiply, so in the long-term, one of the highest ROI things you can do is to keep things simple. It’s like how in calculus you want to simplify a function as much as possible before taking the derivative. This often has trade-offs with easiness: the more you try to automate something, the more opportunities there are to get it wrong and introduce complexity. “Gem install hairball,” as Rich Hickey once said at Rails conf.

However, ease (or “speed at the beginning,” as I think of it) is also really important in certain contexts, like startups. And this gets at the crux of Biff: how do you design a system that’s both simple and easy? I don’t always get it right; I’ve often accidentally introduced complexity as I’ve pursued ease. So every now and then I have to back-track and fix my mistakes.

Is Biff intended to eventually be monetized if it isn’t monetized already?

Plan A is for my startup to take off, in which case I’ll do the opposite of monetizing Biff: I’ll pay people to work on it. Plan B is consulting. If I could make a living using Biff to write web apps for people, that would be a pretty sweet gig. In particular, it might work to help SMBs who want to try Clojure/functional programming for a greenfield project but are wary about going off the beaten path. (If there are any Console readers in that position, feel free to email me. I've been thinking about doing this part-time soon).

If you plan to continue developing Biff, where do you see the project heading next?

I'd like to improve the deployment story. Right now the Biff project template includes some Terraform and Packer config for DigitalOcean, along with a handful of Bash scripts for provisioning the server image. But I've been exploring more deployment options lately, and I think a better path is Dokku for small/hobby projects and then one of the various Heroku alternatives for larger projects (in particular, Render, DO's App Platform, or Porter). To accommodate that, I've been refactoring Biff to make it 12-factor compliant. That'll also make it easier to deploy using any other method besides whichever ones I provide documentation for.

Where do you see software development in-general heading next?

Here’s where I hope it goes. Right now on the web, data is tightly coupled to software. Among other things, that harms extensibility. I think each individual should have their own database with some kind of access layer, and then all the web apps they use plug into that database somehow. Then it would be much easier to have many, small, interchangeable web apps (“do one thing and do it well”) rather than these huge platforms that you can’t really tinker with. There are a bunch of different initiatives that are aiming for similar things (like Solid), but usually privacy and data ownership are the main motivations, not extensibility.

(There’s an interesting analogy to object-oriented vs. functional programming here: “better to have 100 apps that operate on one database than 10 apps that operate on 10 databases”).

This idea has been slowly evolving in my head for the past four years now, and I finally started writing a prototype for something in this space last week. So maybe I’ll have a release for that out soon.

This sounds similar to urbit’s vision. Have you heard of them, if so, do you have any thoughts on the project?

I have, though I haven't investigated it deeply. There are quite a few projects aiming for something like this actually. To be frank, I think many of them suffer from the "architecture astronaut" problem (though I shan't name any names). I'm trying to go for something that's very small, pragmatic and useful, with a focus on adoption. There won't be much point if no one actually uses it.

Where do you see open-source heading next?

I think self-hosted web apps becoming prevalent is a really interesting possibility. I think Replit will drive this: you can run your own instance of someone else’s app in about two clicks. That’s huge for adoption. Imagine this combined with that last idea: we could have a whole ecosystem of open-source web apps that all operate on your own database. Open-source strikes back.

I keep hearing about Replit but haven’t looked into it deeply enough myself. How did you hear about it and what make you dive so deeply into it?

I heard about it from Paul Graham's Twitter feed a couple years ago; he was tweeting about them heavily at the time (also Triplebyte). I'm a big fan of making things easy, and I've long been into Linux system administration/dev ops, so it seemed like an exciting possibility. I played with it a bit off and on. I started using it more recently since they added "always on", which lets you make web services that don't go to sleep. Currently I find it's great for making one-off web services in Python.


Like what you saw here? Why not share it!

Share

Or, better yet, share Console!

Share Console

Also, don’t forget to subscribe to get a list of new open-source projects curated by an Amazon engineer directly in your email every week.