Wednesday, September 12, 2012

Adding an OpenGL ES view to your project using NinevehGL

Recently I came across an openGL ES 2.0 engine that made setup, displaying and animating of 3D objects a breeze, called NinevehGL.  This 3D engine has many great features including a full multithreading environment, to keep the main run loop free during object rendering,  motion tweening, object groupings, custom lighting, materials and textures, custom shader support,  and native support for augmented reality, just to name a few. Another major benefit is the ability to import both wavefront (.obj) and Collada (.dae) files. This framework is very easy to use, powerful,  and can be utilized in many different ways. IOS openGL rotating Earth using NinevehGL from Erick Bennett on Vimeo. In this tutorial I am going to show you how to easily, and effectively add an openGL ES 2.0 3D view into your project, and display a fully rendered, rotating 3D earth. The model assets are available here, and include the object and texture. These assets are also available in the project ZIP file, available thru the link at the end of this tutorial. Download and install the  NinevehGL framework. Since we want to add this view into an existing project and understand how the engine functions, lets create a new single-view project to start. Although NinevehGL can just as easily be setup thru interface builder, we will be adding this view programmatically. For this exercise, it does not matter if you select storyboard or XIB for the new project. To begin with there are a few frameworks we will need to add. Do this by first selecting your projects main file in the project navigator pane. Make sure your projects target is selected, and under Build Phases click ‘Link Binaries with Libraries’. Use the + at the bottom of this display and add the QuartsCore  and OpenGLES frameworks. Next, using the ‘Add Other’ button, navigate to your downloaded NinevehGL folder and import the  NinevehGL.framework. Now onto the code…….import NinevehGL into your header (.h) file,
#import <NinevehGL/NinevehGL.h>
add the delegate to your @interface, if this is missing your drawview method will never get called.
@interface ViewController : UIViewController <NGLViewDelegate>;
In order to see what is being rendered we will need an ivar for an NGLCamera, and for our single object, an NGLMesh. The complete code for all of this should look as follows.
#import <UIKit/UIKit.h>#import <NinevehGL/NinevehGL.h> @interface ViewController : UIViewController <NGLViewDelegate> {     NGLCamera *_camera;     NGLMesh *_mesh; }
In your source (.m) file you must initialize your NGLView, set its delgate to self, define a dictionary with a few basic settings, and initialize the mesh and camera. I am doing this in my viewDidLoad method but depending on your needs, this could be done elsewhere.
    - (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    // Setup our NGLView.    NGLView *theView = [[NGLView alloc] initWithFrame:CGRectMake(40, 40, 240, 360)];    // Set its delegate to self so the drawview method is used.    theView.delegate = self;    // Add the new view on top of our existing view.     [self.view addSubview:theView];    // The content scale factor is used to increase the resolution to take advantage 
 of retina displays and values range from 1.0 to 2.0. This sets the contentscalefactor 
 to the max screen scale of the device.    theView.contentScaleFactor = [[UIScreen mainScreen] scale];    // Setup some initial environment states to be applied to our mesh.    NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:	kNGLMeshCentralizeYes, kNGLMeshKeyCentralize,	@"0.3", kNGLMeshKeyNormalize, nil];    // Initialize the mesh which includes the model file to import (.obj or .dae).    _mesh = [[NGLMesh alloc] initWithFile:@"earth.obj" settings:settings delegate:nil];    // Initialize the camera used to render the scene.    _camera = [[NGLCamera alloc] initWithMeshes:_mesh, nil];    // If a trasparent background of the NGLView is needed    //theView.backgroundColor = [UIColor clearColor];    //nglGlobalColorFormat(NGLColorFormatRGBA);    //nglGlobalFlush();    // The following command displays a 3d view status monitor that will show your current frame rate and number of polygons being rendered in the view.    [[NGLDebug debugMonitor] startWithView:(NGLView *)self.view];}
You will need to add at least one method to your source (.m) file, this is the drawView loop. This drawView loop is used to generate each frame being displayed (up to 60 per second). This drawloop is where you would affect the mesh to animate movement or create the effects your a looking to display. The  [_camera drawCamera] is needed to commit the changes and render the frame. The method usually ends with this command.
-(void)drawView{    // Rotate on Y axis    _mesh.rotateY += .5;    // Draw to our camera to display on our view    [_camera drawCamera];}
In the above example, the _mesh.rotateY += .5 is used to rotate the mesh .5 degrees each time the frame is rendered. Now build and run the project and you should see a slowly spinning planet Earth. The NGLView was purposely drawn smaller than the background view in order to show how you could overlay this NGLView over any other normal view to add 3D content. If you want the background of the NGLView to be transparent, set the background color of the view to clear and add the following additional commands. There is also a status monitor that can be run to display frame rates and the number of polygons being rendered for optimization.
// If a trasparent background of the NGLView is needed theView.backgroundColor = [UIColor clearColor]; nglGlobalColorFormat(NGLColorFormatRGBA); nglGlobalFlush();// The following command displays a 3d view status monitor that will show your current frame rate and number of polygons being rendered in the view. [[NGLDebug debugMonitor] startWithView:(NGLView *)self.view];
There are many commands you can use to affect your object, it’s movement and how it interacts in it’s 3D environment, here are just a few basic ones. Advanced animation, movement techniques, object hit testing, custom shaders, etc. would be worthy of a separate tutorial. Enjoy.
// rotation _mesh.rotateX, rotateY, rotateZ// scaling _mesh.scaleX, scaleY, scaleZ // placement _mesh.x,y,z // offset center of objects rotation _mesh.pivot = nglVec3Make(x, y, z)
Assets Project file Awake & Evolve Workout of the Day Mature Athlete Workout of the Day Mommy Workout of the Day RKC Kettlebell Workout of the Day Strength & Conditioning Workout of the Day Sport Specific Workout of the Day Women's Workout of the Day
Source : icodeblog[dot]com

New iOS Code Camp Dates Announced! October 22nd is the next iOS Code Camp.

iOS Code Camp is our premier online training program.  You’ll be personally guided by Matthew Campbell, author of Objective-C Recipes and lead blogger at How to Make iPhone Apps.  After going through our program, you’ll have the skills to develop real world, magical, iOS apps for the iPhone and iPad.

Matthew has trained and mentored 869 (as of this writing) new iOS developers and many of Matthew’s students have gone on to do consulting and even create their own applications.

What Makes iOS Code Camp Different?

Matt has a unique background having spent many years doing counseling, studying psychology and education before becoming a software developer to help with educational research.  When you take iOS Code Camp, you’ll get a program honed and tested by someone with years of experience in education, psychology and software development.

Of course, Matt is an empiricist and believes in proof.  Check out all the graduates of the program who have earned our App Publisher award at Mobile App Mastery Institute to see some examples of people who have succeeded at iOS Code Camp.

Many more alumni have gone on to do consulting, add mobile to their company.  We do quality assurance surveys for all our online and live trainings and consistently get high marks.

How Does iOS Code Camp Work?

The program is a mixture of self-directed coursework where you go through videos and complete hands-on labs and live video conferencing and interaction via a private forum.  For the 4 weeks of iOS Code Camp, we will be best friends and Matt will be in touch with answers, encouragement and coaching to supercharge your progress as a developer.  Except to spend about 20 hours per week on the training program.

Note by the end of the program, you will have followed a detailed step by step procedure to create a real world app called NoteMaker that includes Core Data, location services, maps, web services, asynchronous processing with Grand Central Dispatch (GCD) and more.

How to Register for iOS Code Camp

To get all the information about iOS Code Camp and to register, click right here.

PS BTW, we only let a handful of people into this program so if you’re serious about becoming an iOS developer you may want to act sooner rather than later…  Click right here to register now.

Source : howtomakeiphoneapps[dot]com

Wednesday, June 6, 2012

very simple jquery ajax

jquery supports ranges of ajax calling, below is the very simple code


  • use method get
  • receive data as html
 // Get a reference to the content div (into which we will load content).
 var jContent = $( "#content" );
 // Hook up link click events to load content.
 $( "a" ).click(
 function( objEvent ){
   var jLink = $( this );
   // Clear status list.
   $( "#ajax-status" ).empty();
   // Launch AJAX request.
         // The link we are accessing.
  url: jLink.attr( "href" ),
  // The type of request.
  type: "get",
  // The type of data that is getting returned.
  dataType: "html",
  error: function(){
   ShowStatus( "AJAX - error()" );
         // Load the content in to the page. 
         jContent.html( "Page Not Found!!

"                    );
  beforeSend: function(){
   ShowStatus( "AJAX - beforeSend()" );
  complete: function(){
   ShowStatus( "AJAX - complete()" );
  success: function( strData ){
             ShowStatus( "AJAX - success()" );
   // Load the content in to the page.
   jContent.html( strData );
     // Prevent default click. 
     return( false );     


Tuesday, June 5, 2012

jquery - get id of element that fired event

In jquery, always refers to the element that triggers the event (or selected event). Sample below

$(document).ready(function() {
    $("a").click(function(event) {

download firefox 13 final release

In case you could not use auto upgrade, please download firefox 13 release here (link from mozilla)

Monday, June 4, 2012

List root folders in J2ME/Blackberry

The following code list/check all the folders that existed in SD card, which is inserted in J2ME or Blackberry running OS. Please remember to import necessarily packages (in eclipse based, us Ctrl + Shift + O)

String root = null;
Enumeration e = FileSystemRegistry.listRoots();
while (e.hasMoreElements()) {
root = (String) e.nextElement(); // device has a microSD
        if (root.equalsIgnoreCase("store")) {
          System.out.println("okies man - store/ is available");
        } else {

Friday, May 11, 2012

Rails + PostgreSQL on Mac Lion

1) Install PostgreSQL

$brew install postgresql

Once the installation is complete it is important to follow all the instructions that brew created for us!
Here is a list of instructions to initialize a database named postgres and run postgresql on start-up:

$ initdb /usr/local/var/postgres
$ mkdir -p ~/Library/LaunchAgents
$ cp /usr/local/Cellar/postgresql/9.0.4/org.postgresql.postgres.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist

or follow the instruction generated after installing.

2) Create PostgreSQL users

Login to psql console:

$ psql -h localhost postgres

If all is good we should see the command prompt:


Now lets create a user postgres:

postgres=# CREATE USER postgres WITH PASSWORD 'postgres';

And give it all permissions for postgres database that we created earlier:

postgres=# GRANT ALL PRIVILEGES ON DATABASE postgres to postgres;

3) Install pg gem

env ARCHFLAGS="-arch x86_64" gem install pg

4) Configure Rails project

Add the following lines to database,yml file:

    adapter: postgresql
    database: postgres
    username: postgres
    password: postgres
    host: localhost
    encoding: UTF8

Add pg gem to Gemfile:

gem 'pg', :require => 'pg'

Thursday, May 10, 2012

PHP - get full URL

There are times when we want to get the full path (URL) of a page, PHP makes it easy

function getPageURL() {
    $pageURL = 'http';

        // Check if https is enabled
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
    } else {
    return $pageURL;

Call getPageURL() whenever you want to get the expected path.

Thursday, May 3, 2012

install ruby and ruby on rails on ubuntu 12.04

In summary

  • update your system
  • install git, curl, rvm
  • install required packages
  • install rails
  • done
Step by step

Update system
sudo apt-get update

Install git
sudo apt-get install git

Install curl
sudo apt-get install curl

Install rvm
curl -L | bash -s stable

Reload to start using rvm
source ~/.rvm/scripts/rvm
source /home//.rvm/scripts/rvm

Check required packages
rvm requirements

and then copy the install command from output, it should look like this
sudo apt-get -y install build-essential openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Install Javascript runtime
sudo apt-get install nodejs

Install ruby
rvm install 1.9.3
(1.9.3 is the newest version at the time of this writing)

Set ruby version to default
rvm use 1.9.3 --default

Install rails
gem install rails

start your app and see it works! cheers!

ubuntu - install LAMP server with one click

tasksel is a good service for installing LAMP on ubuntu 12.04 and 11.10

sudo apt-get install tasksel

sudo tasksel

this can be used to install postgreSQL and many others

ubuntu - preventing apache and mysql from auto start when computer starts

  • apache2 uses System V style init scripts. To disable it from boot:
    sudo update-rc.d -f apache2 remove
  • However, mysql uses an Upstart job, to disable it, create an "override" file:
    echo "manual" | sudo tee /etc/init/mysql.override
To learn more about override files, see: The Upstart Cookbook