Wednesday, August 14, 2013

Creating an Android App with PhoneGap and Eclipse

This is the basics on creating a HelloWorld using PhoneGap, Cordova and Eclipse (provided by ADT).

I have downloaded and extracted:
  1. Android Development Toolkit (ADT): adt-bundle-windows-x86_64-20130729.zip
  2. Phonegap kit: phonegap-2.9.0.zip
Note: ADT provides the Eclipse IDE.

In order to start development, an Android project is created in Eclipse.

Step 1: Create an Android Project
Open Eclipse (Its in the ADT/eclipse folder) and choose File ->New ->Android Application Project

Application Name: Hello World (This is the name that will appear in the Play Store)
Project Name: HelloWorld (This is the name used by Eclipse to separate each project)
Package Name: com.example.HelloWorld

Select the default option for the remainder screens.

Step 2: Insert the Android/PhoneGap Libraries
In the project, left click on assets and create a new folder: www

Open the extracted PhoneGap/lib/android folder and do the following;

  1. Copy PhoneGap/lib/android/cordova.js to Project's assets/www folder
  2. Copy PhoneGap/lib/android/cordova-2.9.0.jar to Project's libs folder
  3. Copy PhoneGap/lib/android/xml folder to Project's res folder
In the Project's lib/cordova-2.9.0.jar right click and choose Build Path ->Add to Build Path

Step 3: Create the starting page
In assets/www folder, create the text file index.html with following contents
 <!DOCTYPE HTML>  
 <html>  
 <head>  
 <title>PhoneGap</title>  
  <script type="text/javascript" charset="utf-8" src="cordova.js">  
  </script>  
  </head>  
  <body>  
  <h1>Hello PhoneGap</h1>  
  </body>  
  </html>  

Step 4: Configure to load the index.html
Edit the Project's src/com.example.HelloWorld/MainActivity.java

Before the first import statement, add
import org.apache.cordova.*;

Change extends Activity 
to extends DroidGap
or to extends PhoneGap

Change setContentView(R.layout.activity_main);
to

super.loadUrl("file:///android_asset/www/index.html");

Step 5: Configure Android specific configurations
Edit the AndroidManifest.xml (if unsure where, just place it before the Activity Application tag)
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
 <uses-permission android:name="android.permission.INTERNET" />  
 <uses-permission android:name="android.permission.READ_CONTACTS" />  
 <uses-permission android:name="android.permission.WRITE_CONTACTS" />  

Edit the Activity tag by adding configChanges
 <activity  
  android:name="com.tboxmy.simpledisplay.MainActivity"  
  android:label="@string/app_name"   
  android:configChanges="orientation|keyboardHidden|screenSize" >  

Step 6: Test the application
Right click the project name and choose Run As ->Android Application

Unless you have a fast machine with huge RAM, some waiting time is required for the Application to start, after the Android Emulator starts.

Friday, August 2, 2013

Cordova basic usage

Time to compile Phonegap using Cordova.
Basic commands;

1. Create an Android project called com.example.hello in folder hello.

cordova create hello com.example.hello 

2. Include Android platform for cordova. In the project folder, type;

cordova platform add android

3. Compile the project (some call this build). In the project folder, type;

cordova build

2. Start the android emulator with the compiled cordova project. In the project folder, type;

cordova emulate android

Thursday, August 1, 2013

Install Android Emulator on Centos 6


Why would I want to have the Android Emulator? Well, I needed to test several custom Android  Packages and also develop apps for Android. This meant, I could keep testing the Android Packages without having to install on a physical Android phone such as the Sony Ericsson X10 or Samsung S3.

I have written on this topic for Centos 64bits, before and seems like it still depends on 32bit libraries:


A good reference for everything Android is at http://developer.android.com/sdk/index.html

Here are steps for Centos 6.4 (64bits), open up a terminal as root;

Step 1: Install Java development kit (JDK)
# yum update
# yum install java-1.7.0-openjdk-devel.x86_64

Verify installation with following command:
# javac -version

Step 2a: Install library for 32bits 
yum install glibc.i686 ncurses-libs.i686 libstdc libstdc++.i686 libzip.i686 SDL.i686 gegl.i686  mesa-libGL.i686

Note: Optional package to install: 
libX11.i686 libXrandr.i686

Step 2: Install the Android SDK and ADT
Get the latest Android ADT from the Android Developer site or use following:
wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20130729.zip

