Ottawa Computing Group

I’ve just founded a meetup group in Ottawa, ON for programmers and hackers to work together or alone on whatever projects they’re endavouring in.

From the meetup description:

“Writing the next hot Android App or making a mundane Web App? Bring your laptop and hack away at your next computing project. Everything is welcome whether is traditional software development or administrating your personal website server. If you can do it on a laptop, than you're welcome to join.

You can both hide in your corner quietly typing away or sit in a group with your portable rigs on table and discuss your next big computing adventure.

This group has no focus on the type of technology being worked on, whether it's a basic web project or artificial intelligence or machine learning. Bring your ideas with you and share them with the group.

Non-hackers are welcome to join if they want to be thought how to code, we're all open for learning opportunities. Just ask anyone if they're willing to teach you new skills. If you're stuck on some tricky part of your project, ask your peers for help.

We will be meeting weekly in various coffee shops in the downtown area. If we get big enough, we can have groups in the suburbias of Ottawa.

Feel free to be late to the party or come in a bit earlier. Leave whenever you're tired at staring at your screen or have a more important date coming up.”

Hoping to meet you exciting people and see projects beyond my comfort zone!

Aggrieve

Espouses the psyche with macabre
Memories, cloaked in prior phantasies
Painted glistening of vile truthiness
To haunt thee eternally illusions of happenings
Yielding nothing but a homecoming to never home was

Memories of the evilmost kind
Endlessly fill the spirit with abuse veiled in wonderness
Memories turned vivid into lucid
Orbit elation into disquietude
Reviving the lifeless into animated
In every way inducing ache and agony, l'
Esprit est mort de vivre
Se prend ses derniers respires pour s'embrasser une dernière fois

cdahmedeh - The History Behind my Username

My username dates far back, to approximately 2002, when I was still an early teenager. At the time, I spend most of my time playing on the Sega Genesis and the Sonic series were my favourite. One day, at Wal-Mart, I found a box for a PC Game called Sonic CD, I wanted it and made my father spent 30$ CAD on it.

Like everyone else, when I registered on forums, I wanted to have a pseudonym, though I preferred that my name would be in it somewhere.

At the time, Sonic CD was my favourite game of all time, as embarrassing as it was but don’t worry, it’s not the case anymore.

I wanted my username to be cdahmedcd but I found it too repetitive, and substituted the second ‘cd’ to the prominent letters in my last name El-Hajjar, therefore ‘eh’. I ended up with cdahmedeh.

The username stuck with me for a long time and never really bothered to change it, even up to until today.

The proper pronunciation for the username is like this:

C D Ahmed E H

I don’t really make the effort in correcting people when trying to find the original meaning or pronouncing it, I think it’s interesting to see what people come up with.

What a boring reason!

Procedural Music in 256 bytes.

If there is one type of music that I have an incredibly strong taste for, it’s chiptune music, ones played by electronic circuits and chips rather than actual instruments. Classic games are a great source of these tracks and some of my most memorable melodies come from them.

During the Oldskool 4K Intro competition at Revision 2017, the Swedish hacker Linus Åkesson, manages destroy the 4K intro limit, with a tiny program in 256 bytes for the Commodore 64, a 1/128 factor reduction of the maximum. It is not a surprise that it won first place in the competition.

My day job involves me working with bloated runtimes and gigantic libraries that some span in the order of several gigabytes. Powerful machines with several cores and gigabytes of RAM are required to run these applications.

I am humbled by classic video game designers who had to work with tiny amounts of RAM and pathetic processors found in calculators like the Motorola 68000 and still manage to have colourful experiences with wonderful sound running at 60 frames per second.

The goal of these developers wasn’t some philosophy like maintainability or a certain idioms or design patterns, but rather extracting the most out of the hardware and provide the most impressive gaming experience.

When the Revision 2017 demo competition was over, I start looking at the winners, and nothing touched me more than the “A Mind is Born” demo. His technical description barely fits in my head and makes me feel like a novice programmer in my first programming course.

The actual executable is 256 bytes, and there was room to spare with the first instruction being a no-op (NOP). Ironically, the SID tune is larger at 325 bytes and encoding to MP3 would make a file larger than 2 MB. Encoding this blog post in UTF-8 is more than 256 bytes!

The music is generated by the program itself rather than having a score embedded in the program. The conductor isn’t the programmer, but the program. This is the procedural aspect of it. It sounds like a chaotic psytrance piece building up to a strong climax at 1:42 morphing into a real pseudo-orchestra.

This chilling piece of music shows what the mind of true geniuses can produce. If you don’t get goosebumps listening to this, you have no appreciation of true technical art. I recommend a listen with a good set of headphones to enjoy the incredibly deep bassline.

My Blog is All Over the Place

I originally thought that my blog would have a technology focus but it became an outlet to speak my mind out. Obviously, very few people care about what some random person like me thinks and my low readership shows.

I think the ideal mix for a blog is to have some scattered thoughts posts and some others focused on a certain subject. I don’t know if that is a good approach but the most popular blogs I’ve seen actually teach the user how to do something; something specific.

My subjects range from hugely personal stories to automotive technologies and other rants, even satires. These are things I enjoy writing about but sometimes it feels like I’m just talking to myself.

Promoting a blog is really difficult because usually putting a link somewhere will generate a spike in readership and a few days later you’re back to the usual 2 visitors per day. I have to blame on it myself because the only people who are interested about reading my posts are me, and maybe a few friends of mine.

I’ve been a software developer for a really long time and I sometimes think I could have something interesting to say and useful for others, but so many people have already talked about what I have thought about.

My goal isn’t to make this blog popular or anything, but I think readership is a good to way to incite criticism and inspire better works to come in the future. My writing skills depends on those who try to understand my mess of a text.

There are very few places where I promote my blog as much places consider it self-promotion and spam. My go-to is a Hacker News post and that usually generates a bit of interest or at least a click on the link followed by immediately hitting the back button.

I’ve found many obscure blogs on the Internet who talk about things that I’m concerned about but I don’t think many will find them interesting. The Internet is a very competitive place and it’s a combination of skill and luck that will get you somewhere.

I don’t run ads on my website and I never will. I enjoy writing and this is best outlet of stress for me. When I’m feeling down, I write here and complain, even though no one will listen to me.

Ideas

I believe that everyone has creativity to various degrees and in different areas such as artistic or technical. However, what’s so painful about getting new ideas is that they don’t come into mind on command on the spot. Instead, they come up in the most inopportune moments, especially when you are somewhere where you can’t take note of it and promptly forget it when you get home. I don’t know how these music artists have a new album every year, there must be some creativity theory that I’m not aware of.

I’m trying really hard to find an idea for my next blog post but my mind is blank now. Just earlier my mind was filled with many anxious thoughts about everything in my future. Apparently, trying to come up with something new is a brain kill-switch.

Celebrating a (little more than) year of blogging...

My first blog post was published on April 15, 2017 and was so popular that it generated a whopping 2 comments. I can’t say that my others posts have been as popular though.

I started my blog in order to learn writing and express my creativity. Writing is an outlet of stress for me and there’s no better way to talk about something on an open platform like this.

While I thought my blog would be solely focused on IT, my blog became a multifaceted place with discussions on technology, philosophy, science and automotive. I feel the subjects have been a bit dry but stay tuned for more exciting blog posts and new subjects such as gaming!

My goal for this blog isn’t popularity, I don’t even run ads on this website at all. I just want to vent and hope someone will benefit from my tirades.

Some statistics about this blog so far:

  • 537 days since the first post

  • 14 blog posts not including this one

  • 3 comments

  • 12 likes

  • 230 viewers per month on average

  • 4 RSS subscribers

  • 31000 words approximately

  • Most popular blog post: Automatic Transmission Simulation in Games

  • Least popular blog post: Many of them have not been read this month...

  • Longest blog post: Why I left…

  • Shortest blog post: Drifting a Bus

  • Most readers are from the US, Canada and UK. Some significant traffic from Europe.

  • Apparently, the most popular way to reach this website is directly (which I find hard to believe), it’s more likely to be through search engines or social websites.

  • 0 dollars made from page views

My writing is still very imperfect, and at times, very simplistic. I’m hoping with practise I will come up with clearer, more informative and have better researched posts. Maybe I’ll be taken more seriously then, for now, it’s just a hobby.

