Monday, October 30, 2017

Firefox Killed Vimperator

According to this tweet Vimperator is dead. I haven't yet dug into the exact reason but my guess is that Firefox is probably going the way of Chrome in severely restricting what plug-ins are able to do in the browser.

I find this apparent trend of taking functionality away VERY frustrating. If I have to use a web browser every day - why can't I make it look as I please (In my case no GUI at all)? I understand trying to get rid of bloat etc. But it seems that everywhere I look we are having features and the ability to tweak our software taken away from us.

Microsoft's Visual Studio removed macros. What?! You HAD a fully functional and amazingly useful feature and you TOOK IT OUT?! I still cannot understand that one.

But back to you, web browsers. You don't let us define our own hotkeys you don't let us always hide the tab bar. Chrome, you don't even let us add notes to our bookmarks.

And on mobile OSs - the area of growth AND where people may eventually do full on computer-ing you don't allow us to put bookmarks in folders or nothin. We're expected to go onto a desktop to do that?

I find it frustrating that we once had tweaking freedom and now we're locked into a uniform UI. Yeah sure MySpace was ugly and annoying with all the tweaking and blingy gifs but at least people had the freedom to make their accounts their own - to express themselves.

Now we're all in assigned GUI uniforms. Obediently marching down the narrow row of approved features and functionality.

Pfff.

Friday, October 27, 2017

Brittle Code

Ugh. There is nothing worse than brittle code. A block of complex logic that completely falls apart when you modify it. As I've written about previously, I had to revisit the primary parser of my text-based game engine to accommodate non-player movement.

That is a brittle piece of code. One wrong move and the client piece completely breaks down. To address it at this time I've added comments walking through its logic. In time however I will need to toughen it up (Probably in iteration two - right before I begin the networked multi-player version of the engine. For now it works, and the NPCs are moving correctly, but I hate how touchy it is.

Thursday, October 26, 2017

Bunny Trail - Path Finding

This morning I woke up and checked the Twitter feeds and came across this tweet:


The effectiveness of seeing the algorithms side by side is great! So I decided to read/re-read about each one. I am still on this bunny trail. But I'm starting here:

As I read through that article, I drilled down into the topic of heuristic:

From there I ended up at the travelling salesman problem:

And Jon Bentley's information:

Wisdom - 20171026

A couple great quotes from the scifi guy himself - Isaac Asimov:

Working ten hour days allows you to fall behind twice as fast as you could working five hour days.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!', but 'That's funny...'

Wednesday, October 25, 2017

Cleanup vs Rewrite

The challenge of IntFiction is the order of output. In real time / graphical games game state changes are immediate. As objects move and change that is picked up by the engine or in the game loop right away. The player simply sees what has been changed.

In IF you have to tell the player what they see. And order matters. Consider:

Cellar
You see the cellar stairs ascending into the light of the kitchen above.
You are in the cellar.
You descend the cellar stairs.

Maybe each component is a separate, maybe even reusable object. We have to know where in the output stack to put it:

Cellar
You descend the cellar stairs.
You are in the cellar.
You see the cellar stairs ascending into the light of the kitchen above.

Better.
But what if each object has a logic check in the look event, and maybe one of the object's look or travel events causes a state change? If the state changes after an object has been described, we have a problem. If a logic block does its thing after a state change, it may not evaluate as expected. Ah the wonders of IF. And I know it's not just me, I ran into this stack problem trying to use TADS to make a txt FPS.

I decided to rewrite the core parser for my engine, to try to resolve some of the problems of message stack. It didn't take long before the whole project was a smouldering heap.

So I took a step back. I'm not going to rewrite it. I don't think it's THAT bad. So I went into every file and did some cleanup. Named methods to make them clearer and better for debugging. Made some method calls more specific so I can call actions and messages separately. Basically I'll slowly, carefully upgrade it - instead of gutting it and trying to put it back together.

Monday, October 23, 2017

Uh Oh. Trouble.

I have been working on the text based game engine for quite a while now. Coding it and building a large demo game for it. The demo game has been a great testing tool. It covers many situations that would come up in game authoring.

Everything was going great. I started a basic website for it in preparation for distributing it.

Then I decided to make a trap. A simple timed event. If the player is in the room long enough. DOOM. Things were bad from the start. After all this time, after all my testing I realized I was doing the timed event, time passage counting wrong. Ok no prob. Fixed.

