EVBOGUE.COM


Is minimalism a dead unicorn?

July 31st 2015

Over the past few days I've been mulling over a return minimalism. JFM seems to have dropped the torch I discarded to him all of those many years ago in 2011 when I my writing went off its' rocker into bullshit Singularitan "THE FUTURE WILL BE BETTER" territory.

But four years later I still find myself self-identifying as a minimalist. All of my stuff still fits into a bag in the overhead compartment.

The big issue for me is whether or not anyone cares anymore. When I'm writing about programming and Node.js I get feedback. People care. There's some sense that if you get Node.js down then you can build things on the web that the baby boomer and gen-Z screenthumbers cannot.

Does minimalism have any teeth, or is it a dead unicorn? If I hit minimalism again in a series of posts, am I just kicking a dead unicorn? Did minimalism die when I said 'fuck minimalism' in 2011 and never quite get back on it's feet no matter what anyone said?

Will Tyler Durden have to continue to be the most famous minimalist with his line about your stuff owning you? After rewatching Fight Club a few months ago, I wonder if he's an aspirational guy to look up to in the modern era.

I'm not sure. I want to believe, but I know believing isn't necessarily jiving with the reality of the cultural situation right now. Perhaps minimalism was a fad sandwiched between the plentiful office jobs of the 90s and the unemployable rate of the post-2008s.

Or perhaps minimalism is fundamentally unimplementable. People don't want to change, they want to remain the same. That's why people cling to their mortgage payments telling themselves that the house belongs to them until the repo man shows up to tell them to get out of the bank's house. At that moment minimalism is foisted upon them, and all of their things have to fit into a shopping cart and a storage locker. And then the storage locker gets repoed, all of their stuff comes on the market for a dollar, and Good Will gets to have it whether minimalhoarder.com wants them to have their stuff or not.

But my stack is pretty much where I want it to be right now. I have this goal in the back of my mind that I should learn how to clone any modern web application using Node.js and Koa, but nothing seems to incentivize me to prioritize that goal other than my own selfish interest in becoming a rockstar programmer someday.

Arch Linux advertises itself as a minimalist Linux distribution. Having used Arch Linux on my local machine since 2013, I have to agree with that. If Arch Linux is the backpack, and the base and base-devel packages are everything you need to have in your backpack to live, then that's a pretty minimal way to live in the digital world. It might be an interesting experiment to try to use Arch Linux without installing anything above and beyond base and base-devel. But I'd miss Vim and Node.js.

Or perhaps minimalism just lacks decent leadership. Minimalism run by the collective seems to get co-opted by hoarders who don't want anyone to know the true meaning of simplicity. If minimalism had decent leadership, perhaps the unicorn would rise again. A pheonixacorn.

If you want to comment on this piece, use Gitlab and comment on the first commit of the piece.

The link to the commit for this piece is bab13bf2d80264137bcf7362531b3693a22cd67d


Bare Minimum Metalwork Stack

July 29th 2015

The why of Metalwork is obvious: get a Metalsmith blog up and running without having to piece together the docs from 15 different sources.

The how is harder. The stack has changed a bit from the olden days of shared hosting and Geocities.

What is the bare minimum stack to run Metalwork?

A stack is the term people with technical skills use to talk shop about what programs they use on a computer. When one dork bumps into another dork on the Internet or at a coffee shop they ask the other dork what their stack is, and then judge them when they say "Mac > Apple > Facebook". In a way it's a way of judging someone who says they have tech skills, and then downgrading them in your mind when you find out they don't have any at all.

There is no one way to describe a tech stack. I find myself starting at the bottom and working up. Everything on the top of the stack depends on things deeper in the stack.

There are local stacks and virtual stacks. I'm using both.

The stack I use to run Metalwork is the following:

Local: Acer 373 > Arch Linux > Node > Koa > Metalsmith

Digital Ocean > Debian > Node > Koa > Metalsmith

This is the bare minimum stack. There's of course all sorts of other things running on my VPS such as Postfix, Procmail, and Spamassassin for me to run email. I send The Mailing and The Client List using Nodemailer, and that's a slightly different stack from Metalwork, but not that different.

Below, the stack in more detail.

