Shame on me.
It’s been almost four years without writing a single word in this blog. You can’t – of course – force creativity, but it’s not like I’d write long essays anyway. I do however like the technical side of things and I enjoy challenges in unhealthy amounts, if the enjoyment could be measured, that is.
So, my New Year’s resolution for 2016 is to blog. Not blog as in “sharing my thoughts”, but as in “document my path to the command-line mastering”. Because, yeah, I’ve been putting off learning a shitload of stuff that I want to learn. Did I fail to mention that above?
Specifically, I find exciting the thought that my whole development environment can be in a server far far away, and all I need to access it is a computer with an SSH client. No matter how old it is, as long as it has a terminal. And even if I never get to this point, I’ll still have improved my workflow by being able to juggle files remotely, automate things, etc. After all, I go as a Web Developer by day, so interacting with servers is part of my job. It’s really a pain though having to open a program to access a server, download a file, open another program to edit it, and re-upload it. Sure, nowadays your (S)FTP client can directly open a file into an editor, but all does is to automate that download/upload behind the scenes for you. You still have to wait.
So, here is a non-definite list of stuff that I’m aiming to learn this year. Some are more domains than subjects, and some I hate but would be nice to know. Here it goes:
- tmux – Because one SSH connection should be enough for multiple remote sessions. Not to mention that you can leave stuff running on the server on purpose, or if your connection drops.
- vim – Because a version of vi(m) is installed pretty much on every linux box out there by default. Knowing at least the basics of it, gives you a powerful text editor at your disposal. The promise of editing text at the speed of thought is not bad either. But please, let’s not start a holy war on vim vs Emacs.
- Bash – Being the default shell of most linux distributions, pretty much guarantees you’ll have a consistent scripting environment.
- Z shell (zsh) – Promises to be Bash-compatible but much more modern. In fact it’s quite popular among the terminal-loving developers nowadays, so there’s definitely something to it. Specifically its command and arguments completion is praised quite a lot.
- Apache and Nginx – Well, I’m a web developer so web servers are naturally included in my list. Stuff like adding/removing modules and/for performance tuning. I mean, why have a default Apache installation that loads Ruby/Python/etc modules, when you’re only going to run PHP on it?
- Linux administration – This is too generic of course, but I want to be able to set up solid, secure servers. So things like networking, firewalls, services, web/mail/DNS servers, are all fair game for this category.
- Provisioning – meaning the automation of setting up a “computer”, whether bare metal or instance of a virtual machine. From my previous research, Ansible looks like a better match for me, but I don’t exclude anything at the moment. I might fall in love with Chef or Puppet. Who knows?
- Vagrant – My current laptop doesn’t have the horsepower to actually run a virtual machine while my current IDE et al are still running, however the promise of setting up a development environment (with the help of a provisioning tool) at the issue of a single command, combined with tmux/vim/zsh for actual development, kinda turns me on.
- Git – Version control for my configuration files. vim, tmux, etc all are highly configurable via configuration files (a.k.a. dotfiles). Keep these in a central repository, along with the Vagrant/provisioning files, and you get an instantly accessible and deploy-able development environment. I already work with Subversion (SVN) so it’s not about the merits of version control. It’s about the distributed nature of git, where you have the full repository on your disposal. Github too (the Github flow, that is) as too much is going on there right now. I mean, I do have an account over there, but not knowing git itself doesn’t make it any useful to me.
There are probably loads of stuff that I’ve forgotten, or that I’m not even aware of that I might need or want to learn down the road, but these are definitely the most important as I can’t get them out of my head. Oh, and I have to learn one more thing…