This will provide us with (Size if 440MB):
  1. Eclipse + ADT plugin
  2. Android SDK Tools
  3. Android Platform-tools
  4. The latest Android platform
  5. The latest Android system image for the emulator
Note: If you are in Malaysia and cant download because of Internet problem (Some day this will improve) and really have no other way of getting the ADT and JDK for Centos 6 64bits, just email me your contact details (e.g. address) and we can work something out.

Allow groups named devel to access development. Create the directory /opt/android and extract adt-bundle-linux-x86_64-20130729.zip

# mkdir /opt/android
# useradd -m devel
# chown devel.devel /opt/android
# chmod g+rwsx,+t /opt/android
# unzip -d /opt/android/ adt-bundle-linux-x86_64-20130729.zip

Step 3: Post installation.
What can we do after installation? Well, you can run the Eclipse IDE to develop application and there is also the Android Emulator (to test APK). Info on the Android Emulator can be found at http://developer.android.com/tools/devices/emulator.html

I suggest that you login as the devel user or a user with that group access to continue (Represented as $ in steps below).

Start Eclipse with
$ /opt/adt-bundle-linux-x86_64/eclipse/eclipse

Starting with the emulator
1. Listing the available emulators
$ cd /opt/android/adt-bundle-linux-x86_64/sdk/tools
$ ./android list targets

Available Android targets:
----------
id: 1 or "android-18"
     Name: Android 4.3
     Type: Platform
     API level: 18
     Revision: 1
     Skins: WSVGA, WVGA800 (default), WVGA854, WQVGA432, WQVGA400, WXGA800, QVGA, WXGA720, HVGA, WXGA800-7in
     ABIs : armeabi-v7a

2. Creating an instance of the emulator
Here it is called practiceandroid4.3 with the target id 1 (as above). Items in RED are optional. For further details see http://developer.android.com/tools/devices/managing-avds-cmdline.html
$ android create avd -n practiceandroid4.3 -t 1 --skin WVGA800
$ emulator -avd practiceandroid4.3


APK can be installed into the Android emulator
$ adb install bin/MyFirstApp-debug.apk


Trouble shooting:

  • If there is a problem running Eclipse or the Emulator, try the Step 2a above.
  • For error "./emulator: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory", ensure the step 2a is done.
  • When upgrade Centos 6.3 to Centos 6.4 on Virtualbox, it hangs at the boot progress bar. Fix is at http://bugs.centos.org/view.php?id=6306



Sunday, June 30, 2013

Install MCRYPT for Centos 6.3

MCRYPT is used to encrypt data. For example, user login passwords.

The EPEL repository provides for the mcrypt package.

Step 1: Download and install the files to support EPEL repository
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
wget  http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
rpm --import RPM-GPG-KEY-EPEL-6
rpm -i epel-release-6-8.noarch.rpm

Step 2: Install mcrypt package

yum install php-mcrypt

Tuesday, June 25, 2013

Autoconfiguration ipv4 address

A funny thing happen on a newly installed MS Windows 8. After setting the fixed IP on the network interface (cable), it kept getting a an IANA ip of 196.254.x.x.

Although, the fixed IP was entered correctly, 10.x.x.x, the command ipconfig showed that it was still using the 196.254.x.x. Driving me mad, this don't happen on Linux as far as I know.

Resolve this by disabling the interface that is causing the problem.

At the command prompt as Admin follow the steps given below;

Step 1: Identify the interface name (Idx)
> netsh interface ipv4 show inter

Step 2: Disable the interface, replaceing the XXX below with the Idx found in Step 1.

> netsh interface ipv4 set interface XXX dadtransmit=0 store=persistent

Thanks to Lyngtinh

Tuesday, June 11, 2013

Install Clamav antivirus on Centos

Clamav is a much misunderstood software, at least from the response of people I know.

This is a follow up of previous posting http://tboxmy.blogspot.com/2011/06/open-source-software-antivirus-called.html

A simple to read manual can be found at
http://www.clamav.net/doc/latest/clamdoc.pdf

However, here are steps I took for the installation on Centos 6.3 and Centos 5.6

Step 1: Install required repository for clamav
http://tboxmy.blogspot.com/2013/06/install-yum-repo-for-centos.html

Step 2: Install the clamav software
yum install clamd clamav clamav-db

Step 3: Edit the configuration files with your own preferences
/etc/clamd.conf
/etc/freshclam.conf