Digital Ocean

Digital Ocean is a VPS (virtual private server) company that leases virtual computers with dedicated IP addresses you can use to run programs on. I have a referral code for them, so I'll get a little mone to keep funding my VPS habit if you use them. It is: https://www.digitalocean.com/?refcode=26d8ed49730d

You can create VPSes using a simple interface on Digital Ocean, they'll email you a password, and the next thing you know you can ssh into the VPS using the following command in your terminal

% ssh root@192.168.0.1
Password: theonedigitaloceangaveyou

And the next thing you know you'll be logged in as root.

There are a lot of skills involved in running a VPS. If you want to learn more about them, read my opinionated book on how to run a VPS called Operator's Manual.

Debian

Debian is a Linux distribution. The latest version is Jessie. It's fairly stable. I'd prefer to use Arch Linux, but Digital Ocean doesn't support Arch Linux which is a shame. But I have Digital Ocean referal credit to use, so I stick with Debian. The good news about Debian is it's fairly innovative, being that they've implemented systemd. And they're also incredibly stable, which is why everyone uses Debian on their VPSes.

I cover basic UNIX skills such as how to pilot a Linux box in Operator's Manual as well.

Node

Node.js is an interface for Chromium's V8 JavaScript engine. It lets you program web servers in JavaScript. Node is a huge innovation over CGI-BINs.

How to install Node.js on Debian is easy, just use the package manager to install Node and the package manager they use with Node right now.

$ sudo apt-get install nodejs npm

Next you'll need to update Node.js to the latest version, which right now is io.js. To do this, install n, which is a decent Node version manager, using npm

$ sudo npm install -g n

And install the latest version of io.js using n

% sudo n io latest

And type

% node -v 

To see what version of Node you're using. It should say 2.4.0 or higher

I'm writing a rolling release book on Node.js, and I think you should buy it if you want to get your skills up in this area.

Koa.js

Koa.js is a generator's based serverside framework for building web applications. Within Metalwork, I only really use it to serve a static website. I love the syntax, so that's why I use it.

var koa = require('koa')

var app = koa();

app.listen('3000');

and

% npm install koa

I also use Koa static to serve Metalsmith's static files. So that app starts to look more similar to this:

var koa = require('koa'),
    serve = require('koa-static');

var app = koa();

app.use(serve(__dirname + './build'));

app.listen('3000');

Don't forget to npm install it

% npm install koa-static

And that is all I'm using from Koa. There's a lot more. You can basically reimplement any modern web application you've ever used on the Internet using Koa if you back your head up against it enough.

There are a handful of Koa.js tutorials in The Node Book.

Metalsmith

Metalsmith is the best static website generator I've been able to find on the Internet. In fact, it's perhaps more interesting to call it a static website framework. Because it's so flexible, you can build all sorts of things with it. The only rule is Metalsmith will probably render them down to static files.

I use Metalsmith together with Koa to bring Metalwork together. This is all of the Metalsmith code in Metalwork, with all of the Koa stripped out. Obviously there are templates and src files as well.

A simple Metalsmith site looks similar to this:

var metalsmtih = require('metalsmith'),
    markdown = require('metalsmith-markdown');

metalsmith(__dirname)
  .use(markdown())
  .destination('./build')
  .build(function(err) {
    if (err) {throw err; }
  });

Here's the full code involved in Metalwork:

var metalsmith  = require('metalsmith'),
    markdown    = require('metalsmith-markdown'),
    templates   = require('metalsmith-templates'),
    collections = require('metalsmith-collections'),
    permalinks  = require('metalsmith-permalinks'),
    beautify    = require('metalsmith-beautify'),
    moment      = require('moment');


metalsmith(__dirname)
    .use(markdown())
    .use(collections({
      blog: {
        pattern: './blog/*.md',
        sortBy: 'date',
        reverse: 'True'
        }
}))
    .use(permalinks({
      pattern: ':collections:title'
    }))
    .use(templates({
    engine: 'jade',
    moment
    }))
    .use(beautify())
    .destination('./build')
    .build(function(err) {
        if (err) {throw err; }
        console.log('Metalwork has been built');
    });

