GitHub Graveyards: I'll show you mine...

Isaac Lyman - Aug 8 '18 - - Dev Community

Dev.to goes open source today! As befits the occasion, I've been reflecting on my own adventures in open source software.

I've had my GitHub account for a few years now, and in that time have written thousands of commits in various repositories, including a few small contributions to projects from Google, Bloomberg Media Group, and a couple of community-backed NPM packages. But the coolest code I've written has all been in my own repos. There are 16 source repositories in my GitHub account, of which only two are regularly updated. That means the other 14 were created in my spare time and died a quiet death somewhere along the way.

Side projects, although unnecessary to a great career as a coder, are a fun way to learn and exercise your creativity. I've learned awesome things from each of these and I wouldn't be the coder I am without them.

Feel free to check out any of the dead projects I mention here, fork them, or use them as a jumping-off point for your own adventure. I'll introduce each of them, and then, if you've got a minute, I'd love to hear about yours. And if you have any questions, you can comment on this post or message me directly. I'm always happy to share.

TonsilText

"An app to help the temporarily or permanently mute to communicate rapidly."

Background: I got my tonsils removed in December 2014. Anyone who's had a tonsillectomy knows that recovery is very painful, and for a couple of days around Christmas I couldn't speak because of how much my throat hurt. I knew the best way to distract myself was to dive into a coding project, so I decided to create a mobile app that would let me type any word or phrase, then auto-size it to fill my smartphone screen in landscape orientation so someone across the room could read it.

What I learned:

  • Basic familiarity with Android Studio
  • How Android apps are structured and built

Why it died: Once I recovered, I didn't feel motivated to keep building the project. There were also some big technical hurdles, as I never quite figured out the right algorithm to get the text to dynamically fill the screen, splitting onto multiple lines as needed, in order to maximize the font size without overflowing the screen.

ruffin

"Social app that helps you do stuff you like with new friends. No account, no commitment."

Background: Everyone's got an idea for a social network, right? My idea was a simple site where you would enter a zip code and a keyword (like your favorite hobby or restaurant) and you'd go to an instant chatroom specific to both. You could meet every biker or rock climber or Shake Shack enthusiast in your postal region. Chat rooms could also have events attached to them, with a basic RSVP so you could get groups together to go do stuff. Oh, and for some reason I didn't want to deal with passwords, so you'd just request a magic sign-in link in your email whenever you wanted to log in.

What I learned:

  • MeteorJS, one of my favorite web frameworks to date
  • MongoDB
  • Reactivity on the web
  • Full-stack development with a shared codebase
  • A bunch of web development mainstays, like automated emails, cookies, and components

Why it died: I didn't do any planning or architectural work, so the codebase got really messy, really fast. I got bored of debugging it.

pooty.js

"A VMC framework that won't ruin your life."

Background: Everyone's got an idea for a front-end framework, right? ...um, at this point I'm starting to think it's just me. Anyway. I was frustrated by the complexity and overhead of AngularJS, and didn't like how opinionated and proprietary MeteorJS was, so I decided to roll my own framework. I called it a VMC because the Model would sit between the View and the Controller and mediate all their interactions. It was super-declarative and included some unit testing tools. I got a working prototype out (although I broke it later) and even put up a website for it. I may not have known much about frameworks, but you have to admit my emoji game was strong.

What I learned:

  • Building a web framework is really hard
  • Building a unit testing framework, on the other hand, is relatively simple

Why it died: Once again, I failed to plan. I ended up with a really heavy pile of code that was difficult to reason about. I still feel like there were a lot of good ideas in that framework, but as it turns out, execution matters more than concept.

Human Bingo (website)

"A live-action game for people bored at airport terminals."

Background: A friend told me about a people-watching game she and her husband play when they're bored. They drive to the parking lot of a movie theater or mall, fill out a bingo board with random human characteristics--long hair, big muscles, a sleeve tattoo--and cross each one off when they spot someone that has it. (I'm too awkward to know if this is creepy, please advise.) I thought this sounded like fun, so I built a quick web app in jQuery that generates the bingo board for you and lets multiple people play at once.

What I learned:

  • For simple web tools, you don't need a framework
  • How to simulate things I'd always taken for granted, like ng-repeat and ng-if, in jQuery

Why it died: I finished it. Sure, there's more I could do, but I think it's good like it is.

Human Bingo, the app

Background: A few people said they'd like to play Human Bingo if it was a mobile app. I'd heard that Phonegap could turn a website into an app pretty easily, so I gave it a shot. What I'd heard turned out to be wrong. Turning a website into a mobile app takes some real effort, even if the website is already responsive.

What I learned:

  • How to set up and use Phonegap
  • How Android packaging works
  • All about Phonegap

Why it died: It turned out to be harder than I expected. I still think I'm going to finish it someday, I just may have to start from scratch.