Creating this blog has made me realize that I don’t need to create something perfect from the start but rather, every endavour is a learning experience on it’s own. Your first projects might be cringe-worthy and embarrassing, but one day, you’ll do something you’re proud of. I’m not there yet.

If you feel the need to express yourself I highly recommend blogging though you can also start a YouTube channel or maybe a podcast. I personally use Squarespace to build my website. Even though I’m a software developer, I honestly don’t have time to maintain a website through some complicated JavaScript framework and host it on a VPS in my spare time. Some website builders are free like Wix and others are dedicated to blogging only like Blogger or WordPress (well, it can do a bit more). If you’re a web developer and are brave enough to roll your own, go ahead. If you’re a bit more lazy you can host Jekyll statically on github.io.

Your blog can be focused on a personal aspect of your life such as your travelling adventures or a place to discuss your favourite topics in astrophysics. The Internet is all about freedom (maybe not some countries) and this your chance to let yourself out!

If you’d like me to talk about a certain subject or my opinion on a topic, feel free to leave a comment below.

Electronic Stability Control

On October 21, 1997, the compact Mercedes A-Class became the subject of ridicule when it skid out of control and flipped over in the infamous elk test. Performed by Swedish automotive magazine Teknikens Värld, the test revealed how easily an avoidance maneuver could turn into a deadly disaster. This was a PR blunder for Mercedes-Benz especially considering this was their first foray into affordable front-wheel drive cars. One German newspaper mockingly published how the much older 1950s Communist Bloc-based Trabant passed the "A-Class killer test".

The Stuttgart headquartered auto-maker rushed to mend their reputation. Within three months, they were ready to demonstrate their refitted A-Class. In January 1998, the compact car was made to swerve hard left and right to avoid an 'elk' while remaining composed and firmly planted to the ground. The car was stable throughout without so much of a skid. Robert Colin, the test driver who originally made the car to flop over, was impressed with the results. Mercedes went on to exceed their projected sales numbers and even sold a plush moose at their dealerships.

How did they manage to salvage the car's safety reputation? They modified the suspension but more importantly, fitted the vehicle with ESC. Electronic Stability Control is a computer program that prevents loss of traction with an array of sensors and hydraulic brake actuators. During the test, ESC intervened within fractions of a second and applied corrective braking action to keep control at the hands of the driver. The system was so effective that to the onlooker, it appeared to be pure sorcery.

I wanted to blog about ESC for a long time, but I kept getting more and more ambitious. I realized that the solution was to blog only about certain aspects of it over time. Today, we're talking about the operation and effectiveness of ECS. Other subjects include the controversial history of ESC, how to properly correct slides and finally the physics behind wheel grip. All these will be detailed eventually in an article of their own. However, this post is the one with fun videos and pictures! No math equations or boring history guaranteed!

This is not intended to be a scholarly article on ESC, but rather an introductory one.

How to Crash

Cars lose control in two basic ways. Rather than explaining in minute details with advanced mechanics, I have prepared two videos which demonstrate how accidents happen due to loss of control.

Understeer

Understeer is when the car takes a wider turn than what the driver commanded. This is very common on front-wheel drive cars and usually happens when someone attempts to turn to quickly and at high speed. The front tires can only provide so much grip to steer the car, if it is exceeded, the car will slide forwards.

To regain control from understeer, one must slow down carefully until the tires have enough grip available to control the car again. 

Oversteer

Oversteer is a much more terrifying condition because it is an unstable one. The rear-wheels lose grip and the rear-end of the car appears to go all over the place. Oversteer is much more common with rear-wheel drive cars where the grip on the rear tires can overwhelm the front. In icy conditions, it can happen to any type of car as any of the wheels can lose grip at any point depending on the slipperiness of the road and the patches of ice/mud.

Correcting oversteer requires skills and concentration and understanding of the car's drive-train.

In front wheel drive cars, one wants to move the weight of the car back to the rear. Usually, that means, counter-intuitively accelerate rather than brake (or at least brake very carefully). Braking the car will cause the weight of the car to be shifted forward and the rear wheels will lose grip and induce even more oversteer. Therefore, stay calm, steer against the skid and accelerate. Once control is regained, you may carefully start braking again.

In rear wheel drive cars, it is much more difficult and would require a blog post on it own (hint hint!). However, the basics involve reducing throttle carefully and making calculated adjustments to the steering to ensure that the car is in line with the direction of travel again.

How Much of a Difference ESC Really Makes

What ESC does is correct oversteer and understeer, we'll see how in a moment.

The best way to demonstrate ESC is to do it in the field. In the tests below we'll be simulating a very common occurrence where a bus is stopped in the middle of nowhere and we're going too fast to slow down. As a result, we need to swerve left and then right to avoid the bus and get back onto to the driving lane.

This emulates the infamous elk test that is done by certain car magazines to test the limits of a car. The car is first made to avoid the obstacle by turning hard to avoid it, this induces understeer due to the forces involved in turning as the car wants to remain straight due to its initial interia. Once the obstacle is avoided, the car will tend to oversteer turning back as the avoidance maneuver caused the car to lose it's rear balance from the change in interia from the first turn.

ESC Off

ESC On

ESC on Ice

What's even more impressive is how capable the system is on ice. I have prepared a scenario where again, there's a bus stopped in our path and we have to avoid it. The difference is, we're doing it on a frozen lake!

ESC Off

ESC On

How ESC works

As the previous videos have shown, ESC can be extremely effective. However, it's mode of function is deceivingly simple.

Cars are equipped with a variety of sensors and accelerometers which allow the ABS Module to determine what direction the car is actually going. It compares it with the intended direction that the steering wheel is pointed too. If they don't match, it means the car sliding and the system intervenes.

ESC Operation

ESC Operation

The idea behind ESC is to cancel the spinning momentum caused by the loss of control. It does this by applying brake pressure on an individual wheel to compensate for the momentum.

In an understeer situation, one needs more momentum in the intended direction of travel. To do this, the rear wheel that is on the side of the direction of the slide will have it's brakes applied achieving the desired course.

In an oversteer situation, one needs to cancel the moment caused the slide. In that case, the wheel opposing the slide in the front has the brakes applied and the course is corrected.

It's really that simple.

ESC Counteracting Oversteer (from Fifth Gear)

ESC Counteracting Oversteer (from Fifth Gear)

In addition, as we previously mentioned that the key to preventing (not correcting) most slides involves a reduction of throttle. ESC will automatically determine how much throttle to reduce in a slide intervention happens as to not worsen the situation.

Effectiveness

However, ESC cannot break the laws of physics. If you're going too fast for a corner, you will be headed straight to the wall. ESC is a system to design to prevent loss of control, not enhance it.

ESC performs these actions repeatedly in very shorts periods of time acting much faster than a human possibly could. Usually 50 times per second. In fact, the kind of corrections made by ESC cannot made be made a human, unless they drive carefully enough not to break traction. But in panic situations one might easily make mistakes. 

ESC Today

Electronic Stability Control is now considered mandatory in new vehicles in many first-world countries. It has shown to reduce single-car accident rates by quite a huge margin as multiple studies have shown. Accident avoidance figures range from 30-50%, a massive improvement and it's easy to see why it has become one of the pioneering achievements of the automotive world like the seatbelt and airbag.

Most cars today are fitted with this technology as standard. A flashing warning light indicates that the system is actively correcting a slide. If the light is solid, it is time to visit a mechanic as the system is probably malfunctioning. Other vehicles may have a separate "ESC Off" light that either flashes or stays on if the system was deliberately turned off or malfunctioning. 

ESC Light.jpg

ESC Light

A typical dashboard ESC indicator

In many cars today, ESC cannot be fully disabled. Pressing the disable switch will only switch it off partially, usually the traction control portion only under certain speeds. This is usually because engaging the system means that the wheels will not spin in stuck snow or mud situation because the system is detecting a loss of traction. In order to allow the wheels to spin slightly to hopefully get out of the deep mud pit, the traction control will be disabled at low speeds.

For the really brave ones, some cars have essentially 'cheat codes' to fully disable the system if the car doesn't allow it already. A quick google query will find you some results.

I hope this gave a small glimpse on a life saving technology that we often don't even notice. Next time you press and hold the ESC Off button, think about what protection you will be losing.

Learning More

The Wikipedia article on the subject is actually quite short on the subject of ESC (and sorely misses points on the history aspect) and I haven't found something in-depth enough yet.

