The Storyteller

proud to be @ trippert labs

April 16, 2008 · 26 Comments

Trippert is a small company working worldwide with big giants like Electronic Arts (and some others of course) and specializes developing social networking applications. Some of our applications has millions of users. Beside applications for social networks like facebook, bebo and opensocial we also develop our in house applications for travelers. Though originated in USA, TrippertLabs has wings in seven other countries like Bangladesh, Pakistan, India, China, Philippines, Germany and Indonesia.

I join TripperLabs last July and started managing the local branch here in Bangladesh (Hats off to Anupom for the great intro, you know what I mean). I’ve got some great talents (yes, we’ve found them from every corner in BD) with me. We expanded heavily during this short time and now we are a nice team of 16 developers here in BD. We have got 3 Zend Certified Engineers in our BD team and 2 more are going to be in a few days. We arrange regular tech sessions in our office and let you ignite your passion.

Unlike other traditional company here in Bangladesh we have an excellent environment here. You will never find human robots, cyborgs and people without emotion working here. We are a great family with some outstanding talents working for developing colorful moments, a big bright result. We enjoy outings, lunch together sometime, celebrate achievements, does a lot of fun and surely, we learn usage of cutting edge technologies together.

Yes I am proud to be a part of this big game. When I look to others in our office, I feel very good seeing some great people around me. If you want to part of this, you are most welcome, just know that we will find your very best expertise and let you work with your passion.

Here are some photo taken from our last outing to water park. Its fun, huh?

Trippertians

















→ 26 CommentsCategories: Me - Myself
Tagged:

whoops! naked_women are being part of php frameworks - LOL!

April 12, 2008 · 15 Comments

i don’t know if anyone before me already noticed this funny and cheap trick that the developers of kohana framework (which is a fork of codeigniter) have integrated with their distribution. while surfing the code base, i’ve found a file name “Naked_Woman.php” as part of kohana, located under system/libraries.

The content of this file is funny as well.


<?php defined('SYSPATH') or die('No direct script access.');
/**
 * Merry Christmas!
 *
 * I wonder if this will be picked up by Google and cause a massive number of
 * hits to just this file....
 *
 * @author     Kohana Team
 * @copyright  (c) 2007 Kohana Team
 * @license    http://kohanaphp.com/license.html
 */
class Naked_Woman_Core {
	public function __construct()
	{
		throw new Kohana_User_Exception
		(
			'cash::generate(), plz?',
			'There are no naked women or cash generators in Kohana. Sorry! ;)'
		);
	}
} // End Naked Woman

didn’t know naked womens are so influencing to even php frameworks! - lol

→ 15 CommentsCategories: PHP
Tagged:

working with models in orchid

April 10, 2008 · 3 Comments

as promised, orchid comes with real flexibility which lets you design your application in less time. in orchid, there is a nice active record object which helps you to interact with your database very easily. beside that, you can also write your own model class to facilitate comples business logics and operations. in this installment, we will learn how to achieve maximum speed and benefit by using the builtin model library of orchid with a toppings of the active record library.

2.1 connecting to a database

the built in data access libraries in orchid will help you to connect to mysql, postgresql, mssqlserver and sqlite in a minute. beside that you can also connect to other database engines by using native wrapper of pdo. all you have to do is to add a few lines in the configuration file and whoa, you are connected. don’t you believe me? lets see

create a file named configs.php in app/config/configs.php with the following contents

$configs['db']['production']['dbname']=”";
$configs['db']['production']['dbhost']=”";
$configs['db']['production']['dbuser']=”";
$configs['db']['production']['dbpwd']=”";
$configs['db']['production']['persistent']=”";
$configs['db']['production']['dbtype']=”";

in orchid you can have as many database state (such as production, development or whatever) as you want. in the example above, we named our db state as “production”. rest of the code is self explanatory, right? the only confusion you might have is about “persistent”. well, if you set it to true, the connection to your database stay alive as long as you are using the same connection strings, which will save some microseconds from connecting every time your script executes.

you are not done yet. there are some more configuration directives we have to add. we haven’t yet specified the type of our database and which db state orchid will use, lets do that. add the following two lines in your configs.php


$configs['db']['usedb']=”"; //true or false
$configs['db']['state']=”development”;

