Welcome Lemuroid!

This year brought the first stable release of my new pet project: Libretro Emulator for Android, or in short… Lemuroid!

It’s a very simple to use, nice looking, native, Android friendly application which leverages Libretro to emulate all your favourite consoles:

  • Nintendo (NES)
  • Super Nintendo (SNES)
  • Game Boy (GB)
  • Game Boy Color (GBC)
  • Game Boy Advance (GBA)
  • Sega Genesis (aka Megadrive)
  • Sega Master System (SMS)
  • Nintendo 64 (N64)
  • PlayStation Portable (PSP)
  • Arcade (FinalBurn Neo)
  • Nintendo DS (NDS)

Lemuroid scans your roms directory to detect compatible games, automatically downloads covers and lets you play with customized touch controls or an external gamepad. It supports autosave, save states and screen simulation shaders (CRT or LCD) to replicate some of the original feeling.

You can find the source code on Github and install it from Google Play.

Many thanks to all the testers that went through alpha and beta, you have been amazing!

Enjoy!

Here's crt-live-coding!

Hello again my friends, on this very hot day I want to share with you something cool! It’s a cool-retro-term fork specifically designed for music live coding.

It combines many of the graphical effects of CRT with a supercollider based music visualization. You can basically run any cli application commanding a supercollider backend and literally see music.

crt-live-coding is using FoxDot (which is amazing) and vim as a text editor.

Since a picture is worth a thousand words, and a video is worth a thousand pictures here’s me playing with it:

This is still a very early release, but if you want to try it out you can find the source code on github:

https://github.com/Swordfish90/crt-live-coding

Enjoy!

Cool-Retro-Term 1.1.1 is out!

release_screenshot2

Hi fellow readers,

in the last few months I’ve been working very hard to give CRT some of the love it deserves, and I’m very proud to announce you this new major release!

The most important changes include:

  • Two years of upstream (qtermwidget) terminal fixes
  • Big performance improvements (and lowered resource consumption)
  • New shiny (literally) frame
  • System fonts support
  • Countless under-the-hood improvements and fixes

On the packaging side (many thank to https://github.com/probonopd) we also have CRT AppImages, which are easy to install on any Linux distribution; Ubuntu users will have to wait a bit more, but a proper snap package is on the way (thanks to https://github.com/kz6fittycent).

You can grab the latest AppImage and dmg files from here:

https://github.com/Swordfish90/cool-retro-term/releases/tag/1.1.1

Have fun!

Dymages is here

More than a year has gone since I updated this blog, but that doesn’t mean you’ve been abandoned 🙂. Today I’m finally very happy to present my latest pet project: Dymages.

https://play.google.com/store/apps/details?id=com.swordfish.dymages

It’s an Android application which animates your still pictures with with beautiful weather, color and artistic effects. You can also share your creations with the rest of the world or just behold at the beauties others created for you.

In this case a video is probably worth a thousand words. Enjoy!

JSON Profiles in Ubuntu Terminal App

If you were bothered by a missing command or key in the terminal-app keyboard we’ve finally got you covered. Since our last update (27-02-2015) it is possible to easily define custom json layouts.

In this post I’m going to walk you through the construction of a simple VIM profile.

For starters we create the custom layouts directory:

mkdir ~/.config/com.ubuntu.terminal/Layouts/

All the JSON files inside it will be parsed when the application starts, so let’s create a empty file with your favourite editor (I’m guessing VIM at this point 😉 ).

vim ~/.config/com.ubuntu.terminal/Layouts/vim.json

The root object contains some pretty basic stuff like the name, the short_name which is shown on the selector and the language (which will be used in the future).

{
    "name" : "Simple VIM",
    "short_name" :"VIM",
    "language" : "en_US",
 
    "buttons": []
}

All the actual controls will be stored in the “buttons” array. Every Button object is composed by a main_action (triggered by click) and other_actions (triggered by click and drag in a sub-menu). There are currently two types of action, a “key” action which simulates a keystroke (with optional modifiers) and “string” action which sends a whole string to the terminal. Each action will also have a text property which is shown to the user.

Let’s start by emulating a very useful vim control: Escape. There won’t be any additional action, the type will be “key” and we arbitrarily decide to show “ESC” to the user. Our final button will be:

{
    "main_action" : {
        "type" : "key",
        "text" : "ESC",
        "key" : "Escape"
    }
}

The list of keys that can be used is taken from here: https://doc.qt.io/qt-5/qt.html#Key-enum. Please remember only to use the name after the prefix “Key_”, so the name “Qt::Key_Escape” becomes just “Escape”. Modifiers can be specified with the “mod” attribute, and the valid values are: Control, Alt and Shift.

Now let’s move to close and save commands. In vim we generally type the strings “:q”, “:q!”, “:wq” to close the file dropping or storing the changes. Since the correlation is strong I decided to put them in the same semantic button with “:q” as the main action and the other two as secondary actions. This time we want to send a string instead of a single keystroke so type will be set to “string”.

{
    "main_action" : {
        "type" : "string",
        "text" : ":q",
        "string" : ":q\n"
    },
    "other_actions" : [
        {
            "type" : "string",
            "text" : ":wq",
            "string" : ":wq\n"
        },
        {
            "type" : "string",
            "text" : ":q!",
            "string" : ":q!\n"
        }
    ]
}

The complete sample VIM profile can be found here: https://drive.google.com/file/d/0B2KuANIptmZhWlQzdnVGLV9CZ00/view?usp=sharing.

That’s it. If your custom profile doesn’t load, you probably have a syntactical or semantical error in your json file; check the standard output to see what’s wrong.

We strongly encourage you to play with this feature and to share your achievement with us, we are eager to see new profiles or patches to the default ones.

Cheers!