Initial commit

This commit is contained in:
Dominik V. Salonen 2018-06-06 14:47:45 +03:00
commit a6bc7552e6
53 changed files with 804 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
public/*

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "themes/casper-two"]
path = themes/casper-two
url = https://github.com/eueung/hugo-casper-two.git

6
archetypes/default.md Normal file
View File

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

63
config.toml Normal file
View File

@ -0,0 +1,63 @@
baseURL = "https://blog.quad.moe/"
languageCode = "en-us"
title = "Quad's blog"
theme = "casper-two"
disqusShortname = ""
paginate = 6
#SectionPagesMenu = "main"
canonifyurls = true
[params]
title = "Quad's blog"
subtitle = "I'd write about life, but I don't have one."
copyright = "© 2018"
cover = "/content/images/2016/02/Ghost-front-final.jpg"
description = "Here is a description of your site."
#metaDescription = ""
#googleAnalytics = ""
customCSS = ["css/custom.css"]
RSSLink = ""
twitterName = "Kuwaddo"
#fbName = "fakeghost"
#githubName = "eueung"
#linkedinName = "eueung"
#mediumName = ""
logo = "/img/logo-invert.png"
orgName = "Quad"
orgWebsite = "https://quad.moe"
orgDescription = "Here is a description placeholder for your org"
showSupport = true
author = "Quad"
authorAvatar = "img/avi.png"
authorLocation = "Norway"
authorWebsite = "https://quad.moe"
authorDescription = "A legendary chimera created by combining weeaboos, nerds and humans. Said to be very aggressive towards anyone who praises Microsoft Windows. It is also oddly fascinated by blinking lights and beeps."
pageNotFoundTitle = "404 - Page not found"
#casper or caspertwo
singleViewStyle = "casper"
[permalinks]
post = "/:slug/"
[[menu.main]]
name = "Home"
url = "/"
weight = 200
[[menu.main]]
name = "Fediverse"
url = "https://weeaboo.space/users/quad"
weight = 99
[[menu.main]]
name = "Website"
url = "https://quad.moe/"
weight = 95

View File

@ -0,0 +1,76 @@
---
title: "Scaling openings.moe"
date: 2016-03-18T17:08:57+02:00
slug: "scaling-openings-moe"
image: /content/images/2016/03/Blog-Header-1.png
---
**This is a blog post that was suggested by a puny little [tweet](https://twitter.com/justgalym/status/710470434882510848) - The infrastructure behind openings.moe. I could make a nerdy post about how it works, discussing configs, cache directives, traffic shaping, web server optimizations and so forth. But that wouldn't be fun. So I thought I'd rather write about the *history* of openings.moe's infrastructure (Brace yourselves, this will be a long read)**
It's now been roughly one year since I first made openings.moe. As a quick project during Easter 2015, the video shuffle code was (literally) only about 15 lines of code - It has grown a lot since then. In February 2016 alone we handled roughly 18 TB of bandwidth and the openings.moe domain was resolved exactly 1 314 021 times. That's a lot of weebshit.
openings.moe started out as most projects do these days. A cute little $5 droplet from DigitalOcean - For a while, this worked fine. We had a $5 droplet sitting behind CloudFlare for DDoS protection. But fast-forward a month or two and we were easily blowing that 1 TB of included bandwidth, so we needed to look into more solutions for this.
# Servers
At the current time openings.moe consists of four main servers. These are:
* eu1, our Netherlands edge server.
* Mio, our US edge server.
* Neko, our France edge server.
* And the origin server, also in the Netherlands.
In addition, eu2 was just shut down today as Neko took its place. That's a fair number of servers.
But it's not surprising if you think about it. 18 TB per month turns out to be a constant load of about 55 Mbit/s if you do the math. And that's not even considering the spikes. The worst spike we've experienced so far was December 23rd 2015. Where we capped 1.3 Gbit/s of bandwidth for 6 hours straight (I guess that also shows how weebs prefer to celebrate Christmas?) - Now I'm not planning to stay ahead of this all the time, that's just wishful thinking and frankly it's also dumb sysadmin work. But it can't happen to often.
So when the first server wasn't enough, we turned to CloudFlare. Sadly though, that didn't really work out. Users were reporting lag all over the world and I couldn't find the cause. After a lot of global benchmarking and testing, I assumed that CloudFlare was capping our bandwidth (Mainly in the range of about 2-3 Mbit/s per connection). And it appears that I was correct:
![CloudFlare plans](/content/images/2016/03/firefox_2016-03-18_08-50-17.png)
Note that this is the only place where a speed difference is mentioned. I have no issues with it, but I still wish it was clearly stated, hidden conditions like this are what I like to refer to as "a bullshit move". However this doesn't change our situation. We had to get off CloudFlare's back, which led to the birth of eu1.
At this point it was simple. eu1 was a reverse proxy running nginx (More on this choice later) that pointed to our origin server. It was nothing but simple DDoS protection. You see, people from IRC still think it's fun to fire off cheap DDoS scripts from the net and "hack" people (Jesus, grow up already)
I was fine on DigitalOcean since they currently don't charge for extra bandwidth, but I'm not a fan of exploiting stuff like this. If we overdid it and DigitalOcean had to start enforcing limits, even for those who only use 1.1 TB instead of 1 - It'd cause problems for a lot of people other than us. (I'm sure some random guy named Carl wouldn't be thrilled to pay an extra $1 because one of his blog's cat pictures got popular)
So we decided to split it up. And so us1 was born - Which was also a $5 droplet at the time.
For the next half year or so nothing really changed, except for the servers getting scaled up to $10 droplets. There were a couple spikes here and there causing slowdowns, but nothing major. Until Christmas 2015 hit.
We saw the largest increase in traffic ever. We're talking a daily average of 80 mbit/s - Which was almost 10x our regular traffic at that time. Which led to us making a pretty dumb move. We moved us1 over to HostHatch, since they provided a couple more TB per $ - It worked well, for about a week.
December 27th - Right in the middle of most students' Christmas vacation, us1 got suspended for "Abusive bandwidth usage" - So effectively, we got our available bandwidth halved right in the middle of our yearly peak. Not too good. During the 4 hours it took all the twitter mentions to wake me up at around 5 AM - The site was pretty much unusable. It was unable to handle streaming. And for a streaming site, that's pretty rough. This lead to what is probably the fastest server setup I have ever done. It took me approximately 12 minutes to set up an entirely new server on DigitalOcean and configure it to work as it should. This server is still named us1 today.
Once again eu1, us1 and main were all hosted on DigitalOcean - But this taught us an important lesson. We need some headroom. When you're hosting a site that's both bandwidth intensive and not perfectly copyright compliant (Though we are non-profit, which thankfully resolves a lot of arguments) servers *will* get suspended. So eu2 was born.
This was a server hosted at [Scaleway](https://www.scaleway.com/), with a 200 Mbit/s unmetered connection. To make it a bit more useful, it's configured to handle most of south-west Europe by default, such as France and Spain. This system ran from January 2016 until today. The only change being that us1 was renamed to "Mio" in the middle of all this.
This week when openings.moe turns a full year (Or more, honestly i have no idea exactly when we started), eu2 was shut down and Neko took it's place. Neko is a dedicated server with 4 CPU cores, 8 GB of ram and 50 GB of pure-SSD cache space. It's currently on its test period and if it stacks up, eu1 might also get shut down. This would both lower costs and give us more bandwidth to work with.
We're hoping to keep on scaling to accommodate more visitors in the future. Weebs are life.
# Web server
I mentioned [nginx](https://www.nginx.com/products/feature-matrix/) earlier, for those who don't know, this is our web server. It's the very core of openings.moe on the software side. And of course we're using the open source version. There are many web server options available, the most popular being Apache. But there were plenty of reasons that tilted me towards using nginx, well except for obvious ones at least:
![Hah](/content/images/2016/03/nginx-apache-memory.png)
nginx is a fast web server, darn fast. The only thing that gets close would be [lighthttpd](https://www.lighttpd.net/) or [Caddy](https://caddyserver.com/) - It serves requests at record speeds and is one of the fastest web servers available, if not *the* fastest.
This helps a lot for loading, users are here to watch a video. If they have to wait for the player and all of its resources to load, most people would be annoyed. That's like walking into a store to buy a lolipop, but they're sold out so you have to wait for a shipment from China before you can buy one. Though it's slightly less annoying than that.
While some may argue that a solution like HAProxy or Varnish is better for the reverse proxy side of things. And that might also be true for all I know. But nginx is a well supported piece of software and everyone who has ever used it treats it like it's their waifu. Using nginx through the entire stack allows for both consistent configuration and a massive amount of online support.
nginx is also pretty much always the first web server to get new features. Why live like a snail when you can just cut yourself on the HTTP/2 edge as soon as possible (also, while we're on the subject. I'm hoping to get HTTP/2 working on openings.moe, but I'm waiting for Ubuntu 16.04 to appear first and a couple reviews regarding it as a web server)
Since I already use nginx for my personal servers, it was just easier than relearning an entire stack as well.
# Conclusion
In summary we've met surprisingly few bumps in the road along this run, maybe it's luck or god forbid I actually know what I'm doing here. Either way, I want to sum up how openings.moe runs by showing a you an image of DigitalOceans "optimal" application life cycle. Except that it's edited to reflect how we **actually** run this site:
![openings.moe workflow](/content/images/2016/03/aniopfunction.png)
When all is said and done, the site is still alive and kicking better than ever. So happy Easter and try not to watch too much weebshit, you'll end up brainwashed by Japan. (Unless you already are, then just go ahead. Nothing left to lose)

View File

@ -0,0 +1,232 @@
---
title: "Setting up a ruTorrent seedbox"
date: 2016-10-14T17:04:24+02:00
slug: "setting-up-a-rutorrent-seedbox"
image: /content/images/2016/10/Screenshot-header-scaled.png
---
I'm not much for writing guides. But I'll have to make an exception for this one, the number of people who ask me for help is just too high. I'll assume you already know what a seedbox is if you're reading this.
Please note that if you don't need the full power of the Linux command line, you're probably better off with a shared seedbox plan. These are managed seedboxes that come pre-configured and are ready to download/seed.
If you're looking for a shared host, I recommend [Bytesized](http://bytesized-hosting.com/plans) or [WhatBox](https://whatbox.ca/plans). I will be looking at Ubuntu servers since those are the most common these days. You will need a 16.04 server. Older versions of Ubuntu have an rtorrent version that is not compiled with the options we need. (Of course you could compile it yourself, but if you know how to do that, then why do you need this guide?)
If you adapt the package manager commands, you might get this working on a lot of other distros as well.
With that out of the way, let's get on with the rest:
# Finding a server
Many people start here believe it or not. They can't find a server that fits their needs. Especially since the VPS market usually doesn't provide enough hard drive space and dedicated servers are too expensive. I'll be looking at HDD servers for now. If you need a beefy SSD server to handle loads of seeding, you probably (read: hopefully) know what you're getting into already.
If possible, I recommend you skip using a VPS entirely. You can get dedicated servers from [Online.net](https://www.online.net/en/dedicated-server) for as little as 8.99€/month, or 4.99€/month from [Kimsufi](https://www.kimsufi.com/uk/servers.xml) (Though Kimsufi are often out of stock). The problem with dedicated servers is that they usually have high setup fees, which many users just can't swallow at first. You also have to pay monthly, which isn't too nice if you only need a seedbox for a little while (eg. When you're on vacation and your hotel's network blocks torrenting)
If you really can't swallow the setup fee (I feel you students) or only need your seedbox for a short period of time, try [Vultr](https://www.vultr.com/). These have 125 GB plans that are billed hourly, $5/month if you keep it running the entire month. However keep in mind that VPS hosts will often suspend you for torrenting using public trackers (If you don't know if you're using a private tracker or a public tracker, you're definitely using a public one). Dedicated hosts will usually just forward claims to you and kindly ask you to stop seeding that torrent. VPS hosts also have stricter bandwidth limits.
Now hopefully this helped you find a server that you're happy with. If not, you can try pinging me on Twitter and I'll give you some tips.
# Installing the applications
To get started, we'll be installing the actual applications we need.
## rtorrent
Before the start, type `cd ~` to make sure that you're in your home directory.
First off we'll start by installing rtorrent. Since Ubuntu 16.04 includes a version compiled with SCGI support, you just have to run this command:
```
sudo apt install rtorrent
```
If you have the knowledge, I recommend running rtorrent as a separate user, I won't be covering that here though.
And there you go. Now you have rtorrent installed. Next up we're going to run the command `nano .rtorrent.rc` - You are now editing the config file that rtorrent will be using. You can now paste in this config (That I've gone ahead and commented for curious users)
```
# Maximum and minimum number of peers to connect to per torrent.
# rtorrent will connect aggressively until it reaches the minimum,
# but stop connecting to new clients when it reaches max.
min_peers = 40
max_peers = 150
# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 250
max_peers_seed = 5000
# Maximum number of simultaneous uploads per torrent.
max_uploads = 30
# Default directory to save the downloaded torrents.
directory = ~/downloads
# Session folder used by rtorrent to store current data
session = ~/.session
# Stop torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=10240M
# Port range to use for listening.
port_range = 55965-55970
# Start opening ports at a random position within the port range.
port_random = yes
# Check hash for finished torrents to confirm that the files are correct
check_hash = yes
# Set whether the client should try to connect to UDP trackers.
use_udp_trackers = yes
# Allow encrypted connection and retry with encryption if it fails.
encryption = allow_incoming,enable_retry,prefer_plaintext
# Disabled DHT and peer exchange. (You can remove this if you're only using public trackers)
dht = disable
peer_exchange = no
# Finally, the SCGI port rtorrent will be listening on, for communication via ruTorrent
scgi_port = 127.0.0.1:5040
```
Press Ctrl + X to save the file. To finish up, run these two commands:
```
mkdir .session
mkdir downloads
```
This will create the session directory that rtorrent needs to store its data, as well as the downloads directory to store torrents in.
We will now run rtorrent in a tmux session. This allows the application to keep running in the background after we disconnect from ssh.
Type `tmux new-session -s rtorrent` to start a new session in tmux, you'll know it's working if you see a colored bar at the bottom of your terminal, usually green by default. Similar to this:
![rtorrent screenshot](/content/images/2016/10/mintty_2016-10-06_13-39-29.png)
*(Ignore the "Could not read error" in the screenshot, you should not have that. I just have insanely strict permissions on my server)*
Type `rtorrent` to start the torrent client. You'll see a terminal user interface open up. Now you can press Ctrl+B, D to exit (That's Ctrl+B and then D afterwards, Not Ctrl, B and D all at once.)
Congratulations, we just set up rtorrent. If you're happy with a terminal interface, you could start using it right now. If you want to, you can use `tmux attach -t rtorrent` to open the tmux session again.
## Nginx
This is the web server we will be using. To install it, run `sudo apt install nginx apache2-utils php`. This also installs `apache2-utils`, we need this to password protect our ruTorrent interface later. It also installs PHP.
We can now configure the web server.
```
cd /etc/nginx/sites-available
```
First, we'll get rid of the default configuration:
```
sudo rm -rf default
```
Now you can run create a new configuration file:
```
sudo nano rutorrent
```
Paste in the following config:
```
# Forward PHP requests to php-fpm
upstream php-handler {
server unix:/run/php/php7.0-fpm.sock;
}
server {
listen 80 default_server;
root /var/www/rutorrent;
index index.php index.html;
server_name _;
# Send PHP files to our PHP handler
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-handler;
fastcgi_index index.php;
include fastcgi.conf;
}
# Password authentication
location / {
auth_basic "Restricted";
auth_basic_user_file /var/www/rutorrent/.htpasswd;
}
}
```
*If you have a domain name I **highly** recommend that you look into setting up SSL with letsencrypt. The login will be sent over plaintext otherwise and only helps to keep people who happened to find your Web UI out.*
Again, press Ctrl+X to save this configuration.
Alright, finally, we have to enable the config. To do this we will set up a symbolic link (Sorta like a Windows shortcut I guess). To accomplish this, run the following command:
```
sudo ln -s /etc/nginx/sites-available/rutorrent /etc/nginx/sites-enabled/rutorrent
```
Finish up with one last command to make the changes take effect, and then we can move on to ruTorrent itself:
```
sudo service nginx reload
```
## ruTorrent
Alright, here's the king. Start by creating the web folder for ruTorrent and entering it:
```
sudo mkdir /var/www/rutorrent
cd /var/www/rutorrent
```
To install ruTorrent, we'll use git to download the files straight from GitHub:
```
git clone https://github.com/Novik/ruTorrent.git .
```
(Remember the period at the end, otherwise You'll get an extra subdirectory that we don't want.)
Now run sudo nano conf/config.php to edit the config file. Find the lines that say something like:
$scgi_port = 5000;
$scgi_host = "localhost";
And make sure they say:
$scgi_port = 5040;
$scgi_host = "127.0.0.1";
Now we will set up basic password protection with this command:
sudo htpasswd -c .htpasswd <username>
Obviously, replace <username> with the name you want to log in with. You will be prompted for a password. Unless you set up SSL by yourself earlier, this isn't very secure, so don't use a regular password that you login with elsewhere. Now we'll set the permissions for the web folder and the htpasswd file:
sudo chown -R :www-data /var/www/rutorrent
sudo chown :www-data /var/www/rutorrent/.htpasswd
sudo chmod -R 774 /var/www/rutorrent
sudo chmod 770 /var/www/rutorrent/.htpasswd
You might also want to add your own user to the www-data group. This will make it easier to work with any web-related files:
sudo adduser <username> www-data
Of course, replace the username.
And... Congratulations! Visit your server's IP address, and you should now be prompted for login. After that, you will see a fantastic stock ruTorrent interface. Well deserved.
If needed you might also want to install additional packages like `unzip`, `unrar`, `ffmpeg`, and `mediainfo`.
Tip: The theme in he header image is available [here](https://github.com/QuadPiece/club-quad) with install instructions.

View File

@ -0,0 +1,63 @@
---
title: "Moving to Void Linux"
date: 2018-01-31T17:00:43+02:00
slug: "moving-to-void-linux"
image: /content/images/2018/01/Void-Linux.png
---
I've been a distro hopper for quite some time. I've been there, done that on most distros. I started with Ubuntu, then tried Mint, before I ended up staying with Arch for some time. Manjaro also fits somewhere in the middle there. Plus a bunch less important ones.
```
Current images were taken on Windows since I finished up the blog post during idle time at work. Will probably bother replacing them later.
¯\_(ツ)_/¯
```
For quite a while, I settled in with Fedora, where I stayed for a couple months. I'd also used a bunch of less famous distros, like Bunsenlabs (Aka Crunchbang) and even fiddled with PC-BSD/TrueOS. I've been through a bunch is my point. Heck I even owned a $49 copy of Red hat Enterprise Linux Desktop, at one point.
But some things just kept nagging. They were all small things that broke. Minor annoyances to some, big to others. Maybe that one hard drive would [slow down your boot tremendously](https://twitter.com/Kuwaddo/status/953619574238404610), or maybe performing an update [broke networking](https://twitter.com/Kuwaddo/status/958398252411424768) for some reason. These were all random issues I would find, the majority of which popped up with little or no human interaction during system updates. A quick edit in some config file typically fixed them in a minute, and I moved on. I dealt with these small issues one after another.
# Discovering the Void
Fast forward to late 2017 (November I believe), and someone mentions [Void Linux](https://www.voidlinux.eu/) to me on Mastodon. I'd heard of it before, or not heard of as much as I'd just seen it pop up in threads on 4chan's /g/ board. Plus, it generally seemed a bit weird:
![](/content/images/2018/01/firefox_2018-01-31_08-33-20.png)
The distro mentions the package manager, LibreSSL, the init system and brags about not being a fork. Techies reading this will instantly think it just reeks of neckbeard and tinfoil hats. And frankly, that presentation was part of the reason I never tried it.
Many on 4chan bragged about how it didn't use systemd. Which never really mattered to me. I thought systemd was fine, because it started my applications and did its thing. In the past I thought all the issues mentioned earlier were general Linux issues, or some fault with the distributions. I didn't really think systemd had much to do with all the obscure issues I'd seen on every Linux system. `mount` would get the blame for boots stuck on hard drives, and if ssh didn't start properly, I'd probably blame `sshd`.
It seemed logical, systemd starts things and they run. I'd heard about it taking control of more and more system components, but I'd never really thought about exactly what that meant.
But back to the guy on Mastodon, he told me it was a pretty okay distro. The timing was probably a good reason, since I was planning to move from Fedora anyways.
# Entering the Void
*Fancy (and edgy) slogan that makes for, eh?*
I took the dive and installed Void, with the Mate desktop to be specific. The first weeks were a bit rough. Some packages in the repo were were broken the day after I installed, causing Mate updates to fail. Not the best first impression. But that was due to it being a small distro, somewhat understandable when you don't have a huge team of maintainers. I also must have had amazingly bad timing when installing it.
They were actively trying to fix it, as the build server's public waterfall showed, so I gave them the benefit of the doubt and waited it out. A couple days later, everything was back to normal and I could update my system just fine.
Following that install, all the other small issues I've had with Linux distros were simply gone. I didn't know where they went, or how they got fixed. But ever since I installed Void, I've never really had to touch a system config file (Except when setting the hardware clock to localtime, because Windows dual-booting)
Now, about 3-4 months in, I run Void Linux on all 3 of my main computers. And so many others that I even use a bootstrap script to set it up for me.
While I don't know the details of how runit works, doing `sv up`, `sv down` and symlinking files from `/etc/sv` to `/var/service` has been perfectly fine. Using `xbps` has also been nice and fast. While I don't use many particularly fancy features, I'd say it's definitely comparable to `pacman` in terms of pure speed. It's still not quite at the same level as FreeBSD's `pkg`, but certainly close enough.
However, after this incident, Void has perturbed me a bit about systemd. I don't exactly hate systemd now, but I definitely find myself preferring systemd-less distros. To match that, I've also started running Devuan on my servers:
![](/content/images/2018/01/Hyper_2018-01-31_09-13-02.png)
Heck, [even on SBCs](https://twitter.com/Kuwaddo/status/958406013249638401).
But back to Void Linux for one final moment.
I don't know if it's the lack of systemd, if it's the fast package manager, or if it's related to musl. It could also be a combination of all those things. Regardless of the reason, so far, Void Linux seems like the distro I've wanted all along.
I reinstalled Void to use their xfce image, but since then I've happily been running Void for most tasks. Some issues do come with using a lesser known distro (like having to manually extract all those .deb packages). But I feel those trade-offs are easily worth the rest of the experience Void gives me.
It's the Arch Linux replacement that I wanted, but never found.
Unless they do some major change which messes a lot with the distro. I'll probably stay with Void for quite some time.
I'd heavily recommend that you at least give it a quick try for a couple of days if you're a fan of distributions similar to Arch Linux.

View File

@ -0,0 +1,51 @@
---
title: "Are fighting games hard?"
date: 2018-02-20T16:49:31+02:00
slug: "are-fighting-games-hard"
image: /content/images/2018/02/akuma-heihachi-tk7-1920.jpg
---
Recently I've been dabbling in fighting games. I say dabbling, but I only started playing them actively a couple months ago. Although I did play games like Persona 4 Arena and Tekken 5 in the past. But during these past months I've been playing more. I picked up Street Fighter V again, I bought Tekken 7 and Dragon Ball FighterZ. Not to mention some older titles like Tekken Tag Tournament 2 and Persona 4 Arena Ultimax.
Most fighting games are known for not being particularly noob friendly. You're thrown into a game, told to memorize some combos and spend some time getting your ass kicked online. If you're lucky the game gives you a little tutorial. Tekken 7 was especially bad at this, the best way to really learn anything is to just enter training mode and look at the command list. With games such as Street Fighter V you at least have the option of spamming with Hadoukens from a range.
Some complain that this kind of introduction only appeals to long-time fans, while others simply call it "Survival of the fittest". Personally I do find tutorials a bit sparse in these games, and you will get rekt online during your first hours.
## Yet, I still wouldn't label fighting games hard, let me explain why.
When many people call these games hard, I think they're confusing difficulty with depth. (I'll talk more about that later) People believe that playing online is the only big part of fighting games, and that you basically have to brute-force yourself through the embarrassment of losing, until you perform decently online. Simply to get the privilege needed to start enjoying the game.
![tekken7-hadouken](/content/images/2018/02/tekken7-hadouken.jpg)
<small>Tekken is a series focused around memorizing button sequences to perform combos and moves, which easily scares off newcomers ([img src](http://www.pushsquare.com/news/2017/06/guide_tekken_7_-_basics_for_beginners_and_how_to_get_started))</small>
These people are dearly mistaken. A good fighting game actually has magnificent single-player options to get new players started. In fact Street Fighter V was criticised for their lack of single-player content during launch, but now that we've reached season 3 (also known as Street Fighter V: Arcade Edition) they have a solid offering of character stories and arcade modes to play. This single-player content is where you want to start.
## You're expected to be skilled when you start playing, but you don't need to be.
A game being aimed towards hardcore players, and a game being exclusive to hardcore players are two different things. Most fighting games put hardcore players first. But any decent game also gives players a good introduction through their story and arcade modes. Playing through the Arcade mode and Story modes of fighting games, while taking a peek at the command list once in a while, will teach you most things you need to start playing online. The problem most fighting games suffer from is in fact just that they're very bad at informing new players about this.
![Guilty-Gear-Xrd-Revelator-Tutorial](/content/images/2018/02/Guilty-Gear-Xrd-Revelator-Tutorial.jpg)
<small>While Guilty Gear is known for being a game that takes time to learn, and far more time to master, they have a great tutorial ([img src](http://operationrainfall.com/2016/06/03/review-guilty-gear-xrd-revelator/2/))</small>
I'll be honest, I was terrible at Tekken 7. I tried to jump straight into versus mode at first, only to barely land any hits on the default CPU difficulty. I had no idea how combos/moves even worked, so it was mostly helpless button mashing. However the story mode will make you play a handful of characters, against a selection of other characters, in a couple different situations. It'll be a rough ride, but as long as you check the command list and you're not afraid to retry once or twice, you'll make it through.
By the time you finish playing through most the single player content, you'll have built the basic skills required to at least win some online battles by exploiting your enemy's slip-ups. As long as you do it in a timely manner and remember to check the command list, you should have learned a couple 2-4 hit combos for a character or two, you'll have experience blocking, and you'll get better at spotting openings. You're no pro, but you'll have a chance.
This basic set of skill is plenty to let you compete with other online noobs. Fighting games are just notoriously bad at telling players how to get started.
## So why do people think they're so hard?
The keyword is "perception". Fighting games typically have a much higher perceived difficulty than they actually need to have. That's because fighting games are extremely deep. If you really want to, there's overly complex combos and maneuvers to learn. Which leads to a larger skill gap than most other genres. Even people who know that depth is what makes them difficult, often misunderstand what that depth means. The prime example being Tekken players who memorize a 10-hit combo, and then simply spam that combo the entire fight. Combos are no use if you can't land them, and you'll get punished hard. Knowing how to steadily land 2-hit combos from time to time, is way better than knowing a 10-hit combo you'll never land.
![usa_today_9389948.0](/content/images/2018/02/usa_today_9389948.0.jpg)
<small>Many people hear about fighting games in relation to tournaments, which makes the barrier to entry feel very high ([img src](https://www.polygon.com/2018/1/25/16933100/evo-japan-2018-schedule-stream-date-time))</small>
If you play a first-person shooter for the first time, you can still get some kills in if you're lucky enough to get behind an opponent before they notice you. But fighting games rarely have such luck-based factors. They're 1v1 battles, where skill and knowledge determine almost everything. Your opponent has to be pretty bad if they didn't notice you firing a hadouken, they might not have reacted, but surely they did at least notice. Not to mention that both characters are always on-screen at the same time. (an exception being high altitude differences in games like Marvel vs Capcom)
There is rarely an excuse for why you failed. And the gameplay people see online typically consists of skilled players duking it out with almost no slip-ups and powerful combos. You won't find a "funny montage" of Tekken 7 on PewDiePie's channel, instead you're going to find combo videos and recordings from tournaments.
All these things combined make people view fighting games as overly serious and complex things. While in reality, they're just regular games under their hardcore shell. The amount of depth available in competitive games is what keeps up their reputation of being impossible for beginners, and exclusive to pros.
The moral of the story is that you shouldn't be afraid to try a fighting game. They can be plenty of fun even if you're not such a good player. Dragon Ball FighterZ has an amazing story mode, that anyone can enjoy (I've still only completed 2 of 3 arcs though). I still get crushed online pretty often, but it hasn't stopped me from enjoying fighting games or squeezing in some rare online wins.
Fighting games can be hard to master, but it's not hard to have fun playing them.

View File

@ -0,0 +1,36 @@
---
title: "ReactOS is coming"
date: 2018-02-23T16:48:05+02:00
slug: "reactos-is-coming"
image: /content/images/2018/02/ReactOS.png
---
A 20 year old project with the goal to seamlessly replace Windows is finally baring its fangs.
Kicking a certain OS out the door and leaving it behind has been the dream for many, including myself. The monolith named Windows has been with us far longer than almost any other piece of software. It even predates core components of many other systems, such as GCC.
ReactOS is a bit different from other Operating Systems however. Unlike Windows, the Linux Kernel or the \*BSD selection, it doesn't aim to be its own ecosystem. Instead it aims to be binary compatible with Windows. Meaning that software written for Windows should run on ReactOS once support is there.
![vmconnect_2018-02-23_12-15-19](/content/images/2018/02/vmconnect_2018-02-23_12-15-19.png)
<small>The developers hope that one day you'll be able to drop ReactOS right in Windows' place, and notice no difference other than the branding.</small>
This operating system has actually been around for quite some time. According to the Wikipedia page, development first started in 1996 as "FreeWin95", while the first ReactOS release was made in 1998. However the first release featuring a GUI didn't appear until 2004. That's 8 years from when the project first started, shows how dedicated people have been to get this working. Personally I first heard about ReactOS around 2012 or 2013.
When I first tried ReactOS, it was a buggy mess and I wasn't even able to easily boot it in a virtual machine. When it did boot, it would crash almost immediately.
## So why write about it now?
Fast forward to 2018. 22 years after development started, and 20 years since the first release. These days, ReactOS has been improving a lot faster than it did in the past. It started with some fundraisers they did a couple years ago. One to improve driver support, plus one called "Community Edition", where they accepted donations, and in return contributors were allowed to vote on what applications they should focus on getting to work.
If you try to install ReactOS now (Especially on bare metal) you'll still encounter a lot of driver issues, bugs and applications that won't run. But even so, ReactOS is now surprisingly usable as long as it does not crash. The application support is constantly expanding and it has a feature-level sitting somewhere between Windows 2000 and Windows XP at the moment. For over 20 years now, the project has been in an Alpha state. But I believe we might finally be closing in on Beta.
![react-os-dmc-tw](/content/images/2018/02/react-os-dmc-tw.jpg)
<small>The OS might be far from production-ready. But that doesn't mean it's not fap-ready ¯\\\_(ツ)\_/¯</small>
I've been waiting in the hopes of this happening for quite some time. Every couple of years since I first heard about the OS, I've been giving it a quick peek. Now in 2018, I was able to install ReactOS on a laptop of mine and have it boot. I celebrated by finally setting up a 10 EUR monthly donation to the project. While they still have a long way to go (And I mean **very** long. Don't underestimate how much of a mess Windows is under the hood), I hope that ReactOS' progress is finally about to reach a stage where they'll attract more developers and funding to get the project done faster.
I'm terrible at C/C++, nor do I have much old hardware or time I can use for testing. So all I can do for now is spread the word and donate some pocket change. But even if it should take another 5 or 10 years for ReactOS to become usable. I want to believe that one day I'll be able to trow Windows right out and run my Windows-only applications without using Wine.
Here's to 20+ years of progress. It took a while. But they're getting here. Hopefully we'll see another 20+ years of steady development.
Until then I recommend you at least give ReactOS a test for the sake of curiosity. It's nowhere near stable and reliable enough as a daily OS yet. But I believe that day is slowly closing in on us.

View File

@ -0,0 +1,27 @@
---
title: "Fork Awesome. Your possible Font Awesome replacement."
date: 2018-03-15T16:45:31+02:00
slug: "fork-awesome-your-possible-font-awesome-replacement"
image: /content/images/2018/03/Screenshot_2018-03-15_22-15-53.png
---
I recently redesigned [my website](https://quad.moe), it's a fancy looking, but pretty pointless design. I like how it looks, but it performs Ajax requests not because it needs to, but because it was a nice excuse to try and learn some JavaScript (I admit, my JavaScript knowledge is quite lacking)
I decided to just put many pointless JavaScript features in there. I removed a bunch, such as pointless loading spinners after the joke got old, but ajax requests remained simply because getting them out of the code would be a hassle, unless I want to use multiple pages instead of some CSS magic.
But while making that new website I encountered a little problem. In fact it's a problem I've encountered before. And that problem was Font Awesome. As the name implies, Font Awesome is usually pretty awesome. But it still lacks many icons I want. Most notably Mastodon and diaspora. In addition to some others that would be fun to have, like XMPP.
Not only has Font Awesome been consistently... mediocre at adding icons people want. With their new 5.0 release they've also caused some controversy. You see they now have both a "Free" version and a "Paid" version. Now, some people find this iffy, but most people don't care that much. Aince most the paid icons are just other varieties of existing Free icons.
However one thing many people didn't like was how Font Awesome decided to switch from using CSS to handle the icons, to using JavaScript instead. In the past it acted as a regular web font and you'd import it via CSS, easy-peasy.
But with current versions, they want you load load a piece of Javascript, which then inserts SVG elements into your page. For now, you can still use the CSS method if you prefer, but nobody knows how long the Font Awesome team plans to keep it around. A bunch of people weren't too happy about this.
One of these people seem to have made a fork of Font Awesome, I came across it while trying to figure out what other icon packs could have Mastodon and diaspora icons. And it's fittingly named [Fork Awesome](https://forkawesome.github.io/Fork-Awesome/). It's a fork of the 4.x versions of Font Awesome, meaning it still uses the classic and more basic CSS method instead of fancy JavaScript magic.
But it also adds new icons. Among them, both a Mastodon icon and a diaspora icon. Absolutely perfect.
![Screenshot_2018-03-15_22-15-43](/content/images/2018/03/Screenshot_2018-03-15_22-15-43.png)
<small>Fork Awesome seems better at adding icons for open software and platforms than the original Font Awesome was.</small>
The project seems relatively fresh, but I've decided to use it on my website for now. If you're not happy with Font Awesome, I recommend you give Fork Awesome a peek. It's pretty new and therefore they haven't added too many new icons yet. But it looks very promising and it already has many interesting icons. Such as Mastodon, diaspora, GNU Social, Debian and even an icon for the ActivityPub protocol itself.

View File

@ -0,0 +1,218 @@
---
title: "My new ThinkPad, the T480"
date: 2018-05-02T16:30:28+02:00
slug: "my-new-thinkpad-the-t480"
image: /content/images/2018/05/IMG_20180502_172126.jpg
---
I finally got my hands on an actual, current-model, high-end ThinkPad. Not a used one from some years ago. But one that's brand new and was assembled how I configured it on lenovo.com
For a while now I've been looking for a "perfect" laptop to invest my money into. But for sysadmins, that seems to be increasingly difficult to find if you also want good consumer-related features. But the T480 hit all the right buttons. So I bought one.
I felt a blog post or a kind of review was in order, now that I've actually used my new laptop a while.
<style>
.post-full-content table td:first-child {
background-image: linear-gradient(0deg,#e2e2e2 50%,#eee);
background-size: auto;
font-weight: 600;
}
</style>
## Prelude
Before I get into this blog post I want to clarify that this is no professional review. You won't see a bunch of Cinebench here, nor will you see a lot of professional tests. You won't even see Windows, because I run Linux. Felt I should clarify that as there's probably a bunch of people here via Google.
I also want to start of by explaining what hardware I'm coming from so you all know what my reference point is like.
Until now I've been using two main laptops:
- A ThinkPad T410s (Linux. i5-520M, 8GB RAM, 128GB SSD)
- A 13" MacBook Pro 2015 (macOS + W10 Bootcamp. i5, 8GB RAM, 128GB SSD)
Depending on my needs I'd bring one of the two laptops. Sometimes both. If I needed to get actual work done on the trip, I'd usually bring the T410s along. But if I thought I'd only need the laptop to watch anime and browse the web in my hotel room, I'd bring the Macbook.
Needless to say this isn't exactly optimal. It leaves me with two laptops. Which are not only split in their purpose, but don't even run the same operating systems. Therefore I wanted to invest in a single laptop which could merge the purpose of both the machines and last me many years.
Which wasn't quite as easy as I had thought.
## So why the T480?
There were a couple of checkboxes I needed to fill in order for the laptop to properly replace my existing solution. I also wanted some extra features, since I was already going to buy such an expensive piece of tech. And there weren't many laptops out there capable of meeting these demands. The most important things I needed were:
- Good Keyboard (But no numpad)
- HiDPI display with good colors for media consumption
- Full-size Ethernet port for my sysadmin work
- 8th Gen Intel CPU (Or Ryzen)
- A workday of battery life
- Serviceable Linux support
- Some usable GPU (Anything better than an Intel iGPU)
- Preferably a pointing stick (Aka TrackPoint)
- Preferably upgradeable, in case I need to in the future
The T480 barely checks all these points. And some more (like the battery being hot-swappable). I've been looking for a while, but until recently ThinkPads haven't quite met my requirements. Most notably all the ThinkPad models with full-size Ethernet had mediore displays. It wasn't until the T480 that I could get a compact ThinkPad with both full-size Ethernet and a HiDPI display option.
However, it wasn't perfect either. It's only available with an Nvidia MX150. While that's quite a decent GPU. I'd much rather have something like the RX550 present in the E480. Since Nvidia GPUs and Linux are... [well](https://www.youtube.com/watch?v=MShbP3OpASA&t=49m40s). But there simply weren't any "perfect" options. This was the closest I could find. (Although I did consider waiting for more Dell Latitude laptops to get 8th gen CPUs)
Overall I mostly wanted the GPU for future-proofing (Right now, Intel GPU is fine. But I don't want to regret not having it if I ever feel like doing some casual gaming later). So hopefully nouveau support would be in place once I actually need the Nvidia card. The i7 wasn't needed at all, I would've likely been fine with an i5-8250U. But all the configurations with an MX150 available in Norway, also had i7 CPUs. So I didn't have much choice there, but at least the money is getting spent on a CPU and not being thrown into a void.
The model I ended up buying had the following configuration:
<table style="specs">
<tr><td>CPU</td><td>Intel i7-8550U 4-cores /w Hyperthreading @ 1.80GHz, 4.00GHz turbo</td></tr>
<tr><td>RAM</td><td>16GB DDR4 (8+8GB)</td></tr>
<tr><td>GPU</td><td>Nvidia MX150 2GB (And Intel HD Graphics 620)</td></tr>
<tr><td>Display</td><td>WQHD (2560x1440), IPS, Anti-Glare, 300nits</td></tr>
<tr><td>Storage</td><td>Lenovo-branded 256GB NVMe SSD</td></tr>
<tr><td>Batteries</td><td>48 Wh (24Wh internal + 24Wh removable)</td></tr>
<tr><td>Charger</td><td>65W Type-C charger</td></tr>
<tr><td>Misc.</td><td>No fingerprint reader. No Smartcard. No 4G</td></tr>
<tr><td>Price (inc. VAT)</td><td>18 310.25kr as configured<br /> <b>16 479.23kr after discount</b> (Approx. $2040 USD) </td></tr>
</table>
Now that I've explained my reasoning for picking this laptop. Let's start taking a look at it.
## Build
It's a ThinkPad. This might be the section where everything I say will feel obvious to anyone who has used a ThinkPad before.
The machine is a tank, with a Mil-Spec rating that I'd probably never need, but is still reassuring to know I have. Using the machine day to day, I don't have any doubts that this machine will hold up for many years to come. It's got ThinkPad staples like the outer plastic shell, with a more rubbery coating on the display lid. As well as the fantastic keyboard and a trackpoint.
Apparently they switched to some new Carbon and Glass hybrid material on the inside with the palmrest and such, or at least I see mentions of this elsewhere online. But whatever material it is, it feels very nice on the palmrest. It's harder than most plastic palmrests I've used, so I'm not sure if that also makes it more brittle. However it's got a rougher feel than typical plastic and is very comfortable to rest your hands on for long periods of time. Describing feelings is hard. But if anything, I'd say it feels about as hard and solid as metal, with a grainy surface almost like a sheet of A4 paper.
This laptop is also equipped with Lenovo's bridge battery system. Meaning the laptop has two batteries. One internal battery at 24 Wh, plus an external battery that you can hot-swap as long as there's some charge in the internal battery. I'll mention this a bit more when we look at battery life.
The keyboard is as great as Lenovo keyboards tend to be. I have the non-backlit keyboard. I've heard there's a difference in coating between backlit and non-backlit options, so I thought I'd mention that real quick. Key travel is nice an snappy. The keyboard isn't as clicky as the ones on models like the T440 that we use a lot at my workplace. It seems to have slightly softer keys, but is still far from mushy. I've been typing this blog post non-stop so far on the ThinkPad keyboard. That should lend some credibility to how comfortable this keyboard is during longer typing sessions.
The trackpad depends on your preferences. It's got a rougher coating on it that feels like a sort of paper, though smoother than the palmrest, rather than a glass-like finish that you'll find on many other modern laptops. Personally I like it, but I can imagine that coating rubbing off and leaving a large glossy spot years into the future. Clicking the pad is also weird. It's not a Macbook trackpad, so like most regular trackpads you can only click around the bottom half of it. But the clicks are very deep. It might just be a habit thing, but the amount of travel near the bottom of the pad feels unnaturally deep. Around the center it's pretty fine to click. But once you get closer to the bottom it just feels very odd to click since it appears to travel very far down compared to other laptop trackpads I've used. Although a bit unusual, you can probably get used to it. Outside of those oddities, it's very responsive, and palm rejection has been working perfectly for me, even under Linux.
As for the TrackPoint, there probably isn't much to say. TrackPoint nubs have remained mostly the same, even prior to the switch to chiclet keyboards. The buttons have changed a little however, the T480 has quite clicky buttons for the TrackPoint. They'll feel a bit odd since they're not as soft as the older buttons on my T410s. But after the first day or two with the laptop, I didn't even think about it anymore.
The display is sturdy and does not flex to any noticeable degree. The hinge is also very solid. So solid that the screen doesn't wiggle even if you're holding your laptop while walking. However, This solid hinge does mean that you cannot open the screen with one finger, you'll just lift the whole laptop. Personally I'll take less screen wobble over one-finger opening any day. Most models have a "ThinkShutter", which is essentially a plastic shutter for the webcam. Sadly I have the WQHD display, and for some reason Lenovo forces you to get the IR camera with that display option, which lacks the ThinkShutter. It's a bit annoying as I found the ThinkShutter interesting, especially since I basically never use my webcam anyways. Overall it's a very minor loss, and just a slight annoyance.
![IMG_20180430_154347](/content/images/2018/05/IMG_20180430_154347.jpg)
<small>The T480 when I had just pulled it from its packaging.</small>
# Ports
Looking along the outside of the ThinkPad, you'll find a healthy selection of I/O compared to other modern laptops. On the right side, it has an SD card reader, a full-size Ethernet port, two USB Type-A ports, an HDMI port and your typical 3.5mm combo jack. Along the left you'll find two USB Type-C ports. The first one covers charging duty, while the other one has Thunderbolt support and serves as a part of Lenovo's new docking connector. Finally, you'll see a smartcard reader on the left if you configured it with that option.
I'm generally quite pleased with the port selection. Especially the full-size Ethernet port. However I found the Type-C ports a bit lacking. While they're nice and fast with one of them supporting Thunderbolt, they were pretty loose. The charger wiggles a lot when plugged in, even up and down, not just left to right. After some Google searches it seems that's normal for the machine. They've worked fine and I've had no trouble getting a connection. But if you asked me what part of this laptop I thought would break first, I'd probably answer with the Type-C ports. And that's quite a bummer since they'll likely be heavily used as Type-C adoption keeps rising, especially because the Type-C ports also handle charging duty for this laptop. The Thunderbolt port is slightly stiffer than the regular USB one, but not by much.
Apparently the Thunderbolt port also only has 2x PCIe lanes instead of 4x. For most people this won't matter, 2x is still overly fast for most workloads. But peripherals such as external GPUs may suffer a performance penalty due to it.
# Linux support
Linux support on this laptop is pretty much golden. The only exception being the Nvidia GPU.
If you want to use both the Intel GPU and the Nvidia GPU to save power you're going to have a bad time. I first tried to use bumblebee with nouveau just to see if it would work. Unsurprisingly, it didn't. So I switched to using the proprietary driver, since it supposedly has some kind of Optimus implementation itself, but I couldn't get any results out of that either.
I mostly bought the MX150 for future-proofing anyways (Since I plan for this laptop to last me many years). So for now I decided that it wasn't really worth the hassle and I just left the Nvidia GPU alone, using only the Intel one. Most graphically intensive tasks, I perform on a desktop while at home anyways.
*Update: A follower pointed out that I apparently misunderstood Bumblebee. It supposedly needs the proprietary driver, not the open source driver. Apologies if the info above misled someone. I'll keep that in mind if I ever retry setting up switchable graphics.*
Other than that, everything basically worked out of the box on Void Linux. The only "issue" I had to solve was suspend to RAM when I close the lid. But installing acpid and enabling the service fixed that with Void Linux defaults. Otherwise, it's been smooth sailing straight out of the box.
Intel GPU, Type-C ports, Audio jack, WiFi, Ethernet and volume/brightness hotkeys all worked fine.
Sadly, I don't have the knowledge to test the IR cameras included with the IR camera assembly. The regular camera part showed up fine in Cheese without any mess, I simply don't have any idea what you would use the IR portion for on Linux unless there's some way to perform pam auth with it. I also haven't tested Bluetooth, simply because I don't use any Bluetooth devices regularly (Except my smartwatch, but that doesn't connect to a computer)
On a different note, non-integer HiDPI support is trash on Linux. If you're running a popular DE like Gnome, 2x scaling isn't much of a problem anymore. But try to get a 1.5x or 1.75x display scale and you'll have a horrible time. That's not an issue with the laptop, just something I felt you should be aware of if you were planning to buy it with the 1440p screen and run Linux. Because a 2x scale essentially leaves you with just a 1280x720 display. That's not a lot of space to work with on a modern laptop.
# Performance / Thermals / Noise
Like mentioned at the top of this blog post, you won't see any Cinebench stuff here. The i7-8550U is a fairly common chip so you'll likely find plenty of benchmarks related to it online.
What I will say is that Lenovo has handled the i7-8550U quite well, or maybe they just said "fuck it" and went overkill on the cooler. Thermals are perfectly fine even when compiling with all 8 cores or encoding video files. The fan does spin up to audible levels when running all cores heavily, though it's a fairly deep "woosh" sound rather than the annoying whine you'll get from many laptops with smaller fans. So it's quite manageable.
During regular use (Such as writing this blog post or watching YouTube videos) the fan does seem to spin. But I can't hear it unless I keep my ear 5cm from the vent located on the left side of the laptop. So either my hearing has gone bad, or the fan is so silent during regular usage, that you might very well treat it like it's not running.
I also feel obligated to inform that there's a difference in the cooler between MX150 models and the Intel models of this laptop. Apparently configurations with the MX150 don't just get a longer cooler to cover the GPU, but it also has an extra heatpipe. So you might not get results quite as good as this if you opt for an Intel-only model. You should also keep in mind that I'm not using the GPU, which is especially important since they supposedly share the same cooler.
Due to these neat thermals, the i7-8550U runs very well. While building the Pop Icon theme (which does a lot of SVG -> PNG generation with inkscape) the conky display on my desktop displayed the CPU freq wiggling between 2.6 and 3.2 GHz. On a quad-core Ultrabook CPU, that's quite impressive. It also built the theme faster than any other machine I own, including the i7-4810MQ in the W540 I use at work. The only machine that could match it was my Ryzen 5 1600 desktop.
Which is frankly not surprising. 8th gen i5 and i7 chips should handle any reasonable laptop load, assuming they're properly cooled. As for the SSD, you get a Lenovo-branded SSD according to smartmontools. The "LENSE20256GMSP34MEAT2TA" to be specific.
Performing 5 runs of `dd if=/dev/zero of=testfile.dat bs=1M count=4096` gave fairly consistent results and averaged out to 475 MB/s. Sadly Lenovo seems to only have given 2x PCIe lanes to the SSD instead of 4x. If that's what's causing this speed or if the SSD is simply bad, I do not know. Regardless, `dd` is far from a comprehensive test, so take it with a grain of salt. In day to day use I noticed no issues with the SSD. Copying files was snappy and boot times are fine. Unless you regularly copy files that are 10% the size of your whole SSD or more, this guy will serve you fine.
![Screenshot_2018-05-02_19-12-11](/content/images/2018/05/Screenshot_2018-05-02_19-12-11.png)
<small>inxi screenshots always make nerds happy.</small>
# Display / Speakers
Here we've got both bad news and good news. So I'll kick off with the good news.
The display is fantastic. It's got great colors and decent brightness. Not to mention that it is a 1440p panel. While on the spec sheet, the display doesn't quite match up to Macbook displays, I find it very beautiful regardless. It's also matte, meaning that reflections won't be as much of an issue while working outside under the sun.
If I have one complaint about the screen it's that it supposedly doesn't cover Adobe RGB very well. Frankly I don't see that as such a huge deal, since most video editors would likely carry a P-series laptop. But I guess it is something to be aware of if you're a student planning to do Photoshop on this laptop. The sRGB should be plenty to get you through color work in school. But it's not adequate for the professional world. Secondly, the display is "only" 300 nits. I've found that plenty bright in most cases. But I do sometimes find myself missing the Macbook screens which are so ridiculously bright that they can pretty much overpower the sun by brute force when you're outside.
The only proper flaw I have with the display is that it's 16:9. That's great when you're watching videos. But 16:9 is pretty much considered a joke for actual work. I find myself missing the 16:10 display from my T410s ever so slightly once I need to fit more stuff vertically. Something like the 3:2 displays surface laptops have might have been even better.
All of those are minor and pretty specific faults though. Overall I'd give the screen an 8/10. Give me something non-16:9 and it'd be 9/10. Improve the colors so it's fitting for the professional world and I might just consider a full 10/10.
Next up are the bad news.
The speakers are absolutely terrible. I've heard better speakers on many smartphones. The T480 has two bottom mounted speakers. If you keep the laptop on a flat hard surface like a wooden table I'd describe them as "serviceable". But put them in your lap and that drops to an "ouch".
The speakers don't get loud at all. My Google Pixel, a smartphone with a single bottom mounted speaker gets way louder. Still, even with the pitiful volume, the T480's speakers start distorting around 60 or 70% volume. Even if you can get past that joke of a volume level, they're super tinny and you get this weird humming effect during louder sounds, where the speakers sound like they put a slight vibrato on everything because they're shaking themselves too hard. Or something odd like that.
Anyone remember that Chinese Doogee phone I bought a while back that cost me around $85? Yeah, that guy had about identical speakers to this laptop. Which is very sad, because the laptop has a great display. But if you're planning to have a decent movie experience, headphones are basically a requirement. They're so bad that I'd happily pick a "No speakers" option in the configurator if it could save me 20 bucks.
If I set my Google Pixel to 40% volume, it is both louder and clearer than the T480 when it's set to 60% volume. If I set the T480 to 100% volume, it's about as loud as my Pixel at 60-70% volume, but the speakers will distort so much that volume is the least of your issues.
The screen is fantastic. Yet the speakers hold it back. What I'm trying to say is just use headphones or give up.
# Battery life
Here we have one of the T480's strongest suits. Thanks to Lenovo's bridge battery system.
Like mentioned in the build section and specs, there's actually two batteries in this laptop. Regardless of your configuration you have an internal 24 Wh pack. But the second battery option you can pick yourself. Lenovo provides a 24 Wh battery, a 48 Wh one and a whopping 72 Wh one. The larger battery you pick, the more battery life you get, obviously. But the drawback is that the larger batteries stick out the bottom of the machine. Depending on your usage, this can be good or bad. It makes the laptop a less comfortable to use on your lap, but if you mostly use your laptop on a desk, it'll actually raise the laptop to a more comfortable typing position.
Personally mine is configured with the 24 Wh battery. Because I plan to use it a lot on-the-go. Giving me a total capacity of 48Wh. Combined with the efficient CPU, that makes for great battery life. Running Void Linux and with my laptop automatically doing a `powertop --auto-tune` on boot, I easily hit 8 hours of battery life. The removable battery is also hot-swappable as long as the internal battery holds a charge. Yes, you can actually just bring a bulk of batteries and swap them out. If you bought five 72Wh batteries or something, you could probably go for a week-long arctic expedition without a charger, assuming you find a way to prevent the cold from damaging the batteries. That's fucking insane.
I've only performed one real "test" myself. I left the T480 in my living room overnight. I opened a a ghost blog editor and ran a script that types a random a-z character every 0.2s to kinda simulate typing. Brightness was at maximum, WiFi on, Bluetooth off. Both batteries were fully charged, and it lasted 7 hours and 28 minutes until it died off. That's very impressive with maximum brightness.
Keep in mind this was also with the smallest battery configuration available. I've heard other people can almost hit 25 hours of movie watching at medium brightness with a 24+72Wh setup. And after seeing my own results that seems perfectly believable. I haven't yet decided if I should pick up an additional 72Wh battery myself.
Interestingly the T480 seems to always prioritize charging and draining the removable battery. It makes perfect sense that it'd drain the removable battery first, the hot-swap feature would be useless if it drained the internal battery first after all. But when you charge the laptop it will charge the removable battery instead of the internal one. Which I thought was kind of weird. Because if both your batteries were dead before you started charging. The hot-swap feature wouldn't work unless you first let it charge the external battery to 100%, and then gave it a bit more time so that it could charge the internal battery as well.
Which probably isn't a huge deal since the laptop charges very fast, but I still find it odd. I have the 65W charger. Lenovo's available configurations vary by country, but in most of them, all models default to the 45W charger. The 65W charger is usually available for Nvidia models at very little additional cost, so I recommend getting that upgrade if possible. In some regions it seems you can buy the 65W charger with Intel-only models as well as the Nvidia ones. Lenovo's configurator is a bit weird and inconsistent like that.
Using the 65W charger, the laptop takes about 1.5 hours to charge fully from 0% to 100% on both batteries when turned off. Which is very nice. In theory, charging the laptop for 5 minutes, will give you 20-30 minutes of working time. That can be a life-saver if you need to be in a meeting but your laptop is low on juice. Simply leave it to charge for a couple minutes while you go refill your coffee cup, and you might survive that meeting.
![IMG_20180502_190236](/content/images/2018/05/IMG_20180502_190236.jpg)
<small>Thanks to the great battery life, the T480 is a fantastic road warrior, feel free to bring it along on your next long bus ride.</small>
# Verdict
Do I think you should run out and buy the T480?
No.
The reason is simple. This isn't a consumer laptop, if you're looking for an answer from me you're in the wrong place. ThinkPads are expensive machines with business features. People who need a ThinkPad, likely already know why they would need a ThinkPad.
That being said. If your IT department gives you a list of laptops to pick from. I would probably ask you to pick this one.
It does also become a viable consumer option if you find it with a friendlier price tag. If you see the laptop going for 15% off or something along those lines, it starts to look more competitive with machines such as the XPS 13 for regular consumers.
If you find a very good price, it might be worth a buy. Otherwise the answer is likely no. Those who need a ThinkPad, already know and probably wouldn't really care what I told them to buy.
# Pros / Cons
## Pros
- Finally, HiDPI displays on regular ThinkPads. And it's a great display overall
- Removable and hot-swappable batteries. You can also get insane capacities if needed.
- Fantastic ThinkPad keyboard (I still prefer the classic ever so slightly though)
- TrackPoint. Nuff said
- Plenty of ports
- Built like a fortress
- Mil-spec rating you probably don't need but wanna brag about anyways
- Highly configurable on lenovo.com
- Good thermals (At least on my config)
- Fan is dead silent under most workloads
- You look damn professional with one of these
## Cons
- Only available with a mediocre Nvidia GPU
- Expensive af
- Speakers are a joke
- Somewhat sketchy Type-C ports
- Lenovo's configurator is weird and inconsistent. In my case it forced me on an i7 CPU and the IR Camera. Neither of which I really needed.
- Both Thunderbolt port and NVMe SSD only have 2x PCIe instead of 4x
- Why aren't 16:9 displays dead on business laptops yet?

View File

@ -0,0 +1,16 @@
---
title: "Moving from Ghost to Hugo"
date: 2018-06-04T17:12:30+02:00
slug: "moving-from-ghost-to-hugo"
image: /img/post/hugo-move/header.png
---
Ghost has always been an easy way to get a neat looking blog. But it's about time I left it.
While Ghost does indeed have pretty looking themes. It's simply changed a lot over time. Most notably they don't even properly document how to set it up without using their ghost installer anymore. Which is just ludricrous. It makes it easy to set up a blog if you have a clean server to run it on. But if you want to set it up alongside your existing web server and applications it can be quite annoying to deal with.
It is of course also written in node.js. And considering how little traffic my blog gets, it's not really worth keeping a node application running all the time, draining a lot of ram. I've wanted to move for a while, but none of the themes offered by static site generators appealed to me the say way Ghost's Casper theme did. But finally, a hugo port of the casper-two theme seems to be pretty mature. So I went ahead and hopped ships.
From now on this site is powered by [Hugo](https://gohugo.io), a static site generator. None of the migration scripts from ghost really worked well, most of them screwed up the timestamps, didn't handle slugs properly, or had some other issue. So in the end I decided to either write my own script, or to migrate stuff myself. In the end I was a lazy man, I decided to simply bring along the most popular posts from my old blog. Most posts on here were fairly useless anyhow. If you notice missing images or anything similar in the older posts on this site, please inform me so I can fix them.
Serving static files instead of running a node.js application will easily save me a nice chunk of RAM for other tasks.

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,3 @@
# Content / Images
If using the standard file storage, Ghost will upload images to this directory.

8
static/css/custom.css Normal file
View File

@ -0,0 +1,8 @@
@import url('https://fonts.googleapis.com/css?family=Noto+Sans');
.post-full-content {
font-family: "Noto Sans" ,"Roboto" ,sans-serif;
font-size: 1.25em;
}
post-card-excerpt {
font-family: "Noto Sans" ,"Roboto" ,sans-serif;
}

BIN
static/img/avi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 KiB

BIN
static/img/logo-invert.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

1
themes/casper-two Submodule

@ -0,0 +1 @@
Subproject commit b747d89e76635d9252089e93268b2209d85571db