August 2016

There are a few multi-protocol chat clients — some common ones include Apple’s official Messages app and Adium for OS X, as well as the popular cross-platform Pidgin. I have opted out of using these multi-protocol chat clients for the most part: chat protocols often become outdated and re-implemented, and usually official dedicated clients that are far superior. Furthermore, many chat services have migrated to having a web-based interface, such as Skype (amidst many others). Many users now just open their chat clients as a separate tab in their web browser.

All-in-One Messenger is a Chrome app that essentially does the tabbed browser approach — it a tabbified, multi-protocol chat client, that behind the scenes more or less interfaces with the web clients available for the number chat services. However, it provides an intuitive interface that is streamlined for switching between chat protocol tabs in a way that is not provided by the tabbed browser view nor through having each of the individual apps running separately.

All-in-One Messenger Screenshot

This took me a while to get down — given the complexity introduced here in the number of possible locations for things to be configured at a user and global level — but I have been able to create desktop directory entries and have them appear in whiskermenu properly. I highly recommend not to use a tool sure as alacarte or xame, as they may introduce more complexity and complicate your configuration files to the point that they are impossible to edit and produce any results in your menu.

Whiskermenu with Application Directories Screenshot

➜  ls /home/nick/.local/share/desktop-directories 
alacarte-made-1.directory  chrome-apps.directory       gps-apps.directory
alacarte-made.directory    development-apps.directory  settings-apps.directory
chat-apps.directory        game-apps.directory

Here’s the contents of game-apps.directory as an example to be followed for all the category files you create:

[Desktop Entry]
Comment=
Type=Directory
Name=Games
Icon=/home/nick/Pictures/icons/IconScanner/png/GameCenter.png

My .menu files are stored in a subdirectory called applications-merged because of the fact that I used various GUI tools to create my entries. Placing your .menu files in the parent menus directory should suffice.

➜  ls /home/nick/.config/menus/applications-merged 
chat-apps.menu         game-apps.menu  theplatform-apps.menu  xdg-desktop-menu-dummy.menu
development-apps.menu  gps-apps.menu   user-chrome-apps.menu

The freedesktop .menu file looks as follows, for our games category example:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
    "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
    <Name>Applications</Name>
<Menu>
    <Name>game-apps</Name>
    <Directory>game-apps.directory</Directory>
    <Include>
        <Filename>American Truck Simulator.desktop</Filename>
        <Filename>steam.desktop</Filename>
        <Filename>m64py.desktop</Filename>
        <Filename>desmume.desktop</Filename>
        <Filename>dolphin-emu.desktop</Filename>
        <Filename>PPSSPP.desktop</Filename>
        <Filename>chrome-ikffjkehicicbeijfeneenheeijonfjc-Default.desktop</Filename>
        <Filename>flightgear.desktop</Filename>
    </Include>
</Menu>
</Menu>

These *.desktop files must exist in an applications directory:

➜  ls /usr/share/applications | grep steam 
steam.desktop

and the contents of one should look something like

[Desktop Entry]
Name=Steam
Comment=Application for managing and playing games on Steam
Exec=/usr/bin/steam %U
Icon=steam
Terminal=false
Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;
Exec=steam steam://open/friends

Finally, you will need to add an entry to a .menu file similar to the following. My full menu file’s path is /home/nick/.config/menus/xfce-applications.menu since I am using XFCE as my desktop environment:

<Menu>
		<Name>game-apps</Name>
		<Directory>game-apps.directory</Directory>
		<Layout>
			<Merge type="menus"/>
			<Filename>American Truck Simulator.desktop</Filename>
			<Filename>steam.desktop</Filename>
			<Separator/>
			<Filename>dolphin-emu.desktop</Filename>
			<Filename>desmume.desktop</Filename>
			<Filename>m64py.desktop</Filename>
			<Filename>PPSSPP.desktop</Filename>
			<Separator/>
			<Filename>flightgear.desktop</Filename>
			<Separator/>
			<Filename>chrome-ikffjkehicicbeijfeneenheeijonfjc-Default.desktop</Filename>
			<Merge type="files"/>
		</Layout>
	</Menu>
	<Layout>
		<Merge type="menus"/>
		<Menuname>game-apps</Menuname>
	</Layout>
</Menu>

Marble is a Virtual Globe app that started as part of the KDE desktop environment that is now currently available for Linux (all flavors), Mac OS X, Windows, and Android. It has tons of features and definitely worth checking out for map and geography lovers out there!

