About Leo Gaggl

ict business owner specialising in mobile learning systems. interests: sustainability, internet of things, ict for development, open innovation, agriculture

Apache Cordova development environment install on Ubuntu

Apache Cordova has very nice documentation, however as so many projects it focused on the Windows/MacOS duopolies only. Fortunately it’s not too hard to work out the differences.

Apache Cordova Logo

Installing dependencies

Thanks to: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

sudo apt-get install python-software-properties python g++ make ant

Installing Android SDK

Please note: one of the problems I found was that I had some Android tools from the Ubuntu repos that were conflicting with the SDK install. It’s probably a good idea to remove them first. That might save you from a lot of headaches down the line (and time to troubleshoot).

sudo apt-get remove android-tools-adb android-tools-fastboot

Download as per http://developer.android.com/sdk/index.html

wget http://dl.google.com/android/android-sdk_r22.6.2-linux.tgz

Note: check for updated link version obviously

vim ~/.bashrc

Add the PATH variables to the top of the file

#AndroidDev PATH
export PATH=${PATH}:~/android-sdk-linux/tools
export PATH=${PATH}:~/android-sdk-linux/platform-tools

Reload bash variables without reboot / logout

source ~/.bashrc

Testing SDK

android

This command should now bring up the SDK manager.

Installing Eclipse IDE

This is obviously an optional step depending on the IDE you want to use. I have previously covered a manual Eclipse install (as opposed to the Ubuntu repositories).

Install Eclipse ADT Plugin

As per: http://developer.android.com/sdk/installing/installing-adt.html

Node.js Install

The main difficulty on Ubuntu (as with so many development tools – see Eclipse above) is that the included node.js version in the Ubuntu repositories is outdated (remove the Ubuntu version with ‘sudo apt-get remove node’).

sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install python-software-properties python g++ make nodejs

Install Cordova

sudo npm install -g cordova

Check Cordova Requirements

This will check for Android SDK installation, Ant and other dependencies – saving you going through error messages later.

~/.cordova/lib/android/cordova/3.4.0/bin/check_reqs

Create Cordova Project

mkdir ~/projects/PROJECTNAME
cd ~/projects/PROJECTNAME
cordova create ~/projects/PROJECTNAME com.COMPANYNAME.PROJECTNAME PROJECTNAME
cordova -d platform add android
cordova build

Create Eclipse Project

Open Eclipse
Create New Android project from existing sources
Import ~/projects/PROJECTNAME/platforms/android
Test in emulator by right clicking the project and selecting “Run As –> Android App”

RaspberryPi real-world control with REST API

Finally found some time playing with a RaspberryPi and an attached PiFace Interface board to control some garden pumps and potentially an Aquaponics setup in the near future.

PiFace board

Requirements

