Webby allows the creation of web apps, similar to “Chrome Apps”, but does not run on Google Chrome or Chromium and uses less resources natively on Linux. It provides a simple interface for creating an viewing your Webby apps:
Webby web apps

On Arch Linux, Webby can be installed through the AUR:

➜  yaourt webby 
1 aur/webby-browser-bzr r9-1 [installed: r17-1] (2) (0.01)
    A webapp browser.
==> Enter n° of packages to be installed (ex: 1 2 3 or 1-3)
==> -------------------------------------------------------
==> 1

See also an external blog on installing Webby on Ubuntu Linux. Note that Webby depends on GTK3+, so this may introduce dependency conflicts on Ubuntu.

There are a number of solutions available for accessing an Android device remotely from a computer. Mobizen is available for Android through Google Play. In particular,

  • it does not require root
  • it does not require a wired connection
  • it does not require to be on the same network as the device accessing it
  • it is free
  • it supports not only remote screen access, but also many other features, including transferring files between your Android and the remote computer

Some notable disadvantages are:

  • it appears to no longer support USB connections
  • depending on the quality of the network, performance and quality will vary greatly
  • sound cannot be played remotely
  • reliability, responsiveness and frequency of disconnection

By default, a machine will be assigned two different IP addresses if connected via multiple interfaces (i.e. wireless and wired ethernet). Here is an example on a MacBookAir connected to the same router as such:

➜  ~ ifconfig
	ether 48:d7:05:bc:91:11
	nd6 options=1
	media: autoselect ()
	status: inactive
	ether 98:5a:eb:d3:b9:b9
	inet6 fe80::9a5a:ebff:fed3:b9b9%en4 prefixlen 64 scopeid 0x9
	inet netmask 0xffffff00 broadcast
	nd6 options=1
	media: autoselect (1000baseT <full-duplex,flow-control,energy-efficient-ethernet>)
	status: active

To change this, open System Preferences -> Network -> Thunderbolt Ethernet, and change Configure IPv4 to Using DHCP with manual address. Enter in the current IP address for the first network interface used. Then repeat the same for that interface too, so that when DHCP re-assigns these addresses (either after connection is re-initialized, or the DHCP assignment expires, if your router is not configured to assign IP addresses permanently.

If you run the ifconfig command after applying the new configurations, you should see that the IP address assigned for both interfaces is the same.

	ether 48:d7:05:bc:91:11
	inet6 fe80::4ad7:5ff:febc:9111%en0 prefixlen 64 scopeid 0x4
	inet netmask 0xffffff00 broadcast
	nd6 options=1
	media: autoselect
	status: active
	ether 98:5a:eb:d3:b9:b9
	inet6 fe80::9a5a:ebff:fed3:b9b9%en4 prefixlen 64 scopeid 0x9
	inet netmask 0xffffff00 broadcast
	nd6 options=1
	media: autoselect (1000baseT <full-duplex,flow-control,energy-efficient-ethernet>)
	status: active

Firefox 47.0 was officially released yesterday. I usually wouldn’t comment too much on a browser version release, but this costed me several hours of thorough investigation. Some Selenium scripts written in python which I have been using regularly abruptly stopped working, and given the number of interactions between python 3.x, Firefox, and one’s setup and environment, I did not come to think initially that this was the source of the problem.

➜  thePlatform python      
Traceback (most recent call last):
  File "", line 6, in 
    driver = webdriver.Firefox()
  File "/usr/lib/python3.5/site-packages/selenium/webdriver/firefox/", line 81, in __init__
    self.binary, timeout)
  File "/usr/lib/python3.5/site-packages/selenium/webdriver/firefox/", line 51, in __init__
    self.binary.launch_browser(self.profile, timeout=timeout)
  File "/usr/lib/python3.5/site-packages/selenium/webdriver/firefox/", line 68, in launch_browser
  File "/usr/lib/python3.5/site-packages/selenium/webdriver/firefox/", line 98, in _wait_until_connectable
    raise WebDriverException("The browser appears to have exited "
selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.

A useless message. I downgraded to the “firefox-esr” (45.2.0-1) version available in the AUR, and my scripts worked perfectly again. For those not using Arch Linux, one can always downloaded past released versions from Mozilla’s website. Simply go to all Firefox downloads for your desired language/locale, but instead of clicking on the download link for your platform, copy the download location instead; simply change the version of 47.0 to 45.0 and you’ll have a Selenium-compatible version of Firefox once again. 🙂

Note that it is entirely possible to have multiple instances of Firefox installed on one’s machine.

  1. Type about:config in the address bar.
  2. Search for dom.ipc.processCount and enter in the the number of concurrent processes you wish to allow (I have 8 virtual CPU cores and opted to use 8 processes, though this does not need to be based on the number of cores your machine has).

Assuming you have plank installed and running on your Linux distro, you may wish to add an additional dock.

  1. First check your plank configuration directory to see the name/location of your existing dock:
    ➜  plank ls -la ~/.config/plank
    total 16
    drwxr-xr-x   4 nick nick 4096 Jun  1 12:47 .
    drwx------ 113 nick nick 4096 Jun  1 17:16 ..
    drwxr-xr-x   3 nick nick 4096 May 19 10:50 dock1
    drwxr-xr-x   3 nick nick 4096 Jun  1 12:47 dock2
  2. Run the following command, assuming you want to label your second dock as dock2:
    plank -n dock2 --preferences

    The preferences dialog will appear allowing you to customize your second dock.

  3. Since you’ll probably want to automatically start up your second dock, you can do so by either running this command manually, or setting it to be called when your desktop environment starts up:
    plank -n dock2

vim is my favorite cli text editor. It doesn’t require much configuration, but if you edit code and use spaces in place of tabs, you probably want to add a line to your ~/.vimrc:

set tabstop=2 softtabstop=2 expandtab shiftwidth=2 smarttab

Of course, choose the number of spaces that suits your needs. 🙂

Some years ago I purchased a Kindle Paperwhite from Amazon. Back then, it was the second generation of its kind. I had plenty of e-books at that point which I had read mostly on my laptop or on my cell phone, but as an Amazon employee, I thought why not.

One of the downsides of a dedicated e-ink/e-reader device over traditional tablet devices is the poor support for PDF files. However one might argue that it is an advantage that e-ink devices provide simplicity for something that should be simple and distraction-free. I quickly learned that there was a large amount of content, however, that I could obtain online in the form of PDFs and wanted converted. I came across Abbyy FineReader, a proprietary software program for doing exactly such. FineReader is an OCR-based solution that attempts to “scan” a PDF and convert its contents to characters and images, to a relatively high degree of accuracy. Abbyy claims that its solution is the best available out there.

Which may, in fact, be true. But take a look at the following example of converting the DSM-5 to HTML using FineReader, and you’ll likely think otherwise. This is the result of hours of processing power on a MacBook Pro with a quad-core i7 processor: