من میخوام شروع کنم به ضبط پادکست برای پستها.
این اولینش هست و از هدف و موضوع پادکستها گفتم. در آخرش هم خودم رو معرفی کردم.
در ادامهی این حرکت (اگه ادامه پیدا کنه)، به امید خدا اسکرینکست هم ضبط میکنم برای آموزشها.
امیدوارم مفید باشه
لینک دانلود برای این پادکست یکم بیمعنیه چون حرف خاصی توش زده نشده ولی جهت یکنواختسازی: دریافت
سال ۹۱ شروع شد.
راستش کلی داستان نوشته بودم از اینکه سال ۹۰ چه اتفاقات خوب و بدی واسم اتفاق افتاد ولی دیدم حتی خودمم حوصلهی شنیدنش رو ندارم چه برسه به تویی که اومدی وقت گذاشتی داری یه مطلب غیرتخصصی از یه بلاگ گمنام نیمچه تخصصی میخونی!
خلاصه بهتر دیدم حسم رو بگم، اصل مطلب رو بگم. عید یک حسه. یه حس که انقدر قوی بوده که چند هزار سال عمر کرده و امروز هم بیشتر مردم رو با همهی مشکلاتی که دارند شاد میکنه.
سال ۹۰ برای من خوب بود، اتفاقات کاری و تحصیلی خوبی افتاد. سال ۹۰ بد هم بود، پر از احساسات تلخی که ولم نمیکنه ولی خب چون این تلخیجات همیشه هستند، روزمره محسوب میشن پس کلا ۹۰ خوب بود.
بدترین چیزی که پارسال تجربه کردم ناامیدی بود! ناامیدی مطلق که از احساساتم شروع شد، از روال زندگیم رد شد و به جسمم رسید و هنوز ادامه داره راستش این از اون صورت مسئلههاییه که همه جا رو برای جوابش زیر و رو کردم و تنها دارویی که براش پیدا کردم نگاه به آینده بود!
یعنی امید به اینکه زمان، ناامیدی رو درمان کنه. آره، امید تو ناامیدی! مسخره نیست، این حال و روز منه! اینجوریه که من امروز هم یه آدم همیشه گریان تو خودم دارم هم خیلی خوب و خوشحالم! و این از معجزات عیده! همون حسی که حرفشو زدم. (اگه یکم از روانشناسی بدونی میتونی تشخیص بدی که اینها مشخصات چه آدمهاییه ولی خب نمیگم که جو پست تلختر از این نشه....)
در هر صورت سال ۹۱ اومده. من یه ۱۰ فرمان امیرحسین دارم که در نظر دارم در سال جدید ادامهاش بدم:
فرمان اول: بیشتر تلاش کن.
فرمان دوم: شاد باش.
فرمان سوم: از برنامههای کرک شده کمتر استفاده کن!
فرمان چهارم: گاهی گریه کن!
فرمان پنجم: ورزش کن.
فرمان ششم: کمتر گوشت بخور بیشتر سبزیجات بخور.
فرمان هفتم: چیزی که خودت نمیخوای رو برای دیگران هم نخواه!
فرمان هشتم: مطالعه کن، فکر کن، تقلید نکن و باز هم فکر کن و تقلید نکن!
فرمان نهم: دروغ نگو!
فرمان دهم: دروغ نگو!
اینها مواردی هستند که من رو اجراشون فوقالعاده حساسم. غیر از مورد دوم، چهارم و پنجم، بقیه رو با جدیت دارم انجام میدم. امیدوارم جدیتر شه و اون سه تا هم اضافه شه. به نظرم چیز بدی نیست تو هم بهشون فکر کن.
این دروغ به نظر من خیلی مهمه. اگه از هر ۱۰ نفر، دو نفر فقط یکم کمتر دروغ بگن زندگی کلی گـــــود میشه!
خلاصه من در سال جدید برای همه آرزوی موفقیت میکنم (آرزوی موفقیـــــت نه آرزوی موفقیت. آرزوی موفقیـــــــــت!) برای همه،
اونهایی که زنده هستند (موجودات زندهی زمین: انسان، حیوان، گیاه)،
اونهایی که در طول تاریخ تا قبل از این لحظه فوت کردند (لحظهای که تو داری این نوشته رو میخونی، نه لحظهای که من نوشتمش)،
اونهایی که هنوز وجود ندارند (آیندگان)،
اونهایی در کرات دیگه زندگی میکنند (فضاییون)،
اونهایی که وجود ندارند ولی در فکر ما وجود دارند (توهمات)،
اونهایی که وجود دارند ولی وجود ندارند (متوهمان)،
خودم (درخت دانش و آگاهی، فلسفه و دانایی)،
و از همه مهمتر شخص شخیص جنابعالی که از میون اون همه مورد که عرض کردم فقط تویی که داری Boplo رو میخونی! (آفرین) راستش برای تو نمیتونم آرزوی موفقیت بیشتری کنم چون همشو بالا مصرف کردم یعنی واسه همه ته تهش رو گفتم دیگه بیشتر نداره ولی خب تو یه نوشابهی تگری پیش من داری! اگه این دنیا منو دیدی حتما یادم بنداز (جدی) اگه ندیدی اون دنیا بیا سراغم، چاکرتم هستم....
آیا قر و فر یا ادا اطوار ندارید؟ آیا از دماغ فیل نیافتهاید؟
آیا توقع دستمزد نجومی ندارید؟
آیا آدم خوبی هستید؟
ما از استخدام یا کار کردن با شما کیفور میشویم!
آیا رزومهی جذابی دارید؟
پس برای ما ارسال کنید: amir.hossein [@] boplo.ir
آیا رزومهی جذابی ندارید؟
پس با ما تماس بگیرید: 65 98 98 3 0912
آیا جواب اغلب آیاهای بالا را منفی دادهاید؟
پس اینجا چکار میکنید؟ وقت خود را در جای دیگری تلف کنید!
توضیحات تکمیلی:
شرکتی که من توش کار میکنم برای پروژههاش به برنامهنویس PHP نیاز داره بصورت پارهوفت یا تماموقت. برنامهنویس حرفهای یا متوسط PHP که جاوااسکریپت هم کار کنه و خفن هم باشه.
سطح کار بالاست برای بر و بچ Geek لذتبخش هم هست چون کار طراحی سایت واسه مردم نیست. محوریت روی پروژهها و اپلیکیشنهای اختصاصی خود شرکت هست.
همچنین برنامهنویس آیفون و آندرویید بدون قر و فر هم نیازمندیم.
این رو هم بگم که فعالیت اصلی شرکت IT نیست ولی از شرکتهای IT که تو ایران خودشون رو حرفهای میدونند قویتره! Promise!
غیر از اون، در تیمی که من عضوش هستم تحت Bontez هم برای پروژههای طراحی سایت و برنامهنویسی به همکار نیاز داریم. برنامهنویس PHP و جاوااسکریپت، و میکس طراح وب (گرافیک، HTML5، CSS3)
بصورت پروژهای یا فعالیتهای Open Source.
بخشی از پروژهها طراحی سایت برای مشتری و کلاینت هست، بخشی برای توسعه اپلیکیشنهای اختصاصیمون و بخشی هم فعالیتهای Open Source که تو هر مدل که علاقه داشتی میتونی شرکت داشته باشی.
اگر تهران باشی تعامل بهتری خواهد بود و اگر تهران نیستی باید بررسی بشه. سن و سال و جنسیت هم اهمیت نداره، آقا یا خانم یا مثل خودم درخت....
ما هوش و علاقه هم خیلی دوست داریم.
منابع استاتیک خواصی داره که در شرایط خاص میتونه بهینگی ایجاد کنه و گاهی نجاتبخش باشه.
منابع استاتیک رو میشه به یک متغیر داخل تابع اختصاص داد و یا در کلاسها استفاده کرد با مدل اول کاری ندارم چون به نظرم به درد نمیخوره.
در برنامهنویسی شیگرا و در کلاسها، براساس توضیح سایت PHP، منابع استاتیک امکان فراخوانی بدون نمونهگیری رو فراهم میکنه.
یعنی فقط با استفاده از نام کلاس میتونیم به یک مقدار استاتیک اون کلاس دسترسی داشته باشیم. در زیر نکات مربوط به این کلمهی کلیدی بصورت خلاصه آورده شده:
تعریف مشخصههای استاتیک: در مقدار فقط میشه از مقادیر ثابت استفاده کرد.
class A {
static public $name = 'Amir Hossein'; // Correct!
static public $family = touppercase('hp'); // Wrong!
static public $zone = 'Asia'.'/'.'Tehran'; // Wrong!
}
فراخوانی خارج از کلاس:
class B {
static public $name = 'Amir Hossein';
}
echo B::$name; // Amir Hossein
فراخوانی متد استاتیک خارج از کلاس و تعریفش:
class C {
static public function hello($name){
echo 'Hello '.$name;
}
}
echo C::hello('Amir Hossein'); // Hello Amir Hossein
مقادیر استاتیک یک مقدار بیشتر نیستند اگر تغییر کنند همهجا تغییر میکنند. در نمونهی زیر یک مشخصه خارج از کلاس مقدارش تغییر کرده و میبینی که مقدار قبلیش دیگه وجود نداره:
class D {
static public $name = 'Amir';
static public function hello($greeting){
echo $greeting .' '. self::$name;
}
}
D::hello('Hello'); // Hello Amir
D::$name = 'Hossein';
D::hello('Hello'); // Hello Hossein
در متدهای استاتیک نمیشه از کلمهی کلیدی this$ استفاده کرد چون this$ یک مقدار داینامیکه.
class A {
static public $name;
public $gender;
public function correct(){
self::$name = 'Hossein';
$this->gender = 'Male';
}
static public function wrong(){
self::$name = 'Amir Hossein';
$this->gender = 'Male'; // Wrong!
}
}
تفاوتی نمیکنه کلمهی کلیدی static قبل یا بعد از public/protected/private قرار بگیره یا بعدش. یه سری اول میذارند تا سریع بتونند منابع استاتیک رو تشخیص بدند و یک سری ترجیح میدند برعکس عمل کنند تا سطح دسترسی رو اول ببینند.
کاربرد استانیک به این صورته که، در کلاسها وقتی تابعی نوشته میشه واقعا با جریان اطلاعات در کلاس درگیر نیست رو استاتیک میکنند تا در کارکرد PHP بهینگی ایجاد شه. مثلا در یک کلاس یک تابع Validator داریم که متغیرش رو چک میکنه که معتیر باشه. از اونجاییکه این تابع ربطی به روند کلاس نداره میتونه استاتیک باشه:
class A {
public function __construct($phone){
if( self::validate($phone) )
echo 'Valid';
else
echo 'Invalid';
}
static public function validate($int){
return is_numeric($int);
}
}
$a = new A(567); // Valid
$b = 'Boplo';
if( A::validate($b) )
echo 'OK';
کاردبرد دیگهی استانیک اینه که میتونیم از کپی شدن منابع جلوگیری کنیم. مثلا در الگوی Singleton ما کاری میکنیم تا فقط یکبار بشه از یک کلاس نمونهگیری کرد و این نمونه رو همهجا در دسترس داشت:
class A {
static public $instance;
public $name;
private function __construct(){
$this->name = 'Amir Hossein';
}
static public function getInstance(){
if(!isset(self::$instance))
self::$instance = new self;
return self::$instance;
}
}
$name = A::getInstance()->name;
echo $name; // Amir Hossein
$a = A::getInstance();
echo $a->name;
$a = new A; // ERROR
از اونجاییکه متد construct از نوع private هست نمیشه مستقیم اجراش کرد تنها راه دسترسی بهش، یک تابع درون خود کلاس هست. با این کار فقط یک نمونه از کلاس تولید میشه و همهجا در دسترسه. که البته این الگو نکاتی هم داره.
نکتهی مهم و جدید، ارثبری در منابع استاتیک هست. همونجور که میبینی با کلمهی کلیدی self به منابع استاتیک در درون کلاس دسترسی داریم:
class Father {
static public $name = 'Father';
static public say(){
echo self::$name;
}
}
class Son extends Father {
static public $name = 'Son';
}
class Baby extends Son {
static public $name = 'Baby';
}
Father::say(); // Father
Son::say(); // Father
Baby::say(); // Father
همونجور که میبینی self در اینجا معلوم نیست کدوم مقدار رو باید استفاده کنه و خب از مقدار واقعی خودش استفاده میکنه!
برای این مشکل در نسخهی 5.3 قابلیتی با عنوان Late Static Binding ایجاد شد که میگه در چنین حالتی بجای self از کلمهی static استفاده کنید تا PHP بره مقدار متتاظر رو استفاده کنه:
class Father {
static public $name = 'Father';
static public say(){
echo static::$name;
}
}
class Son extends Father {
static public $name = 'Son';
}
class Baby extends Son {
static public $name = 'Baby';
}
Father::say(); // Father
Son::say(); // Son
Baby::say(); // Baby
همونجور که میبنی در تابع say بجای self از static استفاده کردم که باعث میشه PHP هوشمندانهتر عمل کنه.
من صندوقچهی فهموشعور PHPی خودم رو تکوندم یه سری نکته ازش ریخت بیرون. نکاتی که برای پیدا کردن بعضیهاش باید اینترنت رو زیر و رو کنیم یا نکاتی سادهای که ازشون خبر نداشتیم. خیلی سعی کردم هر چی به ذهنم میرسه لیست کنم. یه لیست ۴۴تایی شد که ممکنه بعدا باز هم بهش اضافه کنم.!
مقاله برای سطح دانش خاصی نیست. از نکات خیلی ساده و ابتدایی درش هست تا نمونههای تخصصی. برای مطالعهی این نکات، به ادامهی مطلب مراجعه بفرمایید.
واندر باب اشکال الجیرافیکی و نمودارات جاوااسکریپتی وکتور، سبکتر و سهلتر از پیر فرزانه شیخ رافائل نتوان یافت.
شیخ ما از SVG و VML اشکالی بس وکتور و جذاب خلق میکند که همگی DOM هستند و قابل الکنترل فی الجاوااسکریبت. و بسی پر ساپورت فی المرورجرات الکثیر از جمله +IE6.
رسم اشکال گرافیکی بس باحال در رافائل بی اختیار ذهن آدمی را عطف سلطان جنگل شیر در بین میوهجات یعنی هلوی معظم میکند. او که با افعالی بس ساده چنین هفت رنگ قوس و قزح وار بر بوم اسکرین میفشاند، افعالی برای کنترل و جذابیت بخشیدن به آنها نیز دراست کرده افعالی برای متحرک سازی، این جادوی امروزه. افعالی برای کشش و رها یا به قول اجنبی کافر Drag and Drop. افعالی در باب سهولت در کدنگاری چون رویدادها و افعال جانبخش دیگر.
از جالبات و سودمندیات ایشان، DOM بودن این رسوم قابلیت الدسترسی فی کدات جاوااسکریپت و سیاساس است که میتوان ایشان را با بقیة الالمنت صفحه ترکیب و استفاده کرد.
از کاربردات الاصلی این مرجع المراجع، رسم تصاویر بدون دخالت العکس و رسم نمودارات خطی، میلهای، قرص نانی و امثالهم است.
فی الاهداف تشکیل این نگاشته همانا آموزش این شیخ طاهر بود که خود بهتر دیدم که تو رهجوی راه حق در وب را به آموزشات بس کامل و بهروز خود این شیخ رهنمود کنم که آنجا مثالهای کثیر و اطلاعات السودمندی یافت میگردد.
یک تابع ساده برای خلاصه سازی و کوتاه سازی متن مثل بعضی بلاگها که خلاصه متن رو در صفحه اول نمایش میدهند. کار ویژه ای که این تابع میکنه اینه متن رو تا حد امکان خراب نمی کنه.
نحوه کارش به این صورته که مثلا عدد 500 رو به عنوان تعداد کاراکتر میگیره و عدد مثلا 100 به عنوان Offset. از کاراکتر 500 شروع میکنه 100 کاراکتر به عقب برمیگرده تا به نقطه یا کاما یا خط جدید یا ... برسه (اینها نشانه های اتمام جمله هستند). وقتی پیدا کرد متن رو همونجا جدا میکنه.
اگر چیزی پیدا نکرد، 100 کاراکتر به جلو میره تا پایان جمله رو پیدا کنه. اگر چیزی پیدا نکرد نزدیکترین فاصله رو از کاراکتر 500 انتخاب میکنه.
نکته مهم اینه که این تابع از توابع ساده ی PHP برای String استفاده میکنه که با فارسی بصورت یونیکد برخورد میکنند برای نمونه تعداد کاراکترهای یک متن فارسی رو دو برابر یک متن انگلیسی در نظر میگیرند. پس باید دقت کنیم که موقع استفاده از این تابع هر تعداد کاراکتری که به عنوان limit و offset برای فارسی استفاده میکنیم باید دو برابر مقداری باشه که برای غیرفارسی بکار میبریم تا نتیجه معقول باشه.
لطفا قبل از مصرف، توضیحات و پارامترهای تابع رو کامل مطالعه بفرمایید.
/**
* Summarize text
* Author AHHP ~ Boplo.ir
*
* @param string $str Text to summarize.
* @param integer $limit Number of characters to trim.
* @param integer $offset Number of characters to
* move backward and/then forward of $limit
* for finding line/sentence/word ending.
* @param array $endlineChars Known characters as
* line/sentence/word ending characters.
* @return string Summarized string.
*
* Please note that
* Length of a latin text is NOT equal to a
* Unicode text in PHP (Farsi is Unicode).
* It means PHP counts e.g. 100 Farsi characters
* as 200 characters. So you should use bigger
* numbers as $limit and $offset parameters
* while using this function for Farsi texts.
*/
function summarize($str, $limit=600, $offset=100, $endlineChars=array('.','!','?',"\n",')',';',',','؟','،')) {
if(strlen($str)<=$limit)
return $str;
for($i=$limit; $i>$limit-$offset; $i--) {
if(in_array($str{$i}, $endlineChars)) {
$length = $i;
break;
}
if(!isset($spaceLength) && $str{$i}==' ')
$spaceLength = $i;
}
if(isset($length))
return substr($str, 0, $length+1);
for($i=$limit; $i<$limit+$offset; $i++) {
if(in_array($str{$i}, $endlineChars)) {
$length = $i;
break;
}
if(!isset($spaceLength) && $str{$i}==' ')
$spaceLength = $i;
}
if(isset($length))
return substr($str, 0, $length+1);
if(isset($spaceLength))
return substr($str, 0, $spaceLength);
return substr($str, 0, $limit+1);
}
خیلی اتفاقی به مقالهای در سایت Baymard Institute برخوردم. این پست براساس این مقاله نوشته شده: Twelve Ways to Simplify SignUp
صحبت سر ثبتنام کاربره. از اونجاییکه هدف اصلی سایتها جذب کاربر هست باید شرایطی رو فراهم کنند تا کاربرها با هر سطحی از دانش و تجربه، احساس راحتی بکنند و دچار مشکل نشند. ثبتنام از اونجاییکه حساسیتهایی داره معمولا با پیچیدگی انجام میشه. در این پست راههای پیشنهاد شده تا از این پیچیدگیها کم کنیم تا کاربر احساس آسودگی بیشتری کنه و تمایل بیشتری برای ثبتنام در سایت داشته باشه.
لیست زیر حرف دل کاربرانیست که در حال ثبتنام در سایت هستند:
من یه Username جدید به ذهنم نمیرسه! نمیشه از آدرس ایمیلم استفاده کنید؟
این کار عملیات ثبتنام رو خیلی راحت میکنه. من خودم موقع اینجور ثبتنام کلی فکر میکنم که نامکاربری برای خودم انتخاب کنم.
از اونجایی که در این روش، کاربر نام کاربری وارد نکرده، برای نمایش از نام و نامخانوادگیاش استفاده میشه و این کار، کاربران رو تشویق میکنه تا از نامهای واقعیاشون توی سایت استفاده کنند. این موضوع برای ظاهر سایت خیلی اهمیت داره.
یکی توی سایتش امکان استفاده از Username رو میده و کاربری با نامکاربری Sanaz_joon_jigar_tala در سایت دیده میشه. همین شخص در سایتی که از Username نمیخواد، از نام واقعیش یعنی "اکبر قویمنش" استفاده میکنه (مثلا)! حالا خودت بگو خداییش کدوم بهتره؟
تو رو خدا بذار هر پسوردی دوست دارم انتخاب کنم!
این خیلی خوبه که به کاربر بگیم که پسوردی که انتخاب کرده چقدر خوب یا ضعیفه ولی زیادهروی هم خوب نیست. بعضی سایتها کاربر رو مجبور میکنن که پسوردی انتخاب کنه که اگه یادداشت هم بکنه نتونه از روش بخونه! پس بهتره میزان امنیت پسورد رو به کاربر نشون بدیم و واسش توضیح بدیم که خطراتی داره ولی بهش گیر ندیم!
واقعا دونستن دور کمر من برای ثبتنام لازمه؟
تا جایی که ممکنه اطلاعات غیرحساس رو بعد از ثبتنام از کاربر بخوایم نه موقع ثبتنام! بعضی سایتها آدم رو مجبور میکنند کل پروفایل رو موقع ثبت نام پر کنیم. آخه این کار درسته؟
حتما باید کل فرم رو پر کنم بعد بگی این Username اِشغاله پدرسوخته؟!
اگر میخوایم از Username استفاده کنیم یکم فهمیده عمل کنیم و کاربر رو مجبور نکنیم تا همهی فرم رو پر کنه بعد بفهمه Usernameای که انتخاب کرده قبلا ثبت شده. بعضی سایتها کلی بیشعورند! کاربر باید دو تا پسورد و یک CAPTCHA رو هر دفعه پر کنه! بعد میگند چرا کسی ثبت نام نمیکنه یا چرا 10000 تا کاربر داریم ولی فقط 10 نفر فعالند!
راه خوب اینه: همزمان که کاربر نامکاربری رو پر کرد با AJAX چک کنیم و بهش اطلاع بدیم. من میخواستم توی سایت AOL ثبتنام کنم باور کن 30 تا Username چک کردم حتی "Boplo" رو هم ثبت کرده بودند!! اگر قرار بود هر دفعه با Submit خطا بگیرم عمرا ثبتنام نمی کردم. سایتهایی مثل یاهو یا همون AOL حتی پیشنهاد هم میدند که مثلا AmirHossein قبلا ثبت شده ولی Amir_hossein رو میشه انتخاب کرد.
واقعا باید "کاستیدگیلینکوفینوستا با لیمو" رو تایپ کنم؟
این CAPTCHA یا همون کد امنیتی واقعا به خودی خود کابوس شده. سیستم تولید CAPTCHA در بعضی سایتها نه تنها بیمهابا عدد و حروف کوچیک بزرگ رو با هم میکس میکنند بلکه از فونتهای عجیب غریب و زمینههای گیجکننده هم استفاده میکنتد. نمونهاش همین vBulletin. من شخصا نمیتونم CAPTCHAاشون رو بخونم. مرگ برچنین سایتهایی! راستی "کاستیدگیلینکوفینوستا" با چی؟!!
مگه همین الان ثبتنام نکردم؟ دوباره Login کنم؟ خری؟!
بیایم یه زحمت بکشیم و وقتی کاربری ثبتنام کرد توی سایت لاگینش هم بکنیم. لاگین بعد از ثبتنام شبیه یه جور جوک میمونه.
پس این ایمیل Wellcomeاش کو؟! اگه قراره نشه پیداش کرد چرا میفرستند؟
ایمیل Wellcome یا اون ایمیلی که بعد از ثبتنام به کاربر فرستاده میشه میتونه بعدا هم به درد بخوره اگر اطلاعات خوبی توش باشه. اطلاعات خوب مثل نام کاربری و روش تغییر پسورد. این موضوع باعث میشه کاربر احساس کنه این ایمیل بعدها، یه روزی، ممکنه به دردش بخوره. اما وقتی اون روز میرسه، چطور باید ایمیل رو پیدا کرد؟ باید توی عنوان و متن ایمیل صراحتا نام سایت رو ذکر کنیم تا با سرچ یا چک کردن Inbox پیدا بشه.
ضمنا سعی کنیم خود پسورد رو توی این ایمیل قرار ندیم. من شخصا اگر جایی ثبتنام کنم و این کار رو بکنه، بدون فوت وقت ایمیلش رو پاک میکنم. در این حالت دیگه متن و عنوان ایمیل دیگه بازی نیست!
ایول! بالاخره فرم ثبتنام رو پیدا کردم! 20 دقیقه بیشتر طول نکشید...
فرم ثبتنام رو تو سایت قایم نکنیم! من خودم تا حالا لینک صفحهی ثبتنام کلی از سایتها رو توی فوتر سایت (همون لینکهای ریز پایین پایین صفحه) پیدا کردم.
سایتهایی که فعالیت اصلیاشون روی کاربران هست (مثل سایتهای دوستیابی) بهتره که فرم ثبتنام رو توی صفحه اصلی قرار بدهند.
برای چی باید ثبتنام کنم؟ که اسمم رو گوشه صفحه ببینم؟
هدف کاربر جمع کردن نیست هدف اصلی ارائهی خدمات به شخص کاربر هست یعنی داشتن کاربر باحالی محسوب نمیشه فایده هم نداره برای کاربر داشتن باید منظور واقعی و قانعکننده داشت.
با این فرم هم میشه لاگین کرد هم ثبتنام! چه zexy!
این واقعا باحاله که یک فرم داشته باشیم با دو تا دکمه یکی برای ثبتنام و یکی برای لاگین. این گوگولیترین مدل جمع و جور سازی هست!
همین؟ ثبتنام با یه ایمیل فقط؟ چه قانع!
در راستای فرهنگ جمع و جورسازی میشه با دریافت یک ایمیل هم ثبتنام کرد! در این حالت یک پسورد برای کاربر ساخته میشه و براش ایمیل میشه. این یک روش خداپسنده است که زحمت Activation رو هم خودش میکشه اما واسه خود من عوض کردن پسورد چندان هیچانانگیز نیست! مگه اینکه برای بار اول، کاربر با فرم تغییر کلمه عبور روبرو شه. اینجوری مجبور میشه رمزش رو عوض کنه به اونی که باحاش حال میکنه.
لاگین با اکانت جیمیل! جل الخالق!!
یه سری آدم دور هم جمع شدند تا کاربر هر چه راحتتر لاگین کنه. OpenID چنین امکانی رو فراهم کرده تا فقط با یک اکانت در سایتهای مختلفی لاگین کنیم. یعنی در واقع ثبتنام بی ثبتنام.
این روش به این هلویی که به نظر میاد نیست دردسرهای خودش رو داره.
این هم از طرف Boplo.ir:
من بطور عجیبی با همهی شرایط و ضوابط در همهی سایتها موافقم!
این "شرایط و ضوابط استفاده" یا "Terms of use" واسهی قشنگی نیست باید اتمام حجت ما با کاربر باشه پس ترجمه نکنیمش و از جایی کپی نکنیم. بعدش انسان باشیم و ترتیبی بدیم که کاربر حتما مطالعه کنه. اگر واسه سایت من شد 50 صفحه یه جوری نمایش بدم که توی 30 ثانیه قابل فهم باشه طوری که مثلا عناوین لیست بشند و توضیحات به سادگی قابل دریافت باشند.
روش باحالتر اینه که ثبتنام رو وابسته به موافقت کاربر با همهی شرایط نکنیم (یعنی کاربر رو مجبور به موافقت نکنیم) بجاش امکانات سایت رو براساس توافق نامه محدود کنیم.
مثلا من یک Forum دارم و یکی از بندهای توافقنامهام اینه: آدرس ایمیل کاربر در صفحه پروفایل برای سایر کاربران قابل دسترس است.
و چون کاربر باید با توافقنامهی من موافقت کنه تا ثبتنام شه باید حتما این بند رو قبول کنه. بهتره به کاربر امکان بدم که این بند رو قبول نکنه و ایمیلش هم پنهان بمونه. این یک مثال خیلی ساده و بدیهی بود ولی روند مشخص شده بود.
اینجوری میشه که وقتی ثبتنام تکمیل شد بجای اینکه پیغام "کاربر محترم واقعا خسته نباشید!" رو نمایش بدیم روی صفحه مینویسیم: کاربر محترم، شاید باورت نشه ولی تو الان در سایت ثبتنام شدی!
PDO یک افزونه سبک و قدرتمند PHP برای به دیتابیسه . از خصوصیات خوب این افزونه که از نسخه 5.1 روی PHP نصب شده موارد زیر است:
پشتیبانی از دیتابیسهای متنوع از جمله MySQL، MsSQL، SQLite و غیره با توابع ثابت.
امکان فوق العاده PDO که اجازه میده تا بدون تغییر کدها، دیتابیس رو تغییر بدیم. یعنی مثلا اگر Applicationای با MySQL ساخته باشیم و تحت شرایطی مجبور به تغییر دیتابیس به MsSQL باشیم، اگر سینتکس کوئری ها مشکلی ایجاد نکنه، کافیه دیتابیس رو تعویض کنیم و همین. برای سیستمهای بزرگ این یک مزیت خیلی مهمه.
پشتیبانی از Exceptionهای PHP.
Exceptionها امکان کنترل و بدست گیری خطاها رو به برنامه نویس میده. PDO امکان کنترل خطاهای دیتابیس رو هم بهمون میده.
پشتیبانی از Prepared Statement و Stored Procedure ها و Multiple Recordset.
این سه مورد هیچ کدوم توسط توابع کثافت MySQL اجرا نمیشند. PDO مورد آخر رو در حال حاضر برای MySQL پشتیبانی نمی کنه.
طراحی شده به شکل کلاس.
قابلیت مهمی که امکان گسترش و شخصی سازی PDO رو میده مثلا رفتار توابعش رو تغییر بدیم یا توابع جدیدی بهش اضافه کنیم و در واقع همه امکانات شی گرایی رو باهاش داشته باشیم.
PDO از سه تا کلاس تشکیل شده:
کلاس اصلی به نام PDO که حاوی توابع اصلی مثل اجرای کوئری و اتصال و غیره است.
کلاس با نام PDOStatement حاوی توابع برای پردازش و بهره گیری از کوئری های اجرا شده است مثل fetch.
کلاس PDOException برای بدست گیری خطاهای رخ داده.
این موارد همه در ادامه، به همراه آموزش ابتدایی، بیشتر توضیح داده خواهند شد.