writ

Background: I've been writing stories since I was a kid. I've always enjoyed writing, but trying to write long-form fiction in Microsoft Word is really hard because it doesn't have good tools for navigating or organizing your work. So I started exploring the idea of making a web app for fiction-writing.

What I learned:

  • How to set up and bootstrap an AngularJS project from scratch
  • Front-end routing

Why it died: I got bogged down really fast and realized I hadn't put enough thought into my data structures and app design. I also got frustrated with the amount of boilerplate AngularJS requires. However, I took a lot of the ideas from writ and implemented them in the webapp I'm currently building, Edward the App.

SuperTextAdventureMaker

"A super simple tool for creating text adventures on Windows."

Background: I had just started learning .NET and I wanted to make something cool with it. I had an idea for an interactive fiction engine that would consume text files with a straightforward domain-specific language. I also decided to find out if it was possible to create a C# application that was effectively stateless, using only POCOs and static classes.

What I learned:

  • How to set up a console application in .NET
  • User input/output in the console
  • Text file parsing

Why it died: It's not super dead; it has a wiki and it works pretty well. However, before I started building lots of advanced features, I realized it was a bad idea to try to build a stateless app in C#. The way I was doing it would theoretically build up the call stack until it overflowed. Rather than undertake a complete rewrite, I abandoned the project.

SpitScript

"A rap vocabulary that transpiles to JavaScript."

Background: I had just read James Kyle's Super Tiny Compiler (which is amazing) and I wanted to build a compiler of my own. I decided to have it compile rap lyrics to JavaScript. A couple of weeks later, everything came together and SpitScript was born.

What I learned:

  • How parsers, tokenizers, ASTs, and generators work
  • Compiler design

Why it died: I finished it, albeit a year or two later. I ended up converting it to TypeScript (a great idea for finicky manual processes like this), fixing a ton of bugs, and releasing a completed version. It's not perfect--the vocabulary and syntax could definitely use some testing and tuning--but it works and it's kinda fun. Admittedly, I haven't worked on it for a while.

vue-custom-element-ts-example

"An example repository demonstrating how to use TypeScript with vue-custom-element."

Background: I was using a Vue community package called vue-custom-element and noticed it didn't have TypeScript support, so I wrote a TypeScript definition file and submitted a pull request. Once it was accepted, I got a lot of issues directed at me because people didn't understand how to use it and there were some use cases it didn't cover. In response, I created a small repo to demonstrate how it worked.

What I learned:

  • How to create the simplest possible version of something for documentation

Why it died: It was a one-off and served its purpose.

vuex-autosaver

"An example repository demonstrating a content autosaver built with Vue.js and Vuex."

Background: I wrote about this on dev.to here.

blackswan-js

"A library for expressive music composition in JavaScript."

Background: I was playing with the Web Audio API and got frustrated with how complex it was. I didn't feel like I was writing music; I felt like a mathematician messing with audio waveforms. So I created a library for writing songs that would run on the Web Audio API without having to deal with the super-complicated stuff.

What I learned:

  • Documentation-driven design--I wrote the documentation for this project before I wrote any code, and it kept things really simple and straightforward
  • The Web Audio API
  • Audio processing, including waveforms, clicking reduction, and precise timing
  • That if you find an unlicensed library on GitHub, you can tweet at the author and they'll probably let you use it 😊

Why it died: I finished it. It isn't perfect, and I never nailed the "piano sound" I was hoping for, but it works pretty well for simple tunes.

array-filter-visual

"A vue-cli powered tool for filtering an array of words visually."

Background: My simplest project ever! About 100 lines of code, total. I was building a feature for Edward and needed a long list of random words. I grabbed some word lists online, but I needed a way to filter out words that were vulgar, duplicated, or overly technical. I spun up this component that runs on Vue CLI 3.0, displays all the words in a grid, lets you uncheck words you want to throw away, and generates a continuously-updated JSON list of the remaining words.

What I learned:

  • Vue CLI 3.0 is super awesome, there's no faster way to build an interactive web component

Why it died: It served its purpose.

Viano

"A toy that lets you write songs using Vue components."

Background: I was thinking about Vue components (more or less the way middle-school kids think about their crush) and I wondered if it would be possible to implement a domain-specific language that only uses Vue components. So I put together a markup-based interface for blackswan.js and discovered that it was not only possible but also pretty fun. Then I used it to compose "La Cucaracha" in Vue. This is my most popular project on GitHub even though it's arguably one of the least useful.

What I learned:

  • How to do provide/inject in Vue
  • In theory, you could create a Turing-complete programming language that only uses Vue components

Why it died: I finished it. It could be a little easier to use, but it proved the concept I had in mind.


And that's all of them! I've had such a cool time and hope to be involved in many more projects like these in the future.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player