But then when the player died, it kept describing the Room AFTER the die message. This was my first clue that something serious was going on.

There was a processing stack conflict. Events were being described first, which isn't incorrect, but dying was an event. So I stopped any further descriptions cuz the player was dead.

When I began work on NPC movement, since I hadn't tackled that yet, the real seriousness came to light. Player movement, NPC movement, object changes. Which should be done first? What if action needs to happen first and that action's description come last? None of this came up until the NPC movement piece was added.

So now I'm reworking all of the parsing logic. Breaking it up into pieces so I can choose which parsing is being done when. This is a complete reworking of the core functionality of the engine. It's gonna get real ugly before it gets better.

Good Reads - 20171023

Sunday, October 22, 2017

NPC Movement in IntFiction

Work has begun on the NPC movement logic in my IF game engine. In the first iteration NPC travel will be fairly simple. No complex player-stalking algorithms etc. Travel nodes are grouped into TravelSets. As long as the TrabelSets are set to active, the NPC will travel. A Travel node contains a location identifier. TravelSets have a movement mode. So far the possible modes are:
Follow:
Causes the NPC to follow the player. Whatever room the player enters, so does the NPC.
Random:
Causes the NPC to pick a random connector to travel through.
Path:
Causes the NPC to go to the first Travel node location, then the next etc. When it is in the last defined location it stays there.
Repeat:
Causes the NPC to go to the first Travel node location then the next. When it is in the last defined location it works backward to the first, then starts back down. It repeats its journey from top to bottom then bottom to top as ling as it is active.
In the future I will expand this to smarter modes that will move according to algorithms etc.

Saturday, October 21, 2017

Your Roots, Man! - FORTRAN

Pondering the origins of semi colons for the termination of statements got me pondering the roots of Java. So now the journey begins:

FORTRAN:
Example via AJMiller

PROGRAM MAIN
INTEGER N, X
EXTERNAL SUB1
COMMON /GLOBALS/ N
X = 0
PRINT *, 'Enter number of repeats'
READ (*,*) N
CALL SUB1(X,SUB1)
END
SUBROUTINE SUB1(X,DUMSUB)
INTEGER N, X
EXTERNAL DUMSUB
COMMON /GLOBALS/ N
IF(X .LT. N)THEN
  X = X + 1
  PRINT *, 'x = ', X
  CALL DUMSUB(X,DUMSUB)
END IF
END

FORTRAN is short for IBM Mathematical Formula Translating System. It is regarded as the world's first high level programming language. At a time when programs were sequences of numeric codes, the idea of FORTRAN was to allow the developer to write calculations that were similar to mathematical notation. This idea further pushed the idea of what would later be known as a compiler.
Prior to FORTRAN there were implementations of basic compiler like tools to allow for some mnemonics to be used to make coding easier. But they didn't go very far in alleviating the problems inherent in very early programming.
John Backus and a small team labored from 1954-1957 to come up with FORTRAN. Many doubted they would succeed. How could generated could possibly be as good as hand code? FORTRAN proved them wrong. The resulting code it produced ran as fast or very nearly as fast as hand coded programs.

And the world was changed.

Wisdom - 20171021

This wisdom edition highlights the wisdom of humor:

Programmers are tools for converting caffeine into code.
- Anonymous

Treat your password like your toothbrush. Don’t let anybody else use it, and get a new one every six months.
- Clifford Stoll

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies.
- Linus Torvalds

Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday's code.
- Christopher Thompson

VIM Tips - I Never Knew!

As I've mentioned before, I use VIM for everything. I often use the e command to select words, without selecting beyond the end of the word. The w command will grab the space after the word as well as the intended word itself.

The other day I inadvertently (As is so often the case) found the E command. This will select words like IP addresses but stop at the end of the word, excluding the space.

This is very handy! For work I deal with IPs every week and this new found command makes my life much easier.

Thursday, October 19, 2017

Cases for Cases

Today a coworker made his argument against using snake case for our projects:
some_function(...)

He wants us to use camel case in Javascript fashion:
someFunction(...)

His reasoning was snake case requires hitting the Shift key to get the underscores. In my personal projects I typically use a hybrid of pascal case and snake case:
Some_OtherFunction(...)

I find snake case much more readable, however in some cases combining that with pascal eliminates excessive underscores while logically grouping the method names etc.
 
