 
شاید شما هم جزو کسانی هستید که به تازگی دانشگاه را تمام کرده اید یا زبان برنامه نویسی را یاد گرفته اید و هم اکنون قصد دارید وارد بازارکار شوید. برای همین سری به آگهی های استخدام میزنید و برای آنها رزومه ارسال میکنید. بعد از آن از شما خواسته میشود تا در مصاحبه شرکت کنید و در آخر وارد شغل مورد علاقه خود میشوید. خب این پروسه جالب را شاید بارها شنیده باشید و خوانده باشید، ولی باز هم تجربه دیگران شاید برای شما هم مفید باشد. لذا بنده تمام تجربیاتی که در این راه داشتم را در این جا جمع آوری کرده ام. پس با ادامه مطلب همراه باشید.
به این کار میگن remote mysql و برای این کار فرض بر این هست که سایت siteaa1.com قراره از Mysql سایت sitebb2.com استفاده کنه:
۱- بدست آوردن ip هر دو تا سایت. با دستور ping در cmd یا ترمینال
ping siteaa1.com
2- بدست آوردن شماره پورت mysql که در بعضی از شرایط امکان داره تغییر داده باشه با query زیر بدست میاد
SHOW VARIABLES WHERE Variable_name = 'port'
3- تایید دسترسی اتصال remote در سایت sitebb2.com چون قراره سایت siteaa1.com بهش remote بشه برای این کار در cpanel سایت sitebb2.com در قسمت database گزینه remote mysql رو انتخاب میکنیم
در ادامه باید ip سایت siteaa1.com رو وارد کنید
4-حالا رشته connect در سایت siteaa1.com بصورت زیر هست تا به sitebb1.com بصورت زیر هست
mysql_connect("192.168.33.66:3306", "username", "password") or die(mysql_error());
چند وقت پیش در یکی از کارها اومدیم از الگوریتم aes برای رد و بدل متن بین زبان #c و c استفاده کنیم. نا گفته نماند که پدرمان درآمد چون مایکروسافت طبق معمول برای راحت تر کردن کار برنامه نویس(به قول خودش) کلا این الگوریتم رو دگرگون کرده بود و اصلا دو تا خروجی ها یکسان نبودن بعد از کلی زیر رو کردن وب یه بنده خدایی توی stackoverflow اومده یه قطعه کد گذاشته که کار ما راه افتاد. البته این تجربه شد تا از این به بعد قبل از کد زدن ببینم شاید اصلا در استفاده از این روش مشکلی باشه و اتفاقا هم بود چون این برنامه نویس بنده خدا کلا داکیومنت aes مایکروسافت رو درسته قورت داده بود تا تونسته بود نوع padding و cbc و چیزای دیگه رو پیدا کنه و تطبیقش بده با c.
این گذشت و تا چند روز پیش مجبور بودم یه رشته متن رو بین زبان پایتون و php رد و بدل کنم. دوباره توی stack گشتم و دیدم یه نفر تگه برنامه تمیزی نوشته بود. هر چند از padding جالبی استفاده کرده بود یدونه کاراکتر } نوع padding بود.
البته این بار مشکل به اندازه #c نبود چرا که نا سلامتی با دو تا زبان برنامه نویسی پدر و مادر دارد طرف بودیم. این کد رفته بود از ماژول crypto.cipher استفاده کرده بود. منم با نصب و استفادش مشکلی نداشتم
پروژه پیش رفت و طبق روال موقع کامپایل برنامه رسید که در تمام ویندوزهای 7 براحتی اجرا میشد ولی در xp ارور زیر رو داشت
actually the encrypted IV which was prefixed to the ciphertex
البته برای برطرف کردن این خطا دیگه تمام راه ها رو برای برطرف کردن خطا رفتم ولی اصلا جواب ندارد. تا به جایی رسیدم که رفتم توی باگ ریپورت پروژه یدونه issue گذاشتم(اینجا). البته الان که دارم مینویسم این پست رو کسی بهش جواب نداده.
و اما روز از نو روزی از نو. من ماندمو و پیدا کردن الگوریتم دیگری برای پروژه. تا این با کمی جستجو به اینجا رسیدم. که واقعا خدا خیرشون بده.
کارشون واقعا جای تشکر داره اومده بود از پایه بر حسب ریاضیات و base64 الگوریتم aes رو راه انداخته بود. و جالب تر این که برای سه تا زبان php,python,javascript این کد رو نوشته بود و شما کافی بود libraryهای نوشته شده رو در برنامه فراخوانی کنید و ازش استفاده کنید. همچنین در بین زبانی هم درست کار میکرد و اگر مثلا با javascript کد میکردی در php و python برای دیکد کردنش همون خروجی مورد انتظار رو داشتی.
من کل page و تمام سورس کدهارو اینجا میزارم تا دوستان هم استفاده کنن.
python
phpimport aes text = "Hello, world!" password = "itsmysecret" blocksize = 256 # can be 128, 192 or 256 crypted = aes.encrypt( text, password, blocksize ) # do something decrypted = aes.decrypt( crypted, password, blocksize )
<?php require_once('aes.class.php'); $text = 'Hello, world!'; $password = 'itsmysecret'; $blocksize = 256; // can be 128, 192 or 256 $crypted = AES::encrypt( $text, $password, $blocksize ); // do something ... $decrypted = AES::decrypt( $crypted, $password, $blocksize ); ?>( crypted, password, blocksize )
دانلود تمام محتویات و کدهای این پست<?php var text = 'Hello, world!'; var password = 'itsmysecret'; var blocksize = 256; // can be 128, 192 or 256 var crypted = AES.encrypt( text, password, blocksize ); // do something... var decrypted = AES.decrypt( crypted, password, blocksize ); ?>
یکی از دردسرهای تست برنامه های phpدر هاست محلی امکان ارسال ایمیل هست. برای حل این مشکل باید تبدیل به میل سرور بشید یا از smtp کمک بگیرید. در این جا نحوه راه اندازی smtp در لینوکس رو آموزش میدم تا راه حلی باشه برای برنامه نویسان phpکه در از سیستم عامل لینوکس(معمولا بر حسب دبیان) استفاده میکنن. در این روش ما ابزار ssmtp رو نصب میکنیم و مقدار sendmail_path رو در فایل php.ini برابر با ssmtp قرار میدیم.
در ابتدا باید ابزار ssmtp رو نصب کنید:
sudo apt-get install ssmtp
بعد از باز کردن فایل مقدارهای رو بصورت زیر تغییر بدید البته بعضی متغرها مثل root درش وجود داره که باید مقدار رو جلوش قرار بدید و بعضی متغیرها رو هم باید جدید بنویسید در هر صورت فایل فوق رو بصورت زیر تغییر بدیدsudo nano /etc/ssmtp/ssmtp.conf
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=your-full-gmail-address # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.gmail.com:587 # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=your-full-gmail-address # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES UseSTARTTLS=YES AuthUser=your-gmail-username-here AuthPass=your-gmail-password-here
بعد از باز کردن فایل فوق تغییرات زیر رو در اون وارد کنیدsudo nano /etc/ssmtp/revaliases
بجای username هم نام ایمیل خودتون رو بنویسیدroot:username@gmail.com:smtp.gmail.com:587 localusername:username@gmail.com:smtp.gmail.com:587
رشته sendmail_path رو پیدا کنید و اون رو برابر با مقدار زیر قرار بدیدsudo nano /etc/php5/apache2/php.ini
و در آخر apache رو دوباره راه اندازی کنیدsendmail_path = /usr/sbin/ssmtp -t
حالا تمام ایمیل های شما از طریق smtpو سرور گوگل ارسال میشهsudo service apache2 restart
امکان داره که برنامه شما در task bar باشه یا مثل من یک فایل خارجی رو صدا زدید و در صورت بسته شدن نا بهنگام پنجره برنامه مورد نظر هنوز در حافظه باقی می ماند. راه حل این مشکل گزفتن event بسته شدن پنجره هست برای این کار در کلاس Frame کدهای زیر را قرار میدهیم
برای گرفتن event هم تابع OnClose را بصورت زیر مینویسیم:self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, event): # Code For On Close Runing
برای این کار کلاس PasswordMeter خیلی کاربرد داره. از منبع اصلی دانلود کنید و یا از اینجا
روش استفاده
<?php include 'classPasswordMeter.inc.php'; $rrr = new classPasswordMeter('123456dsacasdf'); echo $rrr->CalculateStrenght();
در برنامه های تحت وب بسیار از جاوا اسکریپت و ویژگی ها ان مثل آرایه، کوکی، اعتبار سنجی(validation) و ... استفاده میشود
معمولا کار با آرایه در جاوا اسکریپت بسیار خوش دست ولی یک سری از توابع نیاز به نوشتن نیست و در اینترنت کم و بیش در سایتها و مخصوصا در جواب سوالات سایت stachoverflow یافت میشود
در این یک سری از توابعی که بیشتر به آنها نیاز است را میگزارم
۱− جستجوی موجود بودن مقدار در آرایه
۲−حذف یک مقدار از یک آرایهfunction inarray(inc,arr){ return ($.inArray(inc, arr) > -1); }
۳- وجود مقدار تکراری در دو آرایهArray.prototype.remove = function() { var what, a = arguments, L = a.length, ax; while (L && this.length) { what = a[--L]; while ((ax = this.indexOf(what)) !== -1) { this.splice(ax, 1); } } return this; }; var ary = ['three', 'seven', 'eleven']; ary.remove('seven'); /* returned value: (Array) three,eleven */
function intersection_destructive(a, b) { var result = new Array(); while( a.length > 0 && b.length > 0 ) { if (a[0] < b[0] ){ a.shift(); } else if (a[0] > b[0] ){ b.shift(); } else /* they're equal */ { result.push(a.shift()); b.shift(); } } return result; }
اگر در php در جایی مجبور شدید که بدون استفاده از کلاس و کتابخونه خاصی تاریخ هجری شمسی رو نمایش بدید میتونید از intl کمکم بگیرید. البته قبل از استفاده باید اون رو نصب و عال سازی کنید. این تابع یکی از اکستنشنهای php هست و برای فعال سازی در اوبونتو
sudo apt-get install php5-intl
و در ویندوز فایل php.ini رو خط مربوط به Intl را پیدا و ; رو از کنار اون بردارید
;extension=php_intl.dll
برای نمایش تاریخ شمسی کد زیر رو استفاده کنید
    $format = datefmt_create('fa_IR@calendar=persian', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL, 'yyyy/MM/dd HH:mm:ss');
    // time in locale as you wish
    echo datefmt_format($format, time()); // '۱۳۹۱/۰۲/۰۴ ۱۹:۱۵'
منابع
سلام بر دوستان
جلسه سوم از آموزش ajax و php آماده شده
در این جلسه طریقه استفاده از فرمهای وب و ارسال مقادیر از طریق ajax و دریافت به صورت json.
در این ویدیو بیشتر بر روی json و پردازش مقادیر json پرداخته شده است.