<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6415234410003972504</id><updated>2012-01-27T22:01:30.467-08:00</updated><title type='text'>The Spectrum</title><subtitle type='html'>Code et al</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-318834652781814488</id><published>2011-03-05T02:24:00.000-08:00</published><updated>2011-03-05T02:26:34.921-08:00</updated><title type='text'>Dalvik ByteCode Injection</title><content type='html'>phew! been a really long time since the last post. I sort of stopped working on the VoIP idea.&lt;br /&gt;&lt;br /&gt;What's new is dalvik bytecode injection. I managed to inject instructions in memory for an Android app.&lt;br /&gt;&lt;br /&gt;http://groups.google.com/group/android-platform/browse_thread/thread/21549d6f3228eb50&lt;br /&gt;&lt;br /&gt;According to Andy McFadden (the guy who wrote much of the VM), I am most probably the first person to do this. Encouraged, I am starting a project to have a comprehensive injection library for Dalvik.&lt;br /&gt;&lt;br /&gt;This is the Issue tracker of Android that is currently active with the discussion&lt;br /&gt;http://code.google.com/p/android/issues/detail?id=6322&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Earlence&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-318834652781814488?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/318834652781814488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2011/03/dalvik-bytecode-injection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/318834652781814488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/318834652781814488'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2011/03/dalvik-bytecode-injection.html' title='Dalvik ByteCode Injection'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-2977240763933125328</id><published>2009-10-16T22:27:00.000-07:00</published><updated>2009-10-16T22:30:26.314-07:00</updated><title type='text'>My Latest Work</title><content type='html'>Well, I've been really caught up with my day job. So I've had no time to continue my Android VoIP experimentation, but I will try to complete a working prototype the moment I get a little slack from my job. So till the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-2977240763933125328?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/2977240763933125328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/10/my-latest-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2977240763933125328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2977240763933125328'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/10/my-latest-work.html' title='My Latest Work'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-6698912313685875069</id><published>2009-07-23T01:16:00.000-07:00</published><updated>2009-07-23T01:41:26.390-07:00</updated><title type='text'>Writing applications using the Android NDK</title><content type='html'>&lt;div style="text-align: justify;"&gt;I did not find any easy to read tutorials on how to exactly build an Android app with some native code component. Its true that the NDK package comes with some docs, but for Android beginners, this may not be an exciting prospect. However, I still maintain that the docs in the package are a must-read.&lt;br /&gt;&lt;br /&gt;The following app simply prints out a small string returned from a C function on the LogView.&lt;br /&gt;&lt;br /&gt;1. Create a Normal Android app. Lets call it 'native1'.&lt;br /&gt;2. The main source file should look like this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package com.earl.native1;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.util.Log;&lt;br /&gt;&lt;br /&gt;public class native1 extends Activity {&lt;br /&gt;   /** Called when the activity is first created. */&lt;br /&gt;   @Override&lt;br /&gt;   public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;       super.onCreate(savedInstanceState);&lt;br /&gt;       setContentView(R.layout.main);&lt;br /&gt;     &lt;br /&gt;       Log.i("--EARL--", new NativeLib().getHelloWorld());&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class NativeLib&lt;br /&gt;{&lt;br /&gt;   public native String getHelloWorld();&lt;br /&gt; &lt;br /&gt;   static {&lt;br /&gt;       System.loadLibrary("helloworld");&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. If you are using Eclipse, the class files built will be in the 'bin' directory.&lt;br /&gt;4. Navigate to it and run 'javah' on the class file that contains the native method.&lt;br /&gt;&lt;br /&gt;&lt;prompt&gt; javah -jni com.earl.native1.NativeLib&lt;br /&gt;&lt;br /&gt;5. After this, you will get one header file. This file contains the JNIEXPORTs generated from the java source.&lt;br /&gt;6. Copy this file and paste it in a folder in the 'sources' dir of the Android NDK. I'm calling the folder 'earl'.&lt;br /&gt;7. Now, create the C implementation file - earl.c It should look like this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include "com_earl_native1_NativeLib.h"&lt;br /&gt;&lt;br /&gt;JNIEXPORT jstring JNICALL Java_com_earl_native1_NativeLib_getHelloWorld&lt;br /&gt;(JNIEnv * env, jobject obj)&lt;br /&gt;{&lt;br /&gt;   return (*env)-&gt;NewStringUTF(env, "Greetings from Earlence !");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;8. Now you have to create the Android.mk file. This file describes your native code module to the build system. This file is created in the same dir as the source file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;# Copyright (C) 2009 The Android Open Source Project&lt;br /&gt;#&lt;br /&gt;# Licensed under the Apache License, Version 2.0 (the "License");&lt;br /&gt;# you may not use this file except in compliance with the License.&lt;br /&gt;# You may obtain a copy of the License at&lt;br /&gt;#&lt;br /&gt;#      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;#&lt;br /&gt;# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;# distributed under the License is distributed on an "AS IS" BASIS,&lt;br /&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;# See the License for the specific language governing permissions and&lt;br /&gt;# limitations under the License.&lt;br /&gt;#&lt;br /&gt;LOCAL_PATH := $(call my-dir)&lt;br /&gt;&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;&lt;br /&gt;LOCAL_MODULE    := helloworld&lt;br /&gt;LOCAL_SRC_FILES := earl.c&lt;br /&gt;&lt;br /&gt;include $(BUILD_SHARED_LIBRARY)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;9. Now, navigate to the 'apps' dir in the NDK home and create a folder of your choice. This will hold the Android Application you built using Eclipse earlier. I am calling it earl_jni. In this folder, create another one and call it 'projects'. In this, copy your ENTIRE eclipse project 'native1'. Then, navigate one level up to earl_jni and create the Application.mk file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;APP_PROJECT_PATH := $(call my-dir)/project&lt;br /&gt;APP_MODULES      := helloworld&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;10. Now, navigate to the NDK home and run the make command.&lt;br /&gt;&lt;br /&gt;$ make APP=earl_jni&lt;br /&gt;&lt;br /&gt;11. You should see this output if everything works correctly.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Android NDK: Building for application 'earl_jni'&lt;br /&gt;Compile thumb  : helloworld &lt;= sources/earl/earl.c&lt;br /&gt;SharedLibrary  :&lt;br /&gt;libhelloworld.so&lt;br /&gt;Install        : libhelloworld.so =&gt; apps/earl_jni/project/libs/armeabi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;12. Now, a folder called 'libs' will be created in apps/earl_jni/projects. This contains the .so file i.e the native library. Copy this into the eclipse project root. Compile and run. You should see something like on the LogView&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;I/ActivityManager(  564): Starting activity: Intent { action=android.intent.acti&lt;br /&gt;on.MAIN categories={android.intent.category.LAUNCHER} flags=0x10200000 comp={com&lt;br /&gt;.earl.native1/com.earl.native1.native1} }&lt;br /&gt;I/--EARL--(  699): Greetings from Earlence !&lt;br /&gt;I/ActivityManager(  564): Displayed activity com.earl.native1/.native1: 704 ms&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Congratulations!!! You have just built your first JNI app for Android.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/prompt&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-6698912313685875069?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/6698912313685875069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/07/writing-applications-using-android-ndk.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/6698912313685875069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/6698912313685875069'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/07/writing-applications-using-android-ndk.html' title='Writing applications using the Android NDK'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-5504724170326468670</id><published>2009-07-23T01:04:00.000-07:00</published><updated>2009-07-23T02:01:26.583-07:00</updated><title type='text'>Installing Android NDK on Windows XP/Vista</title><content type='html'>&lt;div style="text-align: justify;"&gt;What you need:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;A Windows XP/Vista computer (yeah, u absolutely need it :)).&lt;/li&gt;&lt;li&gt;cygwin (make sure that make and gcc utilities are installed).&lt;/li&gt;&lt;li&gt;Android SDK 1.5&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Steps to install:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Download the NDK from the Android developer site and unpack it to a disk location. I'm calling this NDK_HOME.&lt;/li&gt;&lt;li&gt;Startup cygwin and navigate to NDK_HOME.&lt;/li&gt;&lt;li&gt;Enter this command&lt;br /&gt;&lt;/li&gt;&lt;li&gt;export ANDROID_NDK_ROOT=NDK_HOME&lt;ndk_home&gt; (note, use forward slashes '/' instead of the usual windows backslash. Remember that you are using a Linux emulation tool!).&lt;/ndk_home&gt;&lt;/li&gt;&lt;li&gt;Run this setup command.&lt;/li&gt;&lt;li&gt;bash build/host-setup.sh&lt;/li&gt;&lt;li&gt;You should get a "Host Setup Complete" message if everything went properly.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;You're done.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-5504724170326468670?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/5504724170326468670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/07/installing-android-ndk-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/5504724170326468670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/5504724170326468670'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/07/installing-android-ndk-on-windows.html' title='Installing Android NDK on Windows XP/Vista'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-8959154331550479696</id><published>2009-07-21T22:42:00.001-07:00</published><updated>2009-07-21T22:49:10.624-07:00</updated><title type='text'>NAT Traversal for Android</title><content type='html'>&lt;div style="text-align: justify;"&gt;STUN (&lt;b&gt;Simple Traversal of User Datagram Protocol through Network Address Translators) &lt;/b&gt;is a protocol that helps in the traversal of NATs/Firewalls. STUN works with full cone NAT, restricted cone NAT, and port restricted cone NAT. It does not work with Symmetric NATs. Traversal Using Relay NAT(TURN) maybe used in these cases. Another method for traversal is ICE (Interactive Connectivity Establishment). Here, I am focusing on NAT traversal for Android phones using STUN&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;jStun&lt;/li&gt;&lt;li&gt;stun4j&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;These are two STUN libraries available for the Java language. A jStun port is available from HSC. I've tested this on the Android Emulator. It returns an IP address and port mapping.&lt;br /&gt;&lt;br /&gt;stun4j is another STUN library. This I tried directly on the Android emulator with no porting. It works directly with no code changes. I have compared results from both the libraries. Results are the same!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-8959154331550479696?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/8959154331550479696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/07/nat-traversal-for-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8959154331550479696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8959154331550479696'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/07/nat-traversal-for-android.html' title='NAT Traversal for Android'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-4364875139802431604</id><published>2009-07-20T01:31:00.000-07:00</published><updated>2009-07-20T01:40:25.579-07:00</updated><title type='text'>Real Time Audio Streaming for Android - Some Developments</title><content type='html'>&lt;div style="text-align: justify;"&gt;OK, so I've made some progress on this project.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt; I have figured out how the Audio Streaming APIs work on the 1.5 SDK.&lt;/li&gt;&lt;li&gt;I have obtained a G 711 speech codec in Java which runs on Android. This was taken from the 'sipdroid' VoIP client.&lt;/li&gt;&lt;li&gt;I have been able to stream a pre-recorded PCM voice file to the emulator via UDP and play it using AudioTrack.&lt;/li&gt;&lt;li&gt;I have figured out how to use the jLibRtp RTP stack in a Java program. There is a port of the same stack by HSC for Android. So I guess it should work there also, but, I must still test it out.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;So, it looks like most of the pieces of the puzzle are in place. However, while using AudioRecord and UDP on the emulator, I have encountered the following problems.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;On the emulator, I instantiate AudioRecord with a sampling rate of 8000Hz and an encoding of 16BIT PCM. This works fine. However, when I try to run the same code on a device, the AudioRecord object does not get created. Looks like I will have to experiment with different sampling rates and buffer sizes. Strange, huh?&lt;/li&gt;&lt;li&gt;To test the sending and receiving of PCM data, I built a small Java applet that streamed the PCM data to the emulator. I setup proper port redirections. I am able to receive the data in the emulator, but, when I try to send data OUT from the emulator, nothing happens.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Looks like once these problems are sorted out, we are good to go!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-4364875139802431604?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/4364875139802431604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/07/real-time-audio-streaming-for-android.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/4364875139802431604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/4364875139802431604'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/07/real-time-audio-streaming-for-android.html' title='Real Time Audio Streaming for Android - Some Developments'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-3506235312553713700</id><published>2009-06-11T00:36:00.000-07:00</published><updated>2009-06-11T00:51:23.461-07:00</updated><title type='text'>Real Time Voice Streaming for Google Android - Part 2 [Technical Details]</title><content type='html'>&lt;div style="text-align: justify;"&gt;To stream voice, fundamentally, we need the following components.&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;A method to obtain PCM audio from the Mic and store it in an in-memory buffer.&lt;/li&gt;&lt;li&gt;A protocol suitable for transfer of real time data - RTP in other words.&lt;/li&gt;&lt;li&gt;Some kind of signaling protocol to negotiate the call. (Eg: SIP, XMPP/Jingle).&lt;/li&gt;&lt;li&gt;A codec to optimize the data transfer format. (Eg: Speex).&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;As far as the Google Android platform is considered, until recently (Android SDK 1.1 and lower) did not have the first capability. Android 1.5 still does not have an RTP stack, but I have ported a small but functional Open Source RTP stack to the platform. As for signalling, SIP and XMPP/Jingle, I feel have too much overhead. Since both peers will be utilizing my client, a stripped down negotiation protocol would be more efficient. This is where XMPP comes in. As you may know, XMPP is XML based and is widely used. Hence, we can build a small but fast call negotiation protocol over XMPP, given that the parties are logged in via their Jabber accounts.&lt;br /&gt;One may think that this won't inter-operate with existing infrastructures. This is true. To have that capability would translate into unnecessary complexity at this stage. Integration with existing systems is future work as of now. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another point is that trasmitting raw PCM over the internet is not a very efficient design choice. For this, we need some kind of Codec that will provide us with compression, decompression etc. the Speex codec is Open source and available in Java as jSpeex. It is simple to use.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I will be approaching this project in the following manner.&lt;br /&gt;&lt;br /&gt;1. Write PURE java code and test my ideas and algorithms on a Java applet.&lt;br /&gt;2. Port it to the Android platform.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-3506235312553713700?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/3506235312553713700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/06/real-time-voice-streaming-for-google_11.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/3506235312553713700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/3506235312553713700'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/06/real-time-voice-streaming-for-google_11.html' title='Real Time Voice Streaming for Google Android - Part 2 [Technical Details]'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-7952699127038334227</id><published>2009-06-11T00:24:00.000-07:00</published><updated>2009-06-11T00:33:30.422-07:00</updated><title type='text'>Real Time Voice Streaming for Google Android - Part 1 [Intro]</title><content type='html'>&lt;div style="text-align: justify;"&gt;Your first thought might be, "Hey, isn't that already available with Skype?". Well, yes and no. For starters, to use the Skype services, ALL features may not be free depending on whom you contact. Secondly, you need to create a specialized Skype account to use their services. What I intend on doing is to utilize existing Google Mail and Jabber IDs to build a P2P voice streaming application for the Android platform(and maybe others, but for now, lets narrow it down). You don't have to create a special ID to use the service. Just login via your already existing GMail or Jabber IDs and start talking!!!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-7952699127038334227?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/7952699127038334227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/06/real-time-voice-streaming-for-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/7952699127038334227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/7952699127038334227'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/06/real-time-voice-streaming-for-google.html' title='Real Time Voice Streaming for Google Android - Part 1 [Intro]'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-4837772539603748760</id><published>2009-04-28T10:10:00.000-07:00</published><updated>2009-04-28T10:14:28.647-07:00</updated><title type='text'>My Latest Endeavors</title><content type='html'>Hey There, been a long time indeed..... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I thought that I would post my latest R&amp;amp;D work here. So here goes. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Android 1.5 is out - Hence, try out streaming and therefore VoIP.&lt;/li&gt;&lt;li&gt;MorseXMPP.&lt;/li&gt;&lt;li&gt;Distributed AI in general and for Web Searches.&lt;/li&gt;&lt;li&gt;Installation of MAC OS X on x86 machines.&lt;/li&gt;&lt;/ul&gt;If anyone's interested in any of these topics, drop me a mail!!!&lt;br /&gt;&lt;br /&gt;Cheers!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-4837772539603748760?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/4837772539603748760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/04/my-latest-endeavors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/4837772539603748760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/4837772539603748760'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/04/my-latest-endeavors.html' title='My Latest Endeavors'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-8771158559170563525</id><published>2009-01-16T22:34:00.000-08:00</published><updated>2009-01-16T22:36:26.527-08:00</updated><title type='text'>How to program in C    :-)</title><content type='html'>Read on...&lt;br /&gt;&lt;br /&gt; 1. Use lots of global variables.&lt;br /&gt;   2. Give them cryptic names such as: X27, a_gcl, or Horace.&lt;br /&gt;   3. Put everything in one large .h file.&lt;br /&gt;   4. Implement the entire project at once.&lt;br /&gt;   5. Use macros and #defines to emulate Pascal.&lt;br /&gt;   6. Assume the compiler takes care of all the little details you didn't quite understand.&lt;br /&gt;   7. Rewrite standard functions and give them your own obscure names.&lt;br /&gt;   8. Use obscure, proprietary, non-portable, compiled library packages so that you never have to move from the platform you love so well.&lt;br /&gt;   9. Use very descriptive comments like /* printf("Hello world\n"); */ before each function call.&lt;br /&gt;  10. REMEMBER - Carriage returns are for weenies. Tabs are for those who have not reached weenie-dom yet.&lt;br /&gt;  11. Include LOTS of inline assembly code.&lt;br /&gt;  12. "User Interfaces" are for morons. "Users" have no business interfacing with a professional product like yours.&lt;br /&gt;  13. If you are forced to comment your code (in English), then borrow comments from somebody else's code and sprinkle them throughout yours. It's quick, easy, and fun to watch people's expressions as they try to figure it out.&lt;br /&gt;  14. Remember to define as many pre-processor symbols as possible in terms of already defined symbols. This is considered 'efficient use of code'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-8771158559170563525?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/8771158559170563525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/how-to-program-in-c_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8771158559170563525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8771158559170563525'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/how-to-program-in-c_16.html' title='How to program in C    :-)'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-5108626569404305958</id><published>2009-01-16T22:21:00.000-08:00</published><updated>2009-01-16T22:23:52.367-08:00</updated><title type='text'>How to debug in C  :-) :-)</title><content type='html'>After reading this, I'm sure you won't ever have problems debugging again!!!!&lt;br /&gt;&lt;br /&gt;  1. If at all possible, don't. Let someone else do it.&lt;br /&gt;   2. Change majors.&lt;br /&gt;   3. Insert/remove blank lines at random spots, re-compile, and execute.&lt;br /&gt;   4. Throw holy water on the terminal.&lt;br /&gt;   5. Dial 911 and scream.&lt;br /&gt;   6. There is rumor that "printf" is useful, but this is probably unfounded.&lt;br /&gt;   7. Port everything to CP/M.&lt;br /&gt;   8. If it still doesn't work, re-write it in assembler. This won't fix the bug, but it will make sure no one else finds it and makes you look bad.&lt;br /&gt;   9. Since you got it to compile, the problem must be in the Other Guys Code.&lt;br /&gt;  10. If it's all your code then the problem MUST be in those unreliable Standard Libraries. See '1'.&lt;br /&gt;  11. Claim the bug reports are vicious lies meant to tarnish your sterling reputation as a 'C' programmer (well aren't they ?). After all, those who wrote the reports couldn't even read your code. How could they possibly know if there was a bug or not?&lt;br /&gt;  12. If they could read your code, review "How to program in C", above.&lt;br /&gt;  13. Claim that there wouldn't be a problem if this stingy Company/School/Wife/etc would spring for a copy of C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-5108626569404305958?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/5108626569404305958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/how-to-debug-in-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/5108626569404305958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/5108626569404305958'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/how-to-debug-in-c.html' title='How to debug in C  :-) :-)'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-2684640094643461389</id><published>2009-01-10T22:38:00.000-08:00</published><updated>2009-01-10T23:54:43.830-08:00</updated><title type='text'>Bob: Hello, Pete: Aloha, Bob: Whats up dude?...</title><content type='html'>&lt;span style="font-style: italic;"&gt;Tutorial: Creating your own Grade-I VoIP network so that you can Voice Chat with your buddies. [Part I] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;What you need:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;1. A computer (obviously!).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;2. A softphone application (I suggest X-Lite, just go to www.google.com and search for X-Lite download).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;3. A Soft-PBX (go to http://www.freeswitch.org and download).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;4. A DNS name for your system (go to http://www.dyndns.org and register for a free account). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The 'Low-Down' on Voice Chatting: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I will explain the basics here because I feel that if you have a little background on the subject, it would be much more easier to have your voice chatting service up and running.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Okay, so here goes.... &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;To voice chat with your buddies, you must have a way of identifying them independently of their IP and port address combination. This is where a server comes in. Basically, all your buddies register on the server. They obtain identifers of the form 'user@domain'. (We will be using FreeSwitch, also known as FS). Note that the 'user' part is an extension number. You use this when you dial a friend.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;The server functions as a 'registrar', meaning that people register here, and it stores a database mapping the users current IP and port to the identifier.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Once all your buddies are registered on the server, they must use a 'Softphone' application. This is software that can make and recieve VoIP calls. Technically, it is known as a SIP UA.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;To make a call to a friend, all you have to do is dial his extension and Hey Presto!!!, you are calling your friend. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I must admit, this was a very 'Non-Technical' introduction, but you don't need ALL the details to do it practically. Nevertheless, I will write a post highlighting the technical details. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Well, so much for this post. I will write the exact process in a later post. This series is going to be quite a long one, so, till then...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-2684640094643461389?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/2684640094643461389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/bob-hello-pete-aloha-bob-whats-up-dude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2684640094643461389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2684640094643461389'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/bob-hello-pete-aloha-bob-whats-up-dude.html' title='Bob: Hello, Pete: Aloha, Bob: Whats up dude?...'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-2724407248873764667</id><published>2009-01-04T04:56:00.000-08:00</published><updated>2009-01-04T05:13:06.845-08:00</updated><title type='text'>Java for the iPhone (without jailbreaking)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt; I bet you must be thinking, "What???, How is this is possible." I too was thinking the exact same thing when I came across this project. Running Java on the iPhone, or rather, building apps for the iPhone using Java is part of a larger project known as XMLVM (http://www.xmlvm.org)  that utilizes XML as an intermediate language for cross-compiling at the byte-code level. Note that this cross-compilation is NOT at the source level. XMLVM         cross-compiles byte code instructions from Sun Microsystem's virtual machine and Microsoft's Common Language Runtime. XMLVM can be used to cross compile .NET CIL, Ruby YARV and Java Byte Code to JavaScript, Python and Objective-C/C++&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Details on Java for iPhone:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;XMLVM operation begins with the byte code outputted from a regular Java compiler. Then, an XML version of the byte code is produced. This is then transformed into Objective-C using transformations on the original XML with the help of XSLT. What results is the same, functionally equivalent code in Objective-C. This can then be linked with libraries for UI (Cocoa) etc. to produce a native iPhone app.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;XMLVM goes one step further. They have implemented Java counterparts of the Cocoa library components. This makes it possible to develop apps for the iPhone on Windows. The XMLVM project offers an iPhone emulator which is actually a Java Applet. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Example of the classic Hello, World app for the iPhone using Java:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;tt class="java"&gt;&lt;span class="java4"&gt;public class &lt;/span&gt;&lt;span class="java10"&gt;HelloWorld &lt;/span&gt;&lt;span class="java4"&gt;extends &lt;/span&gt;&lt;span class="java10"&gt;UIApplication&lt;br /&gt;&lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;  &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;applicationDidFinishLaunching&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;NSNotification aNotification&lt;/span&gt;&lt;span class="java8"&gt;)&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span class="java10"&gt;CGRect rect = UIHardware.fullScreenApplicationContentRect&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      UIWindow window = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;UIWindow&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;rect&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      window.orderFront&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      window.makeKey&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      window._setHidden&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;false&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      rect.origin.x = rect.origin.y = &lt;/span&gt;&lt;span class="java7"&gt;0&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      UIView mainView = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;UIView&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;rect&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      window.setContentView&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;mainView&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      UITextLabel _title = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;UITextLabel&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;rect&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      _title.setText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;"Hello World!, This is Earlence"&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      _title.setCentersHorizontally&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;true&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;      mainView.addSubview&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;_title&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="java4"&gt;public static &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;main&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] &lt;/span&gt;&lt;span class="java10"&gt;args&lt;/span&gt;&lt;span class="java8"&gt;)&lt;br /&gt;        {&lt;br /&gt;                 &lt;/span&gt;&lt;span class="java10"&gt;UIApplication.main&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;args, HelloWorld.&lt;/span&gt;&lt;span class="java4"&gt;class&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(adapted from XMLVM project site)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;As you can see, development for the iPhone just got a little easier.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-2724407248873764667?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/2724407248873764667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/java-for-iphone-without-jailbreaking.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2724407248873764667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2724407248873764667'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/java-for-iphone-without-jailbreaking.html' title='Java for the iPhone (without jailbreaking)'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-8702117284726197581</id><published>2009-01-02T21:01:00.000-08:00</published><updated>2009-01-02T21:43:42.079-08:00</updated><title type='text'>Programming, Programming, Programming...</title><content type='html'>&lt;div style="text-align: justify; font-style: italic;"&gt;Aah!, The word has a merry ring to it!, but alas, not all people think alike!!!. I would like to share a few thoughts of mine about programming in this post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   We have all heard the phrase "Programming is an Art and not a Science". I, for one, feel that it should be "Programming is an Art and not a Science, BUT it becomes a Craft with experience". It is very true that when one starts out initially, everything is a challenge, and hence programming is perceived as an Art, but this is only half the picture. As a person gains experience, he gains the mental facility to express his ideas in a programming language with ease. Hence, programming becomes a craft.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  If you are a keen reader, you would have noticed something about the previous paragraph. I gave some insight into what separates average programmers from the so called "Virtuosos". They very fact that I used the word "Craft" and "Experience" says that excellent programmers mostly aren't born with the ability, instead, their skill is a result of a lot of hard work. I can give an example here. It is a common fact that a person can learn to play the Guitar to any skill level he/she desires. The only catch here, is practice, and practice translates into experience. The same is true for programming. I've been wanting to avoid the cliche, "Practice makes Perfect", but please, do not be mistaken, these words are very true indeed!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   So, you might be thinking, "Cool!, so What can I do to improve my skills?". Well, I have a few pointers that I found very helpful when I was starting out.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Don't think of programming as a burden, think of it as a recreational activity.&lt;/li&gt;&lt;li&gt;Pick a language you are comfortable with. Note that this post isn't about learning a language. I feel anyone can learn a language. Its how you &lt;span style="font-weight: bold;"&gt;translate&lt;/span&gt; your ideas into the language. Logic matters!!!&lt;/li&gt;&lt;li&gt;Start off by solving relatively easy problems. Don't pick anything too hard.&lt;/li&gt;&lt;li&gt;Remember how you solved earlier problems. You should be comfortable with the idea of resuing the ideas you used to solve earlier problems. With time, one almost gets a feeling of deja-vu "Hey, I think i've done this before!!". This will greatly help your abilities related to intergration of solutions.&lt;/li&gt;&lt;li&gt;Try to read the book, "Structure and Interpretation of Computer Programs", by Alan J. Perlis.&lt;/li&gt;&lt;li&gt;If you choose to program in C initially, read the book by Kernighan and Ritchie and the book "Programming in C" by Venugopal Prasad.&lt;/li&gt;&lt;li&gt;Listen to music while you program!!!. Well, I don't know whether this will be helpful to everyone, but it sure as hell helps me out.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Well, I would like to end this post by saying that it doesn't matter how many languages you know. What matters is whether you are able to express your ideas in the language effectively and Nothing Else Matters!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."&lt;br /&gt;   --Brian Kernighan&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-8702117284726197581?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/8702117284726197581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/programming-programming-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8702117284726197581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/8702117284726197581'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/programming-programming-programming.html' title='Programming, Programming, Programming...'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6415234410003972504.post-2880037461033748300</id><published>2009-01-02T06:59:00.000-08:00</published><updated>2009-01-02T07:06:34.109-08:00</updated><title type='text'>The First Post</title><content type='html'>&lt;div style="text-align: justify; font-style: italic;"&gt;&lt;span style="font-family:verdana;"&gt;Well, guess what???   This is my first post!!! I bet you couldn't figure that one out, eh? :)  Just Kiddin'!!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;This blog is my resolution for the year 2009. &lt;/span&gt;This is a place where I write about my passions in life, namely, Computer Technology, Guitars and Rock Music.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I use the word Computer Technology because I focus on a wide array of fields ranging from &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;rtificial Intelligence to &lt;span style="font-weight: bold;"&gt;S&lt;/span&gt;ystems Programming. (well, I wanted it to be an A to Z, but I couldn't find anything with a Z!!!)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I hope you enjoy reading my blog and for all the "Tech Geeks" out there, hope you have a blast reading this blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Earlence Tezroyd Fernandes&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6415234410003972504-2880037461033748300?l=earlence.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://earlence.blogspot.com/feeds/2880037461033748300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://earlence.blogspot.com/2009/01/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2880037461033748300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6415234410003972504/posts/default/2880037461033748300'/><link rel='alternate' type='text/html' href='http://earlence.blogspot.com/2009/01/first-post.html' title='The First Post'/><author><name>Earlence "The Ripper" Tez</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
