Titanium Developer – more headaches

Just how much time does Appcelerator spend in bed with Apple?

I understand that iPhone is a nice target platform for selling apps, but Appcelerator markets Titanium much the same way that Sun Microsystems (R.I.P.) marketed Java: Write Once, Run Everywhere.

However, the developers at Appcelerator (who make Titanium) have lots to learn about portability. (How’s that for irony!) Probably everybody in software development has lots to learn from could learn from The Art of Unix Programming and general Unix Philosophy.

To make it work, even in a new Ubuntu, you have to (after installing) actually (re)move the following files from ~/.titanium/runtime/linux/1.0.0/:

libgio-2.0.la           libglib-2.0.la           libgobject-2.0.la
libgio-2.0.so           libglib-2.0.so           libgobject-2.0.so
libgio-2.0.so.0         libglib-2.0.so.0         libgobject-2.0.so.0
libgio-2.0.so.0.2200.4  libglib-2.0.so.0.2200.4  libgobject-2.0.so.0.2200.4

After that, at least it starts (albeit with LOADS of messages and warnings on the console).

The cryptic error message that “indicates” the error with the conflicting libraries, removed above, was:

symbol lookup error: /usr/lib/libgdk-x11-2.0.so.0: undefined symbol: g_malloc_n

So, if you get the error with titanium and libgdk-x11-2.0.so.0 and g_malloc_n, the solution is to move away the libraries from the runtime directory in your installation folder.

Android SDK not found by Titanium Developer?

When struggling with Titanium Developer on windows, (see tutorial examples in earlier posts) one of my main problems was that it failed to locate the Android SDK, despite the fact that I had installed it. The problem is due to Titanium Developer looking for the “adb.exe” and “android.bat” in the “tools” directory, but in the new versions of the SDK they are located in the “platform-tools” directory instead.

The easy fix to the problem, is to simply copy adb.exe and the corresponding DLL to the tools-directory. Read my full post for easy instructions on how to get started with Titanium.

Easy Android Development with Titanium Developer!

Everybody does it… Do you? If not, read on, to see what is needed to create your first HelloWorld Android app! We will use Titanium, which lets you use web technology to build apps for both Android and IOS.

Step 1: set up a development machine.

I like to separate stuff, and I had LOADS of trouble trying on my 64bit Windows 7 (x64), so I chose to install a 32bit (x86) version in VirtualBox (on my CentOS Linux workstation).

On my first attempt, I gave it only 9 GB of disk, which was way too little, so I started over with a 19.5 GB disk (preallocated). Configured the VM with 600MB RAM and no Audio device. I installed Windows 7 Ultimate N (From MSDN), turned off all desktop effects (optimize for performance), installed Google Chrome as the default web browser, unpinned IE from the task bar, pinned Chrome there instead, chose a desktop wallpaper (unneeded, but I couldn’t resist the image of the happy plastic figures holding their knees!), and applied the windows updates, except SP1, because that led me to an irrepairable “fatal error c0000034 applying update operation” error. (Yes, I tried DISM /image:D:\ /cleanup-image /revertpendingactions, even twice).

Step 2: set up the development environment

The development tool we will use is Appcelerator Titanium, and we will develop for Android, so we need the Java SE JDK and Android SDK first.

Java and Android SDK

Since the development machine is a windows host, we choose the Android SDK windows installer, and install it in the default location. It is friendly enough, checking for Java JDK and providing a link to the download page if it is not found. My machine is a fresh install of Windows 7, so we have no Java yet. I installed it through the Windows x86 JDK link after clicking the word “JDK” under the leftmost Java Icon and then accepting the license agreement on the next page. Install Java in the default location.

If you still have the Android SDK installer “hanging” after it didn’t find Java, click the “<Back” button, and then “Next>”, to begin the installation of the Android SDK. The default values are fine.

Add “C:\Program Files\Java\jdk1.6.0_25\bin” to the end of your PATH variable.

SDK Manager

Let the SDK installer start the SDK Manager, let it search for available packages. Being lazy, I let it download everything, by simply choosing “Accept All” and clicking “Install”. This will take a while. Quite a long while if you are on a slow link. Grab a coffee, Energy Drink, Tea, Beer, Milk, whatever and take a break while it downloads and installs what you’ve chosen.

