Building services like FriendFeed using PHP – Part 1

Friendfeed is an excellent life streaming service aggregating all your feeds from different service providers, compile them together, build a social network among your known people and finally deliver all these feeds as a mashup. As a result you can immediately track activities of your friends on all the different service they use (like jaiku, twitter, flickr) and stay up-to-date. Hats off to the developers of FriendFeed for delivering such a nice application to us.

In this blog post I will try to focus on how to develop such a service like Friendfeed using PHP and JS and how to scale such a huge load successfully. Previously I’d also written another article focusing “How to develop services like SpringLoops using PHP“. The complete article will be delivered in multiple installments and in current installment, I will focus on Photo sharing services used by friendfeed.

Area to focus
1. Services to be supported
2. Update discovery
3. Parsing the feeds
4. Storing the data
5. Scaling

FriendFeed parses feeds from a total of 35 popular services from around the web 😉 – lets have a look at them one by one and I will give you idea about the access points of these services. Though Not all of them are feed, so I will try to focus those services as well to give you a basic idea.

Service 1 : Flickr
Usable PHP Library: PHPFlickr

Flickr is an excellent photo sharing services under the banner of Yahoo. Friendfeed parses all the photo from a user and also the list of his/her favorite photos. Given an username you can easily find the Flickr ID like (76536911@N00)of that user and once you got it, here is the access points for list of public photos and favorites

List of photos
http://api.flickr.com/services/feeds/photos_public.gne?id=<user’s flickr id>&lang=en-us&format=rss_200
example: http://api.flickr.com/services/feeds/photos_public.gne?id=76536911@N00&lang=en-us&format=rss_200

List of favorites
http://api.flickr.com/services/feeds/photos_faves.gne?nsid=<user’s flickr id>&lang=en-us&format=rss_200
example:http://api.flickr.com/services/feeds/photos_faves.gne?nsid=76536911@N00&lang=en-us&format=rss_200

Service 2: Picasa Web Album
Picasa is another photo sharing service under the banner of the Giant, Google. Given a picasa user name , here are the access point of user’s public photos

List of public photos
http://picasaweb.google.com/data/feed/base/user/<picasa user name>?kind=album&alt=rss&hl=en_US&access=public
example:http://picasaweb.google.com/data/feed/base/user/countdraculla?kind=album&alt=rss&hl=en_US&access=public

Service 3: Smugmug
Here comes another photo sharing service where users can buy and sell their photos. Given a smugmug user name you can find the feed of this user’s photos

List of public photos
http://<smugmug user name>.smugmug.com/hack/feed.mg?Type=nickname&Data=Ifocus&format=rss200
example:http://ifocus.smugmug.com/hack/feed.mg?Type=nickname&Data=Ifocus&format=rss200

Service 4: Zoomr
Zoomr is another photo sharing service started in late 2005 by Kristopher Tate as a place for him to share photos with his friends and later became a public services, is currently supported by FriendFeed. And here we go with the access points 🙂

List of public photos
http://www.zooomr.com/services/feeds/public_photos/?id=<zoomr user name>&format=rss_200
example:http://www.zooomr.com/services/feeds/public_photos/?id=wolfmank&format=rss_200

In next part, I will highlight the access points of supported bookmark services and news services supported by FriendFeed 🙂 Have a nice weekend.

Setting up virtual host with mod rewrite enabled in Ubuntu Hardy Heron

Virtual host is really what the name says, a virtual environment over the top of your current web server to simulate a separate hosting environment. Using virtual host you can enable site specific features and keep your development environment totally separate from another one. For example, if you want to experiment a simple application with both mod_rewrite enabled or disabled, you can setup two virtual host with these different settings to take place. In this blog post I will show you how to set up virtual host in ubuntu hardy heron with mod_rewrite enabled.

Step 1: setup a virtual domain