I found a few more interesting videos describing vehicle dynamics and ESC and I recommend a watch:

All the above simulations were provided by the BeamNG.drive vehicle simulator.

Drifting a Bus

This is another satire...

I traveled to Japan last year and got a chance to meet the Drift King himself. I was doing a track day and drifting culture is hot in Tokyo. I got a chance to speak to Mr. Tsuchiya and he told me a funny story about drifting something you wouldn't expect:

Hi, my name is Keiichi Tsuchiya, and I am the Drift King. I call this maneuver the "Omenibussu Duriftu" and it cost me my job and sent me into abject poverty.

I started doing this on rainy days tired from my 8 hour shift of hauling passengers around, I needed to relax and have a bit of fun. I would move the bus side to side and then turn hard and the bus would drift. Passengers screamed and complained as I counter-steered the slide. The complaints lead to me being fired ending my career as a bus driver.

Make sure you inflate the rear tires of the bus as much as you can and deflate the front ones. This will make the bus prone to oversteer. I convinced the maintenance workers to install nitrous on the bus telling them that the bosses ordered us to test out this new ethanol reduction system. I even convinced them to weld the rear differential as it would help getting out of sticky situations in snow.

I recommend you do this with 40 footer bus as an accordion bus may lead to fish-tailing. Use a track with plenty of run of area to prevent accidents or the rapid-transit road if you're brave enough. You'll need a rear-engined, rear-wheel drive bus for this technique (a bit like the Porsche 911).

First, accelerate to 60 kph, and then swing the bus left and right until you reach the corner. While you swing, keep accelerating until 100 kph. Then once it reaches the turn, accelerate hard and let the bus slide without adding steering input. Half-way through the slide, counter steer and reduce throttle. It will work every time, at least for someone skilled like me.

The simulation was possible thanks to BeamNG.drive

Clever Code

I recently worked on a proof of concept mobile application for an insurance company. It was simply designed as a tool for sales to demonstrate how a potential concept could work.

The statement of work seemed to be reasonable, a week to improve some functionality and change some branding. It also included updating the dependencies of the project and upgrading it to work with latest tool set.

It really seemed like a reasonable project until I was given the source code. I realized that what I had in hand was production quality code with hundreds of libraries included. I could barely understand the workflow of how the code lead to functionality, it seemed like sorcery was being used to generate it. I've worked on a dozen of mobile applications and it was generally easy to understand how they worked.

Obviously, this 3 year old project wouldn't compile with the latest tool set. I thought it would be an easy task to simply bring up the libraries to their latest version, but a ton of compiler errors were thrown. Why? The code heavily relied on paradigms from the older libraries and the newer ones have changed workflows completely.

I realized that updating the application would require major refactoring which wouldn't fit within the tight deadline. I won't give too many details as work is supposed to be confidential, but it was a very simple app with a few screens and extremely basic functionality.

At that point, I decided that I would rewrite the application from scratch. What took a team several months to do I was confident that I could do it in one day. However, I wrote very simple and easy to understand code. It's a proof of concept, a prototype. The source code is supposed to be disposable once the company decides to turn the PoC into a production quality application.

In one day, I had the prototype working with the same functionality, actually more, than the original version. My goal was very different, it was a PoC, not production software, it's supposed to be a prototype. One day's worth of work is not costly to throw out, but spending on several employees to do the same thing, but with way more complicated code is way more costly and even more when it comes time to maintain it.

Even production applications can be overengineered. Code can be very clever but an impossible mess to actually understand. Most developers don't realize that code is easier to write than to read. In several years, a simple bug fix will break the application because you can't remember how the asynchronous event system worked when it could have been a simple method call in a seperate thread.

Code is supposed to be of the same scope of the application, not more. Annotations, lambda expressions and so on are tools to help you write more readable code but only when it stays reasonable. A super clever implementation of lambda expression that spans the entire screen is much worse than a simple for loop which is what you really needed.

New developers want to show how clever they are with complicated code, however it doesn't impress anyone because no one understands it. As I progressed throughout my career, I realized that very simple code is way more elegant than clever black magic. As a result, I ended up with more maintainable code that I could come back to years later when it needed a simple bug fix and I was confident that it wouldn't break anything else.

My belief is that code should be as simple as reading an English article. Only a one pass reading should give you an idea on what's going on. If you need to reread the code several times to understand it, it's a bad sign.

When you do need to be clever because it's the only choice, it better be documented with plentiful of comments, that explain why and not how the code was designed that way. Whatever is needed whether it's diagrams, a separate document or even a video. The point is that the next developer understands it right away.

If you can recite the code and it sounds like English sentences, you're on the right track.

Burnout isn't about work...

A few weekends ago, I found myself doing absolutely nothing. I didn't watch movies or shows, read reddit, have any meaningful conversations or even eat. I took naps to escape reality and slept-in as much as I could, much to my detriment with even more fatigue and tiredness.

I thought I was having a routine depressive episode but I realized that my mood wasn't actually that bad. However, I really did want to do nothing other than sleep, complain and stare out the window. Nothing was interesting.

My creativity and brainpower was sucked out me until it was completely depleted. What really happen?

I often blamed work for this but I'm still functioning there and considered a high performing employee. I always have the energy to do something there, but come home all of it disappears.

While some say burnout is clinically similar to depression, I'm not that sure. Depression is quite a constant uniform feeling of hopelessness, dread, negative thought patterns and perhaps a physiological aspect. Burnout doesn't exhibit itself when have to work, it's when you don't.

For most of us, work is our liveliness, it's literally what keeps up alive, income and passion. We put all our effort into it because we have to otherwise we're not meeting deadlines or that next performance review won't be so good. You're forced to perform.

When the pressure is off, the mental energy spent to do work depletes any sense of motivation left for any hobbies, relationships and so on. At home, you don't have deadlines or clients to meet or sales pitches to satisfy. All those obligations are gone, you're free to decide for yourself save your errands like groceries and laundry, though even those can be neglected sometimes.

The end result is fatigue and self-neglect.

Unlike depression, burnout probably has no major physiological causes thought it's effects maybe. Neglecting your body with lack of food and exercise won't help the lack of motivation and low energy.

Few resources have presented reliable treatments for burnout. I don't think it exists because everyone experiences it in a different way. One solution may work for another but would make another's burnout even worse.

One constant factor between all these 'treatments' however I noticed is breaking the routine of life. Things won't improve if you do the same thing everyday. You to have things to look forward to whether it's exciting times or times for rest. I can be really anything.

For me, for example, I'm an introvert-extravert hybrid (leaning more on the introverted side). I like doing things alone but I need to go out and chat with people. I need to go out and enjoy the views, the restaurants, the malls, the parks and so on. Knowing these things are coming gets me excited, even a chat at a coffee shop. Being locked in drives me nuts but sometimes I want to be locked and left alone.

For others, vacation time might help 'recharging ones batteries' though one must be careful as vacation can be equally as tiring. Especially long trips and vacations relying on heaving planning full of activities.

I noticed that others simply like to retreat and escape. Binge on TV shows and movies, spend hours on Reddit and read fiction novels. That's also breaking the routine if all you do is work.

There really isn't a single solution for burnout and I really can't say I found the ideal one for me. I hate to say it, but the best solution is trial and error. My solutions ranged from changing the colour temperature of the lights at home to going on more meetups. Some did help and others didn't.

I don't believe that burnout is about self-worth or how one views one's self at an organization. That may be effect of burnout but not the cause. The reason for burnout is simply fatigue, lack of energy and motivation and one must find the way that works for them to help them restore that energy.

Please post in the comments in how you recover from low-energy energy and burnout? How did you keep the fire burning when you get home?  Do you hit up the gym, cook a fancy new meal, or take a day or two off and spend the day watching Netflix? These discussions are key to understanding this relatively new concept and how treat it.

How to Program and Make Software

Learning software development is one of the most frustrating endavours you can partake in. You see these sophisticated web apps and advanced operating systems and you want to do like them. You want to make a great triple-A game with your own amazing story. However, few realize the amount of effort into making these. These pieces of software are built by big teams with dozens of members who spent the past 5 years churning out code.

On top of that, it's not just about writing and understand code, but it's about writing it in a way that it can be re-used, easy to read and understand years down the line and easy to fix and maintain. Yes, you can make something work by copying code you don't understand and having a big giant mess of spaghetti, but it's not something that you call software engineering. At best, you're a script kiddie.

