گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

ایجاد Cron Job (کرون جاب) به صورت دینامیک با PHP

نویسنده:
۲ دی ۹۳

به طور کلی هر وقت بخواهیم یکسری عملیات را به صورت تکراری در بازه های زمانی مشخص انجام بدیم از Cron Job استفاده میکنیم. Cron یک سرویس برای زمانبندی انجام کار ها در لینوکس هست که با دستور crontab میشه اون را مدیریت کرد. معمولاً ما از طریق cPanel میتونیم Cron Job های مورد نظرمون را تعریف و به کار بگیریم. اما اگه بخواهیم Cron Job ها را به صورت دینامیک ایجاد کنیم چی ؟

برای ایجاد Cron Job به صورت دینامیک سه تا سناریو داریم :
– از یک هاست اختصاصی حالا VPS یا Dedicated استفاده میکنیم و به دستور crontab از طریق PHP دسترسی داریم. در این حالت با تابع exec و دستور crontab به راحتی میتونیم cronjob ها را مدیریت کنیم.

– از یک هاست Shared استفاده میکنیم که از cPanel نسخه ۱۱.۳۲ به بالا استفاده میکنه ، در این حالت cPanel API2 – Cron را در اختیار داریم و براحتی با cPanel از طریق PHP میتونیم cronjob ها را مدیریت کنیم. اینجا توی پاسخ تأیید شده میتونید مثال‌های کاربردی را ببنید.

– از یک هاست Shared استفاد میکنیم که cPanel قدیمی داره و از cPanel API2 پشتیبانی نمیکنه ولی از SSH پشتیبانی میکنه و دسترسی های مورد نیاز هم از این طریق به ما میده. میتونید یکبار از طریق یک نرم‌افزار مثل putty کامل چک کنید و مطمئن بشین میتونید Cron Job ها را مدیریت کنید. حالا از طریق PHP libssh2 میتونید Cron Job ها را مدیریت کنید. اینجا یک آموزش کامل لاتین در این مورد هست.

– از یک هاست Shared استفاد میکنیم که cPanel قدیمی داره و از cPanel API2 و SSH (من جای شما بودم هاستم را عوض میکردم) پشتیبانی نمیکنه. در این حالت باید از سرویس های Cronjob دیگه که امکان مدیریت از طریق وب سرویس را فراهم میکنند استفاده کنیم. یکی از این سایت‌ها setcronjob.com هست که خودم زیاد ازش استفاده کرده‌ام و توصیه و تاییدش میکنم (نه اینکه هاست های من از دو روش بالا پشتیبانی نمیکنند بلکه کلاً روی سرویس های shared ترجیح میدم از سرویس های آنلاین استفاده کنم که گزارش گیری داره و از یک جا میتونم Cron Job های همه سایت‌ها را مدیریت کنم).

کمپین قلم فارسی آزاد

نویسنده:
۳۰ آذر ۹۳

توی ایران خیلی کم اتفاق میفته که کمپین مهم و جالبی را شاهد باشیم اما این مورد قطعاً ارزش نشر و پرداخت بهش را داره. خیلی از دوستان وبلاگ‌نویس در موردش نوشتن اما من هم به عنوان یکی از حامیان در موردش مینویسم تا شاید اثر کوچکی در خوانندگان وبلاگ خودم داشته باشه.

یکی از مهمترین سرمایه های هر ملتی رسم الخط یا شیوه نوشتار اون ملت هست که البته فارسی زبانان در زمینه خط فارسی سرآمد هستند (به نظر من) و هنر خطاطی در میان ایرانیان بسیار ارزشمند هستش. اما در زمینه کامپیوتر و وب با وجود اینکه چند سالی میشه از قلم های فارسی غیر Tahoma مثل فونت همین وبلاگ که با DroidNaskh هست استفاده میشه ولی همچنان یکی از معضلات اصلی وب برای فارسی زبانان نداشتن یک قلم منطبق بر اصول نوشتار فارسی هست که مشکلات مرسوم دیگر قلم ها را نداشته باشه.

اخیراً کمپینی برای تولید قلم فارسی آزاد به راه افتاده و سعی به تولید یک قلم فارسی مناسب برای دستگاه‌های دیجیتال داره که توضیحات بیشتر را میتونید اینجا بخونید. این کمپین نیاز به جمع آوری ۱۰ میلیون تومان پول داره تا بتونه کارش را شروع کنه. من به عنوان یکی از علاقه‌مندان به پروژه های آزاد و ارزش‌های ملی خودم ،‌ از این کمپین حمایت کردم. امیدوارم شما هم هر اندازه که میتونین از این کمپین حمایت کنین.

«شبکه اجتماعی» ، فیلمی که برای برنامه نویسان وب جالب و تأثیر گذاره

نویسنده:
۱۹ آذر ۹۳

من خیلی کم به یاد دارم که فیلمی را بیش از دو بار دیده باشم. هر اندازه هم که یک فیلم هیجان انگیز و از نظر من خوب بوده باشه همیشه همون یکبار کفایت میکنه. اما همیشه استثناء وجود داره و در این مورد فیلم The Social Network یک استثاء هست. دلیلش این نیست که برای هشت رشته نامزد اسکار شده و در سه رشته هم برنده اسکار شده. مهم نیست کارگردانش David Fincher هست که دو تا اسکار داره و شاهکار هایی مثل Fight Club و Se7en توی کارنامش هست. مهم نیست شخصیت‌ خاص و مشهوری مثل Justin Timberlake در فیلم بازی میکنه.

شبکه اجتماعی

هیچکدوم از مواردی که ذکر کردم در اینکه من این فیلم را چهار بار دیدم تأثیر گذار نیست. بلکه مهم اینجاست که این فیلم داستان شکل‌گیری یکی از موفق ترین کسب و کار های اینترنتی و برنامه نویس خالق اون را روایت میکنه. من اصلاً کاری به خود Mark Zuckerberg و روابط عاطفی ، شخصیتی و مشکلات حقوقی که توی این فیلم برجسته هست ندارم بلکه تا حالا هیچ فیلم موفق هالیوودی که تا این حد به حال و هوای رشته نرم‌افزار و برنامه نویسی وب نزدیک باشه ندیده بودم.

از نظر من و شاید بسیاری از همکاران من بهترین سکانس های این فیلم از ورود Mark Zuckerberg به خوابگاه کرکلند در دانشگاه هاروارد و وبلاگ نویسیش در مورد Erica Albright تا پایان جریان راه اندازی سایت Facemash.com (میخواستم در موردش بنویسم اما شاید کسانی باشند که هنوز فیلم را ندیدند و نمیخوام Spoiler بدم) هستش.

علاوه بر جذابیت های فنی برنامه نویسی و هک (البته در سطح پایین ، چون همین خیلی سطح پایین هم برای بسیاری از بینندگان غیر قابل فهم بوده) نکته مهم دیگه روند موفقیت یک کسب و کار اینترنتی هست که به خوبی در این فیلم آشکاره. محیط و حال و هوای دانشگاه هاروارد هم برای من بسیار جالب بود و افسوس که در اون سن و سال وقت ، جوانی و زندگیم را توی دانشگاه آزاد هدر دادم.

اگه در حال تحصیل در رشته نرم‌افزار هستین یا برنامه نویس هستین یا بهتر از همه برنامه نویس وب هستین بعید میدونم فیلمی به موفقی و خوش ساختی چنین اثری در رابطه با رشته کاریتون پیدا کنید. پس حتماً این فیلم را ببینین.

خلاص شدن از شر تبلیغات پیامکی مزاحم (بخش دوم)

نویسنده:
۱۷ آذر ۹۳

ماه گذشته در مورد خلاص شدن از شر پیامک های تبلیغاتی یا همون اسپم ها نوشتم و اینکه از نرم‌افزار Textra SMS استفاده میکنم و توصیه کردم که دوستان هم استفاده کنند. اما با‌ گذشت یک ماه از اون پست و تجربه‌ای که از این نرم‌افزار بدست آوردم باید بگم که کاستی هایی داره و باید نرم‌افزار دیگه ای را جایگزین کنم.

نرم افزار BlackList

قبل از اینکه به کاستی های نرم‌افزار Textra اشاره کنم باید یک ماشاالله درست و حسابی به خدماتچی های ارزش افزوده پیامک (خدایی این‌ها اصلاً منظور ارزش افزوده را درست درک نکردند) بگم که کولاک کردند و توی این یک سالی که پیامک تبلیغاتی را غیر فعال کرده بودم فکر نمیکردم تا این حد خدماتشون را گسترش داده باشن.

از اونجایی که قصد نقد Textra را ندارم به مشکل اصلی می پردازم ! در‌ واقع اگر بخواهیم هر شماره ای را به صورت جداگانه Blacklist کنیم حالا حالا ها باید Blacklist کنیم. من توی این یک ماه روزی ۵ یا ۶ شماره جدید را Blacklist میکردم اما تمومی نداره ! پس باید نرم‌افزار بتونه شماره هایی که مثلاً با ۹۸۳۰۰۰+ شروع میشه را Block کنه. در‌ واقع بتونه بر حسب شماره فیلتر کنه. علاوه بر این باید یک Whitelist یا Exclude List داشته باشیم که شماره های خاصی که توی این فیلر ها قرار میگیرند را مجاز کنیم مثلاً ما که نمیخوایم شماره ۲۰۰۰۹۰ را فیلتر کنیم ;).

پس از بررسی های زیاد ، نرم‌افزار رایگان مناسبی برای این کار پیدا نکردم غیر از یک نرم‌افزار که نسخه رایگان و پولی داره و اگه بخواین Whitelist داشته باشین باید نسخه پولی را بخرین. نام این نرم‌افزار Blacklist Pro هستش. نرم‌افزار را نصب کردم و فیلتر های مورد نظرم را انجام دادم و نتیجه بسیار خوب و عالی بود.

این نرم‌افزار علاوه بر SMS امکان Block کردن تماس های صوتی ، فیلتر پیامک ها بر اساس وجود یک متن خاص و حتی امکان فیلتر بر اساس RegEx هم داره (این یکی خیلی به کار میاد و توی همین پست اگه ازش استفاده کردم مینویسم).

ارسال ایمیل از طریق حساب کاربری Gmail با PHP (پی اچ پی) از طریق SMTP

نویسنده:
۱۱ آذر ۹۳

توی خیلی از انجمن‌های برنامه نویسی به این سؤال برخوردم که چطور باید با PHP از حساب کاربری Gmail ایمیل ارسال کنیم. عده‌ای هم که میدونستند چطور باید این کار را بکنند اکثر ناموفق بودند. تصمیم گرفتم این مطلب را بنویسم تا مشکل خیلی از دوستان حل بشه.

برای ارسال ایمیل از Gmail برخلاف حالتی که از طریق وب سرور و یک MTA مثل Sendmail ایمیل ارسال میکنیم ، باید از SMTP استفاده کنیم. لازم هم نیست خیلی در مورد SMTP بدونیم و کلاس PHPMailer به خوبی SMTP را پشتیبانی میکنه. پس اولین کار اینه که PHPMailer را دانلود کنیم و بسته به مسیری که قرار دادیمش توی فایل ارسال ایمیل صداش کنیم. حواستون باشه که توی Package ی که دانلود میکنید یک فایل smtp.php هم هست که باید اون را هم در کنار فایل phpmailer.php قرار بدین.

دو نکته مهم :

۱ – اولین نکته مهمی که در رابطه با Gmail وجود داره این هست که Gmail از SSL/TLS استفاده میکنه.TLS روی پورت ۵۸۷ هست و توی کد بایستی به درستی تنظیم بشه.

۲ – دومین نکته مهمی که وجود داره بحث امنیت بالای خود Gmail هست. Gmail به شدت روی IP درخواست های ورود (در حالت SMTP هم شما مثل وب Login میکنید) حساس هست و مثلاً اگه شما از حساب Gmail خودتون توی ایران استفاده میکنید و سعی کنید با SMTP یک ایمیل از سرر خودون که مثلاً در انگلستان هست ارسال کنید. ۹۹ درصد Gmail مانع از Authentication پرتوکل SMTP میشه و خطای Authentication خواهید گرفت. یک ایمیل هم با افتخار از Gmail براتون ارسال میشه که شخص دیگری با پسورد صحیح شما از یک جای دیگه سعی کرده وارد بشه و ما جلوش را گرفتیم !!! :(. این موضوع دو تا راه حل داره :

راه حل اول : حساب کاربری Gmail را روی سرور خودتون بسازین و همیشه هم از همون سرور و IP درخواست SMTP بدین.

راه حل دوم : توی تنظیمات حساب کاربری گوگل در بخش Security → Account Permissions آیتم Access for less secure apps را Enabled کنین (این تغییر تا زمان نوشته شدن این مطلب وجود داشت و ممکنه بعد از مدتی مکانش یا حالتش عوض بشه یا حتی gmail بخواد که شما IP های معتبر مد نظرتون را تعیین کنین).

و اما کد :

 error_reporting(E_ALL);
 ini_set('display_errors','1');

 require("phpmailer.php");
 
 $mailObj = new phpmailer();
 $mailObj->IsSmtp();
 $mailObj->SMTPSecure = "tls";
 $mailObj->Host = "smtp.gmail.com";
 $mailObj->Port = "587";
 $mailObj->SMTPAuth = true;
 $mailObj->Username = "username@gmail.com";
 $mailObj->Password = "password";
 $mailObj->SMTPDebug = true; 
 $mailObj->CharSet = "utf-8";
 $mailObj->FromName = "Fullname";
 $mailObj->From = "username@gmail.com";
 $mailObj->AddAddress("recipient@domain.com",""); 
 $mailObj->Subject = "=?UTF-8?B?".base64_encode("عنوان فارسی نامه")."?=";
 $mailObj->Body = "متن نامه";
 $mailObj->Send();
 
 if ($mailObj->ErrorInfo != "")
 throw new Exception($mailObj->ErrorInfo);
 else 
 echo "Mail sent.";
 
 unset($mailObj);

پی نوشت : با وجود بررسی و دقتی که من در چگونگی حل مشکل ارسال از طریق Gmail SMTP داشتم باز هم یکی از دوستان مشکل داشتند که پس از بررسی متوجه ۲ نکته شدم ، توجه داشته باشید که فقط زمانی این دو نکته را اعمال کنید که خطای Authentication Failure بگیرین یا توی برگشتی Debug جمله Please log in via your web browser بگیرین و در ضمن اگه نکته ۱ مشکل را حل کرد نیاز به اعمال نکته ۲ نیست :

نکته ۱ : پس از ورود به حساب gmail روی این لینک https://www.google.com/accounts/DisplayUnlockCaptcha کلیک کنید و Accept کنید.
نکته ۲ : گذرواژه خودتون را عوض کنید و گذرواژه‌ای شامل حروف کوچک و بزرگ ، اعداد و علایم با طول حداقل ۸ کاراکتر انتخاب کنید.