open /etc/hosts and add a virtual domain with a specific local IP. In this file it contains ip and domain name separated by a space. You can also add the port using a colon with the IP. Lets assume that our virtual domain name is “ilove.php” – and It will listen to the ip “127.0.1.2”

so we will add the following line to our /etc/hosts file
127.0.1.2:80 ilove.php

now whenever you point to http://ilove.php – your browser will actually open http://127.0.1.2:80

Step 2: configure virtual host with apache
here we will configure our newly added virtual domain against apache as a virtual host, and did I forget to say, with mod_rewrite enabled 🙂

goto /etc/apache2/sites-available and create a file named “ilove.php” – I recommend to keep it the same name as your virtual domain.
sudo nano /etc/apache2/sites-available/ilove.php

write the following contents inside. but please note to create the appropriate directory before linking your virtual host with that, for example we’ve create a folder named “/home/<user name>/www/ilovephp” and linked that directory as my document root in the following configuration file.


<VirtualHost 127.0.1.2:80>
	ServerName ilove.php
	ServerAlias www.ilove.php
	ServerAdmin [email protected]
	DocumentRoot /home/<user>/www/ilovephp
	<Directory /home/<user>/www/ilovephp>
		Options FollowSymLinks
		AllowOverride All
	</Directory>

</VirtualHost>

now create a symbolic link of this file to /etc/apache2/sites-enabled directory as “ilove.php”

sudo ln -s /etc/apache2/sites-available/ilove.php /etc/apache2/sites-enabled/ilove.php

Step 3: restart apache (or reload)
simple, either one of the followings
sudo /etc/init.d/apache2 restart

or

sudo /etc/init.d/apache2 reload

or

sudo a2ensite ilove.php

and you are done! now you can point your browser to http://ilove.php

I dont give you a damn, if

You came to an interview for “PHP Developer” and you said you dont know the name “Rasmus Lerdorf”.

You’ve used MySQL for a long time and didn’t even hear about “Michael Monty”

and though “jQuery” is your “favorite JS framework” for a long time, but “John Resig, who is he?”

shame on you


The reason behind writing this blog post is I’ve interviewed some candidates recently and They dont know the name of the developers of PHP, MySQL or almost any other libraries they make their living on. They dont even know the history of these tools (History might be too much and I surely am not a Jerk, but I want them to know the name of the developer behind this)

I don’t take my time to show them the door, I am pissed off.

I have started learning Python

Yes, probably this is the third or fourth time I have said this. I am such an idiot to never find my time to learn everything. I wish one day I can really develop my web apps using both PHP and Python. And no Java (Or Ruby), nah, I am tired of that, really!

I first coded an xml parser with the help of builtin expat parser, in 2002 for coherity. Since then I fall in love with this excellent language. And once I was about-to-be-addicted into ruby but no more, I dont like it. No stereotyping, I just dont like it, period. I coded in java for a long time and tried but didnt fall into it, my bad.

I wish I wont have to write another post again titled “I have started learning Python” – wish me best of luck.

নস্টালজিয়া – ৪