Like in any field, you need to start really small. Writing command line applications that add two numbers. Understanding the very fundamentals of how computing actually works, how code is converted into something the CPU understands.

Many want to become computer scientists and software engineers, but I honestly don't believe that academia is the best route for this. The knowledge they offer is often out-dated and doesn't really apply to the real world. In school, you get these lab exercises with perfectly commented code but when you start your job, things are really different and way more messy. Yes, you might need a degree for you next job, but an Arts or Math degree will get you far enough. To build software, you need to be passionate about it and teach yourself. You need to get deep into the books and learn by reading other people's cryptic code. Unlike other fields that have been the same for centuries, software changes every day. Just look how often your phone apps get updated and changed. It's not just about trends, it's about constant improvements.

Don't be discouraged when something doesn't work, keep trying until you get the results you want. Keep re-inventing the wheel until it is a well-oiled machine. You won't get there in a few days but trust me the ramp up will be quicker than you think.

You need to pick a path before you start on your adventure. Do you want to write games, cool web apps for budgeting or how about an advanced modeling and simulation library? Just like any other field, there are specializations and you can be good on as many as you want. The secret is time.

When someone asks me about where to start, I usually throw this list of resources with books and websites. Somewhere in there, you'll find something that tickles your fancy and will get you started on your programming adventure.

No Excuse List

http://noexcuselist.com/

There's a lot of free programming courses in there if you prefer lectures and interactive exercises instead of reading. Codeacademy is really popular.

Freely available programming books

https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md

Basically anything related to computer science can be found here. There's even some IT related books in the list. Updated all the time.

Awesome Awesomeness

https://github.com/bayandin/awesome-awesomeness

A meta-list of useful libraries for different programming languages. Before trying to code something on your own, see if there's a library that does it already.

Pick your preferred method of learning and you'll on your way to make whatever you want. The sky is the limit, or perhaps your imagination.

The Million Dollar App Idea

If you're a mobile developer, this almost certainly happened to you. A friend or relative makes you swear to secrecy about what he's going to tell you next. His secret idea will change the world and make millions. He comes up with the idea (usually like Uber but for X) and you do all the development work, split share 50/50.

Most people think that coming with an idea is hard, but it isn't. Everyone has a ton of ideas all day long, many of them ridiculous and some few genius. However, execution is the difficult part: development, marketing, building a company and so on. That sucks in every available time slot in your day as you try to make your idea into reality.

What's worse however is most of these ideas fail. Startups get a ton of investment money that is sunk into nothing. People quit their jobs hoping their new business will let them retire early. None of this really happens.

People are mesmerized by what they see in the media. A teenager who made a soundboard app makes millions and buys a mansion at age 17. Another makes thousands of dollars in ads from his YouTube videos or Twitch streams. However, all of this is a form of survivorship bias.

How many Twitch streams are watched by virtually nobody compared to the few famous ones. Pennies are made from most YouTubers who put ads up. The reality is that these successful people are the exception not the norm, they can almost attribute their success to luck.

I've seen people with no fame make excellent content and vice-versa. Producing good work isn't guaranteeing success. Not the best product is always the one that makes it to market. If we can call it that, fate, results in success.

However, to succeed, one must play the lottery game and hope to make it there. You can't beat the odds if you don't try. But don't approach the idea with naivety, but actually study what people want. Notice how informercials sell mundane things you never thought of and they sometimes make great success even if their products are garbage.

Think of a problem that you actually experience day to day. Something that bothers you and perhaps others. Maybe finding a solution to that would increase your success. Don't just imitate another streamer or blogger, because they succeeded out luck mostly. You need to do something novel that no one has ever thought of yet, and maybe, just maybe, you'll be making a few bucks.

When working on a project, your goal shouldn't be fame or money, but rather passion and learning. That growth is so much more valuable as the new skills you learn can be put into use somewhere else, maybe in a job that actually makes money.

My Computing Setup

Everyone (or maybe just me) is interested in what people of different livelihoods use as a computing setup. Think I'm crazy, there's actually a website (uses this) all about this, interviewing relatively famous people about what they use to do their jobs, write their books, photography, create apps and so on.

I've always liked the laptop form-factor because it allows me to work from anywhere in the home, or if I want to do something elsewhere, I easily can. However, I also like sitting at a desk with a big screen and a comfortable sitting position. To get the best of both, I'd purchase laptops with a docking station that would allow me to use my laptop normally and then plug it into a docking station connected to a big screen, laptop, keyboard, etc.

Lenovo ThinkPad Mini Dock Series 3. A very common docking station compatible with many ThinkPad laptops.

Laptop

I went through a slew a laptops from Dell and Lenovo and right now I've settled on a Dell XPS 9560. It's a good balance between portability, style and enough power for gaming, something I'm avid of. The grunt also helps with compiling large software projects and multi-tasking.

A brief overview of the Specifications of the Beast.

Display

I really wanted something unique to do my work on, simply for the desire of being different (and self-conceited). The main attraction is the screen. I originally got a 24" 2K monitor but it had display connectivity issues and it made me angry enough that I wanted to go to extremes; get a giant 40" 4K TV and get that working properly.

To get a 4K TV working at a proper resolution and refresh rate, you need to take some special things into consideration. First, the TV must support chroma 4:4:4 subsampling, which means no compression is used to display pixels on the screen. Otherwise, text appears blurry but movies and games will look acceptable. Some cheaper TV brands don't have it and each manufacturer has a different way of enabling this feature. I recommend this excellent write up by Rtings about it .

This method allows for 4K@60 Hz (a good refresh rate for gaming and regular desktop usage) but requires HDMI 2.0 or newer. You'll either need to make sure your system supports it (most newer video cards support it but laptops usually don't). I was able to procure a USB-C to HDMI 2.0 adapter for my Dell laptop to get the image to display to my liking. My work laptop, an early-2015 MacBook Pro needs an active (passive won't work) DisplayPort to HDMI 2.0 adapter and a patch for macOS Sierra. Finally, you may need a high-bandwidth HDMI 2.0 cable that is rated for 18 Gbps but you may already have a high quality HDMI quality cable laying around that supports 4k@60Hz just fine. Try before you buy something new.

Keep in mind that TVs are often not designed for low latency or gaming so do some research beforehand to ensure that you screen meets your latency sensitivities. Rtings is my go-to source for this but otherwise other websites found with a quick Google query have useful information too.

The behemoth display itself. 

You really don't need multiple screens with this kind of setup unless you're working at NASA. A 4K display is like the equivalent of four 1080p screens stacked together. Very often, I'll have a small lonely window sitting in the window while I idle around browsing the web. You'll never want to maximize anything as scanning your eyes across a meter of pixels can be tiring.

Input

In terms of input, my route is a bit non-traditional. I really like ThinkPad keyboard with their TrackPoint. It allows me to move the pointer without moving my hands from the home row, though research has proven it to be one of the slower input methods. It's more of a comfort thing for me. I've owned many ThinkPads in the past so I got used to the layout of the keys but I miss the 7-row layout. I'm not very picky about the switch. I like both rubber domes (provided it's not mushy) and mechanical keyboards. I do enjoy the clicky MX blue switch very much, just wish they made a TrackPoint with those.

ThinkPad and Trackball combination.

I prefer a trackball mouse over the regular one because it allows me to move the pointer without actually moving the device. It takes time to get used to but I got to the point where I can play first-person shooters with it. It is very comfortable to hold and fits well in the hand. However, be prepared to clean the sensors for the ball regularly like you did in the good old days of ball mice with mechanical sensors.

Docking

Business style laptops usually come with a very practical docking station that allows to just slot the laptop into this slab and your screen, keyboard and mouse are all connected automatically. Dell didn't have this option so I opted for a stand and a Thunderbolt Dock with a Thunderbolt Connector. It allows me to easily plug everything with a single cable for both charging and connecting external devices. It's not as seamless as a traditional dock but this is the best I can get with this laptop.

Dell Laptop docked in its stand with a Thunderbolt Connector

For my work computer, when I occasionally work remotely, not that I have an excuse since the office is 4.7 km away, I have a few external plugs to connect my MacBook. I just need power, DisplayPort and USB to plug in and I'm ready to go. I have a switch to alternate between the Keyboard and Mouse from main laptop to the MacBook. It's pretty easy to setup and switch between systems.

The MacBook ready for work with just a few plugs.

LED Lighting