That's a lot, but it's necessary to get a somewhat basic blog necessary. The good new is Metalsmith/Metalwork is so customizable you can rip out any of the middleware and replace it with anything you want.

This bare minimum stack for Metalwork might seem a bit overwhelming, but at most it's going to run out $5 a month at a VPs providor to keep running. Plus a yearly fee on a domain name, if you want to have a URL people can go to read your blog.

If you want to learn more about VPSes read Operator's Manual and The Node.js Book where I've covered these technologies in more depth. Questions? Hit me at my email.


Node project idea - Delicio.us clone

July 28th 2015

I have a big theory that everything that's been built on the Internet can be re-implemented in Node.js. You only need to understand how a program works. The great thing about existing programs is someone programmed them once, so how hard can it be to program them again?

Delicio.us is a good one. Social bookmarking! Because it doesn't really exist anymore. The original program is long gone, lost to seas of time. Pinboard.in is another example of the same program.

This is a a spec. How exactly to re-implement delicious is beyond the realm of this post. I don't know the specifics because I haven't done it.

I'm going to talk about how I think it could be achieved, and what modules to use, and then you get to do the implementing. Unless I'm motivated enough to try it myself before you figure it out. If you do a delicio.us clone, send me the link! ev@evbogue.com

If you need an introduction to Node.js, buy the Node.js book to get your skills up.

If you want to hire me to implement a program in Node.js, or throw a whole bunch of VC money at me to do it, then give me a shout and we'll talk details.

Delicio.us is a three part centralized user-account based program, as I remember it.

  1. The frontend
  2. The backend
  3. The bookmarklet

There's no reason you can't do most of this in Node, except for the bookmarklet. That would need to be done in browser-side JavaScript. The bookmarklet hangs out in your browser's navigation bar and saves a bookmark's name, url, date and any notes you have about the page. Next, it relays it to the backend app for you, so you don't have to manually type any of it in.

The backend would be Node.js. It'd need to take data from the frontend and save it to a database. Let's say Redis, because Redis is fast. But you could just as well use LevelDB, MongoDB, or one of those SQLs. The hardest thing for me would probably be doing the database hookups, because I've never written a database app before. Next I'd use Express or Koa.js as a framework to render routes to receive and display this data. It'd need a /save route that both accepts input from a form and displays output. The app would record an object containing this data. Let's use JSON for that. We'd need /signup and /login routes as well. As well as a /profile page that is editable and a root route / that displays your social bookmarks in chronological order.

If I remember delicio.us, it also had a way to /follow /unfollow and /display all of the bookmarks that your friends have saved as well. While we're at it, we'll need to implement a /search route where you can search your bookmarks for bookmarks you'd saved.

That's it for the backend.

The frontend doesn't need to be anything other than static HTML rendered on the fly for the user session. No need to bring any data to the browser unless you want to do that in a clever way.

That's it folks. Go now and implement! Create a startup and make all of the money. If I missed anything, let me know.


Framework.css

July 27th 2015

Updated: July 28, 2015 Version: 1.6.1

I wanted a decent framework. I looked everywhere for one. I tried out a bunch. None of them were good enough for me. So I created one. I present to you, a decent framework.

Patches welcome, via email.

Framework.css is a single CSS file that works without any JavaScript. Framework won't style your project for you, but will give you a stable base on which to build your site or web application design.

Grid Layout

Framework comes with a percentage-based grid layout. There are twelve columns. This means you should be able to design layouts that work on different sized screens -- from mobile to desktop.

one
eleven
two
ten
three
nine
four
eight
five
seven
six
six
seven
five
eight
four
nine
three
ten
two
eleven
one

Installation

To install Framework.css...

  • Add Framework.css to your project's static folder
  • Add the following HTML code between the <head> and </head> tags
<link rel="stylesheet" href="/framework.css" />

Make sure the URL is the same as where you've uploaded the file on your server.

And build! Design! Create! Make all of the money!


The Mailing

Hear from me when I write a blog post. I'll confirm via email.




To unsubscribe email me.

Blog posts

About

Ev Bogue is the author of Node.js - Code JavaScript.

Email: ev@evbogue.com.

Built with Metalwork.