ইস্কুলে ভর্তি হবার কিছুদিন পরেই আমরা এসেছিলাম রাজশাহীতে বেড়াতে। সবাই মিলে বেড়ানোর কি যে মজা টের পেয়েছিলাম সেবার। ট্রেনে করে এসেছিলাম মনে আছে আমার। বাবার কেমন যেন এক বন্ধু থাকতেন রাজশাহীতে, আমরা গিয়ে তাঁর বাসাতেই উঠলাম। রাজশাহীর বাসাগুলো কেমন যেন পুরোনো পুরোনো, আর সেই সময় সাহেব বাজারের বাড়ীগুলো যেন আরো পুরোনো ছিল। একতলা বাড়ি, দোতলায় ছাদে ওঠার প্যাঁচানো একটা সিঁড়ি আর চিলেকোঠা, আর ইয়া মোটা মোটা দেয়াল। এককথায় সেই সময় মারাত্মক লেগেছিল আমার। কাকার অনেকগুলো ছেলে মেয়ের মাঝে দুই ছেলে ছিল নোটন আর ছোটন নাম। ছোটনের সাথে আমার বেজায় খাতির হয়ে গেল। ছোটনের মাথায় রাজ্যের যত দুষ্টামী বুদ্ধি। আমাকে ও শিখাল কিভাবে শক্ত কাগজ ভাঁজ করে গুলি বানিয়ে দুই আঙ্গুলের মাঝে একটা চুল বাঁধা রাবার দিয়ে মারা যায়। আর কারো গায়ে লাগলে সাথে সাথে খুবই জ্বালা করে। আমরা যাকে পাই তাকেই গুলি মারি। সেকি মজা। ছোটন একবার তার বড় বোন তুলিকে গুলি মেরে ভয়ানক মার খেল। এরপর আমরা একটু সাবধানে গুলি মারতে লাগলাম। লুকিয়ে চুরিয়ে, আর বেশির ভাগ সময়ই বকুনি খেল নোটন আর ছোটন।

খুব ছোটবেলা থেকেই মা আমাদেরকে রিডিং পড়া শিখাত। গড়গড় করে পড়তে না পারলে আবার পড়তে হত। মুখে একদম ফেনা উঠে না যাওয়া পর্যন্ত ছাড়া হত না। চরম কষ্টকর এবং বিরক্তিকর একটা ব্যাপার ছিল এই রিডিং পড়া, তবে পরে অনেক কাজে দিয়েছিল আমার এই গড়গড় করে পড়ার ব্যাপারটা। ক্লাসে কোন রিডিং করার দরকার থাকলে বেশির ভাগ সময় আমি পেতাম এই ভার। ষে যাক গে, মার প্রসঙ্গ আসল অন্য একটা কারনে। মা আমাকে দাবা খেলা শিখিয়েছিল অনেক ছোটবেলায়। দুপুর বেলা খাবার পর আমরা মাঝে মাঝেই দাবা খেলতাম।

তো রাজশাহীতে কাকার সাথে দাবা খেলা হল অনেক। আমি ছোট বলেই কাকা ইচ্ছা করে ভুল চাল দিয়ে হেরে যেত। খুব মজা পেতাম আমি, জিতেছি ভেবে। কাকার সাথে একদিন ভোর বেলা আমি বাবা, নোটন ছোটন আর আমার বোনেরা মিলে বের হয়ে দেখলাম কয়েকজন মিলে পদ্মার পাড়ে হাঁসের বিয়ে দিল। খুবই মজা পেয়েছিলাম সেদিন।

ছোটন আর আমি মিলে একটা ভয়ানক বাজে কাজ করছিলাম সেবার। ছাদের উপরে অনেক খোয়া (ছোট ছোট ইঁটের টুকরো) রাখা ছিল কোন কারনে। আমি আর ছোটন মিলে সেগুলো আকাশের দিকে ছোঁড়া শুরু করলাম একদিন, বাসার নিচে রাস্তা, সব খোয়া গিয়ে পড়তে লাগল মানুষজনের গায়ে। আমরা ব্যাপারটা অত আমল দেইনি – হঠাৎ বিশাল এক শোরগোল পড়ে গেল, অনেক গুলো লোক এসে ধমাধম করে বাসার দরজা ধাক্কানো শুরু করল। আমরা কেবল বুঝতে পেরেছি যে কাজটা খুবই সিরিয়াস টাইপের কিছু হয়ে গেছে। আমার আর ছোটনের আত্মারাম প্রায় খাঁচাছাড়া অবস্থা তখন। আমরা কোথায় গিয়ে যেন লুকিয়ে পড়েছিলাম। বাসার বড়রা সবাই বাইরে গিয়ে মানুষজনকে ঠান্ডা করেছিল।