The pièce de resistance for me is the LED strip that runs under the screen. It allows for a very atmospheric look on the desk and makes things look a bit less sterile. The colour and brightness can be adjusted along with automatic colour changing. It looks especially great in low lighting though it can get distracting and sometimes I turn it off. It's more of a party piece to show off more than anything else. I purchased the kit from Ottawa LED

An animation of the LEDs slowly changing colours. I find it very mesmerizing and impresses the ladies (OK, maybe not) 

Operating System

In terms of software, pragmatism trumps ideology for me. I don't care about the operating system debates or what software is superior to another. The right tool for the right job and that is what you're supposed to use. I use Windows, macOS and Linux on a daily basis; each one has it's sublime moments and pain points.

At home, I use Windows 10 mostly for gaming. Virtually any kind of software is available for Windows and security has gotten better since Windows Vista but it's still a massive target for malware. Software development is feasible but you really want something more powerful than cmd.exe and PowerShell. With the new Windows Subsystem for Linux, the gap is starting to be filled but it still needs more work to become something production ready. Customizability is also another point, while there are Stardock tools and .dll hacks to get your own custom themes, they are a bit fiddly and don't always work as expected. You can get alternative shells but you'll usually be stuck with explorer.exe if you want things to behave properly. Not to deny you can get a very attractive Windows Setup with the right tweaking. In terms of device driver support, Windows is a clear winner because manufacturers write software for the most popular target. Not to mention that Windows has become pretty stable and has great architectural principles. What other operating system allows you to switch display drivers on the fly with WDDM. Not to say that things are perfect with the infamous BSOD.

My Windows Desktop

At work, I was given a MacBook running macOS Sierra. The aesthetics and consistence are second to none and things look so cohesive. The polish is amazing and though it's not something I'd use everyday, I definitely see the appeal. As a bonus, because it's a Unix-like operating system, you get all the POSIX commands out of the box, great for software development. They're the BSD flavours instead of GNU but it's hard to tell the difference. A man page will explain the differences for you and it's sufficient for me. Otherwise, just like Windows, everything just seems to work like multiple displays support, automatic sound output switching and fast boot times. I believe that in terms of plug and play support, macOS is the superior OS. I just wish you weren't stuck with the default look (I know a dark theme is in the works). Customization is a weak point in macOS. Switching between Command and Ctrl for keyboard shortcuts causes me fatigue as I switch between systems and I feel that the Windows taskbar system is superior to the Dock. I just want to see what I'm running, not everything that I've pinned down there. Admittedly, those big icons look gorgeous.

My work macOS setup. I've hardly done any tweaking and it looks pretty great.

For both work and home, I use Linux on servers and virtual machines. For the server, it is an excellent operating system, reliable and dependable. Amazing scripting capabilities and development tools up the wazoo. If I need something that will run my docker swarm without a hitch, Linux will do it for me. It's a testament that even Microsoft Azure let's you run Linux on their VMs. However, don't get me started about the Linux desktop. It's been a running joke that the current year is the year of the Linux desktop, but we'll never get there. Even the most user-friendly of distros like Ubuntu will eventually require you to use the command line to do something. Say get a second display with a different DPI working with xrandr, when on the other operating systems that start with W and M, it just works. Distros like Arch and Gentoo require a deep understanding of how an operating system works. It's a great hobby, but it's not fun when you need to get work done but a recent update borked your GPU driver for the third time and now you're just staring at a blank screen. However, when it comes to customizability, there is no contest. The most beautiful desktops are on Linux and there is so much variety. Stability would be nice for those desktop apps. I was an avid Linux user for 5 years but when I got a full time job and was studying, I didn't have time to maintain the system anymore. Nothing will able to replace Compiz Fusion for me or the excellent i3 window manager however. If you got time to tinker and computing is your hobby, you can't go wrong with Linux. Controversially, I actually quite like systemd, it's well done from an architectural point of view but it does not follow the Unix philosophy. But GNU/Linux is not Unix. Almost every distro has adopted it and it's a good sign as maybe Linux is moving to a unification movement as that's what we need for a successful desktop. Just look at macOS, it's basically a single-unified Unix distro and look how popular it is.

My souped-up Arch Linux i3 Desktop running in VMWare. One thing you can't argue about, Linux is cool.

Software

I'm not very picky about software, I just want something that works fast, efficient and does the job well.

For browser, I use Google Chrome but Firefox works just as well and so does the more obscure ones like Vivaldi. There's so much choices for web browsers and things are getting a little more standardized with WebKit and Blink (though we might have another IE era again). Extensions are common between most browsers but Firefox is the winner when it comes to customization (what other browser lets you change the colour of the tabs and their shape?). However, for some reason, Google Chrome feels the most responsive for me.

For music, this was a hard one for me. I tend to listen to quite a bit of a lot of obscure music. Google has the largest collection of music but I'll admit the recommendation engine needs some work, not that I was satisfied with any recommendation engine so far from Spotify or otherwise. Last.fm was close but it sometime still had unrelated tracks in my playlist but it's too bad they removed the radio feature. With the new YouTube Music, you get access to the largest collection of music on the Internet, everything is there. The recommendation engine is based on the YouTube Mix engine which so far has been providing good recommendations. I'm excited to see them merge Google Play Music with YouTube music.

Microsoft OneNote has to be my favourite piece of software in existence. The freeform nature of writing document really allows me to organize my thoughts in a way that makes sense in my brain. The autosave feature is the icing on the cake on top of the cloud synchronizing. I've enhanced my version with OneNote Gem for some extra goodies. I use OneNote as a loose todo-list and for drafting some of my compositions like this blog post.

I use the Microsoft Office suite because it is undeniably the most stable and feature rich out of all the paid options. While LibreOffice might be a functional free alternative, it's hard to compare. Look how much easier it is to write equations in Word compared to Writer, there's no contest. Disclaimer, I am paying for an Office 365 subscription.

For my backups, I use Macrium Reflect for a full disk image back up saved on a network drive. It's pretty headache free and it just does daily backups in the background without any fuss. For my really important files, everything goes into OneDrive but I've used Dropbox before and it's worked just as great. I use OneDrive because it comes with my Office 365 subscription with 1 TB of storage. I can't say I had a good experience with Google Drive though as the Desktop client was really unstable and sometimes my files didn't make it onto the remote storage.

For software development, it's a combination of tools. For Virtual Machines, I use VMWare Workstation mostly because I'm used to it and it has really good guest utilities. VirtualBox is great too but it's missing some features like having support for VT-x extensions within a guest. I do like the interface of VirtualBox better though. I use IntelliJ and Android Studio for Java-based development but I've had no problems using Eclipse. For me, the only real difference is the keyboard shortcuts and IntelliJ feeling a bit more polished. For light editing, it's mostly a mix of Visual Studio Code and Notepad++. Visual Studio Code has good plugins for auto-completion for various languages but nothing beats Notepad++ for a quick edit of a small script file, it's just so much lightweight than Electron-based Code. ConEmu is my go-to choice for Terminals, it's just so much more sophisticated than Command Prompt with the ability to start different shells, tiling and themes.

For budgeting, I like to use You Need A Budget. I was a PocketSmith user for a long time but it was a bit too cumbersome for my needs. I'm sure advanced budgeters would love the projection feature and all the fine tuning but I just need to categorize and shift money around. YNAB does the job but for some others all they need is a spreadsheet.

For games, my choices are pretty boring. I like sandbox and simulation games. Think Flight Simulator, Assetto Corsa and BeamNG.drive. I also enjoy my Tycoon games and have a slew of retro games for times when I need something simpler to play.

I use Renoise for music production. Even though it's one of the stranger DAWs, I find the sequencing arrangement to be much more intuitive than the timeline-based system. Most people will disagree with me, it's just a matter of taste. Unlike classic trackers, Renoise is very modern with VST support and ASIO4All.

For writing books, I like Scrivener due to the way it allows me to easily draft documents. However, I have to admit that OneNote or Word is just as well suited for the job but the folder arrangement for chapter and export abilities make it indispensable.

For 3D Modeling for the 3D printer, I use Autodesk Fusion 360. I'm not an expert modeler so I find it simple enough to make basic models. It has tools to make things like extrusion, holes and so on very simply and allows to define precise measurements. I know Blender allows for more sophisticated designs, one day I'll get there.

