The cat in the tree.

The weirdest thing happened to me today.

I was at the end of a biking session through the outskirts of the village where I’m residing. Near the end of the circuit I spotted a rosehip bush.

I’m a big fan of rosehip fruits (I think?). They are tasty and have lots of vitamin C. Thing is – they are usually tough and hard to ingest. When it’s cold outside and then hot again they “thaw” and become softer.

So I’m particularly on the lookout for soft rosehip fruits.

This particular bush was known to me and I thought – let’s stop and see if the fruits are soft.

I dismounted my bike and proceeded to inspect the fruits. True enough – they were soft – and BIG. Tasty! Trouble was, I didn’t have any bag of sorts to pick some up.

While thinking that next time I have to bring a bag I saw a orange patch of fur in the tree just next to the bush. WTF?

At first I thought it was a dead cat. Someone found it funny to put this dead cat in the tree. The height was about 2 meters, the tree was rather fluffy and with small branches.

As I rounded the tree to see what the hell was this I saw the “dead” cat slightly moving. Damn.

I looked closely and the cat was actually alive, just stuck in this weird contorted position in the bushy tree. It was possible for it to come down but I guess some kind of freeze occurred in its feline brain.

It did look scared and it meowed sadly. I petted it tentatively to accommodate her and not have her scared for the next operation. I picked her up with some difficulty (bushy tree and thorns nearby) and put her down. She bolted towards the village instantly.

The weird thing was the following: I was listening to Fast and Slow thinking ebook. I just finished listening to a part about the invisible gorilla experiment (if your attention is focused on something you might miss weird/strange things).

More than that – stopping by that rosehip tree was a rather random decision. I inclined toward not stopping but barely convinced myself to stop.

Thirdly – the cat was orange on an brown-orange tree. Very hard to spot if you weren’t looking. Not making any sounds either (until I looked at it and talked to it).

If I somehow missed seeing it and continued on my journey the cat would still be there. If someone would tell me later that there was a cat in that tree I would’ve found it impossible. I didn’t see it so it didn’t exist.

It was like some hidden power made be decide to stop and look for rosehip fruits and look up by chance. (it’s not a very favored fruit in my country and I doubt many people would be interested in that particular location). Of course, it’s also pure chance but when weird stuff happens to you, you tend to attribute it to some “deus ex machina”.

The reason I mentioned it is that it was a weird and notable experience. Like the universe decide it to show me the practical side of the “invisible gorilla” immediately after I’ve learned about it.

That’s one interpretation of course. Another is that the importance and meaning of events is not intrinsic. That is – they have no absolute truth value to them. They are what we interpret them to be.

The world is thus not the world, just our interpretation of it. Choose to interpret it differently (through experience, chance or learning) and the world changes (from our perspective).

Food for philosophical munching! 🙂

On a side note it also dawned to me how much my thought patterns influence my mental and physical state. If my thoughts say “you’re depressed, you’re in a shitty situation, the future is bleak” then I’m going to act accordingly.

I tried inserting (consciously and with some power) some positive thoughts (“you’re happy, everything is great, the future is awesome”) and I’ve noted a spike in the mental well-being.

That’s obvious in theory but not often experienced in practice. To know about the fire it’s not to feel the fire. (Lord of Light by Zelazny has a beautiful thought provoking section on this topic, about words and their meaning).

I think I’m going to consciously inject positive thoughts, to form some sort of habit and reflex AND to create some positive mental inertia. I’ve tried this before (CBT stuff) but now I feel I understand and believe in it more.

Convenient Utilities Linux. Show broken links, users file count&size, big file list, etc

You know what annoys me sometimes? That I can’t see quickly a list of existing users on linux. Don’t get me wrong. I love me a bit of finger gymnastics and awk every once in a while. But to have to type all those chars EVERY time…that’s annoying.

cat /etc/passwd | awk -F: '{print $1}'
cut -d: -f1 /etc/passwd

