It's a UNIX system!

my system

I'm going to go through my customized dev environment and linux workflow (?),

this is mostly for starcraft brood war ofc born of necessity.

I use vim but I expect autocomplete and go to definitions and a tool that let me move throuth my projet easy and quick

is a great text editor available everywhere that let me customize it to my own needs

I'm by no means a vim expert, this is more like my notes in the continuous process of learning and making my own customized experience.

vim window movements suck by default, I need good movements (explain what does this means).

my goals are built-in language support for Python, Lua, Erlang and C

avoid the requirement of tools outside those supported languages,

avoid rust or go utilities if possible,

avoid c++ if possible,

introduce debian linux


introduce the starcraft and vim comparation..

  • vim plugging manager
  • my list of pluggins
  • autocompletion
  • unit tests
  • git integration
  • startify menu (?)
  • go to definition
  • linting (?)
  • denite (more than just a fuzzy finder!)
  • undotree F5
  • dirvish (file finder)
  • hotkeys

  • mksh

  • kitty
  • bspwm
  • tmux

direction is more important than speed


plug vim pluging manager

my list of pluggins

pluggin description
vim-sensible a universal set of defaults that everyone can agree on.
vim-eunuch Vim sugar for the UNIX shell commands that need it the most.
vim-fugitive It's so awesome, it should be illegal.
vim-unimpaired Complementary pairs of mappings.
vim-repeat Repeat.vim remaps . in a way that plugins can tap into it.
vim-dispatch Kick off builds and test suites using one of several asynchronous adapters.
vim-startify A fancy start screen for Vim
vim-signify Show differences with style
vim-polyglot A solid language pack for Vim.
vim-maximizer Maximizes and restores the current window in Vim.
vim-bbye Close and remove the buffer.
vim-lastplace Intelligently reopen files at your last edit position.
vim-sandwich add/delete/replace surroundings of a sandwiched textobject
vim-highlightedyank Make the yanked region apparent!
goyo Distraction-free writing in Vim.
limelight Hyperfocus-writing in Vim.
vim-peekaboo see the contents of the registers.
vim-easy-align A simple, easy-to-use Vim alignment plugin.
gv.vim A git commit browser in Vim
vim-slash Enhancing in-buffer search experience
Vim-Jinja2-Syntax An up-to-date jinja2 syntax file.
denite Denite is a dark powered plugin to unite all interfaces.
vim-dirvish Directory viewer for Vim
vim-dirvish-git Plugin for dirvish.vim that shows git status flags
vim-gtfo Go to Terminal or File manager
vim-love-docs Vim plugin for LÖVE syntax highlighting and help file
vim-pandoc pandoc integration and utilities for vim
vim-pandoc-syntax pandoc markdown syntax
graphviz.vim graphviz .dot to .png flow chart image
vim-sxhkdrc Vim syntax for sxhkd's configuration files
jupytext.vim editing Jupyter ipynb files via jupytext
tmux-complete.vim insert mode completion of words in adjacent tmux panes
vim-tmux-navigator Seamless navigation between tmux panes and vim splits
vim-table-mode VIM Table Mode for instant table creation.
auto-pairs Vim plugin, insert or delete brackets, parens, quotes in pair
undotree The undo history visualizer for VIM
onehalf one half dark
rainbow Rainbow Parentheses Improved
VimCompletesMe You don't Complete Me; Vim Completes Me!
deoplete Dark powered asynchronous completion framework for Vim
neoinclude Include completion framework for deoplete
deoplete-clangx C/C++ Completion for deoplete using clang
nvim-yarp Yet Another Remote Plugin Framework
vim-hug-neovim-rpc Compatibility layer for neovim rpc client working on vim8
deoplete-vim-lsp deoplete source for vim-lsp
vim-cmake plugin for working with CMake projects
vim-gutentags A Vim plugin that manages your tag files
tagbar displays tags in a window, ordered by scope
async.vim normalize async job control api for vim
vim-lsp async language server protocol plugin for vim
ale Check syntax in Vim asynchronously and fix files
vim-lsp-ale Bridge between vim-lsp and ALE
neoformat A vim plugin for formatting code.
vim-devicons Adds file type icons to Vim plugins
lightline.vim A light and configurable statusline/tabline plugin for Vim
vim-cursorworld Underlines the word under the cursor
lightline-bufferline bufferline functionality for the lightline vim plugin.
lightline-ale ALE indicator for the lightline vim plugin
vimwiki Personal Wiki for Vim
calendar-vim Creates a calendar you can use within vim
pomodoro.vim Bring the beauty of the Pomodoro technique to Vim
Colorizer Color hex codes and color names
indentLine display the indention levels with thin vertical lines
vim-test Run your tests at the speed of thought
vim-isort sort python imports using isort
vim-minimap A minimap for vim
vim-lsp-settings Auto configurations for Language Server for vim-lsp

custom preferences

plugin description
ale.vim bla
calendar.vim bla
denite.vim bla
deoplete.vim bla
dirvish.vim bla
goyo.vim bla
gutentags.vim bla
hotkets.vim bla
indentLine.vim bla
jupytext.vim bla
ligthline.vim bla
lsp.vim bla
neoformat.vim bla
pandoc.vim bla
startify.vim bla
test.vim bla
tmux.vim bla
vimwiki.vim bla


blabla bla



  • python support flake8 and pylint
  • lua support luacheck
  • c support by clang
  • erlang support with syntaxerl



hotkey description
leader ] ale next wrap
leader [ ale previous wrap
leader - bla
leader \ bla
leader t bla
leader tc color
leader s update
leader z spelling
leader x buffer delete Bdelete
leader e exit qa!
leader d Denite buffer
leader f DeniteProjectDir -start-filter grep:::!
leader Backspace Denite -resume -cursor-pos=+1
leader gy Goyo

leader R, replace

leader gg, bla leader gj, bla leader gf, bla leader ga, git fetch leader gl, git pull leader gc, git commit leader gp, git push

leader cg, CMakeGenerate leader cb, CMakeBuild

leader ct, CMakeBuild test

leader tn, TestNearest

leader tf, TestFile

leader ts, TestSuite -strategy=vimterminal

leader tl, TestLast

I'm also have qe, j, k, qw, qq maped for quickfix stuff (?)

leader qe,

leader j,

leader k,

leader qw,

leader qq

now the F keys

f1, help f2, maximizer f3, dirvish f4, denite f5, undotree f5, date on insert mode f7, calendar.vim f8, pomodoro.vim


Only meant to explore the TorchCraft Python API, not to build the best bot possible, you should probably approach your own differently!

Welcome to our tutorial for StarCraft: Brood War bots using Linux and the TorchCraft Python API; we will learn to:

  1. Setup the environment
  2. Gather resources
  3. Train your units
  4. Build your buildings
  5. Scout the enemy(s)
  6. Expand on the map
  7. Attack and defend

Finally we can test and deploy by:


LuaUnit is a popular unit-testing framework for Lua


libuv is a multi-platform support library with a focus on asynchronous I/O. It was primarily developed for use by Node.js, but it’s also used by Luvit, Julia, uvloop, and others.

Process of abstraction

If a system is to be stable the number of states of its control mechanism must be greater than or equal to the number of states in the system being controlled.

In trying to understand what is happening around us we are faced with a fundamental problem. In approaching any situation, the system trying to understand it, does not attempt to gather all information. Instead it selects certain facts and searchers for others.

This selection of some items and ignoring of others is a process of abstraction.

It is the abstracting form a real or if you will empirical situation the things seemingly most important to deal with.

In this process of abstraction and model building we deliberately select a few items, ignore may others, and then place the items chosen in a particular relationship to one another.

In doing so we are intentionally ignoring facts or relationships that can influence the type of situation under study.

The problem it to select the most meaningful elements and relationships and dropout the rest.

Those who use abstraction skillfully know well that they neither have all the facts nor have considered all the relationships bearing on the outcome of what they are analysing.

We do not use the abstractions from one situation in another setting without carefully examining the fit. Neither do we expect a model to handle all aspects of a situation.

We shall be dealing with many abstractions and models, not with the intention of exactly mirroring the real world but with the objective of clarifying our perception of its most essential features.

Abstractions and models are mechanisms for economizing both time and effort, but like any tool they must be used within their limits.

Model your goals

Taking the abstracted elements, a character with the flat tire begins to connect them into a pattern.

Better yet, he weaves them into a model of the confronting situation, which we can use both to understand his plight and figure out what to do about it.

The parts of this model would probably include, among other things, the flat tire, the image of the spare in the trunk, the telephone, the service station, a forthcoming business meting, etc.

A second model would contain the telephone, the service station, and the repairman there.

Finally, he concludes that he will call a cab and leave his wife to deal with the flat tire as best as she can.

These are extraordinarily elementary models, but they serve a very practical purpose.

With them the main character in our illustration can see the likely consequences of various courses of action.

We can find out these things by doing them directly by actually handling the tire and observing that we get dirty, or by calling the repairmen and waiting for him and learning that it takes too long.

In the age of big data; information models are good.

  • For any given size of data, the bigger the model, the better it generalizes, provided you regularize well.
  • This is obviously true if your model is an ensemble of smaller models.
  • Adding extra models to the ensemble always helps.
  • It is a good idea to try to make the data look small by using a big model.

By using the model, however, we can make some reasonable predictions about what will occur and therby accept or reject the choices open to us.

Several references have been made with the intent of this guide to provide conceptual tools for analysis. As with any other tool models, abstractions and generalizations are useful only when within their limitations.

One in a million, repeats very often

Hey, things are still on development hell, its a really slow cook.

I made lots of mistakes and in hindsight, put and tried to play an humongous amount of games following my own tournament format that bite me to this day.

This was just one of a few very big mistakes, I now think that is better to run a small number of games and found my self on the other extreme... growing the bot to play bo3 focus only on one (2), (3) and (4) player maps. I'm in between a code refactor moving bot to a entity-component-system architecture that play nice with a simulator that I have running Luerl (Lua on the Erlang VM) this is one of my main project goals and objectives this integration of different versions and implementations of the Lua language in tandem so instead of fixing the container tournament manager that explode on my face as reported before or finishing the actual tournament as planned, is not that I abandoned torch-up, if anything I want to approach things differently, I still plan to run games with the registered by now old bots following the previous stated rules, a first round and announce results I believe that as my goal with torch-up, that in order to move on to future things without old mistakes hunting me.. I'm a sloth on hell already, I don't have anything new to report around tournament results, other than something completely different, and probably not what you are wondering, like:

Originally I had this crazy idea of a future where bots could play the old proleague format including 2v2 games, all wishful thinking, since after some real world experience as 2v2 player and a lite dive into bwheadless.exe or C++ for that matter I learned the hard way how crazy my intention was.

I'm not going to continue with the Python tutorial and no matter that I can code some lite examples with TorchCraft's Python API the idea to build also a Terran bot, a race that I don't have any real experience with for a future 2v2 combo with my Zerg bot its completely out of my capacity, I wanted to get the attention of existing Python devs that could want to build a bot using Python, I hope that someone write a great bw bot with Python eventually I bet a scary bot could be made just with Python alone, but I'm not going to try to be that champion, I have my plate full with Luerl and I'm making a really bad job about it, I'm going to return to write about the Python side of things, for anything PyTorch running on another process talking TCP with the rest of the bot system as it should instead of using Python to write a second bot, Blueberry is dead long live Ophelia.

Python is slow, people say that to keep the meme alive, the reality is that is fast enough, the speed of Python have never been an issue for writing a StarCraft bot, deer reader take a look at the StarCraft 2 AI scene for examples.

Q. Is torch-up vaporware? is it ever going to happen?

A. I guess is vaporware until is not?

Q. What is my problem? ^^

A. StarCraft: Brood War.

Q.What happened? is there any update on this?

A. My goal still is built, compete and write about my bot and the system of systems core of the fixing of the StarCraft: Brood War problem instead of a main focus as tournament organizer, but I also want to compete in a world where you are not forced to use Windows because the game release originally for the 1998 version of that OS. So the idea of become an event organizer, sadly apparently the worst at tournament organizing is really not that bad, mistakes where made, my apologies to all involved that want to see this finally out of the deeps of hell or all of you competitive beautiful people that wanna a piece of my bot, until then, this will hunt me until I hunt it.