এর কয়েকদিন পরেই আমরা আবার ঢাকায় চলে আসলাম। রেল স্টেশনে আমি আর ছোটন কেঁদেছিলাম অনেক, এত মজার দিন শেষ হয়ে গেল ভেবে। আমি এসএসসি পাশ করার পরপরেই কাকা মারা গেল, আর ছোটন নোটন কেউই পড়াশোনা করল না, ব্যবসা ছিল এদের প্রধান পেশা। ছোটনরাও পড়াশোনা শিকেয় তুলে হয়ে গেল দোকানদার।

10 signs you are ruining your career as a web app developer

Heh Heh, well – this is an article just highlighting some of experience in last couple of months. I am sometime too much annoyed because of the the attitude of some people, sometime I feel that they are annoyed on me. And I think I should write them down. Signs indicate that you are ruining your career

1. You’ve started implementing (or started believing in) popular (?) asshole driven development in your company (or in your team)
2. You are one of the biggest jerk who’s thinking that you are no more suitable for a “developer” position and you always want to be the PM or tech lead. LOL
3. You cannot find any topic to study this evening
4. You are so busy in development that your last blog post was about 2 or 3 months ago
5. You haven’t contributed in any single open source project yet, WTF!!
6. You are spending time to write a 7 page resume
7. You are not using any RSS aggregator (LOL)
8. You’ve never heard of any framework, nor using any
9. You’re neither member nor active in any online tech forum
10. WAMP is still the development platform for your LAMP app.

নস্টালজিয়া – ৩

সেই বাসা টা আমরা বদলিয়ে চলে আসি মাঠের পাশে আরেকটা বাসায়। ঘুপচি গলির মাঝে এক কোনায় ছিল আমাদের বাসা। এখানে আমি ছিলাম ক্লাস ফাইভ পর্যন্ত। সেটা পরের কাহিনী। এই বাসাটার সাথে আমার অনেক স্মৃতি জড়িয়ে আছে।

মাসে একবার শুক্রবারে আমি আর বাবা বের হতাম চুল কাটতে। সেইসময় নাপিত মামা পাঁচ টাকায় চুল কেটে দিত। আর এই চুল কাটার ব্যাপারটা আমার কাছে ছিল একটা অসহ্য ব্যাপার। বড়দের চেয়ারের দুই হাতলের উপরে কাঠের একটা তক্তা দিয়ে তার উপরে আমাকে বসানো হত। চুল কাটার সময় নাকে মুখে চুল ঢুকে যেত, উফ, আমার শুধু মনে হত চুল না বড় হলেই তো হয় – সবসময় চুল ছোট থাকলে কত ভাল হত।

আমাদের পাশের বাসায় টুটুল নামে একটা ছেলে থাকত। ঐসময় টুটলের কাজই ছিল আমাকে সারাদিন ক্ষ্যাপানো। বাসার পাশে একটা দোকানে সেইসময় চার আনায় অনেকগুলো টিকটিকির ডিম (ছোট গোল গোল লজেন্স) পাওয়া যেত, আর টুটুল করত কি সেগুলো কিনে আমাকে দেখিয়ে দেখিয়ে খেত। এমন মেজাজ খারাপ হত আমার। টুটুলের সাথে আমার বনেনি কখনোই। টুটুলের মা ছিল অদ্ভুত এক মহিলা, সে টুটুলের উপরে ক্ষেপে গেলেই টুটুল কে একদম ন্যাংটো করে পিলারের সাথে বেঁধে রেখে দিত। টুটল যতই চিৎকার করে কাঁদুক না কেন, তাকে ছাড়া হত না। ব্যাপারটা সেই সময় আমার মনে অনেকদিন ধরে গেঁথে গিয়েছিল। টুটুলের গলা ফাটানো কান্না শুনলেই বোঝা যেত ওর মা ওকে এখন বেঁধে রাখছে। টুটলরা খুব শীঘ্রই বাসা বদল করে কোথায় যেন চলে যায়।