Each one of the lines above will do the trick. It’s not much typing but why not a more convenient command?

That’s why I started writing a list of convenient linux utilities. For the convenience lovers.

Some of the utilities are rather simple in execution but convenient to use. Other are a bit more complex – filenames with spaces, I’m looking at you! From now on I swear, NEVER I’ll put spaces in my filenames again. 😛

In principle one could even use one liners AND deal with filenames that have spaces. BUT there’s a small nasty side effect – if there are no results for find (or the command that sends output to xargs) the command executed by xargs will usually show help output. Couldn’t figure out how to skip it in the one liner easily. In a script it’s doable.

Oh, and some scripts are a bit slow. That’s a side effect of calling xargs -n1 mycommand with thousands of input lines. Sometimes it can’t be helped if you desire certain results.

For example to show the biggest files fast you use find with -printf option. But It displays the size in bytes, not human readable. Right now I used this implementation. Parsing the left side raw bytes into human readable output it’s on the to do list.

On the other hand using du -h and xargs will display nicely formatted size – at the expense of speed.

Right now there’s just 7 utilities but I’ll keep adding to the list. I’m already using them on a daily basis – and not just because I wrote them.

Here’s what they do:

showbf

  • show big files. First 10 by default, current user, current dir.
  • Use it with different user, different dir.
  • Works well with files that have spaces or other “funky” chars.

showus

  • Show a user disk usage and file count in a dir. Calculates by adding file sizes owned by user.

showbl

  • show broken links. Use custom dir or custom user.

showg

  • Show groups, every group on one line.
  • It’s a simple one liner (in the script) but quite convenient to use in this form.

showp

  • Show paths added to $PATH, each on one line

showu

  • Show users, each on a separate line.

wtw

  • What’s the word? A simple one liner (in script) to show possible words for regex.

Get them while they’re hot HERE (github)

BIG list of text processing recipes on linux. Featuring vim, tr, cat, tac, sort, shuf, seq, pr, paste, fmt, cut, nl, split, csplit, sed, awk, grep.

Here’s some more cool text processing techniques that I wrote. It starts with a simple regex tutorial. Then it continues to explain a wide variety of general text processing tools and their purprose. Finally I’ve added all the previous guides (from grep, sed, awk, vim) into one place.

Enjoy and let me know what you think! 🙂

I recommend the following books if you want to learn more about text processing:

Definitive Guide to sed – by Daniel Goldman


Sed & Awk – Dale Dougherty & Arnold Robbins


Effective awk programming – by Arnold Robbins

Quick grep reference and tutorial.

Here’s a short but quite comprehensive grep reference and tutorial.

Snippet:

Search for match (the string ‘hello’) in file (called generically ‘file’). Display every line that matches pattern (in this case every line containing ‘hello’)
grep hello file

Search for match in file and use quotes on the pattern. Not required unless you have special chars that are expanded by the shell. (in this case not required)
grep ‘hello’ file

Search for a match in multiple files
grep hello file1 file2

Search for match in all files in current dir (will show a warning if dirs are present too)
grep hello *

Search for a match in all files in curent dir. Don’t show errors if dirs are present. (grep treats dirs just as ordinary files and tries to “read” them). ‘-s’ is for silent. Will also skip errors regarding nonexistent files.
grep -s hello *

Search for a match in all files than end with ‘.py’
grep hello *.py

simple-awk. A practical and simple awk guide.

I wrote a simple but practical guide to awk. There are some surprisingly powerful and mind blowing techniques towards the end.

Here’s a snippet from the end of the guide (the beginning starts much simpler):

#!/usr/bin/awk -f

# Declare custom func outside
function throw_ring(who){
	if (who=="gollum"){
		return 0
	}
	else if (who=="frodo"){
		return 1
	}
}