Step 4: Test the scan with an example directory [/tmp/samples] and save the results in [output.scan]
clamscan -r -l output.scan /tmp/samples

You should notice a warning that the virus database is outdated.

Step 5: Update the virus database. Make sure the server has internet access, then type
freshclam

By default update is done daily, but can be changed by moving the /etc/cron.daily/freshclam to another cron folder.

Step 6: Schedule the scan with crontab
Use the command in step 4 as an example

Step 7: Manage how files detected as virus are handled

e.g. use perl-File-Scan-ClamAV



Install Yum repo for Centos

Adding additional source of packages (software) for Centos will greatly reduce the need to recompile OSS packages. Epel provides open source software that is free for use. This includes clamav, atop, cacti,

Here are step to add a common repository.

Centos 5

Step 1: install and enable epel repo
rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm


Centos 6

Step 1: install and enable epel repo
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

Step 2: Enable priorities
yum install yum-priorities

Edit /etc/yum.repos.d/epel.repo
add under [epel]
priority=10


Friday, June 7, 2013

TinyMCE

One of the widely used WYSWIG for web forms is called TinyMCE. Currently it is at version 3.5.8 and version 4.0 is in Beta. Licensed as LGPL, it is available for download freely from tinymce.com website.

I like its highly configurable options. Some of these are listed at http://www.tinymce.com/wiki.php/TinyMCE3x:Buttons/controls

Here is how it looks like from the demo site.


Thursday, June 6, 2013

Backup selected rows from MyMSQL database

Just needed a few rows of data, after confirmed its existence with

> select count (*) from `attendances` where `meeting_id`=82;

Using mysqldump

mysqldump --opt -uroot -p development attendances --where='meeting_id'=19700 > outputrows.sql

Reviewed the extensive contents then inserted back into the db.





Tuesday, May 21, 2013

OpenOffice.org templates to plan/schedule work

A great spreadsheet template to do planning for shift work. Its flexible and can be modified to suit different environments.

See http://templates.openoffice.org/en/node/9485

Should work for LibreOffice.

Thursday, May 2, 2013

SCAM using Fedex and Coca-cola names

Be careful of scams on the internet such as the one that says you have won some money through a lucky draw. Extract of the contents, I have seen, is shown below.



Header contents of that email

Read an article on this at Ripoffreport.

Tuesday, April 30, 2013

Tables in Moodle appear without border lines.

Tables in Moodle 2 will tend to have this issue where users just can't get the grid lines to appear. Another description for this, is the border lines appear during editing, but is not displayed when it is saved and viewed as a normal content page.

The misleading choice was to right click and edit using "Table properties". Did not work in what ever combination that was made.

Following are steps that can be taken when creating a standard table from scratch in Moodle.

Step 1: Right click on the existing table. Choose Cell ->Table cell properties.
It does look like we are changing one cell, but bear with me to get this applied to the whole table.


Step 2: Choose the Advanced tab. Click on the Border color's colour selection box.


Step 3: Choose a colour. Better still click on Palette or Named tabs to choose a standard colour. Click Apply. In this example, Black or #000000 is choosen as the border line colour.

Step 4: At the dropdown box choose "Update all cells in table", click "Update".

Step 5: Save changes to the page where the table is added and view the table with the border lines.

Monday, April 22, 2013

Samsung S3's Android update March 2013

Just did an OTA update from Jan 2013 to Mar 2013.

Among changes known at this moment;

Lock screen security patch. Previously there is a 5 step hack to by pass the login for the lock screen.

Camera. The menu at sides now have transparent borders. Now missing 3 scene modes, which include the fireworks, backlit.

Friday, April 19, 2013

Faces of Clouds

Cloud is a big thing these last few months. Just to clear some terms that is of interest and where even so called IT experts are not able to agree on. This means, that its my personal view based on resources published by industry experts.

3 items are of interest. The first, is naming of a cloud based on its deployment. Second, clouds can further be classified based on services it provide to users. And lastly, a case study. Think of your plan to build a cloud and how it would be shaped.

A) A cloud is named based on its location or deployment.

  1. Public - Applications, storage and services made available to the general public for free or for a fee.
  2. Private - For a single organisation and decisions made centrally on resources.
  3. Community - Shared infrastructure having several organisation with specific interest that is managed internally or by a 3rd party.
  4. Hybrid - Combination of either Public, Private or Community, or all three.