আগের বাসায় আমাদের একটা কুকুর ছিল টমি নামে। আমি আর বাবা প্রতিদিন সকালে ওকে খাওয়াতাম। বাসা বদল করে আসার পর কেন যেন কুকুরটা আমাদের সাথে আসেনি, যদিও মাঠের এপাশ আর ওপাশ। শুক্রবারে আমি আর বাবা প্রায়ই কিছু বাসি রুটি নিয়ে আগের পাড়ায় গিয়ে টমিকে খুজে বের করতাম। কিছুদিন পরে টমিও কোথায় যেন চলে গেল, আর পাইনি।

ছোটবেলা থেকেই অনেকগুলো বোনের সাথে থাকায় রান্নাবান্না আর পুতুল ছিল আমার খুবই পছন্দের একটা খেলা। আমরা বালি দিয়ে ভাত রান্না করতাম, ভুসি দিয়ে বানাতাম খাবার আর ইটের গুঁড়ো দিয়ে বানাতাম সরবত। । এমনকি পাশের বাসার নতুন ছেলেটা আর তার বোনের সাথেও আমি রান্নাবান্না খেলেছি অনেকদিন। একদিন কি কারনে যেন একটা টিনের জগে অনেকখানি আটার ভুসি নিয়ে পানি গুলে খাটের তলায় রেখে দিয়ে ভুলে গিয়েছিলাম। কয়েকদিন পরে সেই ভুসি পচে গন্ধ বের হওয়া শুরু হল। ভালই মার খেয়েছিলাম সেদিন।

নস্টালজিয়া – ২

আমি তখন স্কুলেও ভর্তি হইনি, ভাসা ভাসা মনে পড়ে কিছু কিছু দিনের কথা। আমাকে খাওয়াতে খুবই বেগ পেতে হত বোনদের। আমাদের বাসায় কোন ফ্রিজ বা টিভি ছিল না সেই সময়। মাঝে মাঝে আমাদের অনুমতি মিলত পাশের বাসায় টিভি দেখার। আর টিভিতে কিছু চলার সময় সে কি ভিড় মানুষ জনের, যেন উপচিয়ে পড়ত ঘর। ওরা সবসময় টিভি দেখতে দিত না (কিংবা আমরা সবসময় যেতাম না, ঠিক মনে নাই) – তাই টিভি তেমন একটা আকর্ষনীয় বস্তু ছিল না আমার কাছে। আমি খেলতাম রাজ্যের যত প্যাকেট (বিস্কুট, সিগারেট) দিয়ে। সেই গুলো দিয়ে গাড়ি বানানো হত, মাটি দিয়ে চাকা। একবার অনেক গুলো শোলা পেয়েছিলাম কোথা থেকে যেন, সে কি আনন্দ আমার। শোলা পানিতে ভাসে, আর তাই গামলার সামনে থেকে আমাকে আর উঠানো যেত না।

বাসার পাশে ছিল ক্যান্সার গবেষনা ইন্সটিউটের মাঠ। আমি আর বাবা প্রায়ই বিকালে বের হয়ে যেতাম খেলতে। টোকাই আর ভাসমান ছেলেপুলেদের সাথে আমরা খুবই মজা করে ফুটবল খেলেছি অনেকদিন। আমি প্রায়ই দেখতাম একটা গাছের নিচ থেকে ওরা ফল কুড়ায়, দেখতে অনেকটা কামরাঙার মত। বাবাকে জিজ্ঞেস করায় বাবাও বলেছিল ওটা কামরাঙা। যেহেতু কামরাঙা মজার তাই একদিন আমি একটা ফল কুড়িয়ে কামড় দিয়ে দেখি ওয়াক থু, তেতো, চরম তেতো। আমি ভাবতাম ছেলেগুলো কেন এগুলো কুড়ায়। বড় হওয়ার পর জেনেছিলাম ওটা ছিল অর্জুন গাছ।