Install Titanium Developer

Download and run the windows installer of Titanium Developer. Its target audience seems to be IOS developers, as there are (still) some annoying bugs in the version I use. For instance, it’s using a (nowadays) incorrect way of finding and checking the Android SDK.

Workaround

To get around the bug in Titanium, copy “adb.exe” and “AdbWinApi.dll” from the “platform-tools” directory to the “tools” directory, under (my example) C:\Program Files\Android\android-sdk\.

Step 3: Set up Titanium

Register a new account, click the green button “New Project” (+) on the top of the window, Click “Desktop” near “Project type:”, and change it to “Mobile”. Click the button with the red X at the bottom where it’s written “Android SDK found” (unless you have a green checkbox there), and help it find the SDK for Android if necessary. (Path in bold in previous paragraph).

Pick a name for your first app, chose an appropriate App Id, pick an empty directory for this app, if you have an URL, enter it, and click “Create Project”. This will create a directory tree starting with your app name, and under it, the directory “Resources“, the file “tiapp.xml” and a bunch of other files.

The Resources directory is the home of “app.js”, your first Android application, written in JavaScript!

Click the “Test & Package” button on the top right on the work space in Titanium. A view with three tabs: “Run Emulator”, “Run on Device” and “Distribute” should be visible. “Run Emulator” should be selected. Below it should be a tab named “Android”, and beneath that, a black log window. If not: delete your new project, import the KitchenSink demo app, and recreate your project. At the bottom you have selections for SDK version, Screen, and a filter for what kind of output to view, as well as a Launch button and a Stop button.

Press “Launch” and wait.

I’ll be back with a coding example. But I think this has been plenty for now!

By the way, if it in the message box (top right corner) says there’s an update for Titanium Mobile available, click the download link…

Howto enable Permalinks in WordPress on LAMP

In my last post about setting up WordPress on a LAMP, I omitted how to successfully enable permalinks, something you of course want to have on your blog.

Permalinks in WordPress is a way to have pretty URL:s to your posts to make it easy to link directly to them, and give them a human-readable format.

For it to work in a LAMP environment, you need to have mod_rewrite enabled in apache, and the tricky part when it comes to WordPress, is to enable mod_rewrite on the directory where your blog resides.

Most linux distros default to rather sane settings, and typically have something like this in them:

    <Directory "/var/www/html">
        Options FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

that means (if /var/www/html is your DocumentRoot), that WordPress’ way of using .htaccess to control the rewriting with mod_rewrite, will not work as intended (due to the AllowOverride None directive).

The fix is easy. Just add something like this to your apache config:

<Directory "/var/www/html/wordpress">
    AllowOverride All
</Directory>

And you’ll be all set! (replace /var/www/html/wordpress above with the directory where you have wordpress installed. The same directory where wordpress created the .htaccess file when you enabled permalinks)

Step-by-step guide to set up wordpress on an existing LAMP system

0. If you get permission denied on the shell commands, try prefixing them with “sudo ”

1. Log in as root in mysql:

lamp$ mysql -u root -p

2. Create a database and MySQL user dedicated to wordpress:

mysql> CREATE DATABASE blogdb CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'blogger'@'localhost' IDENTIFIED BY 'b1ogpw';
Query OK, 0 rows affected (0.05 sec)

mysql> GRANT ALL PRIVILEGES ON blogdb.* TO 'blogger'@'localhost';
Query OK, 0 rows affected (0.63 sec)

3. download and unpack wordpress into a directory served by apache:

lamp$ cd /var/www/html
lamp$ wget http://wordpress.org/latest.tar.gz
lamp$ tar zxf latest.tar.gz
lamp$ rm latest.tar.gz
lamp$ cd wordpress

4. configure wordpress with the database details and secret keys (edit all occurrences of the word “here”). Use the online generator to get good values for the secret keys:

lamp$ vi wp-config-sample.php
lamp$ mv wp-config-sample.php wp-config.php

5. run the wordpress installation script from a web browser. The URL will be like this:

http://your-lamp/wordpress/wp-admin/install.php

6. Add the name for your blog, a user name (admin), password, your email address, and click the “Install WordPress” button att the bottom.

7. Done! Now log in, delete the sample post and sample page, and start customising your wordpress site.

Good luck!