Categories
PHP

Using Zend Framework Models and Libraries from Command Line (or Cron Job)

If you are developing web applications using the Zend Framework for PHP and you need a few cronjobs, you might be wondering if you could (re)use the existing models and libraries. Recently while working on a project, I was wondering the same thing. I have seen people asking the same thing about CodeIgniter framework before but my initial search for a suitable way to use ZF models and libs with cron was unsuccessful. It’s not like that I didn’t find any solutions, the fact is I found quite a few. Unfortunately none of them worked for me. While browsing through the search results, a post on StackOverflow caught my eyes. Someone suggested that we should take the original index.php and Bootstrap.php and hack the codes to get the core ZF running minus the views. That made sense. While running on the command line, we don’t care about the HTTP response and other stuff related with server-client communication. After half an hour of trial and error, I finally found that you can actually take the existing index.php and delete a few words off it to convert it from a web app to a command line app.

Sounds interesting? Locate these lines in the index.php file in the ZF public directory:

Here we first construct the application object, bootstrap it and then run the application. Bootstrapping automatically loads the required classes and executes them. But running the application tries to find a HTTP reuquest and process it. Since we don’t have a HTTP Request, we actually don’t need the last step. You got the hint?

Yes, after constructing the Application object, just bootstrap it, don’t run. So, take the index.php, make a duplicate copy out of it and then change the last few lines like this:

What I do, I create a another folder named “cron” parallel to the public directory, save the bootstrap file as “core.php”. Then in every cron script, I just require_once the core. php, simple, eh?

Categories
Bangla Python Series

বাংলায় পাইথন – ইন্ডেন্টেশন

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

এখানে আমরা ডট (.) দিয়ে স্পেইস বুঝিয়েছি । নিজে টাইপ করার সময় ডট এর পরিবর্তে স্পেইস ব্যবহার করুন না হলে প্রোগ্রাম রান করবে না । এখানে দেখুন ৩টি প্রিন্ট স্টেটমেন্ট আছে যারা একটির পর আরেকটি অবস্থিত এবং প্রত্যেকটি ৪টি স্পেইস দিয়ে ইন্ডেন্ট করা । এর ফলে এই প্রিন্ট স্টেটমেন্ট গুলো একটি কোড ব্লক হিসেবে কাজ করে । কোন স্টেটমেন্ট এ যদি একই ইন্ডেন্টেশন না থাকত সেক্ষেত্রে পাইথন এক্সেপশন (এরর) থ্রো করত ।

এখানে দেখুন প্রথম ব্লকের পর ইন্ডেন্টেশন আগের জায়গায় ফিরিয়ে নিয়ে ব্লকের সমাপ্তি টানা হয়েছে । পরে আবার ৪ স্পেইস ইন্ডেন্ট করে আরেকটি ব্লকের সূচনা করা হয়েছে । আগের ব্লক এবং এই ব্লক দুটোরই একই ইন্ডেন্টেশন কিন্তু এরা একই ব্লক নয় । কারণ এদের মাঝে else আছে ।

এবার দেখি নেস্টেড ব্লক:

এখানে আমরা স্পেইস এর পরিমান বাড়িয়ে দিয়ে নেস্টেড ব্লক তৈরি করলাম । একইভাবে স্পেইস এর পরিমান সমান পরিমানে কমিয়ে নিয়ে আগের ব্লকে ফিরে গেলাম ।

পাইথনের হোয়াইটস্পেস বেইজড ইন্ডেন্টেশন বুঝতে প্রথম প্রথম বেশ কষ্ট হয় । এজন্য দরকার অনুশীলন । নিজে নিজে ইন্ডেন্ট করার চেষ্টা করুন । গুগলে অনুসন্ধান করে দেখতে পারেন পাইথনের ইন্ডেন্টেশন নিয়ে ।

Categories
Bangla Python Series

বাংলায় পাইথন – লিস্ট (তৃতীয় পর্ব)

আমরা এই পর্বে পাইথনে লিস্ট অবজেক্ট এর এই মেথডগুলো দেখব:

insert()
pop()
remove()
reverse()
sort()

প্রথমেই আছে insert() – এটি ব্যবহার করে আমরা একটি লিস্টের যে কোন অবস্থানে আরেকটি আইটেম যোগ করতে পারি । যেমন:

দেখুন insert() মেথডটি দুটি প্যারামিটার গ্রহন করে । প্রথম প্যারামিটারটি দ্বারা আমরা নির্দেশ করি কোন অবস্থানে আইটেমটি বসাতে হবে, দ্বিতীয় প্যারামিটার হিসেবে আমরা সরাসরি আইটেমটিকে পাস করি । অর্থাৎ, l.insert(2,4) এর অর্থ হল l লিস্টের 2-তম অবস্থানে 4 আইটেমটিকে যোগ করা ।

এবার আসা যাক pop() মেথডে । এই মেথডটি লিস্টের সর্বশেষ আইটেমটি রিটার্ন করে এবং ঐ লিস্ট থেকে এটিকে বাদ দিয়ে দেয় । যেমন:

দেখা যাচ্ছে এখানে l.pop() মেথড কলটি l লিস্টের সর্বশেষ আইটেম 4 কে রিটার্ন করছে (যেটিকে আমরা s নামে সংরক্ষণ করলাম) । এবং এই একই সাথে l লিস্টটি থেকে এই শেষ আইটেম 4 কেও বাদ দিয়ে দিয়েছে ।

এবার আসা যাক remove() মেথডে । এটি insert() মেথডের ঠিক উলটো কাজ করে থাকে । এটিকে কোন অবস্থান দেখিয়ে দিলে সেই অবস্থানের আইটেমটিকে রিমুভ করাই এর কাজ । আসুন একটি উদাহরণ দেখে নেই:

আমরা দেখলাম কিভাবে remove() মেথডের সাহায্যে যে কোন একটি আইটেম আমরা রিমুভ করতে পারি । এই মেথডটি ছারাও আমরা পাইথনের বিল্ট ইন ফাংশন del() ব্যবহার করেও কোন আইটেম রিমুভ করতে পারি । যেমন:

এই কোডটুকু নিজে নিজে রান করে দেখুন কি ঘটে ।

এরপরে চলুন দেখে নেই sort() এবং reverse() মেথডের ব্যবহার । sort() ব্যবহার করে যে কোন লিস্টকে সর্ট বা স্বাভাবিকভাবে সাজানো হয় । reverse() মেথডটি লিস্ট কে উলটো ভাবে সাজানোর জন্যে ব্যবহার করা হয় ।

নিজে নিজে আমরা এই মেথড দুটি কোন লিস্ট অবজেক্টের উপর প্রয়োগ করে দেখি ।