Author: hasin

Complete oAuth script for Twitter and LinkedIn using PECL oAuth Extension

After searching for help to connect with LinkedIn via their oAuth protocol using PECL oAuth extension, I’ve found that lots of people are posting in their forum for the code samples. And only very few obscure code examples are available. I’ve found phplinkedin script but that is just too bulky for a simple oAuth dance 🙂

So here are two files to perform 3 step oAuth Dance for both twitter and linkedin. Just set your consumer key and consumer secret key in these scripts (config.php) and in your LinkedIn and Twitter application, set the url of these scripts as authentication callback 🙂 thats it 🙂

check out the source code below or just straight download them from the following url
http://www.box.net/shared/oc0u7ym5y7

config.php: source
[sourcecode lang=”php”]
<?
//config.php
$oauth[‘twitter’][‘consumersecret’]="UtNkcJC5VqmHgSgxMIRl2UcHaJLWINzr1g2q*****";
$oauth[‘twitter’][‘consumerkey’]="LveyUCUf9Ym96AU7*****";
$oauth[‘twitter’][‘requesttokenurl’]="http://twitter.com/oauth/request_token";
$oauth[‘twitter’][‘accesstokenurl’]="http://twitter.com/oauth/access_token";
$oauth[‘twitter’][‘authurl’]="http://twitter.com/oauth/authorize";
$oauth[‘linkedin’][‘consumersecret’]="SX9FS_Ptz7yNA3WtTW0e8z3_XSiROnVSpOEbAVCfKAn7fqFq4kjelVXiNMO*****";
$oauth[‘linkedin’][‘consumerkey’]="qQkxCNYQbuALhWyBZO03V–6dtwUnQHz7KFE4PBpdIL6hy_87SHygEZAJj9*****";
$oauth[‘linkedin’][‘requesttokenurl’]="https://api.linkedin.com/uas/oauth/requestToken";
$oauth[‘linkedin’][‘accesstokenurl’]="https://api.linkedin.com/uas/oauth/accessToken";
$oauth[‘linkedin’][‘authurl’]="https://api.linkedin.com/uas/oauth/authorize";
?>
[/sourcecode]