আমাকে ঐ সময়টায় দাঁত মাজার সময় কাউকে সাথে রাখতে হত। বেশির ভাগ সময় এই দায়িত্ব পেত স্বাতী অথবা শিমু, আমার ছোট আর সেজ বোন। হেহ হেহ, তার কারন হল আমি দাঁত মেজে পেস্টটা ফেলে দেয়ার বদলে প্রায়ই গিলে ফেলতাম। হো হো হো

আমাদের বাসার সামনে এক লোকের একটা ভক্সওয়াগন ছিল। আমরা বলতাম ব্যাঙগাড়ী। চকচকে সাদা একটা গাড়ী। মেজ বোন প্রায়ই বলত, ইস, আমাদের যদি এরকম একটা গাড়ী থাকত। প্রায়দিনই সকালে আমি আর স্বাতী তাকিয়ে দেখতাম গাড়ীটার বের হওয়া।

Web scrapping in a smart way, making a "Today in History" object in PHP

There are thousands of services available on web who are presenting interesting as well as education information which you can really integrate in your web page or make a nice widget and let others use them seamlessly with their content delivery platforms. In this article I am going to show you how you can make a nice Today-in-History widget with the help of the data provided in Scopesys. You can use this code to make a nice widget or a trivia app or whatever. But before making your own scrappers from any services, please please please carefully note the copyright of that content. You shouldn’t violate copyright either way.

In this widget, we will strip the following content from the pages provided by scopesys and display them in different categories.
1. Today in history
2. Who’s born today
3. Who’s died today
4. Where is holiday today
5. Religious observance of today
6. Religious history of today

Lets go 😀


<?php
//todayinhistory.php
error_reporting(0);
define("MARKER_START","<H3>On this day...</h3>");
define("MARKER_END","<BR><BR><HR><h3>Holidays</h3>");
define("BIRTHDAY_START","</font></center></center>");
define("BIRTHDAY_END","<HR> <br><H3>Deaths which occurred on ".date("F d").":</H3>");
define("DEATH_START","<HR> <br><H3>Deaths which occurred on ".date("F d").":</H3>");
define("DEATH_END","<HR><IMG align=left SRC=\"http://www.scopesys.com/flag.gif\">");
define("HOLIDAYS_START",'<i>Note: Some Holidays are only applicable on a given <b>"day of the week"</b></i><br> <br>');
define("HOLIDAYS_END","<HR> <H3>Religious Observances</H3>");
define("RELIGIOUS_START","<HR> <H3>Religious Observances</H3>");
define("RELIGIOUS_END","<HR> <H3>Religious History </h3>");
define("RELHISTORY_START","<HR> <H3>Religious History </h3>");
define("RELHISTORY_END","<BR><BR><font color=red>");


echo "<h2>Today is ".Date("F d, Y")."</h2>";
$data = file_get_contents("http://www.scopesys.com/today");


if ($_GET['history']=='1'){
echo "<br/><h2 style='color: green' >Today in history</h2>";
$end = strpos($data,MARKER_END)-15;
$start = strpos($data,MARKER_START)+strlen(MARKER_START);
echo substr($data,$start,$end-$start);
}


if ($_GET['born']=='1'){
echo "<br/><h2 style='color: green' >Who's born today</h2>";
$end = strpos($data,BIRTHDAY_END);
$start = strpos($data,BIRTHDAY_START)+strlen(BIRTHDAY_START);
echo substr($data,$start,$end-$start);
}


if ($_GET['died']=='1'){
echo "<br/><h2 style='color: green' >Who died today</h2>";
$end = strpos($data,DEATH_END);
$start = strpos($data,DEATH_START)+strlen(DEATH_START);
echo substr($data,$start,$end-$start);
}


if ($_GET['holiday']=='1'){
echo "<br/><h2 style='color: green' >Where is holiday today</h2>";
$end = strpos($data,HOLIDAYS_END);
$start = strpos($data,HOLIDAYS_START)+strlen(HOLIDAYS_START);
echo substr($data,$start,$end-$start);
}