# On all records matching /ring/
/ring/{
# Find gollum or frodo
if (match($0,"gollum")){
	was_thrown=throw_ring("gollum")
	#use ternary if/else. If was_thrown is true (or bigger than 0) return "THROWN". Else return "NOT THROWN"
	print "the  ring throw status is ", was_thrown?"THROWN":"NOT THROWN"
}

if (match($0,"frodo")){
	was_thrown=throw_ring("frodo")
	print "the  ring throw status is ", was_thrown?"THROWN":"NOT THROWN"
}

}

This is a rather lange script but simple when you break it into pieces.

Start by declaring a custom “throw_ring” function.

on records that match /ring/ exec the following operations:

check if that record (which contains /ring/) contains “gollum”. If yes get “thrown_status” value.

Use the ternary operator to return either “THROWN” or “NOT_THROWN”.

Do the same for “frodo”

The output will look like: the ring throw status is THROWN

This one is also one of my favourites – inverse of a regex match.

#!/usr/bin/awk -f
{
	reg="[Bb]ilbo"
	if (match($0,reg)){
		bef=substr($0,1,RSTART-1)
		aft=substr($0,RSTART+RLENGTH)
		pat=substr($0,RSTART,RLENGTH)
		print bef,"|",pat,"|",aft
	}
	else print $0
}

We start by checking for a match. If a match exists commands inside if will run (since it will return a value greater than 0).

‘bef’ is the substring before the match. We cut it from position beginning (string indexing starts at 1) up to the start of the match (to RSTART).

‘aft’ is the substring after the match. We cut it from the end of the match up to the end. Note how we use “RSTART+RLENGTH” to calculate the first char AFTER the end of the match. This it’s a bit confusing with indexing starting from 1. If you’re used to 0 indexing you would want to add a 1 (“RSTART+RLENGTH+1”) but it’s not needed here because indexing starts at 1.

Note the comments starting with #

Check out the rest of this cool awk guide here.

6 bad worries and the needed attitude toward them.

This is an excerpt from “Think and Grow Rich” by Napoleon Hill. It summarizes an attitude I think it’s very healthy (towards common worries).

The six basic fears become
translated into a state of worry, through indecision.

Relieve
yourself, forever of the fear of death, by reaching a decision to
accept death as an inescapable event.

Whip the fear of poverty
by reaching a decision to get along with whatever wealth you
can accumulate WITHOUT WORRY.

Put your foot upon the
neck of the fear of criticism by reaching a decision NOT TO
WORRY about what other people think, do, or say.

Eliminate
the fear of old age by reaching a decision to accept it, not as
handicap, but as a great blessing which carries with it
wisdom, self-control, and understanding not known to youth.

Acquit yourself of the fear of ill health by the decision to
forget symptoms.

Master the fear of loss of love by reaching a
decision to get along without love, if that is necessary.

Kill the habit of worry, in all its forms, by reaching a
general, blanket decision that nothing which life has to offer
is worth the price of worry.

I think so highly of this advice that I’ve put it over my desktop wallpaper. I will follow this advice and attitude as best as I can, for I have the intuition it is the right one.

The reason I’m sharing this is because you might draw some inspiration from it. If you can read Napoleon’s book – do it. Great, great stuff.

Some people say that the chapters on the infinite intelligence and ether vibrations are bullshit. I disagree.

We don’t know everything. Not by far. Some form of universal infinite energy influenced by thought and desire doesn’t seem so far fetched to me.

We know that by observing a certain thing we influence the properties of that thing (from quantum theory).

Another thing that stuck to my mind was the senses analogy. Imagine if you lacked the visual sense. All your life you would not be aware of vision as an aspect of the world – even if it existed.

Since we are a rather mundane biological entity it follows we don’t posses a myriad of senses. AKA – we’re not some super being capable of experiencing the world in a vast way.

A human is to such an ideal being as an ant is to a human. An ant experiences the world through an array of senses much limited when compared to ours.
We too are limited in our sensory experience when compared to this fantastic superior being.

An ant that hears Bach will miss it’s meaning – probably interpret it just as some random wacky sounds.