twitter.php: source
[sourcecode lang=”php”]
<?
//twitter.php
/**
* twitter authentication script based on
* pecl oauth extension
*/
session_start();
include_once("config.php");
/*
unset($_SESSION[‘trequest_token_secret’]);
unset($_SESSION[‘taccess_oauth_token’]);
unset($_SESSION[‘taccess_oauth_token_secret’]);
*/
$oauthc = new OAuth($oauth[‘twitter’][‘consumerkey’],
$oauth[‘twitter’][‘consumersecret’],
OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); //initiate
if(empty($_SESSION[‘trequest_token_secret’])) {
//get the request token and store it
$request_token_info = $oauthc->getRequestToken($oauth[‘twitter’][‘requesttokenurl’]); //get request token
$_SESSION[‘trequest_token_secret’] = $request_token_info[‘oauth_token_secret’];
header("Location: {$oauth[‘twitter’][‘authurl’]}?oauth_token=".$request_token_info[‘oauth_token’]);//forward user to authorize url
}
else if(empty($_SESSION[‘taccess_oauth_token’])) {
//get the access token – dont forget to save it
$request_token_secret = $_SESSION[‘trequest_token_secret’];
$oauthc->setToken($_REQUEST[‘oauth_token’],$request_token_secret);//user allowed the app, so u
$access_token_info = $oauthc->getAccessToken($oauth[‘twitter’][‘accesstokenurl’]);
$_SESSION[‘taccess_oauth_token’]= $access_token_info[‘oauth_token’];
$_SESSION[‘taccess_oauth_token_secret’]= $access_token_info[‘oauth_token_secret’];
}
if(isset($_SESSION[‘taccess_oauth_token’])) {
//now fetch current users profile
$access_token = $_SESSION[‘taccess_oauth_token’];
$access_token_secret =$_SESSION[‘taccess_oauth_token_secret’];
$oauthc->setToken($access_token,$access_token_secret);
$data = $oauthc->fetch(‘http://twitter.com/account/verify_credentials.json’);
$response_info = $oauthc->getLastResponse();
echo "<pre>";
print_r(json_decode($response_info));
echo "</pre>";
}
?>
[/sourcecode]

linkedin.php: source
[sourcecode lang=”php”]
<?
//linkedin.php
/**
* linkedin authentication script based on
* pecl oauth extension
*/
session_start();
include_once("config.php");
/*
unset($_SESSION[‘lrequest_token_secret’]);
unset($_SESSION[‘laccess_oauth_token’]);
unset($_SESSION[‘laccess_oauth_token_secret’]);
*/
$oauthc = new OAuth($oauth[‘linkedin’][‘consumerkey’],
$oauth[‘linkedin’][‘consumersecret’],
OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION); //initiate

$oauthc->setNonce(rand());

if(empty($_SESSION[‘lrequest_token_secret’])) {
//get the request token and store it
$request_token_info = $oauthc->getRequestToken($oauth[‘linkedin’][‘requesttokenurl’]); //get request token
$_SESSION[‘lrequest_token_secret’] = $request_token_info[‘oauth_token_secret’];
header("Location: {$oauth[‘linkedin’][‘authurl’]}?oauth_token=".$request_token_info[‘oauth_token’]);//forward user to authorize url
}
else if(empty($_SESSION[‘laccess_oauth_token’])) {
//get the access token – dont forget to save it
$request_token_secret = $_SESSION[‘lrequest_token_secret’];
$oauthc->setToken($_REQUEST[‘oauth_token’],$request_token_secret);//user allowed the app, so u
$access_token_info = $oauthc->getAccessToken($oauth[‘linkedin’][‘accesstokenurl’]);
$_SESSION[‘laccess_oauth_token’]= $access_token_info[‘oauth_token’];
$_SESSION[‘laccess_oauth_token_secret’]= $access_token_info[‘oauth_token_secret’];
$_SESSION[‘loauth_verifier’] = $_REQUEST[‘oauth_verifier’];
}
if(isset($_SESSION[‘laccess_oauth_token’])) {
//now fetch current user’s profile
echo "<pre>";
$access_token = $_SESSION[‘laccess_oauth_token’];
$access_token_secret =$_SESSION[‘laccess_oauth_token_secret’];
$oauth_verifier = $_SESSION[‘loauth_verifier’];
$oauthc->setToken($access_token,$access_token_secret);
$data = $oauthc->fetch(‘http://api.linkedin.com/v1/people/~’);
$response_info = $oauthc->getLastResponse();
print_r(htmlspecialchars($response_info));
echo "</pre>";
}
?>
[/sourcecode]

Download these files from http://www.box.net/shared/oc0u7ym5y7 – Happy dancing time, in oAuth way 😉

My slide from SQABD LightningTalks4

As like before, LightningTalks4 arranged by SQABD was really great this time. This time it was sponsored by bGlobal Sourcing and I really enjoyed a nice evening with all the techy geeks after a long time 🙂

I presented my session on “BanglaInput Manager, jQuery Plugin” and you can download the slides from the following two links

1. http://www.box.net/shared/2tigrtdh1p
or
2. http://dl.dropbox.com/u/5396928/SQABD-LT4-BanglaInputManager.pptx

You can visit the demo plugin at http://scripts.ofhas.in/bim/

Thanks for being there. It was nice to meet you all.

āĻ•āĻŋāωāĻŦāĻŋ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ…āĻĨāĻŦāĻž āĻ—ā§āϰāĻžāĻšāĻ• āϏ⧇āĻŦāĻž, āφāϰ āφāĻŽāϰāĻž āĻŽā§āϝāĻžāĻ™ā§āĻ—ā§‹ āĻĒāĻŋāĻĒāϞ :)

(āϏāĻ¨ā§āĻ§ā§āϝāĻž ā§­āϟāĻž)
āφāĻŽāĻŋ: āĻšā§āϝāĻžāϞ⧋, āĻ•āĻŋāωāĻŦāĻŋ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ
āĻāĻ•ā§āϏ: āϗ⧁āĻĄ āχāĻ­āĻŋāύāĻŋāĻ‚ āĻ¸ā§āϝāĻžāϰ, āφāĻŽāĻŋ āĻ•āĻŋāωāĻŦāĻŋ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āĻĨ⧇āϕ⧇ āĻāĻ•ā§āϏ āĻŦāϞāĻ›āĻŋ, āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āφāĻĒāύāĻžāϕ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ?
āφāĻŽāĻŋ: āϗ⧁āĻĄ āχāĻ­āĻŋāύāĻŋāĻ‚, āφāĻŽāĻŋ āωāĻ¤ā§āϤāϰāĻž āĻĨ⧇āϕ⧇ āĻšāĻžāϏāĻŋāύ āĻšāĻžāϝāĻŧāĻĻāĻžāϰ āĻŦāϞāĻ›āĻŋāϞāĻžāĻŽ, āφāĻĒāύāĻžāĻĻ⧇āϰ āĻāĻ•āϜāύ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦāĻžāϰāĨ¤ āφāĻŽāĻŋ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ āϧāϰ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻšāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ āύāĻžāĨ¤ āĻĻ⧁āĻĒ⧁āϰ āĻĨ⧇āϕ⧇āχ āϞāĻžāχāύ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ āĻĒāϰāĻĒāϰ āĻĄāĻŋāϏāĻ•āĻžāύ⧇āĻ•ā§āϟ āĻšāϝāĻŧ⧇ āϝāĻžāĻšā§āϛ⧇
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻĻ⧇āĻ–āĻ›āĻŋ, āφāĻĒāύāĻžāϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϟāĻž āĻāĻ•āϟ⧁ āĻŦāϞāĻŦ⧇āύ?
āφāĻŽāĻŋ: ā§Ļā§§xy-abcdefg, āφāĻŽāĻžāϰ āχāωāϜāĻžāϰ āύ⧇āĻŽ xyzabcd
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āϤ⧋ āĻĻ⧇āĻ–āĻ›āĻŋ āφāĻĒāύāĻŋ āĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ
āφāĻŽāĻŋ (āĻ•āĻŋāϛ⧁āϟāĻž āĻšāϤāĻ­āĻŽā§āĻŦ āĻšāϝāĻŧ⧇): āĻšā§āϝāĻžāρ? āĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ āĻŽāĻžāύ⧇? āφāĻŽāĻžāϰ āϤ⧋ āĻŽā§‹āĻĄā§‡āĻŽ āĻāϰ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āχāĻ¨ā§āĻĄāĻŋāϕ⧇āϟāϰ āϗ⧁āϞ⧋āχ āĻœā§āĻŦāϞāϛ⧇ āύāĻž
āĻāĻ•ā§āϏ: āφāĻĒāύāĻŋ āĻ•āĻŋ āĻŽā§‹āĻĄā§‡āĻŽāϟāĻž āφāϗ⧇āϰ āϜāĻžāϝāĻŧāĻ—āĻž āĻĨ⧇āϕ⧇ āϏāϰāĻŋāϝāĻŧ⧇āϛ⧇āύ āĻ¸ā§āϝāĻžāϰ?
āφāĻŽāĻŋ: āύāĻž
āĻāĻ•ā§āϏ: āφāĻĒāύāĻžāϰ āĻŽā§‹āĻĄā§‡āĻŽ āĻāϰ āϏāĻŦāϗ⧁āϞ⧋ āϞāĻžāχāϟ āĻ•āĻŋ āĻœā§āĻŦāϞāϛ⧇?
āφāĻŽāĻŋ: āύāĻž, āĻāĻ•āϟ⧁ āφāϗ⧇āχ āϤ⧋ āĻŦāϞāϞāĻžāĻŽ āϝ⧇ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āχāĻ¨ā§āĻĄāĻŋāϕ⧇āϟāϰ āϗ⧁āϞ⧋āχ āĻœā§āĻŦāϞāϛ⧇ āύāĻž
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻŋ āĻāĻ•āϟ⧁ āĻŽā§‹āĻĄā§‡āĻŽ āĻāϰ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻĒā§āϝāĻžāύ⧇āϞ āĻ āĻĸ⧁āϕ⧁āύ, āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻāĻ•ā§āϏāĻĒā§āϞ⧋āϰāĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĸ⧁āĻ•āĻŦ⧇āύ āĻ¸ā§āϝāĻžāϰ
āφāĻŽāĻŋ(āĻāĻ•āϟ⧁ āĻŽāϜāĻž āĻ•āϰ⧇): āĻ­āĻžāχ āφāĻŽāĻžāϰ āϤ⧋ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻāĻ•ā§āϏāĻĒā§āϞ⧋āϰāĻžāϰ āύāĻžāχ, āφāĻŽāĻŋ āϤ⧋ āĻŽā§āϝāĻžāĻ• āχāωāϜ āĻ•āϰāĻŋ, āĻāĻ–āύ āĻ•āĻŋ āĻ•āϰāĻŦ?
āĻāĻ•ā§āϏ: āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻāĻ•ā§āϏāĻĒā§āϞ⧋āϰāĻžāϰ āύāĻžāχ? āϤāĻžāĻšāϞ⧇ āĻ¸ā§āϝāĻžāϰ āĻāĻ•āϟ⧁ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇āύ āφāĻŽāĻŋ āĻĻ⧇āĻ–āĻŋ
āφāĻŽāĻŋ: āφāĻšā§āĻ›āĻž
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻŋ āĻŽā§‹āĻĄā§‡āĻŽā§‡āϰ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āĻ…āĻĢ āĻ•āϰ⧇ āφāĻŦāĻžāϰ āĻ…āύ āĻ•āϰ⧇āύ
āφāĻŽāĻŋ: āφāĻŽāĻŋ āĻāϟāĻž āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āĻŦāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ āĻ­āĻžāχ, āĻāĻ–āĻžāύ⧇ āωāĻ¤ā§āϤāϰāĻžāϤ⧇ āφāϰ⧋ āϝ⧇ āĻ•āϝāĻŧāϜāύ āφāϛ⧇ āϏāĻŦāĻžāϰāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āϏāĻŦāĻžāϰāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻāϟāĻž āĻŦ⧁āĻāϞ⧇āύ āϕ⧇āĻŽāύ āĻ•āϰ⧇
āφāĻŽāĻŋ(āĻŽā§‡āϜāĻžāϜ āĻ–āĻžāϰāĻžāĻĒ): āĻ­āĻžāχ āĻŽā§‹āĻŦāĻžāχāϞ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϜāύ āĻāĻ•āϜāύ āĻ•āϰ⧇ āĻĢā§‹āύ āĻ•āϰāϞāĻžāĻŽ, āĻĻ⧇āĻ–āϞāĻžāĻŽ āϏāĻŦāĻžāϰāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻŋ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āϖ⧁āύ, āφāĻŽāĻžāϰ āĻŽāύ⧇ āĻšāϝāĻŧ āĻ āĻŋāĻ• āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤ āĻ•āĻžāϰāύ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āϕ⧇āϰ āϕ⧋āύ āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšāϞ⧇ āφāĻŽāϰāĻž āϜāĻžāύāϤāĻžāĻŽ
āφāĻŽāĻŋ: āĻ•āϤāĻ•ā§āώāύ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦ?
āĻāĻ•ā§āϏ: āĻ¸ā§āϝāĻžāϰ āĻŽā§āϝāĻžāĻ•ā§āϏāĻŋāĻŽāĻžāĻŽ āφāϧāĻžāϘāĻ¨ā§āϟāĻž
āφāĻŽāĻŋ: āφāĻšā§āĻ›āĻž

(āϰāĻžāϤ ā§Ž:ā§Šā§Ļ)

āφāĻŽāĻŋ: āĻšā§āϝāĻžāϞ⧋, āĻ•āĻŋāωāĻŦāĻŋ?
āĻ“ā§ŸāĻžāχ: āϗ⧁āĻĄ āχāĻ­āĻŋāύāĻŋāĻ‚ āĻ¸ā§āϝāĻžāϰ, āφāĻŽāĻŋ āĻ•āĻŋāωāĻŦāĻŋ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āĻĨ⧇āϕ⧇ āĻ“ā§ŸāĻžāχ āĻŦāϞāĻ›āĻŋ, āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āφāĻĒāύāĻžāϕ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ?
āφāĻŽāĻŋ: āĻ­āĻžāχ āφāĻŽāĻžāϰ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ āĻĒāϰāĻĒāϰ āĻĄāĻŋāϏāĻ•āĻžāύ⧇āĻ•ā§āϟ āĻšā§Ÿā§‡ āϝāĻžāĻšā§āϛ⧇, āĻāĻŦāĻ‚ āωāĻ¤ā§āϤāϰāĻž ā§§ā§Ē āϤ⧇ āϝāĻžāϰāĻž āĻ•āĻŋāωāĻŦāĻŋ āχāωāϜāĻžāϰ āϤāĻžāĻĻ⧇āϰ āϏāĻŦāĻžāϰāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻ“ā§ŸāĻžāχ: āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻŋ āĻāĻ•āϟ⧁ āĻŽā§‹āĻĄā§‡āĻŽ āĻāϰ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻĒā§āϝāĻžāύ⧇āϞ āĻ āĻĸ⧁āϕ⧁āύ, āφāĻĒāύāĻŋ āĻ•āĻŋ āφāϗ⧇āϰ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇āϛ⧇āύ āĻ¸ā§āϝāĻžāϰ?
āφāĻŽāĻŋ: āύāĻž
āĻ“ā§ŸāĻžāχ: āϤāĻžāĻšāϞ⧇ āĻ¸ā§āϝāĻžāϰ āĻŽā§‹āĻĄā§‡āĻŽā§‡āϰ āĻ…ā§āϝāĻžāĻĄāĻ­āĻžāĻ¨ā§āϏāĻĄ āĻŸā§āϝāĻžāĻŦ⧇ āϝāĻžāύ, āĻ“āĻ–āĻžāύ⧇ āĻ“ā§ŸāĻžāχ-āĻŽā§āϝāĻžāĻ•ā§āϏ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ, āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻĻāĻŋāύ
āφāĻŽāĻŋ: āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āϤ⧋ āφāĻŽāĻŋ āĻšā§‡āĻžā§āϜ āĻ•āϰāĻŋ āύāĻžāχ, āϤāĻžāĻšāϞ⧇ āĻ“āĻ–āĻžāύ⧇ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻĻāĻŋāĻŦ āϕ⧇āύ? āĻ“āϟāĻž āϤ⧋ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻšā§‡āĻžā§āϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϝāĻžāύ⧇āϞ
āĻ“ā§ŸāĻžāχ: āĻ“āĻš āφāĻšā§āĻ›āĻž āĻ¸ā§āϝāĻžāϰ, āϤāĻžāĻšāϞ⧇ āĻŽā§‹āĻĄā§‡āĻŽ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ āϝāĻžāύ, āϏ⧇āĻ–āĻžāύ⧇ āĻ—āĻŋā§Ÿā§‡ āĻŽā§‹āĻĄā§‡āĻŽ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰ⧁āύ
āφāĻŽāĻŋ: āĻ­āĻžāχ āφāĻŽāĻŋ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦ⧇āĻļ āĻ•ā§Ÿā§‡āĻ•āĻŦāĻžāϰ āĻŽā§‹āĻĄā§‡āĻŽ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰ⧇āĻ›āĻŋ, āφāϰ āωāĻ¤ā§āϤāϰāĻž āϤ⧇ āĻāχ āĻāϰāĻŋ⧟āĻžā§Ÿ āĻŦ⧇āĻļ āĻ•ā§Ÿā§‡āĻ•āϜāύ āϏāĻžāĻŦā§āĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āφāĻŽāĻŋ āĻ•āĻĨāĻž āĻŦāϞ⧇āĻ›āĻŋ, āϏāĻŦāĻžāϰāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻ“ā§ŸāĻžāχ: āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻŋ āĻāĻ•āĻŦāĻžāϰ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰ⧇ āĻĻ⧇āϖ⧁āύ, āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇
āφāĻŽāĻŋ: āφāĻšā§āĻ›āĻž, āĻāχāϝ⧇ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻĻāĻŋāϞāĻžāĻŽ – āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āĻžāύ⧇ āϤ⧋ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟāĻŋāĻ‚ āĻāϰ āĻĒā§āϰ⧋āĻ—ā§āϰ⧇āϏāĻŋāĻ‚ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇, āĻļ⧇āώ āϤ⧋ āĻšā§Ÿ āύāĻž
āĻ“ā§ŸāĻžāχ: āĻ¸ā§āϝāĻžāϰ āφāϰ āĻĻ⧁āĻŽāĻŋāύāĻŋāϟ āĻĻ⧇āϖ⧁āύ, āϝāĻĻāĻŋ āύāĻž āĻšā§Ÿ āϤāĻžāĻšāϞ⧇ āĻĒāĻžāĻ“ā§ŸāĻžāϰ āĻ…āĻĢ āĻ•āϰ⧇ āĻ…āύ āĻ•āϰ⧁āύ
āφāĻŽāĻŋ: āφāĻšā§āĻ›āĻž
(āĻĻ⧁ āĻŽāĻŋāύāĻŋāϟ āĻĒāϰ)
āφāĻŽāĻŋ: āĻ­āĻžāχ āĻāĻ•āχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻ“ā§ŸāĻžāχ: āϤāĻžāĻšāϞ⧇ āĻĒāĻžāĻ“ā§ŸāĻžāϰ āĻ…āĻĢ āĻ•āϰ⧇ āφāĻŦāĻžāϰ āĻ…āύ āĻ•āϰ⧁āύ
āφāĻŽāĻŋ (āĻ…āĻĢ/āĻ…āύ āĻ•āϰ⧇): āĻ­āĻžāχ āϏ⧇āĻŽ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
āĻ“ā§ŸāĻžāχ: āφāĻŽāĻŋ āĻŸā§‡āĻ•āύāĻŋāĻ•ā§āϝāĻžāϞ āϟāĻŋāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āϜāĻžāύāĻžāĻšā§āĻ›āĻŋ āĻ¸ā§āϝāĻžāϰ, āφāĻĒāύāĻžāϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϟāĻž āĻāĻ•āϟ⧁ āĻĻāĻŋāĻŦ⧇āύ?
āφāĻŽāĻŋ: ā§Ļā§§xy-abcdefg, āφāĻŽāĻžāϰ āχāωāϜāĻžāϰ āύ⧇āĻŽ xyzabcd
āĻ“ā§ŸāĻžāχ: āφāĻšā§āĻ›āĻž āĻ¸ā§āϝāĻžāϰ

(āĻĻāĻļ āĻŽāĻŋāύāĻŋāϟ āĻĒāϰ⧇, āφāĻŽāĻŋ āĻĢā§‹āύ āĻ•āϰāϞāĻžāĻŽ)
āφāĻŽāĻŋ: āĻ­āĻžāχ āφāĻĒāύāĻŋ āϤ⧋ āφāĻŽāĻžāϕ⧇ āϜāĻžāύāĻžāϞ⧇āύ āύāĻž
āĻ“ā§ŸāĻžāχ: āĻ¸ā§āϝāĻžāϰ, āφāĻŽāĻžāĻĻ⧇āϰ NOC āĻĨ⧇āϕ⧇ āϜāĻžāύāĻžāϞ⧋ āφāϰ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ⧇āϰ āĻŽāĻžāĻā§‡ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇
āφāĻŽāĻŋ: āĻ•āϤāĻ•ā§āώāύ āϏ⧇āϟāĻž āĻŦāϞ⧇āύ āĻĒā§āϞāĻŋāϜ, āφāĻŽāĻŋ āĻĻ⧁āĻĒ⧁āϰ āϤāĻŋāύāϟāĻž āĻĨ⧇āϕ⧇ āĻāχ āϘāϟāύāĻž āĻĻ⧇āĻ–āĻ›āĻŋ
āĻ“ā§ŸāĻžāχ: āĻ¸ā§āϝāĻžāϰ āφāϰ āĻāĻ• āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻžāĻā§‡āχ

(āϰāĻžāϤ ⧝:ā§Ēā§Ļ, āφāĻŦāĻžāϰ āφāĻŽāĻŋ āĻĢā§‹āύ āĻ•āϰāϞāĻžāĻŽ)
āφāĻŽāĻŋ: āĻ­āĻžāχ, āĻ•āĻŋāωāĻŦāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ?
āĻœā§‡āĻĄ: āĻœā§āĻŦāĻŋ āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻ•āĻŋāωāĻŦāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻĨ⧇āϕ⧇ āĻœā§‡āĻĄ āĻŦāϞāĻ›āĻŋ, āĻšāĻžāĻ“ āĻŽā§‡ āφāχ āĻšā§‡āĻ˛ā§āĻĒ āχāω āĻ¸ā§āϝāĻžāϰ
āφāĻŽāĻŋ: āφāĻŽāĻžāϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ ā§Ļā§§xy-abcdefg, āφāĻŽāĻžāϰ āχāωāϜāĻžāϰ āύ⧇āĻŽ xyzabcd, āĻ•āĻžāχāĻ¨ā§āĻĄāϞāĻŋ āĻŦāϞ⧁āύ āϝ⧇ āφāĻŽāĻžāϰ āϞāĻžāχāύāϟāĻž āϝ⧇ āĻ…āύ⧇āĻ•ā§āώāύ āϧāϰ⧇ āĻĄāĻŋāϏāĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ āĻšā§Ÿā§‡ āφāϛ⧇ āϏ⧇āϟāĻž āĻ āĻŋāĻ• āĻšāϤ⧇ āφāϰ āĻ•āϤāĻ•ā§āώāύ āϞāĻžāĻ—āĻŦ⧇
āĻœā§‡āĻĄ: āĻœā§āĻŦāĻŋ āĻ¸ā§āϝāĻžāϰ, āφāĻĒāύāĻŋ āĻ•āϤāĻ•ā§āώāύ āϧāϰ⧇ āĻĄāĻŋāϏāĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ āφāϛ⧇āύ?
āφāĻŽāĻŋ: āĻĻ⧁āĻĒ⧁āϰ āϤāĻŋāύāϟāĻž āĻĨ⧇āϕ⧇, āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ āĻĒāϰ āĻĒāϰ āĻĄāĻŋāϏāĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ āĻšā§Ÿā§‡ āϝāĻžāĻšā§āϛ⧇, āφāϰ āφāĻŽāĻŋ āĻāχ āύāĻŋā§Ÿā§‡ āϤāĻŋāύāĻŦāĻžāϰ āĻĢā§‹āύ āĻ•āϰāϞāĻžāĻŽāĨ¤ āϞāĻžāĻ¸ā§āϟ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āϰāĻžāϤ āϏāĻžā§œā§‡ āφāϟāϟāĻžā§ŸāĨ¤ āφāĻĒāύāĻžāϰāĻž āĻŦāϞ⧇āϛ⧇āύ āϝ⧇ āĻāĻ•āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻžāĻā§‡ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻāĻ•āϟ⧁ āύāϕ⧇ āĻĢā§‹āύ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŋ, āφāĻĒāύāĻŋ āĻāĻ•āϟ⧁ āϞāĻžāχāύ⧇ āĻĨāĻžāϕ⧁āύāĨ¤ āĻ¸ā§āϝāĻžāϰ āφāĻĒāύāĻžāϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϟāĻž āĻāĻ•āĻŦāĻžāϰ āĻŦāϞāĻŦ⧇āύ āĻ•āĻŋ?
āφāĻŽāĻŋ: āφāĻŽāĻŋ āĻ…āϞāϰ⧇āĻĄā§€ āĻāĻ•āĻŦāĻžāϰ āĻŦāϞ⧇āĻ›āĻŋ, āφāĻŽāĻžāϰ āχāωāϜāĻžāϰ āύ⧇āĻŽ āĻ“ āφāĻĒāύāĻŋ āĻšā§‡āĻ• āĻ•āϰ⧇āϛ⧇āύ, āϞāϗ⧇ āĻĻ⧇āϖ⧇āύ āφāĻŽāĻžāϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻ•āϤ
āĻœā§‡āĻĄ: āĻœā§āĻŦāĻŋ āĻ¸ā§āϝāĻžāϰ
(āĻĒāĻŋāĻ‚ āĻĒāĻŋāĻ‚ āĻ•āϰ⧇ āĻ—āĻžāύ āĻŦāĻžāϜāϤ⧇ āĻĨāĻžāĻ•āϞ⧇ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁āĻ•ā§āώāύ “āφāĻŽāĻžāϰ āĻœā§€āĻŦāύ āĻĻ⧁āϰāĻ¨ā§āϤ āĻāχ āĻŽāύ, āĻ•āĻŋāωāĻŦāĻŋ āĻĒā§‡ā§Ÿā§‡ āϛ⧁āϟāϛ⧇ āϏāĻžāϰāĻžāĻ•ā§āώāύ…” āφāĻŽāĻŋ āĻļ⧁āύāϤ⧇ āĻĨāĻžāĻ•āϞāĻžāĻŽ)
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ, āφāĻĒāύāĻžāϰ āĻŽā§‹āĻĄā§‡āĻŽ āϟāĻž āĻāĻ•āĻŦāĻžāϰ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāĻŦ⧇āύ āĻĒā§āϞāĻŋāϜ
āφāĻŽāĻŋ: āĻ­āĻžāχ āφāĻŽāĻŋ āĻŽā§‹āĻĄā§‡āĻŽ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰ⧇āĻ›āĻŋ āĻŦ⧇āĻļ āĻ•ā§Ÿā§‡āĻ•āĻŦāĻžāϰ, āĻāχ āφāϜāĻžāχāϰāĻž āĻ•āĻĨāĻžāϟāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇āύ āĻĒā§āϞāĻŋāϜ
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ, āφāĻŽāĻŋ āĻĻ⧇āĻ–āĻ›āĻŋ āφāĻĒāύāĻžāϰ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻšāϞ abcd123, āĻāϟāĻž āĻ•āĻŋ āφāϰ āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇āϛ⧇āύ?
āφāĻŽāĻŋ (āϖ⧁āĻŦāχ āĻ…āĻŦāĻžāĻ• āĻšā§Ÿā§‡, āϝ⧇ āφāĻŽāĻžāϰ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻ“āĻĻ⧇āϰ āĻ“āĻ–āĻžāύ⧇ āĻĒā§āϞ⧇āχāύ āĻŸā§‡āĻ•ā§āϏāĻŸā§‡ āϏ⧇āĻ­ āĻ•āϰāĻž āĻļ⧁āύ⧇): āύāĻž
āĻœā§‡āĻĄ: āĻ āĻŋāĻ• āφāϛ⧇ āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻĻ⧇āĻ–āĻ›āĻŋ
(āφāĻŦāĻžāϰ āĻĒāĻŋāĻ‚ āĻĒāĻŋāĻ‚ āĻ•āϰ⧇ āĻ—āĻžāύ āĻŦāĻžāϜāϤ⧇ āĻĨāĻžāĻ•āϞ…)
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻ• āĻĨ⧇āϕ⧇ āϜāĻžāύāĻžāϞ āϝ⧇ āĻāĻ•āϟ⧁ āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšāĻšā§āϛ⧇ āĻāĻ•āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻžāĻā§‡ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇
āφāĻŽāĻŋ: āĻ­āĻžāχ āĻāϟāĻž āϤ⧋ āϜāĻžāύāĻžāύ⧋ āĻšāϞ āϏāĻžā§œā§‡ āφāϟāϟāĻžāϰ āϏāĻŽā§Ÿā§‡āĻ“āĨ¤ āĻāĻ•āϘāĻ¨ā§āϟāĻž āĻšāϤ⧇ āĻ•āϤāĻ•ā§āώāύ āϞāĻžāĻ—āĻŦ⧇?
āĻœā§‡āĻĄ: āĻāĻŦāĻžāϰ āĻāĻ•āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻžāĻā§‡āχ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤
āφāĻŽāĻŋ: āĻ•āĻŋ āĻĒā§āϰāĻŦāϞ⧇āĻŽ?
āĻœā§‡āĻĄ: āĻŦāĻŋāϟāĻŋāϏāĻŋāĻāϞ āĻāϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĄāĻĨ⧇āϰ āĻĒā§āϰāĻŦāϞ⧇āĻŽ
āφāĻŽāĻŋ: āĻŦāĻŋāϟāĻŋāϏāĻŋāĻāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĄāĻĨ āύāĻŋā§Ÿā§‡ āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦ⧇āĻļāĻŋāϰ āĻ­āĻžāĻ— ⧍ā§Ģā§Ŧ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āϕ⧇ āĻĢā§āϰāĻŋ ā§Ģ⧧⧍ āĻĻāĻŋāĻšā§āϛ⧇āύ āϕ⧇āύ āĻāĻ• āϏāĻĒā§āϤāĻžāĻšā§‡āϰ āϜāĻ¨ā§āϝ, āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž ā§Ģ⧧⧍ āĻāϰ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰāϰāĻžāχ āĻ āĻŋāĻ•āĻŽāϤ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĄāĻĨ āĻĒāĻžāĻšā§āĻ›āĻŋ āύāĻž?
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āφāϏāϞ⧇ āĻŦāĻŋāϟāĻŋāϏāĻŋāĻāϞ āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒā§āϰāĻŦāϞ⧇āĻŽ
āφāĻŽāĻŋ: āφāĻšā§āĻ›āĻž

(āϰāĻžāϤ ā§§ā§Ļ:ā§Ģā§Ģ)
āφāĻŽāĻŋ: āĻ•āĻŋāωāĻŦāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ?
āĻœā§‡āĻĄ: āφāĻŽāĻŋ āĻ•āĻŋāωāĻŦāĻŋ āĻĨ⧇āϕ⧇ āĻœā§‡āĻĄ āĻŦāϞāĻ›āĻŋ, āĻšāĻžāĻ“ āĻŽā§‡ āφāχ āĻšā§‡āĻ˛ā§āĻĒ āχāω
āφāĻŽāĻŋ: āĻ­āĻžāχ āĻ¸ā§‹ā§ŸāĻž āĻāĻ•āϘāĻ¨ā§āϟāĻž āφāϗ⧇ āϜāĻžāύāĻžāϞ⧇āύ āϝ⧇ āĻāĻ•āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻžāĻā§‡ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤ āĻāĻ–āύ⧋ āϤ⧋ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻĄāĻžāωāύ āĻšā§Ÿā§‡āχ āφāϛ⧇
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āύāĻ• āĻĨ⧇āϕ⧇ āϜāĻžāύāĻŋā§Ÿā§‡āϛ⧇ āϝ⧇ āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšā§Ÿā§‡āϛ⧇, āĻ•āĻžāϜ āϚāϞāϛ⧇
āφāĻŽāĻŋ: āĻ•āϤāĻ•ā§āώāύ āϞāĻžāĻ—āĻŦ⧇?
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻ āĻŋāĻ• āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ āύāĻž
āφāĻŽāχ: āύāϕ⧇ āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧁āύ, āφāĻŽāĻžāϰ āϰāĻžāϤ⧇ āĻŽāĻŋāϟāĻŋāĻ‚ āφāϛ⧇ āĻāĻŦāĻ‚ āĻ•āĻžāύ⧇āĻ•āĻļāύāϟāĻž āϞāĻžāχāĻ­ āĻšāĻ“ā§ŸāĻž āφāĻŽāĻžāϰ āϖ⧁āĻŦāχ āĻĻāϰāĻ•āĻžāϰ
āĻœā§‡āĻĄ: āĻ¸ā§āϝāĻžāϰ āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāĻ• āĻĨ⧇āϕ⧇ āφāĻŽāĻžāϕ⧇ āϕ⧋āύ⧋ āϟāĻžāχāĻŽ āϜāĻžāύāĻžāύ⧋ āĻšā§Ÿ āύāĻžāχ
āφāĻŽāĻŋ: āϕ⧋āύ⧋ āϟāĻžāχāĻŽ āϜāĻžāύāĻžāύ⧋ āĻšā§Ÿ āύāĻžāχ āĻœā§‡ āĻ•āϤāĻ•ā§āώāύ āϞāĻžāĻ—āĻŦ⧇ āϞāĻžāχāύ āĻ āĻŋāĻ• āĻšāϤ⧇, āĻŦāĻž āĻ…ā§āϝāĻžāϟāϞāĻŋāĻ¸ā§āϟ āĻ•āϤāĻ•ā§āώāύ āϞāĻžāĻ—āϤ⧇ āĻĒāĻžāϰ⧇
āĻœā§‡āĻĄ: āύāĻž āĻ¸ā§āϝāĻžāϰ

āφāĻŽāĻŋ āĻĢā§‹āύ āϟāĻž āϕ⧇āĻŸā§‡ āĻĻāĻŋāϞāĻžāĻŽāĨ¤ āϚāĻŽā§ŽāĻ•āĻžāϰ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāĨ¤ āĻĢā§‹āύ āĻ•āϰāϞ⧇āχ āĻĢāĻžāϟāĻž āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āĻŽāϤ āĻāĻ• āϘāĻ¨ā§āϟāĻž āϧāϰ⧇ āϏāĻŦāĻ• āĻĻāĻŋāĻŦ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŽā§‹āĻĄā§‡āĻŽ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšā§Ÿ, āϝ⧇āύ āĻŽā§‹āĻĄā§‡āĻŽ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ›āĻžā§œāĻž āĻāϰāĻž āĻ•āĻŋāϛ⧁āχ āϜāĻžāύ⧇ āύāĻžāĨ¤

āĻāχ āĻŦā§āϝāĻĒāĻžāϰāϟāĻž āϘāĻŸā§‡āϛ⧇ āĻŦ⧇āĻļ āĻ•ā§Ÿā§‡āĻ•āĻŦāĻžāϰ āĻāĻŦāĻ‚ āϝāϤāĻŦāĻžāϰ āĻĢā§‹āύ āĻ•āϰāĻŋ āĻāĻ•āχ āϘāϟāύāĻž āĻ…āϞāĻŽā§‹āĻ¸ā§āϟ āĻ…āϞ āĻĻā§āϝ āϟāĻžāχāĻŽāĨ¤

āφāĻĒāĻĄā§‡āϟ:
āĻŦāĻ¨ā§āϧ⧁ āĻ…āĻŽāĻŋ āφāϜāĻžāĻĻ āϕ⧇ āĻĢā§‹āύ āĻ•āϰāϞāĻžāĻŽ ā§§ā§§ āϟāĻž ā§§ā§Ģ āĻ āϝ⧇ āĻ“āϰ āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇āϰ āĻ•āĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āĻ…āĻŽāĻŋāϰ āĻ“ āĻŽā§‡āϜāĻžāϜ āĻ–āĻžāϰāĻžāĻĒ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āĻ•ā§‡ā§ŸāĻžāϰ⧇āϰ āφāϜāĻžāχāϰāĻž āĻ•āĻĨāĻž āĻŦāĻžāĻ°ā§āϤāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āĻāĻ•āϟāĻž āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšāϞ⧇ āϏ⧇āϟāĻž āĻ­āĻžāϞ āĻ•āĻĨāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻž āĻ…āĻĨ⧇āύāϟāĻŋāĻ• āχāύāĻĢāϰāĻŽā§‡āĻļāύ āύāĻž āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϧ⧁ āĻļ⧁āϧ⧁ āĻ•āĻĨāĻž āĻĒā§āϝāĻžāρāϚāĻžāύ⧋āϟāĻž āĻāϕ⧇āĻŦāĻžāϰ⧇āχ āĻ…āϏāĻšā§āϝāĨ¤ āĻ…āĻŽāĻŋ āĻ…āĻŦāĻļā§āϝ āĻŽāϜāĻžāϰ āĻ•āĻĨāĻž āĻŦāϞāϞ – āĻ“āϕ⧇ āύāĻžāĻ•āĻŋ āĻāĻœā§‡āĻ¨ā§āϟ āĻŦāϞ⧇āϛ⧇ “āĻ¸ā§āϝāĻžāϰ āĻ āĻŋāĻ• āĻāĻ—āĻžāϰ⧋āϟāĻžāϰ āϏāĻŽā§Ÿ āĻ āĻŋāĻ• āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇”āĨ¤ āĻ…āĻŽāĻŋāϰ āϘ⧜āĻŋāϤ⧇ āĻŦāĻžāĻœā§‡ āϤāĻ–āύ āĻāĻ—āĻžāϰ⧋āϟāĻž āϏāĻžāϤāĨ¤ āϤ⧋ āϏ⧇ āĻāĻœā§‡āĻ¨ā§āϟāϕ⧇ āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧇āϛ⧇ āĻ­āĻžāχ āϘ⧜āĻŋāϟāĻž āĻāĻ•āĻŦāĻžāϰ āĻĻ⧇āϖ⧇āύ āϝ⧇ āĻ•ā§ŸāϟāĻž āĻŦāĻžāĻœā§‡ 🙂

āφāĻĒāĻĄā§‡āϟ:
āĻāĻ–āύ āĻŦāĻžāĻœā§‡ āϰāĻžāϤ ā§§:ā§Šā§Ž, āĻāĻ–āύ⧋ āĻ•āĻžāύ⧇āĻ•āĻļāύ āϞāĻžāχāĻ­ āĻšā§Ÿ āύāĻžāχāĨ¤ āφāĻŽāĻŋ āĻ—ā§āϰāĻžāĻŽā§€āύ āĻĢā§‹āύ⧇āϰ āĻĒāĻŋā§Ē āĻĻāĻŋā§Ÿā§‡ āϞāĻ—āχāύ āĻ•āϰ⧇ āĻāχ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāϞāĻžāĻŽ 🙂

āĻ–āĻŋāĻ• āĻ–āĻŋāĻ• āĻ–āĻŋāĻ•, āϜ⧟āϤ⧁ āĻ•āĻžāĻ¸ā§āĻŸā§‹āĻŽāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ, āϜ⧟āϤ⧁ āĻ—ā§āϰāĻžāĻšāĻ• āϏ⧇āĻŦāĻž 🙂

LAMP Training for GrameenPhone: Download the course materials

Last November, 2009 I conducted the course on Basic LAMP in GrameenPhone and it was really fun. It was a 7 days course. You can download the complete course materials from the following link

Download LAMP Course Materials for GrameenPhone

Just in case you are interested to know what was covered in those 7 days, here you go

Day 1: Basic Linux and PHP Primer (Sorry, no slide for that day)
Day 2: MySQL Primer
Day 3: More Database, File upload and OOP
Day 4: Day 4: String, DateTime, Parsing XML, Regular Expression, Javascript and Ajax
Day 5: Introduction to Zend Framework
Day 6: Introduction to CodeIgniter
Day 7: Chart and Graphs, Google Translation, Visualisaion and Security

If u find it interesting, you can download from the following link. There might be some typo, please overlook them 🙂
Download LAMP Course Materials for GrameenPhone

Installing Storytlr in your own domain

When lifestreaming services come under the spotlight, Storytlr is definitely a promising one. They started their journey not more than a year ago, was loved by many other people out there, and decided to shutdown! Ok, that makes sense when the economy was so scary lately, but the good thing is that – they didn’t just announced “We are shutdown, and we don’t care what the fuck had you built with us”. Those brilliant people behind Storytlr did something very much appreciable, they made their brain child open source. I really loved that. The source code is available to download from their google code project page.

Other than Storytlr, there is another open source life streaming service available at this moment which is “pubwich” and is available to download from http://pubwich.org

My post is about how you can grab the source code of Storytlr and set it up in your own webserver. I’ve seen many people were asking on the mailing list an their news blog about how to install this one successfully. So I decided to give it a shot and install it. Follow these steps and you are good to go 🙂

#1 Add a wildcard A record pointing to your server’s IP
#2 If you are hosted in VPS, and you have multiple domains hosted, you may want to create a Virtual Host with the following entries. I just assumed that your document root for Storytlr will be at “/var/www/storytlr”
[sourcecode lang=”php”]
<VirtualHost *:80>
ServerName domain.tld
ServerAlias domain.tld
ServerAdmin [email protected]
DocumentRoot /var/www/storytlr
<Directory /var/www/storytlr>
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
[/sourcecode]

Dont forget to restart/reload your web server after this.

#3 change your current workign directory to /var/www/storytlr and download the latest available storytlr from google code, and then extract it 🙂
[sourcecode lang=”bash”]
wget http://storytlr.googlecode.com/files/storytlr-0.9.2.tgz
tar -zxvf storytlr-0.9.2.tgz
[/sourcecode]

Now you will see some directories in the same path.

#4 Create a mysql database named “storytlr” (You can name it whatever, just dont forget to change the DB settings accordingly in the config. I will be discussing this later) – also create a user for this db and grant it all permission for this db.
[sourcecode lang=”sql”]
mysql> create database storytlr;
mysql> grant all on storytlr.* to ‘storytlr’@’localhost’ identified by ‘password’;
mysql> flush privileges;
[/sourcecode]

#5 Now you need to import storytlr’s schema into it. change your working directory to /var/www/storytlr/protected/install and import the database.sql into the recently created “storytlr” db
[sourcecode lang=”bash”]
mysql -u storytlr -p storytlr < database.sql
[/sourcecode]

#6 You need to install a PECL extension “tidy” to make Storytlr work properly. So if you dont have that installed on your server, you can do this using the following command
[sourcecode lang=”bash”]
apt-get install php5-tidy
or
pecl install tidy
[/sourcecode]

if you install it via “pecl” then dont forget to add this line “extension=tidy.so” in your php.ini. Also in this case, make sure that put tidy.so inside the directory which is mentioned in the php.ini as “extension_dir”

restart your webserver
[sourcecode lang=”bash”]
/etc/init.d/apache2 restart
[/sourcecode]

#7 Now you need to add write permission to some directories that storytlr needs. Change your workign directory to /var/www/storytlr/protected and apply the following commands
[sourcecode lang=”bash”]
chmod 0755 logs
chmod 0755 feeds
chmod 0755 temp
chmod 0755 upload
[/sourcecode]

#8 We are almost done. Now change your working directory to /var/www/storytlr/protected/config and copy the config.ini.sample as config.ini. Edit this config.ini – you need to make various changes here.

#line number 1: if you have PDO and PDO_MYSQL installed in your machine, leave it as is – or else change it to “MYSQL” instead of “PDO_MYSQL”

Change DB settings. Add appropritae uername, db name and password there

Change line number 14, 15, 16 and remove the comments (the semicolon 😉 from in front of them. Its better to add caching.

Change line number 19 and add your host name. You may also change the timezone to your working one.

Change line # 25, set app.closed = 0. You want to enable registration for your visitors, right?

Comment out line number 28 (app.user = admin) and add a semicolon in front of it 🙂

Change line #39 (flickr.api_key=) – add your Flickr API key there. This is optional 🙂

You may also change line number 57 and add a google map api key for your domain. This is also optional 😉

#9 Last step, create /tmp/cache directory and add write permission to it 🙂

Done and Enjoy!

Lookback 2009 and wishlist for 2010

2009 was a very nice year for me and my family. As of 2007 and 2008, here are some interesting facts of 2009. I just wonder how fast the days pass. 🙂

1. PHPExperts Workshop in May – It was a tremendously successful event we’ve arranged from PHPExperts with the help of computer club of Brac university.

2. I was one of the key speakers in Facebook Developers Garage in Dhaka. That was also a superb event in overall.

3. I bought my first car, Nissan Sunny 1.5 ltr 2004 JDM model.

4. Bought an iPod classic 120 GB and an iPod touch. Now I had quite a bad luck with both of these 🙁 – my iPod classic HDD was crashed in 5 months and I’ve returned it as a “Sales Return”. Later, my iPod touch home button got stuck and became stiff. I’m still using it.

5. We have a new member in our family, my son Evan in September.

6. I have started a small startup and we named it Leevio. We are currently developing some groupware tools which we hope to release in january 2010.

7. Needless to say, I became 30 years old 😀

Wishlist for 2010
1. I wish to have one of the new macbook/macbook-pro sometime in 2010
2. A new car (MT this time, of course). I will mod it myself 🙂
3. Some cool products from Leevio.
4. A superb WP Theme studio.
5. A new book on Facebook Connect that I am currently working on.

and of course, peace and happiness for everyone. 🙂 May Allah bless you all.

Have a nice year 2010.

What is your most favorite Book on PHP?

My first PHP book was “Beginning PHP4” which I read in 2002. I still remember that dark red cover with smiling faces on top of it :). It was a good book. I should rather say it was a very good one for kick-starting PHP that time.

So far I’ve read a lot of books written on PHP. But when someone asks me which one is my favorite, I get three or may be four which were very good. First one was Professional PHP Programming. Then comes PHP5 Power Programming. Next comes Advanced PHP Programming and Finally I must say about Zend Enterprise PHP Patterns. Of course there are other books which are very good in fact. But these are my favorite (Well, you see that Beginning PHP4 and Professional PHP4 are obsolete by now, but they helped me a lot that time)

If I have to choose my most favorite one – I would vote for Advanced PHP programming

What is your most favorite Book on PHP? It doesn’t matter if they are obsolete or 10 years old 🙂 – Just share you most favorite one with us 🙂

zembly is deadpooled – 2.5 yrs of effort went in vain :(

Zembly
I got a bad news this morning that zembly is shutting down their service from 30th next. that’s a very bad news because zembly was a nice service for developers. They’d started their business from june 2007, provided exciting APIs to developers to develop mashups on top of popular services like Facebook, MySpace, Flickr and so forth. I’ve seen another popular service like this , appJet, went down this year. Now it’s extremely frustrating that such types of services are shutting down. Why? most probably they’ve failed to secure funding, or may be they’ve some fight in their board of directors, or whatever, who knows and who cares.

But the point is, what happen to developers who has developed their app using services like zembly or appJet? all their efforts to learn these new technology, new tools and to develop some really cool applications using these services just became useless all at a sudden. That’s pathetic, and thats an utter lack-of-respect to your own developers community. These developers are your everything. They were your everything. If these developers didn’t put their efforts for you zembly, you will never survive a quarter, may be six months.

I really dont understand, If you dont have the guts to run your product thats fine. I have no problem with that. But before saying “All our service will be unavailable from blah blah blah” and “We are sorry and blah blah blah” , come on – show a minimal respect to your developer community. After 2.5 years of run, its not a small community after all. And grow up kiddo, before shutting down your company, at least make your project open source – as a sign of minimal respect and loyalty to the developers community who kept you running for so long.

I am sorry for Zembly But I am more sorry for the developer community.

Getting HP-1020 Laserjet Printer working on Snow Leopard

Since upgrading to snow leopard from leopard, this was the biggest problem and most frustrating thing for me. My HP Laser-jet 1020 stopped working. I’ve downloaded all possible updates from apple and none works. My good old printer just became a piece of brick (lol, yeah really)

So how did I finally get it running? almost 10-20 hours of googling+downloading+trial and error+cursing and drinking a lot of coffee, open source stuffs saved my day 🙂 – here you go .

#1 – download foomatic-RIP from here http://www.linuxfoundation.org/collaborate/workgroups/openprinting/macosx/foomatic (choose the snow leopard package)
#2 – download ghostscript from http://www.linuxfoundation.org/collaborate/workgroups/openprinting/macosx/foomatic )choose snow leopard package)
#3 – download foo2zjs from here http://mac.softpedia.com/progDownload/foo2zjs-Download-33222.html

#4 Ok, now install GhostScript First, then Install Foomatic-RIP. Just perform a default install. no extra thingy – nothing 🙂

#5 Now install foo2zjs package. while installing, it will ask for admin access. Then it will open a shell window and display you a list of firmware to choose from. You will find HP-1020 listed on #7 – so type “7” and hit enter. Now if it asks you whether you want to delete the installation file, choose “yes”.

#6 Now open the “helper” folder inside this foo2zjs package and copy the load_LaserJet_firmware_v4 file to anywhere else. We need this file later.

#7 Connect HP-1020 in USb port and Add the printer from your printer preference panel.

#8 Now double click on load_LaserJet_firmware_v4 file that you have copied earlier and run it 🙂

Ok, now you have a working HP-1020 in your snow leopard. Until HP or Apple releases a patch, this is the only way to get it working. Well, dont forget to send me a cup of coffee for saving you from buying a new printer – lol!