For electronics and microcontroller stuff, I like using Frizting to design the circuit which is a very basic tool for doing so. Theirs is nothing special about it, it's basically a fancy diagramming tool. For programming the micro-controller, I use what almost everyone else uses, Arduino IDE. It has syntax highlighting, auto-completion and easy way to send code to the micro-controller, what else do you need?

Finally, for system tools, I have a basic RainMeter system to show basic stats about my system. I had to write my own plugins to display additional sensors from HWiNFO but that's about it. On macOS, I use iStatMenus which is a great tool to display system info on the fly in the menubar. Good way to keep tabs on the system when npm is pulling in dependencies and compiling dependencies while taking 100% CPU and turning my laptop in a toaster oven.

Window Management

I like minimalism so my desktop is as empty as possible. A simple wallpaper with no desktop icons. A tray with almost no icons. A simple RainMeter display in the corner. My taskbar has no pinned apps and is made to display on apps that are running with nice labels instead of the default dock style. I am using Taskbar Tweaker to allow me to use the scroll wheel to switch between apps.

For organizing my windows on Windows and macOS, I use Divvy which allows me to have a pseudo-tiling arrangement on my screen. Since I have a giant 4K screen, it comes in handy to arrange the mess that my desktop becomes. On desktop Linux, I love i3 and nothing will ever replace it for me. The ability to arbitrarily define layouts is genius and I will never ever find a replacement for other operating systems. Also tiling window manager just looks cooler than anything else.

My messy desktop organized into neat tiles. A great way to keep your workflow in check.

Phone

My phone is a lot less fancy than my desktop. I'm still rocking a OnePlus 2, which is about 3 years old now. However, I have installed a custom ROM called Resurrection Remix for additional customization. I won't go into details but it's just for small quirks like having the volume slider only adjust the media volume. I've also rooted it so I can install an AdBlocker on the phone. Finally, I'm using Franco Kernel to downclock the processor to squeeze out an extra bit of battery life out of the phone.

My Phone following the same minimalist theme as my Computer.

In order to save money on an expensive phone plan, again, Canada has the most expensive phone plans in the world, I have a data only plan designed for tablets. I use a VoIP.ms line for my phone calls and I haven't noticed any difference in terms of call quality. I can also get cheap international calls with one of those Betamax clones. At the end, my phone bill rounds up to 30$ a month. I'm using Bria as my softphone client.

Finally, one thing I'm very proud of is that I have a phone in the kitchen also connected to VoIP using a Cisco SPA3102 gateway. It is an outbound only phone, but if the lobby intercom rings, both my cellphone and kitchen phone go off. Like this, if I can't answer the lobby from my cellphone, someone at home can answer it instead.

My phone doesn't get much use other than communication through WhatsApp and Telegram and navigation. I also use it to read books using Moon Reader+ Pro. I sync my books from OneDrive to the phone using FolderSync.

Parts

Conclusion

What my setup looks like as a whole. In general, I'm pretty pleased with the result, took me about 6 months to get to this point but it was a really fun endavour. 

Everyone has a different setup and some may have very simple setups because they don't care much about computing but as a hobbyist I like to have something to be proud of. Just like a car enthusiast wants to tune their car for the pride of it, I do the same with my most expensive hobby, computing.

Please feel free to share links or short descriptions in the comments on your setup. What do you think of my setup? Is it too boring? Where can I get ideas to inspire me with more intricate setups? All opinions are welcome.

 

Endothalmic Adaptance

Henceforth a model of endothalmic adaptance emerges from resistifying anticouplers, one can understand the comprehensive theory of pluridimensional cystors. In all scenarios, the suspendation of maxima-based theoria causes the eloption of famnistic verifiable visiothermic systems. Whereas the examples herein are based on systematic mediocracies, their validity still lies within the thalmus of integration.

All starts with the pseudo-automatic of grammarial variances in a multiversal with a higher panametric velocitors. The variabation explains the dimenstionality of all existances, no model currently outlies a suspense-based hypothesis relying on capacitrons and transistrons.

The nanometric and femtometric divisions occur in natural organical stators presented by hospictacular exothalmic adaptences adapted to multivariant divisionation of all automatronic variabulations poorly understood by scientific communiti.

This theory envisions an explanation for the quarkic submolecular anti-physics producing an encompassing viewance on existory exhibitors for the production of an omnithermal motoric force. Therefore, all theories and hypothisiac tractance can be accounted for.

The endothalmic adaptance view can be summarized in these simple equations parametrized with mathematronic on a philosophist creatance.

Endothalmic Adaptance Equation.png
Endothalmic Adaptance Equation 2.png
Endothalmic Adaptance Equation 3.png

Automatic Transmission Simulation in Games

I know automotive enthusiasts will hate me for saying this, but automatic transmissions are an incredibly fascinating technology. Manual transmissions these days are reserved for the track, while most of the developing world is moving to a fleet majoritarily composed of automatics.

These days, even enthusiasts will admit that automatics are more efficient, shift faster and easier to drive than a stick shift. However, no one will disagree that a standard is much more fun and engaging.

How Automatics Work

To over-simplify things a little, transmissions exist due to the limitations in a combustion engine. It has a several narrow RPM ranges where it either produces the most power, the most torque or is the most efficient. The different gears in a transmission allow the engine to operate at the speed ideal for the driving condition while staying within those narrow RPM ranges. For a more complete and accurate explanation, please see this section on Wikipedia.

The part that I always found the most interesting about automatic transmissions was the shifting schedule. In other words, at what car speed to shift the gear up or down. The algorithm didn't seem simply arbitrary or simple and before I could drive, I did not have a way to experiment in computer games to figure out this logic.

Most driving games don't actually implement a true automatic. Rather, cars are all equipped with a manual transmission and the 'automatic' mode is actually a driver assist. The logic behind is simple, when the engine is near redline, it shifts up. When slowing down, downshifts occur at the maximum possible engine speed without exceeding the redline on the previous gear. However, this logic does not resemble at all what happens in a true automatic in real life.

After getting my license, I was excited to finally experience this shifting logic for myself. I was very surprised at how intelligently designed the system was, and how it adapted to driving conditions.

How Automatics Behave

The main concept of an automatic revolves around this: the harder you press the throttle, the later it shifts up. When driving slowly in a city for example, you need little power from the engine to accelerate. Therefore, it does not make sense to use the engine's entire RPM range in the first few gears to get up to speed, as running an engine faster is less fuel efficient. Rather, shifting early in the RPM range will maximize efficiency.

Automatic cars attempt to run at the highest gear to allow the engine to run in the most efficient range. However, higher gears provide poor acceleration when in a low RPM.

If the throttle is fully depressed, the car will shift in a way to make use of the entire RPM range of the engine up to the redline, this is the maximize performance and prevent lugging that would occur in a higher gear. 

The other component is kickdown when depressing the throttle. At first, the car is at cruising certain speed and a higher gear will be engaged for fuel economy. However, if the throttle is depressed harder, the transmission will command a down shift, or several, to hit an RPM range suited for better performance.

Current automatics have become very advanced and take a multitude of factors into consideration to decide when to shift. Grade shift logic for example will adjust gear selection based on hill grade to help with acceleration on a steep incline or provide engine braking when going downhill.

Each manufacturer implements their own unique algorithms and systems though the above concepts generally remain the same.

Automatics in Games

I had great difficulty finding games that simulated automatics correctly. In fact, out of the hundreds of driving games I've tried, only three simulated them in road cars. 

Admittedly, this is not an important aspect in racing, as most track cars use manual transmissions for better control. However, many of these games include road cars available to the general public and I found it odd that this kind of detail was missing.

I will analyse each game and demonstrate how it handles and simulates this kind of transmission. We'll be comparing them to the most common type of automatic transmission, the torque converter-based one. 

The Test

A test was devised that will demonstrate each game's capability at simulating the behaviour of an automatic transmission. It only aims to show the basic behaviours of the shifting schedule of an automatic. 

- First, the car will be driven slowly at city driving speeds. We expect the transmission to perform early shifts for fuel economy. 
- Once reaching 70 km/h, the throttle will be fully depressed. This should initiate a kickdown, where the transmission selects the lowest possible gear for maximum acceleration.
- While accelerating, the car should only upshift at maximum RPM to maximize acceleration
- At 120km/h, the throttle will be fully released. At this point, the car will upshift to the highest possible gear for fuel economy. This is the cruising stage.

