Archive

Archive for the ‘Programming’ Category

Simple Example using Unit Testing in Python

March 13, 2015 Leave a comment

This is simple example how to use unit testing in python. For example, you want to create module that generate fibonacci numbers and want to test whether the module is working properly or not.

Below is simple fibonacci.py script for module to generate fibonacci numbers :

# Fibonacci numbers module
def fib2(n): # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

def main():
    print fib2(100)

if __name__ == '__main__' : main()

And here simple testfibo.py script to test that module:

import fibonacci
import unittest

class TestFibonacciFunctions(unittest.TestCase):

    def test_series_100(self):
        print('\nTest Series 100')
        wanted_result = [1,1,2,3,5,8,13,21,34,55,89]
        test_result = fibonacci.fib2(100)
        self.assertEqual(wanted_result,test_result)

    def test_series_50(self):
        print('\nTest Series 50')
        wanted_result = [1,1,2,3,5,8,13,21,34]
        test_result = fibonacci.fib2(50)
        self.assertEqual(wanted_result,test_result)

if __name__ == '__main__' : unittest.main()

Run testfibo.py script with command

python testfibo.py

You will get following output if the wanted_result and test_result are equal

Test Series 100
.
Test Series 50
.
---------------------------------
Ran 2 tests in 0.000s

OK
Categories: Programming, Python

CodeIgniter & TokuMX

February 4, 2015 Leave a comment

CodeIgniter is a lightweight PHP framework that can help you to develop Web Application. TokuMX is a drop-in replacement for MongoDB, that support transaction.

You can download codeigniter from here, and TokuMX from here . For more information about how to install TokuMX, you can read TokuMX documentation from GitHub here.

To Make Web Application can connect to Mongo Instance, you need to install PHP extension for mongo. To Install in Centos or Redhat environment, run command :

pecl install mongo

and add to /etc/php.ini

extension=mongo.so

Restart Web Service

service httpd restart

Download codeigniter-mongo-library from here .

Here’s simple code example how to use codeigniter-mongo-library to perform CRUD operation.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller
{
  // Insert Operation
  public function mongo_insert_test()      
  {
     $this->load->library("cimongo/cimongo");
     for($i=0;$i<25;$i++) {
        $this->cimongo
            ->insert("testData", array("x" => $i, "y" => 25-$i ));
     }
  }

  // Select Operation 
  public function mongo_select_test()
  {
     $this->load->library("cimongo/cimongo");
     $mongo_data = $this->cimongo->get("testData");
     foreach($mongo_data->result_array() as $row) {
        echo sprintf('x:%d,y:%d <br>',$row['x'],$row['y']);
     }
  }
  
  // Update Operation
  public function mongo_update_test()
  {
     $this->load->library("cimongo/cimongo");
     $result = $this->cimongo->where(array("x" => 24 ))
                    ->set(array("x" => 25 ))->update("testData");
     echo $result
  }

  // Delete Operation
  public function mongo_delete_test()
  {
     $this->load->library("cimongo/cimongo");
     $result = $this->cimongo->where(array("x" => 25 ))
                    ->delete("testData");
     echo $result;
  } 

}

?>

 

Categories: Database, Mongo, PHP, Programming

Facebook Login with Code Igniter

January 7, 2015 Leave a comment

Requirement:

  • Code Igniter 2
  • Facebook SDK 3.2.3 (consist of facebook.php & base_facebook.php, put them in libraries folder)