B) A cloud can then be named based on its services.

  1. IaaS (Infrastructure-as-a-Service)
    1. Users install own operating system and maintain its own patches, IP addresses. - Rackspace, Amazon EC2.
    2. Users can leverage resources to sell as a service provider to their clients.
  2. PaaS (Platform-as-a-Service)
    1. Run your own application on a provider's platform
    2. Develop on a provider's platform - Google AppEngine, Oracle Cloud Platform, OpenShift.
  3. SaaS (Software-as-a-Service)
    1. Full web application - E.g. Googledocs, SalesForce, Gmail
    2. Web services (consumed by other web application) - GoogleMaps API, PayPal

C) A case study

How would you shape a cloud based on above (A) and (B) for following situation?
Lets say a government wants to setup a TeleHealth cloud. It allows any application for hospitals, clinics and government. Some of these applications are built and some bought. Geographically users are very dispersed throughout the country. 

A) Community
Why? Organisations apart from the Ministry of Health, clinics and hospitals would also include 3rd party resources for pharmaceutical, research, assets, payments.

B) PaaS

  1. By providing one or two standard platforms, all development can be better managed. Deployed applications can be made to meet security and other standards set.
  2. Many new applications/web services can be introduced by users. 


Yahoo on scheduled maintenance

Did you get any notification for this scheduled maintenance?


Tuesday, April 9, 2013

Dangers in copy and paste to CLI

A reminder for those who are trying to be smart and copy commands found on the internet or via unknown emails, the PASTE may contain dangerous commands.

See http://thejh.net/misc/website-terminal-copy-paste

WARNING, do not try the following if you do not understand dangers of hidden codes. Here below is an attempt to simulate that line to be copied.

Just copy the 1 line below and paste to the CLI, watch what happens.
/dev/null; clear; echo -n "Hello ";whoami|tr -d '\n';echo -e '!\nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';head -n1 /etc/passwd
git clone
git://git.kernel.org/pub/scm/utils/kup/kup.git

Monday, April 8, 2013

Howto troubleshoot Virtualisation with RHEVM

In the event to do troubleshooting, some of these were carried out for a recent RHEVM;

  1. In the RHEVM Administration Portal, check out the events.
  2. The command rhevm-log-collector collect download logs including from hypervisors to the /tmp folder. 
  3. Collect only RHEVM logs rhevm-log-collector collect --no-hypervisors
  4. Look at logs in /var/log/rhevm 
  5. Need to check the RHEVM database? Try  pg_dump engine -U postgres -W -f /tmp/cu_rhevm.dump -F t
  6. Check the multipath
  7. Check configuration with rhevm-config --list


 Only item I do not see is the %TEMP%/manager_hostname/log as mentioned from the RHEV website.

Additional references: http://www.howtoforge.com/virtualization-with-kvm-on-a-centos-6.2-server

Tuesday, March 5, 2013

Installing JDBC on MS Windows 7

Basics on getting data from remote MySQL database requires installation of a Java driver.

The JDBC drivers is provided through the current Connector/J 5.1. This is a type 4 driver and works for MySQL 4.1, 5.0, 5.1, 5.5. MySQL reference for the driver can be found at http://docs.oracle.com/cd/E19957-01/mysql-refman-6.0/connectors-apis.html#connector-j-versions

Step 1. Ensure JDK 1.6 or 1.7 is already installed.
At the command prompt check the version, see below example where it was installed in C:\Program Files\Java\jre7


> java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing)



Step 2. Download the driver from Maven2 project.
Download from http://mirrors.ibiblio.org/maven2/mysql/mysql-connector-java/5.1.19/
the file mysql-connector-java-5.1.19.jar

And save to C:\Program Files\Java\jre7\

Step 3. Tell Java where to find the driver
Click on Start ->Control Panel ->System
On the left menu choose, Advanced system setting
Choose Environment variables, in the System variables box click on CLASSPATH and choose Edit.
At the end of the text box, append a semi colon followed by location and the name of the drivers, e.g.

;C:\Program Files\Java\jre7\lib\mysql-connector-java-5.1.19.jar

Choose Ok until all boxes are closed.
If you have any command prompt or Java application, they need to be restarted.

Useful information in order to use the driver;

  1. The classname: com.mysql.jdbc.Driver
  2. The connection string: jdbc:mysql://server-name:server-port/database-name
  3. Username and password to the database
  4. Default port 3306

OpenOffice / LibreOffice Base