the value of “usedb” could be either one of “mysql”,”mysqli”,”pgsql”,”mssql”,”pdo” or “sqlite”. and using usedb you can tell orchid to use database engines or not. so you can save the connection parameters for use later by specifying the “usedb” parameter to “false”.

ding dong! you are connected to your favorite db engine in a minute, as said.

2.2 good coding and bad coding while working with database

in orchid (and in most other framework possibly) you can directly use the internal dbmanager to execute sql, fetch the result and manipulate that through out your application. i have seen developers manipulating records in controllers, in views and skipped the most appropriate part where these manipulation should take part in fact, models. many of you dont make use of the models in your application and write the business logic entirely in your controller, feeding the inner monster of your application to be the most vigorous unmanageable giant. dont blame php as a tool to write unmanageable code because this unmanageable code solely depends on you - you. always try to use models to encapsulate the business logic and separate it from your controller. lets model do it’s job.

2.3 working with models

in this section we will write a simple model and insert some data inside a table. here comes the schema of the table.


CREATE TABLE `comics` (
  `id` int(11) NOT NULL auto_increment,
  `comicname` varchar(255) default NULL,
  `comicurl` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
)

in orchid, you can instantly create a reference to any table in your database by auto model feature of orchid, which looks like the code below, which will reside in a controller.


$comicsmocdel = $this->model->comics;

orchid will dynmically create a reference of the “comics” table instantly, no more hassle for you. but there are significant causes why we will write models by coding it. the auto models support only the very basic data manipulation. if you want to encapsulate business logic inside, we definitely need to write the code inside. lets learn first how to work with a auto model like this one.

a model in orchid supports the following methods

  • selecting data
  • basic joining
  • insert
  • delete
  • update
  • finding based on criteria

as we have already created a model, lets make use of it. the following piece of code will insert a record in the comics table using the model.


$comicsmodel = $this->model->comics;
$comicsmodel->comicname = “Nancy and Sluggo”;
$comicsmodel->comicurl = “http://comics.com/comics/nancy/index.html”;
$comicsmodel->insert();

this is really simple to work with models in orchid, like as i said, the above example will insert a data in your data table named “comics”. now lets see how we can modify the existing data. in the following example we will change the name of the comic to the data which we’d just inserted.


//inside the controller action
$comicsmodel = $this->model->comics;
$data = $comicsmodel->find(”comicname = ‘Nancy and Sluggo’”);
print_r($data);
if(!empty($data))
{
$comicsmodel->comicname=”Nancy & Sluggo”;
$comicsmodel->update();
}

the find method can take any clause and find records according to that. similarly as update and insert, you can delete records using models in orchid.

in upcoming tutorials we will learn more on models and encapsulating business logic by writing in by our own :)

→ 3 CommentsCategories: PHP · orchid

facebook data storage api can really be the replacement of memcache

April 7, 2008 · 3 Comments

why not! all you need is a fast-n-furious caching storage for your facebook application which stores values against a key, same like a hash table. facebook data storage api does the same for you. using the batch api in facebook rest client you can seriously think it as an alternative of memcache. there are many developers who cache the data using memcache. memcache is definitely the state of the art caching solution for those who can afford hosting their application in a dedicated or vps server and knows how to install and successfully manage it. it. in other hand, facebook’s data storage api is an excellent solution for those who really want to make use of this awesome development platform without minimum hassle. all you have to do is remember some api and thats it.

lets see how you can use the facebook data storage api.

1. create the object manually (not using api)
an object in data storage api stands for something like a table. it contains some properties (columns) and their values(field values) stored against a key (think about a primary id). using the application control panel you can easily create such an object.

a. visit http://www.facebook.com/developers/apps.php?ret=2
b. select your application and click the link “http://www.facebook.com/developers/dsadmin.php?app_id={your application id}”

from this page you can create an object and create the properties. lets consider that the object name is ‘comics’ and the properties are “comicname[string]” and “comicurl[text/blob]“.

2. insert data into this object
using the storage api you can insert data into this object against a hash value. for example, lets have a look at the following piece of code