Controllers Code

  • application/controllers/user_auth.php (Handle login process)
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class User_auth extends MY_Controller
    {
        public function __construct()
        {
            parent::__construct();
        }
        
        private function load_fb()
        {
            $fb_config = array(
                'appId'  => $this->config->item('apps_facebook_id'),
                'secret' => $this->config->item('apps_facebook_secret'),
            );
            
            $this->load->library('facebook',$fb_config);
        }
        
        public function login()
        {
            $this->load->helper('url');
            $this->load_fb();
            $user = $this->facebook->getUser();
    
            if($user)
            {
                try 
                {
                    $profile_data = $this->facebook->api('/v2.1/me?fields=id');
                    $this->session->set_userdata(
                      'blablabla',intval($profile_data['id'],10)
                    );
                } 
                catch (FacebookApiException $e) 
                {
                    $user = null;
                }            
            }
            else
            {
                $this->facebook->destroySession();
            }   
            redirect(site_url('welcome/index'));
        }
        
        public function logout()
        {
            
            $this->session->unset_userdata('blablabla');
            redirect(site_url('welcome/index'));    
        }
    }
    
    ?>
  • application/controllers/welcome.php (User access /welcome/index page)
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Welcome extends MY_Controller
    {    
        public function __construct()
        {
            parent::__construct();
        }
        private function load_fb()
        {
            $fb_config = array(
                'appId'  => $this->config->item('apps_facebook_id'),
                'secret' => $this->config->item('apps_facebook_secret'),
            );
            
            $this->load->library('facebook',$fb_config);        
        }
        
        public function index()
        {   
            $this->load->helper('url');
            $fb_id = intval($this->session->userdata('blablabla'),10);
            $page_data = array();
            if(!empty($fb_id) && ($fb_id>0) )
            {
                $page_data['facebook_data']['logged_in'] = true;
                $page_data['facebook_data']['logout_url'] = 
                               site_url('user_auth/logout.php');
            }
            else
            {
                $page_data['facebook_data']['logged_in'] = false;
                $this->load_fb();
                $page_data['facebook_data']['login_url'] = 
                  $this->facebook->getLoginUrl(array(
                    'display' => 'popup',
                    'redirect_uri' => site_url('user_auth/login.php'), 
                    'scope' => array("email,public_profile,user_friends")
                ));
                
            }
            
            $this->load->view('welcome_view', $page_data);
        }
        
    }
    
    ?>

View Code

  • application/views/welcome_view.php (Put login/logout button  here)
    <html>
    <head>
      <title>Hello</title>
    </head>
    <body>
    <div id="fb-root"></div>
    <script>
        window.fbAsyncInit = function () {
          FB.init({
            appId: '<?php echo $facebook_data['apps_id'] ?>',
            version : 'v2.1',
            status: true,
            cookie: true,
            xfbml: true
          });          
        };
    
        (function (doc) {
          var js;
          var id = 'facebook-jssdk';
          var ref = doc.getElementsByTagName('script')[0];
          if (doc.getElementById(id)) {
            return;
          }
          js = doc.createElement('script');
          js.id = id;
          js.async = true;
          js.src = "//connect.facebook.com/en_US/sdk.js";
          ref.parentNode.insertBefore(js, ref);
        }(document));
        
        function Login() {
          FB.login(function (response) {
            if (response.authResponse) {
              location.replace(<?php echo site_url("user_auth/login.php");?>);
            } else {
              alert("Login attempt failed!");
            }
          }, { scope: 'email,public_profile,user_friends' });
        }
    </script>
    <div id="top_menu">
        <?php if(isset($facebook_data['logged_in']) && 
                 ($facebook_data['logged_in'] != false)  ) : ?>
            <div id="logout">
              <a href="<?php echo $facebook_data['logout_url'];?>" >Logout</a>
            </div>
        <?php else : ?>
            <div id="login">
              <a onclick="Login();" href="javascript:void(0);" >Login</a>
            </div>
        <?php endif; ?>
    </div>
    </body>
    </html>

Simple Callback

January 7, 2015 Leave a comment

Callback is a function that is executed when some other function is done with its work.

Example Code:

using UnityEngine;
using System.Collections;

public class SimpleCallback : MonoBehaviour 
{
    delegate void delegateCaller();

    void DoACall()
    {
        Debug.Log("Do A Call");
    }

    void DoAnotherCall()
    {
        Debug.Log("Do Another Call");
    }

    IEnumerator StartATask(delegateCaller callThis)
    {
        Debug.Log("Starting...");
        yield return new WaitForSeconds(1);
        Debug.Log("Done.");
        callThis();
    }

    // Use this for initialization
    void Start () 
    {
        StartCoroutine(StartATask(DoACall));
        StartCoroutine(StartATask(DoAnotherCall));
    }
    

}

Output

Starting...
Starting...
Done.
Do A Call
Done.
Do Another Call
Categories: C#, Programming, Unity

Create Simple Loading Screen

December 16, 2014 Leave a comment