Step 1. Add the classpath
Open Writer and in the menu choose
Tools ->Option ->Java
Click on the JRE installed; Click Classpath ->Add Archive
Choose location of the driver (In this case C:\Program Files\Java\jre7\lib\mysql-connector-java-5.1.19.jar), click OK until all windows are closed.

Step 2. Close all OpenOffice / LibreOffice applications.

Test using the OpenOffice / LibreOffice Base



Monday, February 4, 2013

Android 4.1.2 on Samsung S3

Update from Android 4.1.1 to 4.1.2 on Samsung S3 was straight forward. There were not many noticeable changes so I am listing what were the initial encounters;


  1. Pull down Notification bar have 2 new buttons
    1. AllShare cast - to share the screen with other S3 devices. Yet to get a chance to test it.
    2. Multi window - Allow a menu on the left side of the screen to appear with a list of apps. Two of these apps can be dragged to the screen and viewed at the same time. One app appears at top half and the other at bottom half. Click the horizontal bar at the centre and there are options to switch both app locations or to use the full screen.
  2. Pull down Notification bar doesn't have the Sync button - Looks like have to sync emails and calendars manually from the settings as the "Auto Sync" button is lost. If you really have the battery and want to leave the sync on, try editing Notification bar or follow this; Left button, choose "System settings" ->"Data Usage". Left button, choose "Auto sync data".
  3. Edit buttons on Notification bar - Default install have omitted the Sync button, but it can be added back to the Notification bar. To add or remove buttons, Click the Menu button (Left button), Choose "System settings" ->"Display" ->"Notification Panel". Drag additional buttons from the Available Buttons bar into empty spaces in the Notification panel bar.
  4. Keyboard includes a predictive feature that I could only disable when it appeared the first time I tried to use the keyboard. This include words from all the Facebook, ChatOn, social networking tools. I do not see the option to change the settings anywhere.
  5. Chrome web browser is included. If you use Chrome on your desktop, and signed in, the same apps open and saved bookmarks can be seen on the S3.
  6. The Gallery app provides 3 different views to show photos in an Album. In Gallery, choose the top right corner button to switch views.
  7. Coming soon...

Sunday, January 6, 2013

Getting started with Symfony2 - Part 1

After installing Symfony 2.1 and going through the documentations, everything seems simple enough. To start developing an application from scratch, first create a project, next create a Bundle and start adding codes.

Several assumptions;
  1. Installation was done as in my previous posting, including creating the project called mysymfony.
  2. The Bundle is called HelloBundle in Sample. All Bundle names must end with the word Bundle.
  3. All Bundles will be under the vendor named "Sample".
Here are steps to create and delete a Bundle.

A. Create a Bundle
Step 1: Generate the Bundle

cd mysymfony
php app/console generate:bundle --namespace=Sample/HelloBundle --format=yml

Respond to the wizard's questions;
  1. [Enter]
  2. HelloBundle
  3. [Enter]
  4. [Enter]
  5. [Enter]
  6. [Enter]
  7. [Enter]
  8. [Enter]

Step 2: Create the routing.
Still in the symfony directory, edit the file src/Sample/HelloBundle/Resources/config/routing.yml

hello:
    pattern:  /hello/{name}
    defaults: { _controller: SampleHelloBundle:Hello:index }

Step 3: Create the controller file.

vi src/Sample/HelloBundle/Controller/HelloController.php



namespace Sample\HelloBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HelloController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('SampleHelloBundle:Hello:index.html.twig', array('name' => $name));
    }
}

Step 4: Create a view template

vi src/Sample/HelloBundle/Resources/views/Hello/index.html.twig

{% extends '::base.html.twig' %}
{% block body %}
Hello {{ name }}!
{% endblock %}

Step 5: Access the final application

In a web browser, enter the location or URL as

http://localhost/mysymfony/web/app.php/hello/malaysia

---

B. Delete a Bundle
Step 1: Delete the Bundle directory
rm -rf src/Sample/HelloBundle/

Step 2: Remove Bundle routing in /app/config/routing.yml
Example, delete

sample_hello:
    resource: "@SampleHelloBundle/Resources/config/routing.yml"
    prefix:   /

Step 3: Remove Bundle from app/AppKernel.php
Example, delete

new Sample\HelloBundle\SampleHelloBundle(),

Step 4: Clear Symfony cache
php app/console cache:clear 

or

php app/console cache:clear --env=prod --no-debug


Note to self: No promises when Part 2 will be published.

Blog Archive