The hole in his argument is that uppercase letters also require the use of the Shift key (It does require an extra character so he has a partially valid point). It seems to me if we want to avoid Shift we would need to use spinal case:
some-function(...)

I differ with the Javascript people in that I think readability is key. If you look at Javascript code, clearly they couldn't care less about readability. Have you ever tried reading through levels and levels of anonymous functions? Good times.
Anyway, I believe that readability is more important than avoiding the need to hit the shift key. Ultimately someone else is most likely going to have to deal with your code, help them out.

Wednesday, October 18, 2017

RM RF Shirts

I created a couple of 'official' rm -rf / tshirts. A command only and sudo version. If you want one, you can get em here via Zazzle:


Tuesday, October 17, 2017

Unassuming Debuggung

It's no secret debugging is where we developers spend most of our time. It is often a maddening task, but rewarding as we squash the errors in our code. It is while debugging that we find the craziest things.

I was building an arcade style top down space shooter a few years ago. It's up on freeware files if you want to goof off with it. It was called The Swarm. I was coding the enemy ships and wanted them to stalk the player so that they were more of a deadly nuisance. I made a mistake and didn't account for their travel speed. The resulting bug was amazing and far better than what I had envisioned. The enemy ships would sweep sideways toward the player but over shoot them, then sweep back only to overshoot them again. The zig zagging ships would slowly hone in on the player until they were right over them shuddering as they came in for the kill. Their movements make them very difficult to kill and are the defining feature of the game.


But I digress. Bugs are clever and disguise themselves. We must be careful not to cloud our minds with assumptions, even if we utterly certain. Case in point. The other night I encountered a bug in my game engine.
I had two sets of logic on a door.
1. Does the player have a key?
2. Is the door already unlocked.

The first time through, with a key, the player successfully unlocked the door. The second time, when only the 'already unlocked' logic should fail I was getting both the key fail message and the already unlocked message. Somehow both were failing. But when I checked, the player did still have the key, yet that check was failing.

Or was it?

After a few hours of digging and outputting debugging messages, I checked the game database. And amazingly found that the already unlocked check had both messages as its fail message.

When the parser was translating the definitions into a game database, it looped through the logic sets, but wasn't clearing out the fail message with each iteration. Once I added the clear step, everything worked great.

Monday, October 16, 2017

Back to Your Roots

The origins of things fascinates me. 'Where does this strange word come from?', 'Why is that grammer rule even a thing?', 'How was the first watch actually calibrated?'.
 
I like reading about times so long ago, the world truly was a different place. The old sailing journals from the age of the wooden tall ships. I like reading the book of Genesis, seeing all the different lineages, and the origins of different people and nations.

So it is little surprise that I am always interested in what the old timers in computer science / programming have to say. Their war stories, their advice, just getting little tiny nuggets of wisdom from them. Anything they feel like sharing. Computers as we know them are young enough that we have the sources still living among us. It's like being IN Genesis, being able to interview those who began the various nations and people we know today.
Thank you, computer gurus, for everything you share with us.

Sunday, October 15, 2017

Integrate Your Help!

I'm working through an introductory Python course. I need to learn it as well as refreshing myself in Javascript. So far it's pretty uneventful, everything is just different syntax, different style - it is just the basics so far after all.

One thing that does stand out so far, though, is the interactive help system. Genius. No need to go off and search around the webs etc. If you want to use a library, enter it into the console. Methods of that library, enter them. The interactive help will gladly show you how they are utilized.

This would be handy in Java. Every now and then I have to refresh my memory on methods etc. It would be nice to be able to simply enter the methods etc into the console and get information on them. It's no problem to just hit the webs but something about integrated help is really cool to me. This is how I am doing the help system in the game engine I'm currently building.

Saturday, October 14, 2017

Cthulhu Awakens

Old war stories are so cool to listen to. My reading of choice, along with sci fi and tech/development books, are old sailor journals. Not the ones written by captains or mates, but by the sailors before the mast. Those are the guys who are in the thick of it. And they've seen a good many things. They know why seemingly nonsensical tasks are - or at least at one time were - very important. They are the old salts. They have blisters and leathery skin and they are tough as nails. I enjoy reading about the task of sailing. It's the work of it that I like.
I just read a great article on totally useless Linux commands. It was interesting, and yeah the commands seemed ridiculous.

But then you get to the comments.

