2011-09-26

UnRoot LG Optimus V

I needed to find out how to remove the root my LG Optimus V.  Needed to UnRoot my phone and return it to stock.  Found this link.  Very helpful.  Needed to refer back to my own link (HERE) about rooting for a refresher, but all in all pretty straight forward.  Especially if you have made a backup of the stock rom, removing the root from your LG Optimus V should not be too difficult.

How to restore your Optimus V to almost original condition

2011-08-15

OpenSL ES for Android

I'm beginning to feel like an AD&D half-elf multi-class 3rd level character. All of my classes are level 1 or 2, and I've got like 7 classes... If you don't know what I mean, I'm not going to explain. (It's actually kinda cool in a way: It keeps things interesting.) Here's another one!

Time to become a sound guy!

**Think of this API (Application Programming Interface) as a huge soundboard in a recording studio. The computer screen is a window into the recording booth. The keywords and classes are buttons, dials, sliders and groups of all of the above situated on the interface/soundboard.

While learning the NDK for Android SDK, I am focusing on OpenSL ES for Android. Sound baby. I'll throw some notes up here. I'm not promising any organization and/or coherency.

This first link is titled, "OpenSL ES for Android". It refers specifically to using OpenSL ES within Android 2.3, the implementations and limitations thereof and other important knowledge and warnings.
http://mobilepearls.com/labs/native-android-api/opensles/index.html

{
Some extracted notes on the above link:
...Compiled and linked inline
You can link your audio content directly into the shared library, and then play it using an audio player with buffer queue data locator. This is most suitable for short PCM format clips. The example code uses this technique for the "Hello" and "Android" clips. The PCM data was converted to hex strings using a bin2c tool (not supplied).
...The PCM data format can be used with buffer queues only. Supported PCM playback configurations are 8-bit unsigned or 16-bit signed, mono or stereo, little endian byte ordering, and these sample rates: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, or 48000 Hz. For recording, the supported configurations are device-dependent, however generally 16000 Hz mono 16-bit signed is usually available.
Note that the field samplesPerSec is actually in units of milliHz, despite the misleading name. To avoid accidentally using the wrong value, you should initialize this field using one of the symbolic constants defined for this purpose (such as SL_SAMPLINGRATE_44_1 etc.)

Platform configuration

...OpenSL ES for Android is designed for multi-threaded applications, and is thread-safe.
OpenSL ES for Android supports a single engine per application, and up to 32 objects. Available device memory and CPU may further restrict the usable number of objects.
slCreateEngine recognizes, but ignores, these engine options:
  • SL_ENGINEOPTION_THREADSAFE
  • SL_ENGINEOPTION_LOSSOFCONTROL

Planning for source compatibility [things to be very careful about]

...SL_DATAFORMAT_PCM does not permit the application to specify the representation of the data as signed integer, unsigned integer, or floating-point. The Android implementation assumes that 8-bit data is unsigned integer and 16-bit is signed integer. In addition, the field samplesPerSec is a misnomer, as the actual units are milliHz. These issues are expected to be addressed in the next OpenSL ES version, which will introduce a new extended PCM data format that permits the application to explicitly specify the representation, and corrects the field name. As this will be a new data format, and the current PCM data format will still be available (though deprecated), it should not require any immediate changes to your code.

...The Android simple buffer queue data locator and interface are identical to the OpenSL ES 1.0.1 buffer queue locator and interface, except that Android simple buffer queues may be used with both audio players and audio recorders, and are limited to PCM data format. [OpenSL ES 1.0.1 buffer queues are for audio players only, and are not restricted to PCM data format.]
For recording, the application should enqueue empty buffers. Upon notification of completion via a registered callback, the filled buffer is available for the application to read.
For playback there is no difference. But for future source code compatibility, we suggest that applications use Android simple buffer queues instead of OpenSL ES 1.0.1 buffer queues.

Objects and interface initialization

[Important to review this section extensively to understand how OpenSL operates. No room to paste it all here.]

[found these bits interesting]

...Callback handlers are called from internal non-application thread(s) which are not attached to the Dalvik virtual machine and thus are ineligible to use JNI...

Performance

As OpenSL ES is a native C API, non-Dalvik application threads which call OpenSL ES have no Dalvik-related overhead such as garbage collection pauses. However, there is no additional performance benefit to the use of OpenSL ES other than this. In particular, use of OpenSL ES does not result in lower audio latency, higher scheduling priority, etc. than what the platform generally provides. On the other hand, as the Android platform and specific device implementations continue to evolve, an OpenSL ES application can expect to benefit from any future system performance improvements.

}

Liar! Blasphemer!!!

I don't see the connection! Huh? What? If you can figure out how the above link is indirectly connected to an industrial metal group from the 80's and 90's you get a gold star.

The official Khronos site on OpenSL ES. (Non-specific to Android of course)
http://www.khronos.org/opensles/

NOTE:I must apologize that there isn't some sort of tutorial or sample code or anything here.  Unfortunately, I had to shift gears and run off and go a different direction for a while, so I never did really get into OpenSL ES any further (YET!).  Those links are all I've got.


Notes on Android NDK

Terms for the day:

JNI - The Java Native Interface (JNI) is a programming framework that enables Java code running in a Java Virtual Machine (JVM) to call and to be called[1] by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly.

Oh really? Well, what the hell does "native" mean in this context?

Native application - An application designed to run in the computer environment (machine language and OS) being referenced. The term is used to contrast a native application with an interpreted one such as a Java application that is not native to a single platform. The term may also be used to contrast a native application with an emulated application, which was originally written for a different platform.

Aha... so being that the code is targeted at a specific operating system (ie. Gingerbread) and hardware (eg. LG Optimus V running Gingerbread), there is speed to be gained! According to many sources, anywhere from 10x to 100x depending on the sitch.

Here's a link on the Android developers site about installing and getting started with the Android Native Development Tools. The NDK is a companion to the Android SDK, so all SDK installation and components should already be installed before moving forward with the NDK.

http://developer.android.com/sdk/ndk/index.html

I downloaded from this link http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2 and then extracted into home/ultramanjones/android folder.

Read the Android NDK Overview (as instructed).

The documentation mentioned ARM CPUs... from Wiki:
"ARM is a 32-bit reduced instruction set computer (RISC) instruction set architecture (ISA) developed by ARM Holdings. It was known as the Advanced RISC Machine..."
and...
"The relative simplicity of ARM processors makes them suitable for low power applications. As a result, they have become dominant in the mobile and embedded electronics market..."

So this is why we're talking about this; ARM CPUs are in all the cell phones.

ADT - Android Development Tools is a plugin for the Eclipse IDE that is designed to give you a powerful, integrated environment in which to build Android applications.

Android makefile specification file:
file:///home/ultramanjones/android/android-ndk-r6/docs/ANDROID-MK.html





2011-07-15

Super Bible

I recently installed (again) Visual C++ 2008 Express Edition, downloaded the Super Bible demo library from their site and started going through the OpenGL SuperBible 5th Edition chapter by chapter and picking apart the demos (as they do in the book).

On chapter 3 currently. Lately, I've been coding in PyOpenGL, so C++ OpenGL is quite different, plus the SuperBible utilizes its own GLTools library (early in the book especially) to simplify the learning curve, but I'm finding it quite a nice refresher and it's so nice to have all of the demos right there and working perfectly inside VC 2008 Express. Too be able to pick apart the code, mess with it, copy from it, and watch it run on the fly is invaluable. Highly recommended. Man if only we'd had such a luxury when we (that is me and my colleagues in Intro to Game Physics) were humping our happy asses up 3D Buzz mountain without any documentation to speak of! Gack! WHY Buzz and Joel? WHY!!!?

2011-07-11

Installing PyOpenGL-3.0.1 in Ubuntu 10.04 LTS

Why couldn't I find this in the first 6 hours of searching???

http://docs.python.org/release/3.0.1/download.html

And right there at the "Cheese Shop" too... aye aye yae! The instructions for installing were on page 8 of the 50 page document.

(*note: if you are seeing this for the first time be sure and install the necessary dependencies [see below], AND remove any former installations of PyOpenGL, such as PyOpenGL-3.0.0 before continuing)

All I had to do was download the tarball from http://www.python.org/ftp/python/3.0.1/Python-3.0.1.tar.bz2

Move it to /usr/local/src

Right click on it and choose "extract here".

Open a terminal and type:

cd /usr/local/src/PyOpenGL-3.0.1

Then:

sudo python setup.py install

Entered my password and watched it go.

Just like that I was back in business and running the afore mentioned demo on my other machine.

I should throw in a caveat here. I did in fact first install Numpy, PIL, and GLUT as dependencies already, for when I was running PyOpenGL-3.0.0. These all have executable "instant" installers available so long as you are running python 2.6. Find them here.

To remove former installation PyOpenGL-3.0.0 I just opened Synaptic Package Manager (System/Administration/Synaptic Package Manager) searched for "pyopengl", right clicked on "...3.0.0" when it showed up, and selected "Remove Completely".
=============================================

An Ubuntu link that also may be helpful on troublesome tarball installs:
https://help.ubuntu.com/community/CompilingEasyHowTo

2011-07-10

A Simple PyOpenGL-3.0.1 Shader Demo

Alright. Here is that code that I mentioned in an earlier post. Know that you will need to install Python 2.6 and PyOpenGL-3.0.1 in order to run this code. It takes advantage of the new shader convenience module found in 3.0.1. This helped make switching shaders on the fly much easier to implement. Type "," or "." to page through shaders. "n" to toggle normals from "averaged" to "flat". When viewing "no shader" hit "1" or "2" to toggle light0 and light1 on/off respectively. Oh, and can't forget, "r" to start the spheres rotating. The sphere on the left is a glutSolidSphere, the one on the right is a sphere built from a .msh file that Mike wrote.

Look through the code! I hope it's helpful to someone, somewhere.

rendersphere.py
sphere1218.msh

PS. I may update this later and include more information on the dependencies and/or installing the correct versions of PyOpenGL... etc.

PyOpenGL-3.0.1 is only available as a tarball and/or .bz2 package. So... check
out my later post http://ultraopengl.blogspot.com/2011/07/installing-pyopengl-301.html for info on installing it.

2011-07-08

NETFLIX ON OPTIMUS V!!! (link I found)

My cell wasn't charging on any charger I could find. I was about to panic. I was searching for sites concerning the issue while I reset the phone and I found THIS!!! My phone is fine now that I turned it off and took the battery out, btw. smiles...

http://lgoptimusv.info/2011/06/netflix-work-lg-optimus-v-no-roo/#more-1311

My thanks to Rock That LG Optimus V for the info.

Reminder to myself

Post the code that we worked up for the simple shader comparison tool in PyOpenGL. Why not share the knowledge with other beginners?! Good stuff. When we get deeper in I may not want to share all of our tricks, or I might not care... not sure, but, on this level, I KNOW I am hungry searching for good code and it is so hard to find, so, in good conscience, I just gotta do it. Unfortunately, I don't have it on hand. Thus, the reminder post. I'll erase this later. Peace. (as if anyone is reading this lol)

PS. What I am referring to above is that I got a few simple shaders working on Mike and I's sphere demo thing. Phong, multiple light phong, toon, point light. Basic stuff. Also we added the ability to swap out shaders on the fly to see the difference. Mike created triangle mesh sphere from scratch complete with proper VBO's to house the vertices and normals. He also created a version that has what he's calling "averaged normals". It makes a polyhedron (in this case shaped much like a sphere) appear smoother and rounder as if made from exponentially more triangles. Awesome technique. So know we have this demo thing where we can test new shaders and play around with GLSL and OpenGL. Next, come more complicated shaders, then textures, then effects... etc...

2011-07-05

Installing PyOpenGL in Windows XP

I'm going to post this as is. I kept a record on notepad as I went. It ain't exactly a tutorial. Just a weB LOG of figuring out what to do!

Used this site as a reference point, (among others):
http://pyopengl.sourceforge.net/documentation/installation.html

It's sourceforge, so I tend to trust it, but I think it's wicked old...
BTW I am on my sister's family PC... ;) (stuck here dog-sitting)

Here's the rest:

Started just after 2:30am or so...

Installed (In Order):
python-2.7.2
PyOpenGL-3.0.1.win32

*could NOT install PyOpenGL-accelerate-3.0.1.win32-py2.6
because it requires Python 2.6 precisely.

- tried to install numpy-1.6.1rc2-win32-superpack-python2.6 (Numeric Python), but it
too requires 2.6.
-Downloaded the tarball file for Python 2.6.7 (Python-2.6.7.tar.bz2)j
-Downloaded and installed 7Zip.
-extracted the bz2 and then unzipped to the program files folder
- ^that did not work... apparently I need to use makefiles etc... and I'm not about to get into that whole process blind. Couldn't find any tutorials/instructions or forum chatter so...
-Downloaded MSI installer for Python 2.6
-^installed
-installed Numpy (see above)
-downloaded and installed PIL-1.1.7.win32-py2.6

(http://www.pythonware.com/products/pil/index.htm#pil117)
-Tried to install GLUT, but then realized that it SHOULD be included with the PyOpenGL
install (according to: http://pyopengl.sourceforge.net/documentation/installation.html)
-Downloaded PyGame installer for 2.6 (pygame-1.9.1.win32-py2.6) and installed.
-Installed PyOpenGL-3.0.1.win32
-Installed PyOpenGL-accelerate-3.0.1.win32-py2.6
-Installed Numpy

#will ANY OF THIS S#!T WORK? God knows...

It DID NOT appear to work (when I tried to run some Rubik's Cube/NEHE based code I found I got lots of discouraging errors, especially involving OpenGL calls and Numpy)

GACK!!!

Uninstalled everything I could find and re-installing... hopefully in the proper order this time...? (At least I already have all the installers found and dl'd)
4:31am

-Downloaded updated drivers for this crappy Intel video chipset on AK's PC and installed'em
-Restarting PC now
-Re-installed Python 2.6
-Downloaded and installed OpenGL Extensions Viewer 3.37
-It says that OpenGL 1.4 is the version on this PC
-Installed numpy-1.6.1rc2-win32-superpack-python2.6
-Installed PIL-1.1.7.win32-py2.6
-Installed PyOpenGL-3.0.1.win32 (which supposedly contains GLUT and GLE)
-When attempting to install PyOpenGL-accelerate-3.0.1.win32-py2.6 I got a pop up error
window. FAILED TO INSTALL ^^^^
-Spent an hour or so bouncing around the net like a fly caught in a spider web... googling
"pyopengl nehe" over and over in different forms

-FINALLY found http://pypi.python.org/pypi/PyOpenGL-Demo
-This package contains most of the NEHE lessons ported to PyOpenGL
-Ran Lesson 5 and it worked!!! yay!!!

TOMORROW I work on getting the tune shader working AND THEN phong...
5:45am Ouch...

2011-06-22

Android Graphics Tutorials

Found a helpful blog. Thought I'd post some links here:

The Organic Android by Ruben Lopez

Starting to play with graphics

Creating 2D games with Android and Blender

2011-06-07

Root LG Optimus V (Android 2.2 Froyo)

Well it appears I have FINALLY rooted my Optimus V! Woo Hoo! For those who don't know what I'm talking about, I have taken over the Android OS so that I can do all sorts of things like install custom apps and roms and, perhaps most importantly MOVE APPS TO THE SD DRIVE that won't move with App2SD alone.

Considering the tiny amount of available memory on this model, this is huge! In my humble opinion, this phone was starting to become a huge disappointment, because I was constantly having to remove applications that I really wanted, just so the phone would work. I LOVE my Android phone, but, in the end, it is a hand sized mobile computer and no computer with choked memory space is worth a crap in a fast paced world, full of brand new apps and things to try every week.

So here is the sight I primarily used to do the job.
http://forum.androidcentral.com/optimus-v-rooting-roms-hacks/57485-how-root-lg-optimus-v.html

Earlier in the evening (week, month... lol), I accessed all sorts of sites all over the net. I first tried the process in Ubuntu 10.04, couldn't seem to get it done. I won't get into why. I'm no guru and I didn't keep notes. If I had, they would only confuse anyone who read them. Myself included I'll bet. Anyway, here are some sites I did read to help figure out what I was doing and what I might be doing wrong. I'm still not sure why it didn't work the 2 or 3 times before the last try, because I don't recall changing anything really at that point.

http://forum.xda-developers.com/showthread.php?t=803682

http://shortfuse.org/?page_id=2

I THOUGHT about using this method:
http://www.addictivetips.com/mobile/how-to-root-lg-optimus-v-virgin-mobile/

... but it involved putting files on the SD Card and it sounded more complicated than I wanted to get into at first. Later, however I may want to go back and install LEGO-ROM-V2. We'll see.

As per Revolution Red's instructions, I installed "Superuser" and "Titanium Backup".

Here is a sight with a "user manual" for Titanium Backup.

And a post I found at DROIDLIFE talking about moving apps. It mentions Titanium Backup, too.

2011-02-11

Some notes on preparing Eclipse for Python Development

According to this site - http://clebeaupin.wordpress.com/2007/09/23/how-to-python-on-eclipse-ide/ - I'll be needing the following:

  • WTP (Web tools platform) to edit CSS, JS, HTML and XML files
  • CVS to work with CVS repositories
  • Subclipse to work with SVN repositories
  • Pydev to edit python files
  • AnyEditTools to add very useful features in text edition
(I'm going with Subversive instead of Subclipse.)

Parts of the instructions on the page above are outdated, so I had to adjust for the Galileo distro that I am currently running. I referred to this site - http://download.eclipse.org/webtools/updates/ - to find out how to add the WTP to Eclipse.

Install WTP:
1. Open Eclipse. Go to Help>Install New Software...
2. Click on Add... (upper right)
The Add Site dialogue box appears.
3. Enter a name for reference (I used Web Tools Updates)
and enter http://download.eclipse.org/webtools/updates/ in the Location field.
You'll be back on the Available Software screen.
4. Click on the drop down menu arrow just to the left of the Add... button.
5. Find the site you just added and click on it.
6. Type "web" in the field that has grey letters reading "type filter text".

7. Check the boxes for:
Web Tools Platform(WTP) 3.1.2
Web Tools Platform SDK (WTP SDK) 3.1.2

8. Click the Next> button at the bottom.

9. Click I accept the terms of the license agreement
(It's open source, no worries!)

10. and click Finish.

Eclipse will go about preparing your packages.
About a minute later Eclipse will stop and ask you to confirm that you trust the Eclipse site from which you are downloading.
11. Check the box at the upper left and then OK down at the bottom to continue the installation.
12. When it finishes, you will want to click the button to restart Eclipse and your done.

Install CVS:
(TO BE CONTINUED>>> BED TIME!)

Install Subversive:
Refer to this site for full installation instructions:
http://www.twm-kd.com/software/eclipse-galileo-and-svn-support/

2011-02-05

New Game Project

My brother, Mike, and I have begun working on a game. Get this - since he knows Fortran, because he's an aerospace engineer, we are creating in PyOpenGL, but also using a Fortran wrapper for some speedy mathematical calculations. It promises to be interesting.

So, off I go learning again. Here are some links I'm using to help with the PyOpenGL coding:

http://www.geometrian.com/Tutorials.php

http://pyopengl.sourceforge.net/context/tutorials/shader_1.xhtml

Sure wish I could find the original full source code to that one (above)!

As always, this is mostly for my own reference, but if I come across any useful information I will pass it along to the blog.