Just try to create simple Loading screen during the idle time …

  1. Create Folders Scripts, Scenes, and Textures in Assets Folder
    • Scenes
      • Loading.unity (Set Background in Main Camera to Black)
      • Scene01.unity
      • Scene02.unity
    • Scripts
      • Base
        • PersistentObject.cs
      • Game
        • Scene01Controller.cs
        • Scene02Controller.cs
      • Loading
        • LoadingManager.cs
        • LoadingScript.cs
        • Fading.cs
    • Textures
      • fadeout_texture.png (black image 2×2 pixels) imported as texture
  2. Write Script
    • PersistentObject.cs
      using UnityEngine;
      using System.Collections;
      
      public abstract class PersistentObject<T> : 
      MonoBehaviour where T : Component {
          private static T instance;
          
          void Awake() {
              if (instance == null) {
                  instance = GetComponent<T>();
                  DontDestroyOnLoad(gameObject);
                  OnAwake();
              } else {
                  Destroy(gameObject);
              }
          }
          
          protected virtual void OnAwake() {
              
          }
      }
    • Fading.cs
      using UnityEngine;
      using System.Collections;
      
      public class Fading : MonoBehaviour 
      {
          public Texture2D fadeOutTexture;
          public float fadeSpeed = 0.8f;
      
          private int drawDepth = -1000;
          private float alpha = 1.0f;
          private int fadeDir = -1;
      
          void OnGUI()
          {
            alpha += fadeDir * fadeSpeed * Time.deltaTime;
            alpha = Mathf.Clamp01(alpha);
      
            GUI.color = new Color(GUI.color.r,GUI.color.g,GUI.color.b,alpha);
            GUI.depth = drawDepth;
            GUI.DrawTexture(new Rect(0,0, Screen.width, Screen.height), 
                            fadeOutTexture);
      
          }
      
          public float BeginFade(int direction)
          {
              fadeDir = direction;
              return fadeSpeed;
          }
      
          void OnLevelWasLoaded()
          {
              BeginFade(-1);
          }
      }
    • LoadingManager.cs
      using UnityEngine;
      using System.Collections;
      
      public class LoadingManager : PersistentObject<LoadingManager
      {
          private string _nextScene = "Scene01";
          public string NextScene { get { return _nextScene;} }
          public void Load (string name) {
              _nextScene = name;
              Application.LoadLevel("Loading");
          }
          IEnumerator WaitAndLoad() { 
              float fadeTime = Component.FindObjectOfType<Fading>().BeginFade(1);
              yield return new WaitForSeconds(fadeTime);
              Application.LoadLevel("Loading");
          }
       }
    • LoadingScript.cs
      using UnityEngine;
      using System.Collections;
      
      public class LoadingScript : MonoBehaviour 
      {
          [SerializeFieldprivate GUIText textLbl;
          private float progress;
          AsyncOperation op;
          
          IEnumerator Start() {
              yield return new WaitForSeconds(0.2f);
              LoadingManager loadingManager = 
              Component.FindObjectOfType<LoadingManager>();
              op = Application.LoadLevelAsync(loadingManager.NextScene);
              yield return op;
          }
          
         void Update() {
              if( (op!=null) && (!op.isDone) ) {
                  progress = op.progress * 100f;
                  textLbl.text = "Loading.. " + progress" %";
              }
          }
      }
      
    • Scene01Controller.cs
      using UnityEngine;
      using System.Collections;
      
      public class Scene01Controller : MonoBehaviour 
      {
          void OnGUI() {
              GUILayout.BeginArea (new Rect (10,10,100,100));
              if(GUILayout.Button("Scene02")) {
                  var loadingManager = 
                  Component.FindObjectOfType<LoadingManager>();
                  loadingManager.Load("Scene02");
              }
              GUILayout.EndArea ();
          }
      }
    • Scene02Controller.cs
      using UnityEngine;
      using System.Collections;
      
      public class Scene02Controller : MonoBehaviour 
      {
          void OnGUI() {
              GUILayout.BeginArea (new Rect (10,10,100,100));
              if(GUILayout.Button("Scene01")) {
                  var loadingManager = 
                  Component.FindObjectOfType<LoadingManager>();
                  loadingManager.Load("Scene01");
              }
              GUILayout.EndArea ();
          }
      }
  3. Attach Script
    • LoadingScript.cs & LoadingManager.cs
      Create 2 empty game objects (LoadingScript and LoadingManager) in Loading.unity and attach these script
    • Fading.cs
      Attach this script to LoadingManager game object in scene Loading.unity and assign fadeout_texture texture
    • Scene01Controller.cs
      Create 1  empty game object in Scene01.unity and attach this script
    • Scene02Controller.cs
      Create 1 empty game object in Scene02.unity and attach this script
  4. Attach GUIText Component
    • Attach GUIText Component to LoadingScript.cs empty game object (step3)
    • Set text to “Loading ..”
    • Set position to (0.5,0.5,0.0)
    • Set Anchor value to “middle center” and Alignment to “center”
    • Drag this GUIText Component to variable textLbl in LoadingScript.cs inspector
  5. Include Scenes in Build Settings
    • Loading.unity
    • Scene01.unity
    • Scene02.unity
  6. Test
Categories: Game and CG, Programming, Unity

Adapter

June 22, 2014 Leave a comment

Frequency of Use Medium – High Intent Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces. Structure Adapter Applicability Use the Adapter pattern when:

  • you want to use an existing class, and its interface does not match the one you need.
  • you want to create a reusable class that cooperates with unrelated or unforeseen classes, that is, classes that don’t necessarily have compatible interfaces.
  • (object adapter only) you need to use several existing subclasses, but it’s impractical to adapt their interface by subclassing every one. An object adapter can adapt the interface of its parent class

Implementation Code (C#)

using System;
public class MainClass {
 public static void Main() {
  Target target = new Adapter();
  target.Request();
 }
}

 class Target {
  public virtual void Request() {
   Console.WriteLine("Called Target Request");
  }
 }
 
 class Adapter : Target {
 private Adaptee _adaptee = new Adaptee();
 
 public override void Request() {
  _adaptee.SpecificRequest();
  }
 }
 
 class Adaptee {
  public void SpecificRequest() {
   Console.WriteLine("Called Adaptee specific Request");
  }
 }

Code Output

 Called Adaptee specific Request
Categories: C#, Design Pattern, Programming

Observer

June 8, 2014 Leave a comment

Frequency of Use
High

Intent
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

Structure

20140608-185029-67829449.jpg

Applicability
Use the Observer pattern in any of the following situations:

  • When an abstraction has two aspects, one dependent on the other. Encapsulating these aspects in separate objects lets you vary and reuse them independently.
  • When a change to one object requires changing others, and you don’t know how many objects need to be changed.
  • When an object should be able to notify other objects without making assumptions about who these objects are. In other words, you don’t want these objects tightly coupled.

 

Code Implementation (C#)

using System;
using System.Collections.Generic;

namespace Observer
{
 public class MainClass
 {
  public static void Main()
  {
    ConcreteSubject s = new ConcreteSubject();
    s.Attach(new ConcreteObserver(s, "X"));
    s.Attach(new ConcreteObserver(s, "Y"));
    s.Attach(new ConcreteObserver(s, "Z"));

    s.SubjectState = "ABCD";
    s.Notify();

    Console.ReadKey();
  }
 }

 abstract class Subject
 {
  private List<Observer> _observers = new List<Observer>();

  public void Attach(Observer observer)
  {
    _observers.Add(observer);
  }

  public void Detach(Observer observer)
  {
    _observers.Remove(observer);
  }

  public void Notify()
  {
   foreach (var observer in _observers)
   {
    observer.Update();
   }
  }
 }

 class ConcreteSubject : Subject
 {
  private string _subjectState;

  public string SubjectState
  {
    get { return _subjectState; }
    set { _subjectState = value; }
  }
 }

 abstract class Observer
 {
   public abstract void Update();
 }

 class ConcreteObserver : Observer
 {
   private string _name;
   private ConcreteSubject _subject;
   private string _observerState;

   public ConcreteObserver(ConcreteSubject subject, string name)
   {
     this._subject = subject;
     this._name = name;
   }

   public override void Update()
   {
    _observerState = _subject.SubjectState;
    Console.WriteLine("State of Observer {0} is {1}",
                      _name, _observerState);

   }

   public ConcreteSubject Subject
   {
    get { return _subject; }
    set { _subject = value; }
   }

  }
 }

Code Output

State of Observer X is ABCD 
State of Observer Y is ABCD 
State of Observer Z is ABCD
Categories: C#, Design Pattern, Programming