Oh man. The old salts came out to play! The comments were easily the best part of the article. Old hands with calloused fingers, and tough as nails shed light on the commands mentioned, and why they were useful at one time. I found the comments to be absolutely riveting. I am no Linux master, I'm probably barely a novice, but all of their examples made perfect sense, and the commands no longer seemed silly.

Check it out here:

Friday, October 13, 2017

Slacking on the Keyboard

Hotkeys are how I roll. There's a reason I'm down with VIM and it ain't the GUI, baby. If I can get away with not using any mouse work, perfect.

This is why the most amazing hotkey in the world is Slack's Ctrl+K. You hit that sweet little bit of dopeness and you can navigate to anything, different conversations, different teams, different channels, just by typing part of the name of where you wanna go.

Slack, you get ALL my kudos for this sizzling piece of awesome. Software developers out there take note!

No Lighter, No Problem

And now for something completely different...
I like watching videos on primitive camping tips and tricks. The idea of being able to accomplish tasks, that may well be life saving, with no tools etc is intriguing to me. There are a lot of simple yet amazing tricks out there.
I think my favorites are the fire making videos. Nearly every single one is useless though. Unless they are showing you how to make a fire with nothing but two sticks (spindle and block), or MAYBE the bow method etc, the technique is not very useful. - It requires you to pack something...
'... All you need to do is take some steel wool and rub it on the 9v battery terminals...'
Who carries steel wool around?
Just throw a few Bics in your bag/pocket.
'... Just take a lemon, and the paperclips, attached to bits of wire...'
Lol, what? Cool: yes. ANY kind of survivalish solution: absolutely negatory.
Just throw a few Bics in your bag/pocket.
'... Take this piece of rubber tubing, put it on you Zippo, and it no longer bleeds fuel, it'll stay full for a long time...'
I love Zippos, use them every day, but:
Just throw a few Bics in your bag/pocket!

Thursday, October 12, 2017

5 of the Best Freewares Evar

I have to have my little utilities. A stock, freshly built machine is nice but it doesn't take long for me to miss my usual set of tools. Listed below are five of my all-time favorites.
 
Oh, and... Every app below is cross platform.

VIM
I use VIM for EVERYTHING. Notes, development, everything. If I'm stuck on Dohs it's probably the first thing I install. On Nix, I make sure I've got the GTK variant so it interacts with the clipboard correctly. If you eschew VIM for NEOVIM etc, cool. Either one.

Double Commander
The very next app I install after a rebuild is Double Commander. I don't even know how many years I've been using this file manager. It's been a trusted companion for a very long time. It's snappy and has all the features I need. Most important, I can hide ALL of its UI elements, even the tabs. If I'm not doing file work in the console, Double Commander is what I'm rolling.

CopyQ
This powerhouse clipboard manager is fairly new to me but it has proven itself so far. It has replaced Ditto on Dohs and Klipper on Nix. It has far better organizing than Ditto and doesn't use that second clipboard in Nix, you know the one that stubbornly copies selected text etc.

Jreepad
I just recently started using the Java version of Treepad again for bookmarks / notes. I like its minimal UI and it's more powerful than using a browser's bookmarks manager. I like treeviews so Jreepad makes sense for me.

Qutebrowser
This one is also newer to me, but since I love VIM, a VIM web browser is a no brainer. And unlike Vimperator which is a Firefox plugin, its host isn't constantly breaking it.

To Plan to Plan

I am so terrible at planning. I am constantly getting ideas. Ideas for games to build, books to write, software to build, things to make. I am very much driven by inspiration, usually to my own detriment.
I get an idea and it consumes me. I must make it real. So I dive in and start coding etc. I know that there will be other all-consuming ideas coming up so I have to get this one done while I'm still excited about it.
But then the complexity grows too large for me to visualize it and it fizzles out. Some form of planning or visualization is a necessity. The IF game I'm building to demonstrate my text game engine is a great example. I just dove in making a space game where you escape the brig and explore the ship, encountering all kinds of interesting things.
But now the game is large enough that I can't visualize what I've already built, what is remaining, where rooms are in relation to others, where I hid puzzle pieces etc. Sure I left myself notes but yyeah.
I should have at least been planning as I go. In this case planning can be as simple as drawing a blueprint of the ship and making notes there. So that's what I started doing last night. I'll work through each of the rooms I've defined and build the blueprints.
I'll also be improving the tools in my game engine for mapping out what you've coded - this is challenging in a console environment.
Next time I plan on planning.