Base Raspian (Debian Wheezy) Install (I prefer the clean minimal install via https://githutb.com/hifi/raspbian-ua-netins.

Configure the base system as per my previous base install.

Install Apache & PHP

sudo apt-get install apache2 php5 php5-dev php5-cli php5-mcrypt curl raspi-config

Ensure mod-rewrite is enabled

sudo a2enmod rewrite

Install PHP SPI Extension

More info: https://github.com/frak/php_spi

git clone https://github.com/frak/php_spi.git
cd php_spi
./phpize
./configure --enable--spi
make
make test
make install

Install PiFace REST API

cd /var/www/
git clone https://github.com/natefanaro/piface-rest-api
cd piface-rest-api
curl -sS https://getcomposer.org/installer | php
php composer.phar install

Thanks to Nate Fanaro for the excellent work on the API.

Make sure SPI is enabled on the RPi

raspi-config

Advanced Options –> A5 SPI –> yes

Install PiFace Modules

sudo apt-get install python3-pifacedigitalio python-pifacedigitalio
sudo usermod -a -G gpio www-data
sudo usermod -a -G spi www-data

For more info visit http://www.piface.org.uk/guides.

Apache2 API Configuration

Enable SPI extension

sudo vim /etc/php5/apache2/php.ini
#add the following extension
extension="spi.so"

Apache VHost config

sudo vim /etc/apache2/sites-available/piface

Paste the following VHost config

<Virtualhost *:80>
ServerName HOSTNAME
ServerAdmin webmaster@domain.com
DocumentRoot /usr/share/piface-rest-api/public_html
ErrorLog /var/log/apache2/piface_error.log
CustomLog /var/log/apache2/piface_access.log combined
<Directory />
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</Virtualhost>

Enable the newly created VHost

a2ensite piface
service apache2 restart

Testing

curl http://HOSTNAME/led/test/

Next up will be some modification for securing access to the PiFace REST API via some sort of API Key or digital certificate as it’s open by default at the moment.

Getting Foscam IP Cameras to work from Linux (Ubuntu)

As with most hardware manufacturers of hardware Foscam utility software is Windows or Mac only. The actual unit tested with the below is a FI9805E Outdoor POE camera.

Foscam Outdoor Cam

Installation

The installation is relatively painless as the unit is set up to get the IP assignment via DHCP (check your routers DHCP assignment list).

https://IP.ADDRESS.OF.CAM

should get you to the web-admin interface. The default user is ‘admin’ with no (empty) password.

Taking snapshots

http://IP.ADDRESS.OF.CAM:PORT/cgi-bin/CGIProxy.fcgi?cmd=snapPicture&usr=username&pwd=password

I had some issues with the color of the images in daylight (which for an outdoor camera is not really a good thing. A Firmware update (V2.14.1.5) improved this (you can disable the IR LEDs during daylight hours). Thanks for FOSCAM UK support via Twitter I found the download URL as the main site seems to have been down for a while.

Firmware URL: http://foscamuk.co.uk/downloads/

Streaming in H.264 video

The easiest way to get the stream appears to be the RTSP connection (using VLC or any network video player). MXPlayer on Android works very well too.

rtsp://username:password@IP.ADDRESS.OF.CAM:PORT/videoMain
rtsp://username:password@IP.ADDRESS.OF.CAM:PORT/videoSub
rtsp://username:password@IP.ADDRESS.OF.CAM:PORT/audio

Streaming in MPEG mode

The be able to use the MPEG streaming the stream format needs to be set first.

http://IP.ADDRESS.OF.CAM:PORT/cgi-bin/CGIProxy.fcgi?&usr=username&pwd=password&cmd=setSubStreamFormat&format=1

http://IP.ADDRESS.OF.CAM:PORT/cgi-bin/CGIStream.cgi?cmd=GetMJStream&usr=username&pwd=password

Resetting back to H264:

http://IP.ADDRESS.OF.CAM:PORT/cgi-bin/CGIProxy.fcgi?&usr=username&pwd=password&cmd=setSubStreamFormat&format=0

Next steps will be to make this work from a headless device with an Amazon S3 storage backend. This Github project https://github.com/phil-lavin/Foscam-FI8908W-Recorder is looking promising.

Watch this space.

Automatically posting GooglePlus articles to Twitter

I have switched most of my Social Media postings to Google+ over the last year. Despite popular opinion being that Google+ is some ‘ghost town’, I find G+ the most useful environment for my particular needs & interests (specially since the introduction of groups). It has in my experience a vastly better signal-to-noise than other social media in particular Facebook.

RSS Logo

However I would still like to feed postings through to my Twitter stream. Unfortunately Google has (stupidly / purposely / nastily) not included RSS support to make this possible without much work. There are a few publicly accessibly services out there, but they generally are either not updated or tend to fail very frequently as they hit the API Access limits as soon as they get a few users on their services.

To achieve this I have created a PHP script utilising the Google API Client to convert the public activities to a standard RSS feed. The code is available on GitHub. I used to use a script by by Michael Mahemoff (https://plus.google.com/106413090159067280619/posts/8NE3cFi4cB6) – thank you ! The main reasons for needing to change were IFTTT having issues with the initial script output (not valid RSS and illegal characters).

Create API Project

  1. Go to https://cloud.google.com/console/
  2. Create a project
  3. Go to ‘APIs & auth’ –> ‘APIs’ and turn “Google+ API” on (see Screenshot below)
  4. Go to ‘APIs & auth’ –> ‘APIs’ and create a ‘Public API access’ key (see Screenshot below)
  5. Copy the API Key for the next step

Enable Google+ API

Enable Google+ API


Create API Key

Create API Key

Setting up the RSS Feed

  1. Copy files from Github repository to your website (either by downloading the ZIP file or cloning the repository
  2. Change your Google User ID and your API Key (from the previous step) in gplus2rss.php
  3. Test the feed on your YOURWEBSITE/gplus2rss.php (and copy the URL for the next step)

You can then use the standard IFTTT RSS Feed trigger to post to a Twitter Channel to automatically update Twitter anytime you post to Google+.

Setting up IFTT

  1. Create a new IFTTT recipe here: https://ifttt.com/myrecipes/personal/new
  2. Choose the ‘Feed’ trigger
  3. Choose the ‘New Item’ to trigger the recipe whenever a new item appears in your GPlus feed
  4. Paste your feed link and click on ‘Create Trigger’
  5. Click on the ‘that’ link to create the action
  6. Paste your feed link and click on ‘Create Trigger’
  7. Choose ‘Twitter’ icon and choose ‘Create new Tweet’ as the action
  8. Paste your feed link and click on ‘Create Trigger’
  9. Choose the fields from the feed (see screenshot below)
  10. Finish off by clicking the ‘Create Recipe’ button
IFTTT Choose Feeds

IFTTT Choose Feeds

Edit files on remote host via SSH

Whilst most commandline editors have the ability to edit files on a remote host directly this can get messy sometimes when there are multiple files involved. Mounting the remote folder via SSHFS seems to be more reliable in practical use.

Mount

sudo apt-get install sshfs
sudo addgroup USERNAME fuse
sshfs remoteuser@remotehost:/remote/path /local/mountpath

Unmount

fusermount -u /local/mountpath

Ubuntu Touch install on Nexus 4

This is the last of a series of alternative mobile OS installs and the easiest install by a country mile !

Ubuntu Touch Logo

Install

Everything is quite well documented here: https://wiki.ubuntu.com/Touch/Install.

sudo add-apt-repository ppa:phablet-team/tools
sudo apt-get update
sudo apt-get install phablet-tools android-tools-adb android-tools-fastboot
phablet-flash ubuntu-system --channel devel --bootstrap

That is it really ! This is how a OS change on a mobile should work !

Issues

Ubuntu touch can not yet handle the radio firmware past Android 4.3 devices. So if your N4 was upgraded to Android 4.4 (KitKat) you need to flash the radio to the Android 4.3 (up to Version 2.0.1700.84) else WIFI will not work.

Download 4.3 Stock Image from: https://developers.google.com/android/nexus/images#occamjwr66y

fastboot flash radio fastboot flash radio radio-mako-m9615a-cefwmazm-2.0.1700.84.img
fastboot reboot

Wifi setup

(Optional – this can be done via phone UI as well). Connect the phone via USB

adb shell
nmcli -pretty dev wifi connect NETWORK-NAME password PASSWORD

Making VIM the default text editor on Ubuntu

In my never ending quest to find the ideal text editor here is another installment. Since I have been using VIM as my default command line editor for years I thought I give it a try for basic GUI editing as well.

VIM Logo

Install and set desktop app & icon

sudo apt-get install vim vim-gnome
sudo wget --output-document=/usr/share/applications/gvim.desktop https://raw.github.com/leogaggl/misc-scripts/master/gvim.desktop
sudo wget --output-document=/usr/share/icons/hicolor/scalable/apps/gvim.svg http://gfxmonk.net/images/vim-logo/vim-logo.svg
sudo update-desktop-database

Set MIME defaults

vim ~/.local/share/applications/mimeapps.list
#add or edit the following mime type and add others as needed
text/plain=gvim.desktop;

Install FirefoxOS on Nexus S (GT-9023)

I just had one of my old hand-me-down phones returned by my offspring in a great condition (junior is very careful with his equipment – well done young man !). This doesn’t happen all too often shows that the Nexus S is a decently built phone. This is also a good example of breaking the built-in obsolescence of modern phones. This particular unit has served me well for nearly 2 years (my average is one year) and served 2 kids after that.

These instructions have been compiled on Ubuntu 13.10 64bit to allow me to re-do this process in future. It should work on any Linux based distro (see pre-requisites) – if you are using another Operating System it might be time to switch. Hopefully it might be useful for other people as well.

Installing pre-requisites

As per https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Linux_Prerequisites

wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py
python bootstrap.py

Ubuntu 13.10 additions

As per https://developer.mozilla.org/en-US/Firefox_OS/Firefox_OS_build_prerequisites#Ubuntu_13.10.

sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip libxml2-utils
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 2
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 2
sudo update-alternatives --set gcc "/usr/bin/gcc-4.6"
sudo update-alternatives --set g++ "/usr/bin/g++-4.6"

Check out & build Firefox OS

git clone git://github.com/mozilla-b2g/B2G.git
cd B2G
echo "export HIDPI=1" > .userconfig
./config.sh nexus-s
./build.sh -j3

The config script will take quite some time depending on your internet connection as it has to download a lot of data. The build time will depend on your machine. In my case it took xx hours for the config and yy hours for build.

Notes

I had the following error with the config script: https://bugzilla.mozilla.org/show_bug.cgi?id=956098 (workaround contained in comments).

Install on the phone

NOTE: Before doing this you obviously want to backup your phone & data if you have anything useful on there (in my case not necessary).
NOTE: Before doing this step you need to ensure that the Nexus S bootloader is unlocked

  1. Reboot the Nexus S into bootloader mode by pressing volume up + power buttons simultaneously until you see the bootloader screen
  2. Connect the device to the PC via the USB cable
  3. Check the line “LOCK STATE – LOCKED”

If the unit is locked you can unlock it by issuing the following command
fastboot oem unlock
And use the VOLUME key to select + the POWER key to confirm/

Flash the phone

./flash.sh

VOILA !

FirefoxOS Home Screen

Or you can do it manually by using fastboot to copy the images

fastboot erase boot
fastboot erase system
fastboot erase userdata
fastboot flash userdata userdata.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot

For the people that don’t want or can not (time to upgrade your OS!) build I have uploaded the resulting images (Build Date: 2014-01-20) to GoogleDrive. As usual this comes with a warning – proceed at your own risk !

If you want to return back to the factory Android ROM you can find the Google images here: https://developers.google.com/android/nexus/images

Now this unit will serve as a secondary phone (being compared against Ubuntu Touch on a Nexus N4) while Overseas where I generally need 2 phones.

Thank you Mozilla foundation for all the work and making it available fully in Open Source ! If you haven’t done so it’s time to join here: https://sendto.mozilla.org/

FirefoxOS Browser

Thank you to Google for NOT making it harder than necessary to extend the usefulness of their NEXUS range of phones and tablets. And in the same breath curse you SAMSUNG, APPLE, … ! The reason for me moving phones actually was the fact that the Galaxy S4 is such a P.I.T.A. to get upgraded and get rid of the Samsung bloatware. Back on the Nexus range – in hindsight I should have never left.

Ubuntu 13.10 based Python/Django/WSGI setup

I am currently looking into the use of Django for one of my extra-curricular projects and needed to set up a development environment on Ubuntu. This is the log for future reference and hopefully useful for anybody needing to do the same.

python-django

Dependencies & Django Installation

Core Dependencies & Django

sudo apt-get install apache2 apache2-mpm-itk libapache2-mod-wsgi mysql-server python-django python-mysqldb

Optional add-ons

For my purposes I need a few more additional modules
sudo apt-get install python-networkx python-imaging python-pythonmagick python-markdown python-textile python-docutils python-pymongo

To test the installation you can check with this command that should print the Django version

python -c "import django; print(django.get_version())"

Django App Configuration

cd /home/USERNAME/projects/python
django-admin startproject djangotest
cd djangotest
python manage.py runserver

This should give something like the following as output:

Django version 1.5.4, using settings ‘djangotest.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

WSGI Configuration

All that remains to be configured is the Apache VHOST configuration containing the WSGI directives.

sudo vim /etc/apache2/sites-available/001-djangotest.conf

<VirtualHost *:80>
ServerName djangotest
ServerAdmin webmaster@domain.com
#<IfModule mpm_itk_module>
#AssignUserID USERNAME USERNAME
#</IfModule>
DocumentRoot /home/USERNAME/projects/python/djangotest
<Directory />
Options All
AllowOverride All
Require all granted
</Directory>
Alias /static/ /home/USERNAME/projects/python/djangotest/static/
<Location "/static/">
Options -Indexes
</Location>
ErrorLog /home/USERNAME/projects/python/djangotest/apache/logs/error.log
CustomLog /home/USERNAME/projects/python/djangotest/apache/logs/access.log combined
WSGIScriptAlias / /home/USERNAME/projects/python/djangotest/djangotest/wsgi.py
WSGIDaemonProcess djangotest python-path=/home/USERNAME/projects/python/djangotest processes=2 threads=15 display-name=DjangoTest
WSGIProcessGroup djangotest
</VirtualHost>

Lastly enable the site and restart Apache

sudo a2ensite 001-djangotest
sudo service apache2 restart

PLEASE NOTE: On Ubuntu 13.10 due to Apache being now 2.4 there is a fairly important change in access permissions (which cost me some time to work out) See: http://httpd.apache.org/docs/2.4/upgrading.html#access.
Also worth noting that the binary version of mod_wsgi is not compatible with the binary version of mod_itk (you will get an error like “Unable to connect to WSGI daemon process”) as WSGI tries to access the files using the default www-data user rather than the user assigned with using mod_itk. If you need this to work you will have to compile your own version of mpm_itk.

Ubuntu Apache2 – run VHOST as different user

There are several reasons why you might want to run different Apache Virtual Hosts as separate users from the Apache user account. My most frequent usage is on my development machine to allow running from my home directory.

The most commonly recommended option for this purpose is MPM-ITK (a quick hack would be to add yourself to the www-data group using “sudo usermod -a -G www-data USERNAME”)

sudo apt-get install apache2-mpm-itk
sudo a2enmod mpm_itk

Modify the virtual host config file in /etc/apache2/sites-available

<Virtualhost *:80>
ServerName HOSTNAME
ServerAdmin webmaster@domain.com
<ifmodule mpm_itk_module>
AssignUserID USERNAME GROUPNAME
</ifmodule>
DocumentRoot /home/USERNAME/www/docs
ErrorLog /home/USERNAME/www/logs/error.log
CustomLog /home/USERNAME/www/logs/access.log combined
</Virtualhost>

PLEASE NOTE:

If you doing this on a machine that already had a default install where MPM-PREFORK is enabled you have to disable

sudo a2dismod mpm_prefork
sudo a2enmod mpm_itk