(Speaking of ants hearing Bach a beautiful SF book is “A roadside picnic”. After an event known as the Visitation there’s a an area full of wonderful and dangerous alien tech/energies. People who visit it risk horrible deaths or awesome rewards if they get they’re hands on something valuable.
The name of the book comes from the following theory: this visitation event might be similar to a roadside picnic made by humans. We might leave behind things such as plastic wrappers, bottles, cigarette buts, a lighter, a fire, etc. An ant visiting the leftovers of this picnic will have the same experience as the people visiting a Visitation Zone).

Who’s to say which divine sensory experience bypasses us completely because we’re unable to experience it? Who knows all the secrets an component parts of universe and life?

Basically we know jacksh*t even with all the scientific progress of our time (if you’ll excuse my french).

Anyway, I diverted heavily from the original subject!

No matter. Following the advice from above I am not worried about what other people think, do or say. Or at least I am trying.

(On a side note fear of criticism has its roots in our social conditioning. It’s part of our genes. It has to do with group acceptance which meant survival in the stone age and before.
A certain compromise must be reached between “I don’t give a f*ck and I walk naked in the streets painted blue and screaming Evrika” and “I base all my life decisions on how they make me appear to others.” Preferably geared towards the former. :D)

Wizardly Tips Vim (full version on Github)

As promised here are the much wanted Vim tips. This is just a SNIPPET.

Full tutorial freely available on github (which will be updated regularly, this post not so much)

Wizardly Tips Vim

A fast way to benefit from vim’s power. Ideally you should read a good book and the :h section. But if you’re in a hurry this should serve you well.
This is a list of somewhat unknown but highly useful Vim tips and tricks. I try and keeep the list succint by not showing well known or less useful commands.

HOW TO READ SHORTCUTS:

<Esc> – Escape. Usually you should press the key, not type it. When you see ii<Esc> you type ii and then Escape, not ‘ii` literally.

<C-g> – means Ctrl+G

g<C-g> – means press g then press Ctrl+g

<S-g> – means press SHift+g

<C-Z> – means Ctrl+Shift+Z (Shift is not shown but implied since we have an uppercase Z)

<zZ> – z followed by Shift+Z

<C-m><CR> – type Ctrl+M followed by Enter. <CR> is Carriage Return (another word for Enter key)

Find files and send them to vim.

find ~ -size +10M | vim -
  • find files and open the results in vim. While in vim you can press gf to open a file (from the results provided by find) in vim.
  • HINT: if your file has spaces vim will complain that the file is not in the path. This happens because it truncates the file when a space appears, thus trying to reach the file at an erroneous path. So instead use <S-v> to select the hole line and then press gf
  • HINT2 – you can use any other command that outputs to stdout and send it to vim.
  • HINT3 – you can open the file under cursor in a new window with <C-w>

Encrypt

  • You decide to write your secret journal using vim. Trouble is – anyone can read your unencrypted text files. Or can they? By using vim -x mysecretfile.txt you use encryption on file. You’ll be asked for a key (password) to encrypt/decrypt your file. Warning – if you forget your key bye bye file.
  • HINT – you can also encrypt a file after you open it by typing :X

  • I’m still amazed by how many vim users totally ignore the power of register playback. That is – you record your actions into a register and play those actions back. It’s a bit weird to wrap your head around it but once you do – you’ll be amazed.
    Here’s how it works
  • press qa to start recording your actions into register a
  • Perform some actions that you want repeated. Here’s a very useful example for coders – custom line by line editing. Let’s say that you need to go line by line, search for the word “foo” and place it in tags () and place those tags again on the same line at the end of the line.
  • This is a pretty complex scenario. Doing it by hand for thousands of lines it’s PITA (Pain In The A*s). What can you do? Write an awk script? A Python script? NOOOOO. You use vim register playback.
  • So you start your action by implementing a movement that will go to the next line or the next pattern. This is very important because it will make the playback “smart”, as it will go on the next line or pattern and do the work.
  • In your case you would start by typing /foo and pressing <CR> (Enter). This takes care of always finding the next pattern and working on it.
  • No do your desired operations. i<<Esc>ea> which will insert the bracket, then to normal mode, go te end of the word, append the closing bracket.
  • next you copy the whole bracketed foo by pressing ya> (yank all in between brackets) followed by $p (go to end of the line and paste)
  • Your work is done. You press q to stop recording.
  • time for PAYBACK …ah, I meant PLAYBACK.
  • you press @a to playback the contents of register a (into which you recorded your actions). You watch amazed how vim repeats “smartly” the operations you just performed previously.
  • Now you can press @@ to repeat the previous playback as many times as you want. Or you could press 10@@ to repeat the playback for 10 times. Or if you want this applied to your whole file type :% norm @a – which means – apply the macro to all lines.

Open files in own tab/win

  • Your girlfriend’s father comes to visit you. You want to impress him by opening a bunch of text files, each in it’s own window in vim (and show him that you’re very smart and tech savvy)
  • You write vim -o f1 f2 f3 f4 to open the specified files with windows split horizontally. use vim -O f1 f2 f3 to split them vertically. If you have lots of files and you dont want a hundred narrow windows use vim -o5 *.txt to open a max of 5 windows (horizontally stacked).
  • You could instead open them in tabs by using the same syntax vim -p f1 f2 or vim -p5 *.txt

Info

  • The <C-g> magic – it displays file name and position. g<C-g> will display number of words, num of lines and other useful stats.

Enter special chars

  • Enter digraphs (speciar chars). Use <C-k> in Insert mode and type the digraph code. For example you can enter the pound sign using ‘Pd’ (£). Type :h digraph-table for more info. To just view the codes type :dig

Quickly write buffer to disk

  • ZZ – write the buffer to disk if modified and exit. I bet you didn’t knew that – but if you did BRAVO, you know how to quit Vim!

Sort

  • :%!sort -u – sort all lines and remove duplicates. % refers to the range and it means all the lines. You could use 1,5 for example and it would only sort lines 1 to 5. The ! in this context means – execute an external shell command (in our case sort) with the range as stdin, when you’re done put back in place the stdout from that command.

Paste register

  • While in insert mode press <C-r> followed by a registry, such as a or b or @ or : or +. eg: <C-r>a. This will insert the contents of the registry at cursor.

Insert mode navig

  • While in insert mode press <C-h> to backspace a char, <C-w> to delete a word backwards, <C-u> to delete until the beginning of the line (all without leaving Insert mode)

Autocomplete

  • Did you knew you also have autocomplete by default? While in insert mode press <C-n> or <C-p> to cycle through possible autocompletions.

How to quit Vim

  • There are lots of famous memes about people not knowing how to quit Vim. Here’s a little secret – you can quit the current buffer(if you opened just a single file) without writting to disk by pressing ZQ.

Repeat Insert

  • Everyone knows that you can insert a character repeatedly using a command such as 20i-<Esc> – which will insert 20 ‘-‘. Or you could do something like 10aHello World Of Vim.<Esc>. This will do 10 appends of the phrase ‘Hello World Of Vim’

THIS IS JUST A SNIPPET. Full Tutorial on github, freely available and regularly updated.

All Hail VIM Supreme.

You know the meme about Vim? The one where people are stuck for an eternity in Vim because they don’t know how to quit?

How to Exit Vim Editor - Stack Overflow Blog
source

My question is: why would you ever want to quit Vim? 😀

I’ve heard some people say that you have to be autistic if you want to know well how Vim works. Why would you ever need anything else aside from Notepad++?

(this reminds of another famous prediction – probably not based in reality but still nice – involving 640k of RAM that ought to be enough).

Ha!

I’ll tell you why. Because 90% of time doing devops/dev you’ll be spending it inside a text editor or terminal (better yet – a text editor with a terminal win inside it – which Vim can do).

It’s all about text in development. Everything is text. Everything is text manipulation. Especially for a devops engineer, sysadmin or even software developer.

Scripts, config files, documentation, logs, infrastructure. Yeah, even the damn infrastructure is text (for the purposes of management and provisioning data centers and hardware).

Knowing this how can one claim that a text editor is not important? Or ever worse – that it’s alright to be ignorant of the power of your text editor of choice?

I’d say that the text editor is the most important piece of software that you will ever learn. Libraries come and go. A good text editor though? Will be with you for decades. You’ll use it daily and it’ll occupy a huge chunk of your work hours.

“But, but I can use an IDE these days. They have nice GUI’s, shiny graphics, mouse controls and a very easy learning curve.”

Try to use an IDE over ssh (in theory you could with ssh -x, in practice, not so much). See how easy that goes.

(VsCode has remote editing capabilities using a ssh plugin. Quite good and easy to setup. It might be what you need in certain situations when you have to use an IDE)

Far from me to say that IDE are useless. They have their established place in the hierarchy of software development and should be used accordingly (VsCode is very good).

If you have to use an IDE then use an IDE. But whatever you use – text editor or IDE – know it well! Know your tools my friend and your tools will reward you. Be ignorant of your tools and most often than not they’ll bite you in the a*s.

“But even if I have to ssh and work remotely I can still use nano. I don’t want to bother with vim. It’s too complex for me”

Complex it may be but the more powerful for it’s complexity. It’s true that it will take a brave and stout heart to learn vim well. But the rewards are commensurate. And don’t forget that you are actually making an investment when you learn Vim.

Let me put this way. Let’s say you decide to be a carpenter for the next 20 years. How well should you learn to use carpentry tools? Will the hours spent learning the tools be worth the next 2-4 decades of usage?

If you are serious about your profession you should be serious about your tools.

I’ll publish soon a compiled list of fairly unknown (but powerful) Vim tips and tricks for you, my reader. This way I hope to entice you to what is one the best text editors in the solar system.

Making professional games with Godot. The Good, The Bad. (no ugly).

What’s the difference between Godot 3.2 and an elephant?

The elephant can be bigger than 2.1 Gigabytes. Hahahahah. What a funny joke. You get it?

If you don’t, no worries. I kinda suck at telling jokes. But It doesn’t matter. Because you’re not here to get your amusement dose. You’ve come to hear me tell stories about Godot. And it’s beautiful story.

Let’s start with the beginning.

I was born on a cold september morn in Romania under the watchful eye of our president at the time, Nicolae Ceausescu. He heard my first screams as the doctor slapped my ass and said: “Oi!! Keep the noise down. Trying to run a bucolic communist country here!”

Nicolae Ceaușescu.jpg

Oh, wait! Not that beginning? My bad. Let me try one more time.

I was 10 years old when I first saw a NES. It was at a schoolmate’s home. His father brought him one from abroad. He was playing Mario. I felt like watching warm rainbows covered in chocolate. It felt like touching god’s little finger. It felt like magic. AND I wasn’t even playing.

Amazon.com: Super Mario Bros Power Up Card Game |Super Mario Brothers Video  Game Nintendo NES Artwork |Fast paced card games |Easy to learn and quick  to play |Fun game for all the

What now? Not that beginning? Ok, ok. Let me start again!

I first heard Godot mentioned as a cheap (free) alternative to Unity. Open source game engine??? Heehaw! Where do I sign up …. to keep using Unity or Phaser.js.

You have to understand.

At the time I was afraid of open source products given my previous experiences. Don’t get me wrong – open-source it’s a boon to humanity. But some of its end results are not as polished or user-friendly as their commercial alternatives.

Take Gimp for example. As a veteran Photoshop user and digital software lover I’ve said to myself:

“Let’s give it a shot. It’s probably going to be awesome!”

Woman, Towel, Surprised, Excited, Excitement, Portrait
That’s me without a beard.

And it was. Awesomely disappointing. It just didn’t felt right. The workflow, the UI, the tools …. I know, I know. If I’d been using Gimp for a decade and then tried Photoshop I would say the same thing about Photoshop. Or would I? Who knows. Thing is, from productivity and UX viewpoint open-source Gimp it’s a poor alternative to Photoshop IMO.

So my thinking was “Godot is to Unity what Gimp is to Photoshop”. A rough vagabond dog …

Dog, Mutt, Pet, Animal, Canine, Doggy, Cute, Dirty
How Godot seems if you’ve never tried it.

… vs a clean and elegant house dog

Dog, Black, Portrait, Animal, Blue, Rare, Big, Bitch
The big and powerful Unity.

So, was I right in my early untested assumptions?

Yes, I was. Godot was indeed a vagabond dog.

If by vagabond you mean:

  • lean and mean
  • lite yet powerful
  • lovable at first sight
Wolf, Predator, Grey, Animal, Mammal, Portrait
How Godot feels after you’ve used it.

During my gamedev years I’ve had the chance to try a variety of engines and frameworks:

  • Unity
  • SDL
  • Phaser.js
  • Unreal

I’ve made some games with Unity and some other games with Phaser.js. But I’ve never been able to create a game as fast before Godot.

Put simply – Godot will allow you to create games FAST. Creating games is hard enough without the game engine getting in your way.

Here are some “fastness” examples.

I’ve managed to add localization (just english) in just 2 days for Gamitate. 400 something entries, 10,000+ words, multiple locations (buttons, dynamic text, checkboxes, in code, etc).

It took me 1 month to create a fully working skeleton for Gamitate. Sure, I’m always tweaking and adding code. But to create a working game skeleton in just 1 month? For a mid-sized game that’s amazing. AND it was my first time ever working with Godot! So I was also learning the game engine in that first month.

(granted, I’ve took 2-3 weeks before hand to go through all the tuts and docs. But it was still my first project in Godot)

Just to give you an example – it took me 3 months to create Nature Basketball in Phaser.js.

I’m getting a gamedev-gasm every time I use Godot.

How can I best put this … working in Godot will give you pleasure. Much pleasure. It feels good, natural, elegant, clean. Not everywhere, mind you – there are still some rough edges in the UI/UX. But the core game-dev features? Beautifully crafted.

GDScript is one of the reasons Godot feels lightning fast during development. Gone are the days when you have to write miles-long terse syntax to do even the simplest things (yes C#, I’m looking at you).

Now don’t get me wrong – C# is great. It’s a powerful and beautiful language – and you can build incredibly complex software solutions with it.

But guess what! With power comes verbose syntax and complexity. You usually don’t need all that bloody power for games. You’re perfectly fine building even very complex games with pythonic languages.

I know, you think I’m talking rubbish. I used to think like that too – until I’ve actually built some games using GDScript. Not only it’s not an issue using a pythonic language – it beats the hell out of C# and C/C++ for game development (not game engine development, yeah?)

If Godot sucked I would’ve abandoned it after the first project.

I’ve started working on the second big project (it’s going to be something truly special) and guess what – still using Godot. I’ve tried getting back to Unity but it’s like going back to a horse-drawn carriage after a Ferrari.

And this is a feeling shared by many, many game developers. The vibrant community on r/godot it’s full of praise and beaming reviews. It’s just that good of a game engine.

It does have some rough edges.

There are some minor UX issues here and there but nothing game-breaking (haha).

People keep complaining about the poor documentation. Me, I’ve find the documentation extremely good (bonus – you have documentation embedded inside the engine – saves a sh*tload of time).

The tileset editor seem to be another source of complaints. I don’t work with tilesets so I can’t comment on that.

There was a nasty bug that didn’t allow for games to be bigger than 2.1gb. You had to put your assets separately in the build folder, load them at runtime, etc. Now it seems the bug was fixed (in a nightly release at least).

I hope I convinced you to give Godot a shot.

If you’re a game dev and you haven’t tried Godot you’re missing A LOT!