KDE Or Go Home

I had no idea. KDE has been working on a mobile OS. I love KDE. I run all my computers on Linux w/ KDE as the desktop. I love the flexibility. Why shouldn't I be able to tweak my desktop? It's the interface I have to use every day, I should be able to make it behave as I prefer. And that is KDE's philosophy. I love it.
The idea of running KDE on mobile devices is amazing. However I'm not keen on rooting my phone just yet. My tablet or watch, yes. Something as critical as my phone no. Maybe once I'm experienced in rooting and know its ins and outs. But when I do, I'm definitely going to give the Plasma mobile a go.

Wednesday, October 11, 2017

Learning to Love to Learn

I've always been interested in learning how to do new things. But it was always about making stuff, not learning. I figured out how to build .gif riddled nightmares of websites. I didn't care about HTML etc, I just wanted to express myself and have other people see it.
I messed around with Photoshop and Blender3D and figured out how to make creepy 3D pictures for my ugly websites. But I wanted my stuff to do more so I started goofing off with Visual Basic.

Fast forward many years and I'm a developer by trade. And something amazing has happened. After ALL this time I have finally learned to love to learn... for the learning and not just the resulting stuff. When I learn new things it feels like the aftermath of an intense workout and I'm ready to dive in for more.
I want to different programming languages (Even the ones I don't want to learn), but I also want to know how they are created, and how the source is compiled into machine language. And how exactly the machine runs the application, and how the machine's OS does what it does. And how OS's are created.

I have a lot of reading to do, a lot of videos to watch, and a lot of training courses to take.

How May I Help System You

Now that I've been building my text based game engine forever, it's time to write the admin tool's help system. I'm using plain text files and parsing them into a SQLITE DB. The challenge is organizing the help topics so that it is easy to track down what you need - even if you don't necessarily know what you need.
 
There are a LOT of pieces to defining games - learning how to write the game definitions, how to even use the game engine admin tool itself, how to build and play the games, what admin tools are available for debugging... it goes on and on.

I want to keep the help topics to a single page (Fits on the screen without much scrolling), which makes the challenge even more, well, challenging. Here is my approach so far:

I started at the highest level:
- Getting Started
- Using This Help System
 
etc

These topics are like tables of contents, they give a brief description and which more detailed topic to view.
 
Those topics then drill down into other topics. This would be a nightmare if it was the only way to get around, but it is useful if you aren't sure what you need etc.

Help topics are shown by specifying the topic's alias. If you don't know the alias, or mistyped it, the help system will search the topics for matches and list those for you.
 
There is also a topic index so you can see the titles in alphabetical order.
I will be utilizing this help system as I build the rest of the demonstration game, we'll see how painful ... or useful! it is.

Tuesday, October 10, 2017

Push Yourself

In Kung Fu training if there's something I don't feel like working, I know that's what I NEED to be working.

Well I don't want to learn Python, and really don't feel like digging more deeply into Javascript. I would much rather learn C or C++. But the technologies we are migrating to at work are much more conducive with JS and Python. So like it or not, those are my languages, presently.

The entertaining thing about my situation is, according to what little I know of Python and what little I've done in JS, I dislike them for exact opposite reasons.
JS bothers me because it can't even be bothered. You can assign wrong types or even wipe out built-in functions. It simply doesn't care.

Python on the other hand defines code blocks by formatting. I find that annoying. Let the developer format their code however - even though we all indent in a way that would most likely be perfect for Python. I still would prefer brackets as a means of defining blocks of code.

But hey, I could be completely wrong. We will see as I dig in.

Your Code Is So Stylish

Development has an element of artistry to it. Not only in how problems are solved but in the code itself. There are different styles to how we format our code to make it readable. Here I am talking about bracketed languages (Sorry Python people).

I personally prefer opening methods and objects on a new line. I find it easier to distinguish the blocks of code:

public String Greeting()
{
   System.out.println("Hello, Dave.");
}

As opposed to:
public String Greeting() {
   System.out.println("Hello, Dave");
}

You will also notice I break the rules regarding capitalization as well.
Sure this means my code has more lines but it seems readable to me.
I also tend to use three spaces (Expanded tabs). This probably comes from my Oracle work. But I find it keeps my code within the viewable area more.
I believe that consistency is even more important than adhering to this rule or that rule.
 
Remember that the ultimate goal is readability.

Monday, October 9, 2017

Walk On Home, Boy

It's time again for my work's step challenge. I have a dashboard I can log into and see the steps of my teammates as well as stats on the teams as a whole.
There are a surprising amount of employees who log so many steps it seems impossible that they are doing ANYTHING besides walking. Considering this, I end up just competing against my own teammates.

And I have a very worthy adversary. He was on the team last event. And every day I made sure I had more steps than he did. I kind of have an unfair advantage - I'm a night owl. If I see he's ahead of me at 11pm, I'll walk till I beat him. That's what I did tonight. I walked until victory.
You're going down, my friend!

Taming Logic

Nearly all of my personal projects are console applications so I do a lot of input parsing. In the course of this type of application I often find myself in situations where I need to do multiple logic blocks in the same method. True, I could route to multiple methods at this level but I prefer to do the initial parsing in one. 

Often a simple case statement isn't sufficient. So it would be easy to end up with unruly if/else blocks. I typically define a handled boolean. When I find a match I set this to true. So all my if's first check that the handled is false. And if I have a match I set it to true. This keeps my if statements to a single level.
 
Within the matching if statements I typically call a method to do the actual work, this makes my central parsing method more readable and elegant.
 
I'm sure there may be better ways of handling this (And I welcome your suggestions), but so far it is the cleanest way I've come up with.

Sunday, October 8, 2017

See Saw

It's October again. Crazy. If I'm not watching scifi movies, I'm watching horror flicks, so this is my time. Earlier this year I revisited the first few Saw movies. The first was absolutely amazing. I remember seeing it in the theater. Such a visceral and focused movie. It really puts the viewer in the movie. You feel like you're stuck in that foul disgusting room. You cringe at the idea of reaching into that toilet. You can almost smell it.
 
It is a truly great horror flick. It keeps the audience's minds engaged throughout. It hooks us in the first seconds and doesn't let go until the very last moment. I love how it guards its secrets all the way up until the credits. Unlike so many other horror movies, it doesn't reveal its cards.

I was surprised by the second movie. I don't remember liking it back when I first saw it but this time around I really enjoyed it. I would have to place it JUST behind the original. After this one I feel like the franchise lost its way. Yeah the torture was something new, but it was the puzzle, the mystery that really made the first two masterpieces.

It will be interesting to see what we get with the latest offering.

Saturday, October 7, 2017

Maybe I AM a Robot

Maybe my family is right. I just might be a robot... or at the very least, I have a strange admiration for them. If there's a stoic character in a story or movie, that's typically the one I like.
I watch Prometheus or Alien Covenant and my favorite character is David. I watch Terminator 2 and my favorite character is the T-1000.
Their calm in the face of attack. Their cold perfection. Something about them gets me stoked on the film.
Maybe I am part robot as my family accuses me of being.

You Can Do It, Linux

Full disclosure, I'm really not a power Linux user. Most of what I do on my Linux boxes is pretty mundane stuff. Yeah I've done a touch of Cron setup and a few other minor shell script commands in the bashrc. But not much beyond that.
However when I made the switch from Windows there were three areas that were tough to adapt to:
Graphics
I had to ditch Photoshop and learn Gimp and Inkscape. Photoshop and Bryce were the two apps that really got me stoked on computers. That's when my 'art' went from pencils to pixels. So it was a shock initially, especially given that at that time there was no single window Gimp. But I've never looked back, even when work-supplied fresh versions of Photoshop were available.
Music
This was even tougher than graphics. I wanted to use native apps but VSTs were the problem, and immediately weeded out 90% of the offerings (Thanks, Steinberg. We'll have that discussion later). For a time I settled for trackers via Wine. But wanted to have better tools. So I ended up giving up on Linux and buying an expensive DAW and running Dohs. That was a HUGE waste of money. I later bought Reaper for a fraction of the cost, and never looked back. Now I'm back on Linux and running Reaper via Wine and it works flawlessly.
Now to my point...
I am part of a band of ragtag aspiring game developers. Our chosen project is a  Unity3D driven FPS. I've tinkered with Unity a little but nothing more that tutorial initial set ups etc. Unity doesn't port to Linux officially. They have Windows and Mac ports... Aaand a non-official Linux port. This port can be tricky to find, it's kept in a forum post. For the longest time all I could find was an outdated .deb for it. But the other day I found a very fresh port. This one installs and runs brilliantly. - I haven't yet been able to get the standard assets to show up, but it runs, that's a start.
Unity3D on nix... you can TOTALLY do it Linux!

Friday, October 6, 2017

Qutebrowser > *

As I have mentioned before, I love VIM, therefore I like making everything look and act like it. I ditched Chrome, going back to Firefox just so I could run Vimperator and have the browser's entire GUI go away - tabs and everything. But I'm always a bit nervous about Firefox releasing updates that break Vimperator and other plugins. So periodically I'll poke around and see what my options are.

I've tried Vimb but so far have been unable to get it to install - make whines about a missing req - I read up on it, try the various solutions people suggest... SPLAT same error.

In the past I've seen Qutebrowser mentioned in threads etc and I believe at one point I tried installing it. Apparently I didn't try very hard. I just got it installed and running. First impression: YES!

Changing settings are nice and painless, and inherantly persistant. This is really nice, even though it isn't very VIM-ish. In this regard Vimperator is much more 'in the spirit' but whatever, I'm lazy, I'll take it! Nearly everything is pretty straightforward for the VIM/Vimperator user. It did take me a bit to figure out how to open new tabs. It looked like :tab-clone was the only option. Thanks to IRC I found out you can to :open -t and leave the URL off.
Tab switching is different in QB, good old gt command is there, but it doesn't simply cycle through or go to the number you may have entered before entering gt, it requests a tab number from you, displaying your options. This is not a problem once you realize T will cycle forward through the tabs.

So far the only thing I DO miss from Vimperator is the bookmarking. Bookmarks were more powerful in Vimperator (From what I know so far and have seen in the docs). But no matter, I need to have my bookmarks synced anyway so I'll probably continue to use FF for my bookmarks.

Qutebrowser is amazing so far!


Working Better Than Expected

Last night was the first I've been able to try out the data defining language I wrote - Norman Notation. I was pleasantly surprised. It is SO easy to write. It's not as strong as I would like in the area of readability, but it's not too bad.

Within about 0.5hour I was able to define a hut with a locked front door, a key in another hut, and conversation with an alien creature offering clues. All this and the logic to enter the doors, check if they're locked, if not allow entrance.

I will have to write up a formal specification for it at some point.

Thursday, October 5, 2017

For My 'Dohs People

I have been neglecting my Windows friends. It's not personal. Just because I don't like your OS doesn't mean I don't like you... And certainly I have nothing to add that you already don't know about. I have to say that I DO like your OS more than Mac. But anyway, I'll save irritating people for later.

In Linux I love aliases for console work. And for the graphical desktop, shortcuts in the /usr/bin which work with the launcher. For example a thunderbird link named tb allows me to type tb in the launcher and voila thunderbird.

Of course the nix launchers are pretty good. Apps can typically be launched after entering two or three letters. And Windows is kind of getting better.
It turns out the shortcut trick works in Windows as well. Simply make a shortcut in your user directory. I know in some versions of Dohs you will need to put it in a more global directory, sadly I don't recall which one. Anyway, with your shortcut(s) in place just fire up the run dialog and enter the name of your shortcut. For example a shortcut to Visual Studio named vs.lnk would allow you to enter vs into a run dialog to launch it.

For both the Nix trick or the Dohs trick, you could make links to shell scripts or .bat files, or directories, etc.

Unleash the power!

Choose Your Keys, Any Keys

It seems strange to me in a world where a huge chunk of our computing time is done on mobile devices using virtual keyboards we are stuck with rigid imitations of physical keyboards. It would be great to be able to fully customize which keys are available and where, AND which keys are available in the various alt levels of the keyboard.
 
As a GnuRoot / VIM user, I am often frustrated at the lack of Escape or Tab or Arrow keys. I have found a few keyboards that work fairly well, and contain these 'power user' keys. But given that in time tablets and phones may be the only computers we own shouldn't nearly every keyboard offer ALL the keys?
Perhaps someday I'll have to learn how to write keyboard apps and create such a customizable beast, so far I haven't seen any similar abominations.

Wednesday, October 4, 2017

Chasing the Future

I love the future.
I love the optimistic visions of mid century futurism. Green, pristine suburbia with flying cars gracefully through blue skies. Martini parties in wood panelled houses with all kinds of flying saucer-looking technology everywhere. We had the technology and everything was perfect.
The sixties vision is fun too. Clear plastic and bright colors. Furry interior design. Lots of chrome and flying saucer looking accessories.
The seventies gave us amazing LED watches. So utterly futuristic that they STILL completely outshine most modern attempts at futuristic looking watches. It's frustrating scouring the vast universe of the internet and only finding nothing. One could collect these old marvels but they devour batteries at an alarming and obnoxious rate.
Ahh the 80's. Truly the pinnacle of scifi. Although our vision of the future became dark and distopian, There were still so many worlds that we wish we could explore. Neo tokyo - Blade Runner, deep space, moon like battle stations. Cool digital watches, arcades, ET.
The internet brought a whole new twist to ideas that had been brewing for a long time. Scifi became hip and sexy - cyberpunk. All in all the future was getting darker and scarier. Yet we still wanted to be there. The pinnacle of scifi hip: The Matrix. Mind bending and sexy at the same time.
Today we continue to see tomorrows we wish we could explore. Guardians of the Galaxy. Yesterday and tomorrow melded together. The amazing visuals of Prometheus and Alien Covenant.
And we have the technology. Look at our phones, look at our smart watches. We are IN the future.
But we never notice. If we could experience the worlds of the future, would we even realize we're there? Because we are.

Learning By Suggestion

I almost titled this The Power of YouTube. But it encompasses more than that. I am very much a new school learner. I can't imagine becoming a developer before the rise of powerful search engines, YouTube, or even intellisense.
I remember when .NET emerged. My employer adopted it right away. At the time I barely knew old VB etc. I had to learn C#, and quickly. Fortunately Visual Studio shipped with the new-to-me intellisense feature. I learned C# entirely from those handy little lists of suggestions and Google.
Now as I move into the world of '... as a service' I am finding YouTube to be an irreplaceable tool and teacher.
The world of contributed content is truly amazing.

Tuesday, October 3, 2017

Teleportation in VIM

Ok so teleportation is not possible in VIM... but close (In a way hehe). I'm talking about the indispensable CD to the current buffer's location command. I use it every single day, all throughout the day.

This golden command is:
:cd %:p:h

I usually put it in a Dir alias within my VIMRC.
So if I'm working on code updates and help file updates... I would have one or more code files open. They are in:

<proj root>/code/

And I'd have one or more of the help files open in another VIM tab (Yes I use tabs, sorry). The help files are in:

<proj root>/config/help/topics/

I am working on the code pieces so my working directory is:
 
<proj root>/code/

But I need to open or create some help files to reflect my code changes. I could easily accomplish this by having two different console tabs running VIM, but what if I'm just working around in various project directories. Like maybe I need to hit some config files as well? So to do my help work, I 'gt' to my open help file and enter:

:Dir

Boom! My working directory is now:

<app root>/config/help/topics/

I need to do some work on the config files, I enter:

:e.

Now I have the file explorer, hit '-' twice, open a config file and enter:

:Dir

Boom now I'm in the config directory.
I use this alias all the time. It really makes life more enjoyable.

Monday, October 2, 2017

I am Benedict Arnold

I really like Ditto when I'm stuck working on a Windows machine. It is a snappy little clipboard manager. It has some cool features like custom global shortcuts, groups, editing, plain text pasting. But it's a Windows application.
I recently was having troubles with Klipper - actually it was Plasma's 'integrated' clipboard manager - so I decided to look around and see what was out there for Nix.
I found CopyQ. It's cross platform which is very cool. So I gave it a try...
Goodbye Ditto.
I feel bad. We've had good times together. I would like to comfort you by saying it's me, not you. But it's you. You have been outshined.
CooyQ is not quite as fast as Ditto, but it UI is very powerful. It has global hotkeys, tabs, so clips can be organized etc. Tabs are like Dittos groups, but it's far easier to work with these in CopyQ. Navigating tabs is easy, editing clips is easy, it has plain text pasting like Ditto. And the UI can be customized so it can be as minimal as you want. All this in a little clipboard manager. - A cross platform clipboard manager at that.
I'm sorry Ditto, but I think we need to break up.

5 VST Effects I Use in Every Song

VSTs are so great. I have a massive collection of free instruments and FX that I've tracked down. There are SOO many to choose from... B...