if ($_GET['religious']=='1'){
echo "<br/><h2 style='color: green' >Religious observance</h2>";
$end = strpos($data,RELIGIOUS_END);
$start = strpos($data,RELIGIOUS_START)+strlen(RELIGIOUS_START);
echo substr($data,$start,$end-$start);
}


if ($_GET['relhistory']=='1'){
echo "<br/><h2 style='color: green' >Religious history</h2>";
$end = strpos($data,RELHISTORY_END);
$start = strpos($data,RELHISTORY_START)+strlen(RELHISTORY_START);
echo substr($data,$start,$end-$start);
}
?>

Now if you want to find who born today, point your browser to todayinhistory.php?born=1. Mashup Mashup Mashup, that is what many successful web app are doing these days. And sometime this is how data collection is done behind the scene 🙂

Writing this code was really enjoyable as getting root canal done in your teeth with a rusty drill (I forgot where I’ve read such a nice quote), heh heh. But I am sure, you will enjoy it more than that 😉 – happy scrapping.

নস্টালজিয়া – ১

ক্লাস ওয়ানে আমাকে ভর্তি করা হবে। বাবা আমাকে নিয়ে চললেন টি.অ্যান্ড.টি সরকারী আদর্শ বালিকা বিদ্যালয়ে (Ahem) – বালিকা বিদ্যালয় হলেও আসলে ক্লাস ফাইভ পর্যন্ত ছেলেদের পড়তে দিত। বাসার পাশে হওয়ায় আর আমার আরো দুটো বোন একই স্কুলে পড়ায় এটাই হল আমার জন্য উপযুক্ত জায়গা, মা বাবা আর বোনেরা ঠিক করেছে।

আমাকে অনেকবার করে নামতা মুখস্ত বলতে হল মার কাছে রওনা দেবার আগে। আরো কি কি যেন বলতে হয়েছিল। স্কুলে ম্যাডাম এর রুমে আমাকে একা একা ঢুকায় দিয়ে বাবা বাইরে বসে আছে। ম্যাডাম একবার জিজ্ঞেস করেন নামতা বলতে, একবার এবিসিডি বলতে। তখন তো আর প্লে, কেজি এগুলা ছিল না, অন্তত আমাদের মত নিম্ন মধ্যবিত্য পরিবারের জন্য। সরকারী স্কুলে ক্লাস ওয়ানে বোধহয় এগুলোই জিজ্ঞেস করত। আমি ভয়ে ভয়ে কাদোঁ কাদোঁ মুখে সব বললাম। ম্যাডাম কিছুক্ষন পরে বাবাকে ডেকে কি যেন বললেন।

বাসায় ফিরতে ফিরতে বাবা জানালো যে আমার ভর্তি হয়ে গেছে, তবে ক্লাস ওয়ানে না, টুতে। আমার মত ধেড়ে বাচ্চার নাকি ক্লাস ওয়ানে পড়া ঠিক হবে না। রোল দিয়েছে ১২০। আমি তো মহা খুশি, ১২০ – কেন যে ১২০০ হল না। বাসায় এসে দেখি মা মাছ কাটছে, মাকে বললাম – জান মা, আমার রোল না ১২০। মা তখন বুঝিয়ে দিল যে রোল যত কম হয় ততই ভাল।

পরেরদিন থেকে ক্লাস, মহা টেনশনে ছিলাম আমি । বাসায় আমার বোনেরা সারাক্ষন আমাকে বাসায় আটকায় রাখত, বাইরে যেতে চাইলে ভয় দেখাত ছেলেধরার। এই বুঝি ছেলেধরা নিয়ে যাবে, এই ভয়ে আমি তটস্থ থাকতাম। পরের দিন স্কুলে গেলে কি হবে, ক্লাসে তো আমার বোনরা থাকবে না, যদি ছেলেধরা ধরে নিয়ে যায় এই চিন্তায় আমি তখন ব্যাস্ত।