Below we view the globe using a historical map from 1689 centered around North America. Interestly, California is depicted as an island, and the Pacific Northwest region of the United States and Canada, as well as Alaska and eastern Russia, is a big void in the map (not depicted).
Marble Virtual Globe Screenshot - Historical North America Map 1689

I have been unsuccessful in finding a permanent working solution for audio forwarding over NoMachine using an Arch Linux host. I had raised issues on both the Arch Linux Forums as well as the NoMachine Forums. A trouble report was created to track this issue.

I have found a temporary workaround which results in pulseaudio being successfully forwarded over NX, but it must be applied each time a NoMachine connection is established. It requires logging in as the superuser to be able to search through some NoMachine logins which are not viewable as the default user:

 ➜  su - 
Password: 
➜  
➜  cd /usr/NX/var/log
➜  grep -r -n 'native.socket' . 


./nxserver.log:1179:2016-08-18 11:40:53 805.980 14969 NXNODE   WARNING! Could not load module native with name: /usr/NX/var/run/nxdevice/D-1001-CCDE160BF6050EDC229A1FDD4CB7FD12/audio/native.socket.

You should see a bunch of entries similar to the one above. The expected audio module at the specified location does not exist, but you can quickly create a symlink at that location pointing to /run/user/1000/pulse/native assuming your default uid is 1000 using a command such as the follows:

ln -s /usr/NX/var/run/nxdevice/D-1001-CCDE160BF6050EDC229A1FDD4CB7FD12/audio/native.socket /run/user/1000/pulse/native

Check that your audio output isn’t muted or at low volume, and you should now be able to hear audio forwarded from the guest machine.

If anyone knows of a permanent solution, please share.

A while back I wrote a blog post about Mobizen — an app to access your Android device over USB or via a local or remote network connection. Another app that deserves attention in this space is Vysor, which has a similar feature set with a focus on screen mirroring/remote screen.

After (re-)trying it out a few weeks ago, AirDroid is now my current favorite app in this space as I believe it has the widest variety of features as well as highest-quality mirroring options. Like Mobizen, Airdroid has an app for Windows and OS X and a “Chrome App” can be created for use on Linux, or simply https://web.airdroid.com.

AirDroid screenshot - notifications

AirDroid screenshot - AirMirror using OSX app

Enjoy!

Below are demographic maps of three West Coast US cities:

San Francisco City Density Map

Seattle City Density Map (2010)

Portland Metropolitan Area (including city) Density Map

These population density maps tell a story that is consistent with the overall CDP population density figures of each of these figures, but reveal much more than one figure can describe. Here are the overall population densities based on 2016 population estimates:

City Density (/mi2) Population Land Area (mi2)
San Francisco 18,451.37 864,816 46.87
Seattle 8,160.85 684,451 83.87
Portland 4,754.20 632,309 133.00

I compiled this map using addresses from Wave G’s building list by fetching the list of apartment buildings and their addresses with a mini-project that I have started work on:

https://github.com/nickmcummins/gpx-tools/tree/master/scrappers/wavegbuildings

I then geo-coded the addresses into GPS coordinates, compiled a GPX file containing each location as a waypoint, and then imported the GPX into Google My Maps. This is the first in some projections I plan to work on that retrieve address/GPS coordinate data from the internet and compile it into embedable maps.

I’ve been trying to find a good equivalent for the popular iTerm2 app which can be used in place of the default OS X terminal emulator. Konsole is a great option, but it’s split window functionality is pretty bad. While it does allow one to have two different terminal tabs open in the same window, it by default creates a clone view into the current terminal tab, without an easy way to eliminate this duplicate “pointer” (that is a reference to C/C++ pointers, yes). There was a bug filed for getting that behavior fixed back in 2009, and even a fork implementation of Konsole in progress, but as of 2016, that project has all but been abandoned. Locally compiling and running this forked version of Konsole on a non-KDE environment didn’t result in very much (it ran, but it had only very basic terminal emulator functionality, and no way to split windows, which was the entire point).

While reading the thread about that bug on Konsole’s split window behavior, I came across a worthy alternative: Terminator, which was originally known as Gnome Terminal but has now been genericized to be non-GNOME-specific. And it actually works!

Terminator app screenshot with split window

You can build it from the source code on launchpad or install via your distro’s package repositories. For Arch:

sudo pacman -S terminator