Other behaviours will be noted which are typical of torque converter-based automatic transmissions:

  • Slipping on acceleration due to torque converter and resulting torque multiplication.
  • Creeping forward when in drive with brake released.
  • Smooth and sluggish shifting between gears with no jerking movements between shifts.

Each test will be shown in a short video demonstrating the capabilities of each games.

Live for Speed

Live for Speed is racing simulation with physics accuracy that can be most admired by a perfectionist. Car handling feels so right and the feel for reaching the car's limit of grip is spectacular. Despite showing it's age now, few racing simulations come close to having the accurate driving feel of Live for Speed.

As a sim for purist racing fans, Live for Speed does not simulate automatic transmissions at all. Rather, the 'automatic' mode is a driving aid, that shifts for you in a way ideal for maximum performance rather than fuel efficiency. I'm including this game to show what a failing test would look like. 

Let's cruise along with the Hatchback XF GTI on the track and drive it through our test:

Notice how shifting only occurs upon reaching the redline. While slowing down, downshifts happen as soon as possible to make use of engine braking. This kind of shifting is great for racing as it is very predictable but not for saving fuel in a city car.

An LFS forum user by the pseudonym 'tigerboyz' created a mod that simulates the shifting schedule of an automatic though it still feels like a driving aid. The slushy feeling of a torque converter or forward creeping are not simulated. Instead, this mod simply uses the manual transmission and shifts at points where an automatic would.

Enthusia

Enthusia is likely to be the first game of it's kind to simulate automatic transmissions correctly. I noted this while skimming a Wikipedia article about the game describing this kind of accurate modeling.

I eventually got my hands on the game through emulation. The game was a commercial failure, likely in part due to it's difficulty stemming from it's accurate driving dynamics and competition from the much more popular counterpart, Gran Turismo 4. Therefore, securing a physical copy is prohibitively expensive.

Let's take a look at how Enthusia portrays an automatic transmission.

As seen in the video, Enthusia pretty much nails automatic transmission shifting behaviour. However, the shifts do appear like they come for a torque converter, albeit an aggressive one. 

The shifts don't happen that early and gears are held for a bit too long. It is almost as if the game is simulates a 'Sport' or 'Second Range' mode which is seen in some cars for sportier driving. This kind of mode shifts at higher RPMs for more responsive throttle feel and allows more use of engine braking for peppier driving.

Interestingly, when slowing down, the transmission down shifts in a way that favours performance driving. In other words, as the car slows down, downshifts occur to make use of engine braking to help the car slow down. In the average car, this does not happen, rather, shifting down only happens when the car has slowed down considerably or during kickdown.

The game further emphases the stock transmission normally equipped with the car when selecting 'manual' or 'automatic' before a race. In cars with an automatic transmission, the choices are 'automatic' or 'semi-automatic' emphasizing that the car does not actually include a true manual with clutch and gear selector. For manual cars, 'gear assist' and 'manual' are displayed which indicates that the car won't be equipped with an automatic, rather an AI will assist the driver in shifting.

The selections for a Toyota Corolla, a car normally equipped with a torque converter-based automatic.

The selections for a Toyota Corolla, a car normally equipped with a torque converter-based automatic.

The selections for a Honda Accord Type-R, a car normally equipped with a clutch-based manual.  

The selections for a Honda Accord Type-R, a car normally equipped with a clutch-based manual.
 

The game also simulate CVTs which shows just show niche-focused this game really is.

One last thing I'd like to mention about this game is how quirky it is. The presentation is really artistic for a racing game with a very cinematic intro and lively menu music. The car selection is really something to talk about with not only the stereotypical selection of road and racing cars, but also minivans, hybrids and SUVs. Enthusia really lets even the most niche of enthusiasts drive their favourites. Here's a few of them:

City Car Driving

Russian-based Forward Development seemed to have a very different take on a driving game: one that actually portrays everyday driving. Instead of testing the limits of your cars in a tight racing track, you'll be stuck in traffic in rain, merging on highways while checking your blind spot and of course, wearing your seat belt.

While the driving dynamics are not the most accurate or engaging, they're suitable for the leisurely pace known to most city drivers. Oversteer might not feel convincing, but the traffic patterns seem to mimic reality with impatient drivers, those who change lanes without signals and so on.

Let's get behind the wheel of an average car equipped with an automatic. We got rid of the traffic so we could speed at our leisure.

Clearly, the simulation of the automatic transmission is very impressive. The slushy shifts, the shifting schedule and the lurch of torque multiplication are all there. Everything feels right. There's even the characteristic automatic transmission creep when releasing the brake when in drive.

This game doesn't have much quirks, it's just a good education tool to get new drivers acquainted with the feel of driving, or perhaps those who enjoy driving so much they want to do it at home.

BeamNG.drive

Renowned for it's incredibly realistic crash physics, BeamNG.drive shows how well driving dynamics can be simulated even without any pre-canned behaviours. In BeamNG.drive, cars behave based on the sum of their parts such as drivetrain, tires, aerodynamics and so on. While not the most accurate driving simulator, the mechanics are incredibly convincing.

BeamNG.drive vehicle roaster focuses on daily road cars rather than performance vehicles. As a result, stock vehicles can be equipped with torque converter automatics, CVTs and of course manual transmissions.

Out of all the games tested so far, BeamNG.drive is a clear winner in terms of simulating torque converter-based automatics. From the sluggish acceleration due to torque multiplication to the smooth shifting and accurate shifting schedule, the game provides the most realistic feeling automatic driving experience.

Let's get straight to the test with this game.

What's obvious is how much it feels like you're driving a normal car in the city. The initial lunge from the torque converter to the sluggish shifts. Even the delayed kickdown is portrayed after flooring the accelerator. It's very impressive. Of course, it creeps forward as soon as you put it into drive.

The amount of options simulating different kind of transmissions is staggering:
- High stall torque converters
- CVTs
- Transbrakes
- Dual-Clutch Automatic Transmissions
- Sport Mode Selection
- Manual Mode in an Automatic Transmission

Each one of the features above is simulated in a very convincing way. If you're interested in tinkering with car behaviour, I highly recommend this game.

Final Thoughts

This kind of endavour was more of satisfying an obsession than anything else. This is probably one of the most niche things I've ever written about. Most racing fans simply floor the accelerator when the count down reaches zero, however I like to test the limits of games and see how much attention to detail they really put in. Even when it's not intended, games tend to become a sandbox for me.

Attention to detail is something I really appreciate. Few games go the extra mile to mimic intricate details of reality and it's really admirable. Now, for noticing that a game simulates automatic transmission logic, that is a personal problem of obsessiveness that I may have! 

It's hard for me to believe that the games above are the only ones in existence that simulate such concept of the automotive world. If you know any other games that simulate this behaviour, let me know by submitting a comment.
 

Dreaming of an imperfect world...

Everyday we plan for the ideal in our life. A strict plan, a well organized schedule, a long to-do list and a clear vision. That's how we envisioned in the morning after breakfast. However, within hours, the plan crumbles and there goes the day you dreamed up. Despite most of the day being routine, interruptions, emergencies and lack of motivation all come in the way.

It's amazing how our flawed minds can conjure up seemingly perfect realities. We strive for perfection yet we never attain it. The ambitions in our heads will never become reality, only a flawed version of it. Very often how we pictured ourselves ten years ago is so different from now that it appears like our early selves constructed outlooks that seem like a farce today.

Just like everyone, I grew up in this future fantasy: great income, perfect health, big family and expensive cars. Whatever I wanted was just waiting for me in the future, however, as I grew up, I ended in the same difficulties that my older peers suffered though. I'm average just like them, why would my life be any different?

Today, my salary is slightly above average with debts to pay, with no plans of having children. My apartment is a modest 500 square feet and I've settled down with a great lady but she suffers from the same issues as me, her life is also imperfect. My car is extremely average, the most popular model in the country. I've been endowed with a complicated set of mental illnesses and I'm dealing with other health issues.

I still got writings from my childhood, my dreams were big. I wanted to start big company like Microsoft. However, today I've settled for the corporate route with a stable salary and it'll probably be that way until I retire. I'm not mad about it, I've just come to peace with reality.

The worst delusion we have is about happiness. Movies and TV shows often portray people with eternal happiness, solving their woes with such ease and strength. However, the truth is that as humans we cannot be perpetually happy. If we found endless bliss as a toddler, we would never progress.