<?php
//after initializing the app client
//set value to the properties in a batch process
$facebook_api_client->begin_batch();
$facebook_api_client->data_setHashValue(”comics”,”nancy”,”Nancy And Sluggo”,”comicname”);
$facebook_api_client->data_setHashValue(”comics”,”nancy”,”http://url_of_this_comic”,”comicurl”);
$facebook_api_client->end_batch();
?>

the example showed above will set the value of two properties in “comics” object against the common key “nancy”.

setting up the values to the properties of an object in a batch process will speed up your application execution time by running all the api calls in that batch at once. the same thing applies if you want to retrieve the values of those properties.

3. retrieve the values
now when you need to re use the value of that object in your facebook application, you can do it like this

<?php
//retrieve the values of two properties “comicname” and ‘comicurl”
$facebook_api_client->begin_batch();
$comicname = $facebook_api_client->data_getHashValue(”comics”,”nancy”,”comicname”);
$comicurl = $facebook_api_client->data_getHashValue(”comics”,”nancy”,”comicurl”);
$facebook_api_client->end_batch();
?>

thats a tiny introduction to the storage api of facebook. there are lots more you can do by defining associations (much like table relations between two tables) and other available apis in this category. i will focus some of them in my upcoming blog posts.

before ending, revise the title of this blog post as “facebook data storage can really be the replacement of memcache for facebook application developers”.

→ 3 CommentsCategories: Facebook · General · PHP

getting started with orchid framework

April 7, 2008 · 2 Comments

today i was planning to start the documentation of orchid framework for the rest of us(?). so this one is the first installment of this series. you will find small tutorials everyday. just stick with the series and you will see how far we can fly you. time to get high :) [please note that the text in this series will be all-small cap]

getting started with orchid

orchid is a small framework with bare necessities to kick start developing killer php web applications. this framework is not flooded with unnecessary features and libraries. it only contains the essential helpers and libraries to boost up your development, not slowing it down. orchid features a very short learning curve, which will keep you trouble free. small footprint and excellent profile will be your first choice, which you will definitely realize once you start realizing the power that orchid brings in your hand. long story short, orchid is the next framework going to rock.

you can checkout orchid from it’s subversion repository
svn checkout http://orchidframework.googlecode.com/svn/trunk/ orchidframework

orchid comes pre equipped with excellent configuration directives in a config file, which we will focus in details in the upcoming tutorials. for now lets just start as is.

to create your first application, we need to create a folder named “app” inside the orchidframework directory. after you create that, there will be three directories named app, core and tests.

in orchid, controllers reside in app/controllers directory. views (templates) reside in app/views/controller_name/ directory, which means if the name of your controller is “blog”, all your views remains in app/views/blog/ directory. lets create our first controller named “talk”. the controller file will be app/controllers/talk.php.

a controller in orchid is a normal php class file which extends the base controller class. all the public methods in a controller class are considered as action. a method named “base” is the primary action for all the controller in orchid. and for now, this is all the information you need to create your first controller in orchid.

lets write a sample action in our controller, named “base”

<?php
/**
 * the source file is app/controllers/talk.php
 */
class talk extends controller
{
	public function base()
	{
		echo "hello";
	}
}
?>

now you can see this controller in action by pointing your browser to the following location. i’ve considered that you hosted orchid in your document root (i.e /var/www/orchid)

http://localhost/orchid/talk

whoops, what have we done wrong? why do we get an error?

we are seeing this error because we didnt write our view (or template, whatever you call it) yet. and this is not a good coding practice to output anthing directly from your controller. whatever the size of the output, you should display it by passing the data to a view first. this will ensure the consistency of your project through out the application. orchid is flexible, but keeping the word “flexibility with responsibility”

lets write the view file, named “<i>base.php</i>” which will reside in app/views/talk/ directory.

<?//the source file is app/views/talk/base.php?>
<?=$talkings;?>

so where from do we get the variable named $talkings? dont worry, you will have to pass it to the view from your controller. in fact through out your application you have to pass all the data to a view from the controller in almost every mvc framework and orchid is not the exception in this case. lets re write the controller

<?php
/**
 * the source file is app/controllers/talk.php
 */
class talk extends controller
{
	public function base()
	{
		$this->setViewParam("talkings","hello world");
	}
}
?>

now you will see the output “hello world” as output when you point your browser to http://localhost/orchid/talk

orchid is very flexible and if you need to raw output (for example after a ajax request) some content from your controller, you can even do that. orchid wont restrict you from not doing so, but what we really said is that for good coding you should follow this guideline.

so that’s it. getting started in orchid wont take more than 5 minutes and that is where the blessings of using a framework is in. in next tutorial we will learn how to use a model in orchid.

→ 2 CommentsCategories: PHP · orchid