I am learning to become mindful of how imperfect the world is. I've thrown out my convoluted to-do list for a bunch of notes with simple ideas in them. No more fixed timelines, no more short, medium and long term goals, all that is gone. Instead, I let my ideas flow through my life and It's obstacles. My ideas are dynamic and ever-changing. Just like a lake doesn't fear a rock thrown at it and rather just reacts with smooth waves, my ideas ride out the kinks in my life. I don't make much effort in perfecting these notes; they're scatted and all over the place, just like the rest of my life is.

I don't know what makes me happy yet. I'm still experimenting and discovering new experiences. Even though I may find something distasteful, at least I've tried something new.

My dreams have the same realities as real life, I'm stressed, burned out and anxious. There's no point of dreaming of something that can't be true. My dreams are mine, and must incorporate my reality for them to be possible. In other words, I dream of an imperfect world, not a phantasy.

I sometimes wonder if beliefs about the afterlife are a mind hack to imagine a world where the boundaries of reality don't exist. A place where no pain or suffering exist, where all your wishes come true. Our imagination goes so far that it exceeds the boundaries of our universe to create perfect worlds. Unfortunately, all those traditions are nothing but a conjecture of the human mind, and only exist in the thoughts of men.

I've become mindful that I'll never live a perfect life. I'm content with my circumstances because I have no choice. My consolation is that I share the suffering, trials, tribulations, war and pain with humanity amidst hope that we'll get a glimpse of happy moments and great memories.

I want to be a cat!

This is satirical…

My home is graced by the presence of two cats. When I'm bored, I sometimes observe them and reflect on their behaviours. I sometimes wonder what it's like to be them. I can't help but feel jealousy…

Cats are so lucky, they get to sleep up to 16 hours a day. I would love to get 16 hours, but I have work and do other nonsense, I'm lucky if I get 8. Plus, some nonsense science malarkey says that too much sleep is bad for you. They're wrong, my cats sleep 16 hours and have never ever complained about a health problem. Checkmate scientists! #flawless_logic They also fall asleep so quickly while it takes me eons to empty my mind and relax my body so my slumber can begin. Also, I don't understand how they can sleep anywhere. On the floor, on the kitchen counter, on the couch, on my bed taking MY spot (how dare you Minnie?)… I wish I found the floor comfortable, wouldn't need an expensive bed and mattress.

Cats don't have to work or go to school or anything stressful like that. They can do whatever pleases them at any time. They don't have to worry about income as I pay all their expenses. They have no responsibility.

Cats have food ready for them on command. My cats are my alarm clock in the morning meowing incessantly until I get up from bed and feed them. And don't get me started about their food. That stuff must taste amazing to them and it's still very nutritious. It doesn't need lengthy preparation and has long shelf life. If I want the semblance of healthy food, either I or my significant other have to spend a good chunk of the day cooking.

Cats have no social obligations either. When someone calls me I better reply otherwise I'm being impolite. Even when I feel like crap and don't want to deal with people, I still have to. Not with my cats. Sometimes they respond when I call their name, and other times they don’t. Only when they feel like it.

Cats get treated in the best of ways. When we take them to the vet they get greeted by the nicest practitioners. Their offices are nicer than our clinics and they have no wait times and appointments at convenient times. The vets tell them nicest words and handle them with the upmost care. I can't say that about some family doctors I met who treat me like a number and talk to me condescendingly. At home, the endearments don't stop. Every day, they receive compliments.

Cats have fun with the most mundane of things. I can play the most stimulating PC game and still find myself bored and sleepy. My cats play with straws, hair ties, rubber balls, some metal string with some cardboard on it and even a stupid laser pointer. I wish that was fun for me, I wouldn't need expensive equipment to entertain myself. Of course, they only play when they feel like it.

Cats don't get punished. Unlike dogs, cats don't learn via punishment. So when my cat misuses the litter box or throws up on the floor for the millionth time, I can't do anything about it. I have to clean the mess up anyways because they don't have to and never will. I can't spray them with water because they don't learn from it. I can't tell them harsh words because it doesn't mean anything to them.

The best part, cats don't care. They only do things when they feel like it and no can force them or stop them. They don't care about their self-image. They don't care about taxes. They don't care about being for late for work. They don't care about the noisy neighbours. They don't care about anything.

When I grow up, I want to be a cat. I'm so jealous...

Why I hate the weekends…

It's Monday, the dreadful countdown has started. You're already thinking about the end of the week, and it barely started. As the days go by, you are fixated on Friday 5pm. By Friday afternoon, your mind is so overfilled with the prospect of the two-day break that you can barely get anything done anymore. Some of your co-workers are not even at their desks anymore; they left early. When it's your turn to leave, you breathe a sigh of relief. It's the moment you've been waiting for. The start of the weekend.

However, what's so odd is that it's already Monday again. The weekend was a blur. Everything that didn't fit the workday was squeezed into the weekend. Groceries, laundry, chores, medical appointments and so on. By the time you've finished all that it's Sunday evening. Just like work, the weekend made you tired. You want to idle, but tomorrow's Monday and you've already begun thinking about work. You don't have time to do anything anymore because you need to sleep early to wake up for work on time.

Our lives are high maintenance. We need to maintain our relationships with our spouses, friends and family. We need to take care of ourselves with exercise, hygiene and so on. Our houses need to be kept clean and our fridge full of food. And to be able to do all that, we need work to make a wage so we can pay for what keeps us alive.

With only two-day weekends, we find ourselves squeezing all that maintenance in such a short span of time. We meet with our friends on Saturday. We do the groceries on Sunday. We do the Laundry on Saturday morning. Little time is left to do what we enjoy. For some, it's simply watching TV shows. For others, it's learning a new art.

The worst part is there is hardly any time for resting the mind and body. Our jobs can be mentally and physically demanding. Our relationships and our chores demand it too. It feels like being on an endless treadmill and there is no way to stop it. Many experience burnout or depression due to excessive stress and little break.

It's clear that the two days we yearn for so much every week are not enough.

Almost every month, there is a statuary holiday which extends the weekend by a single day. Oddly enough, after those weekends end, I find myself more at peace and rested. The first day of work after feels smoother and I'm not as stressed out.

Personally, I have tried to extend the weekend as much as possible. I do the laundry on weekdays, I shop for groceries on a weekday late at night. I try to meet my friends on weekdays. I do all that hoping that my weekend would be empty of such obligations and I would have it all to myself.

I want to spend time partaking in my hobbies on the weekend. However, I often find myself lifeless and staring blankly out the window. My mind is tired, my body is fatigued. By the time I'm fully rested it's Sunday night. At that point, it's time to head to bed and start the cycle of work again.

I feel like my whole life is centered around work. Even though I work a (what is considered) reasonable 40-hour work-week, I feel like too much of time is taken away from me. Not only is it actually being in the office but commuting too. My morning are devoted to getting ready for work: dressing up, packing up a lunch and so on. When I get back in the evening, I have to empty my mind of work and that can take a while. Only a few hours a day are left for me.

I'm a backend software developer and writing code requires plenty of creativity and thought. There's only so much I can muster before my mind quits. On top of that, I'm mentally ill and thoroughly medicated meaning I need even more rest. However, I hear co-workers who are healthier and more productive than complain about the same things I do. No matter how much fun I have at work, I still get tired. Everyone does and everyone needs rest after that. Even caffeine, energy drinks and modafinil can't fix that.

When I first started writing this, I thought that the problem was the weekends were too short. However, it is that weeks that are composed of 168 hours are not enough to account for 40 hours of dedicated work. Our body and minds cannot optimally function without adequate rest and breaks. We're not made for it. Our lives are demanding and work is demanding too much of our lives.

Even though modern society has allowed us to come really far when it comes work ethic, I don't think we are far enough yet. Our basic needs, our own desires, our dreams, our physiologies and psychologies need to be taken into account when we rethink what an ethical and humane work-week looks like.

We are no longer factory workers where our output is proportional to the company's sales figures. Machines and automation are taking over the remedial roles that we used to do. Today, we are artists and developers and managers and service providers. What we do might not make any money at all. Still, what we do demands of us quite a bit and to provide more, we need to do less.

I'm convinced that we need more time devoted to ourselves and those we care about. I want to spend more time caring for myself but I can't because I'm stuck in the system. To live, I need to pay my bills. I'm not lucky so I have to spend most of day working for it.

Someone has submitted this blog post to Hacker News. I encourage to continue the discussion there.