Whoops, I was dead for last 3 weeks

April 6, 2008 · 1 Comment

I’ve just found that my last post was about 3 weeks ago. Thats quite a looooong time. I have done so many things during last couple of weeks and was unable to manage time for blogging. Here is a short update since I wrote last.

I’ve bought a white Macbook, specially for development purpose. I want to give it a try beside my Dell on ubuntu. I am feeling so proud to be a macbook owner.

I attended the seminar “lighting talks” arranged by SQABD and sponsored by Therap. That was just awesome. Found a lot of friends present in the show.

I was so fucked up by xnet, the ISP which was providing internet connection at TrippertLabs(BD) that I said “good bye” to them, finally!

I’ve finished correcting the chapters of my upcoming book “Facebook Application Development”

And finally, the most important one is that I’d released gopsop, a local community based web application which is still a beta version and not open for all. You can only register if you have an invitation code.

I’ve submitted a php class which has been nominated for the PHP class contest of April. You can vote my class “World Time Engine” by visiting http://www.phpclasses.org/vote.html

→ 1 CommentCategories: Me - Myself

My book on “Facebook Application Development” has been announced

March 17, 2008 · 21 Comments

Learning Facebook Application Development

My book on “Facebook Application Development” has been announced. I have co-authored this book with Dr. Mark Alexander Bain and it is scheduled to be published by May 2008.

→ 21 CommentsCategories: Books & Magazines · Facebook · Me - Myself · PHP

I would love to be a baby sitter

March 12, 2008 · 22 Comments

Well, it may sound funny but this is what I want to be after 6 years. I am quite planned about my future and I will definitely retire from my regular web app dev job after 6 years. Beside this I love kids, love talking to them and love to see them growing up :D

so I am going to be a baby sitter after 6 yrs and I am sure, I will do good :D

→ 22 CommentsCategories: Me - Myself · performance

WorldTimeEngine - How about making your own in PHP?

March 1, 2008 · 6 Comments

I recently came by this site WorldTimeEngine where users can search the local time of any place using the name, street address or just latitude and longitude. Since that time I was thinking how easily you can make your own. As long there are some good people over there (For Geocoding API) - its a not a big deal, you know? Lets have a look at the following PHP code.


<?
$place = “Bucharest”;

$geodata = getGeoCode($place);
print_r($geodata);
echo getTime($geodata['lat'],$geodata['lng']);

function getTime($lat, $lng)
{
$url = “http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}”;
$timedata = file_get_contents($url);
$sxml = simplexml_load_string($timedata);
return $sxml->timezone->time;
}
function getGeoCode($address)
{
$_url = ‘http://api.local.yahoo.com/MapsService/V1/geocode’;
$_url .= sprintf(’?appid=%s&location=%s’,”orchid_geocode”,rawurlencode($address));
$_result = false;
if($_result = file_get_contents($_url)) {
preg_match(’!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U’, $_result, $_match);
$lng = $_match[2];
$lat = $_match[1];
return array(”lat”=>$lat,”lng”=>$lng,”address”=>$address);
}
else
return false;
}
?>

Changing the variable “$place” to “Bucharest”,”Dhaka”, “Toronto” and “Oslo” gives me the following result


Array
(
[lat] => 44.434200
[lng] => 26.102955
[address] => Bucharest
)
2008-03-01 08:41

Array
(
[lat] => 23.709801
[lng] => 90.407112
[address] => Dhaka
)
2008-03-01 12:42

Array
(
[lat] => 43.648565
[lng] => -79.385329
[address] => Toronto
)
2008-03-01 01:42

Array
(
[lat] => 59.912280
[lng] => 10.749980
[address] => Oslo
)
2008-03-01 07:43

Nice, Huh?

→ 6 CommentsCategories: OpenSource · PHP · howto · performance

29th Feb, 2012

February 29, 2008 · 12 Comments

What will happen this day in 2012?

Afif will be almost 6yrs old
His sister will be 3 yrs old
I will code in PHP10 and Python 5
I will still be young like today
I will hold a MySQL DBA Cert
I will be writing a book on Python
I will be having a car
No one in my family will be using windows anymore
I will write a blog post titled “29th Feb, 2016″
I will still be singing “Like a rolling stone”

And Finally

I will be preparing more for the self retirement in 2015

→ 12 CommentsCategories: Me - Myself