یه نویسنده

مقاله، کتاب، برنامه و ...

مقاله، کتاب، برنامه و ...

یه نویسنده

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

طبقه بندی موضوعی

الگوریتم aes بین زبانهای مختلف

چند وقت پیش در یکی از کارها اومدیم از الگوریتم 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


import 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

<?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 )
javascript
<?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 );
?>
دانلود تمام محتویات و کدهای این پست
دریافت
عنوان: الگوریتم aes
حجم: 1020 کیلوبایت

آموزش کامل ارسال ایمیل توسط php در localhost

یکی از دردسرهای تست برنامه های php‌در هاست محلی امکان ارسال ایمیل هست. برای حل این مشکل باید تبدیل به میل سرور بشید یا از smtp کمک بگیرید. در این جا نحوه راه اندازی smtp در لینوکس رو آموزش میدم تا راه حلی باشه برای برنامه نویسان php‌که در از سیستم عامل لینوکس(معمولا بر حسب دبیان) استفاده میکنن. در این روش ما ابزار ssmtp رو نصب میکنیم و مقدار sendmail_path رو در فایل php.ini برابر با ssmtp قرار میدیم.

در ابتدا باید ابزار ssmtp رو نصب کنید:

sudo apt-get install ssmtp
برای کانفیگ ssmtp به مسیر زیر برید و اون رو برای کافیگ باز کنید

sudo nano /etc/ssmtp/ssmtp.conf
بعد از باز کردن فایل مقدارهای رو بصورت زیر تغییر بدید البته بعضی متغرها مثل root درش وجود داره که باید مقدار رو جلوش قرار بدید و بعضی متغیرها رو هم باید جدید بنویسید در هر صورت فایل فوق رو بصورت زیر تغییر بدید

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids &lt; 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
  • در جلوی root نام کامل آدرس ایمیل gmail خودتون رو بنویسید مثلا: mehrdadSeifzadeh@gmail.com
  • در جلوی hosrname نیز نام کامل ایمیل خودتون رو وارد کنید
  • AuthUser هم نام کامل ایمیل خودتون
  • AuthPass هم رمز عبور ایمیل خودتون رو وارد کنید

بعد از این نوبت به کانفیگ کردن user برای ارسال ایمیل هست
sudo nano /etc/ssmtp/revaliases
بعد از باز کردن فایل فوق تغییرات زیر رو در اون وارد کنید
root:username@gmail.com:smtp.gmail.com:587
localusername:username@gmail.com:smtp.gmail.com:587
بجای username هم نام ایمیل خودتون رو بنویسید
در آخر نوبت به تغییر فایل php.ini و قرار دادن مقدار sendmail_path برابر با ssmtp هست برای این کار ابتدا فایل php.ini رو از مسیر زیر باز کنید

sudo nano /etc/php5/apache2/php.ini
رشته sendmail_path رو پیدا کنید و اون رو برابر با مقدار زیر قرار بدید

sendmail_path = /usr/sbin/ssmtp -t
و در آخر apache رو دوباره راه اندازی کنید
sudo service apache2 restart
حالا تمام ایمیل های شما از طریق smtp‌و سرور گوگل ارسال میشه

صدا زدن متد خاصی در هنگام بسته شده پنجره در python

امکان داره که برنامه شما در task bar باشه یا مثل من یک فایل خارجی رو صدا زدید و در صورت بسته شدن نا بهنگام پنجره برنامه مورد نظر هنوز در حافظه باقی می ماند. راه حل این مشکل گزفتن event بسته شدن پنجره هست برای این کار در کلاس Frame کدهای زیر را قرار میدهیم


self.Bind(wx.EVT_CLOSE, self.OnClose)
برای گرفتن event هم تابع OnClose را بصورت زیر مینویسیم:

def OnClose(self, event):
           # Code For On Close Runing

بررسی قدرت رمز عبور در php

برای این کار کلاس PasswordMeter خیلی کاربرد داره. از منبع اصلی دانلود کنید و یا از اینجا

روش استفاده


<?php
include 'classPasswordMeter.inc.php';
$rrr = new classPasswordMeter('123456dsacasdf');
echo $rrr->CalculateStrenght();

توابع مورد نیاز آرایه برای javascript

در برنامه های تحت وب بسیار از جاوا اسکریپت و ویژگی ها ان مثل آرایه، کوکی، اعتبار سنجی(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

اگر در 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 و php آماده شده

در این جلسه طریقه استفاده از فرمهای وب و ارسال مقادیر از طریق ajax و دریافت به صورت json.

در این ویدیو بیشتر بر روی json و پردازش مقادیر json پرداخته شده است.


دانلود از dropBox

نمایش در آپارات


آموزش ajax و php - جلسه دوم

جلسه دوم از اموزش ajax و php آماده است در این جلسه به بررسی توابع ajax مثل post و ajax پرداخته خواهد شد.

dropBox

آپارات

آموزش ajax و php - جلسه اول

سلام بر تمامی دوستان خوبم که همه روزه به این وبلاگ سر میزنن و همیشه هم میگن چرا آپدیت نمیکنید. باورکنید انقد سرمان شلوغ شده که نگو . نپرس.

ولی تصمیم بر این داشتم تا از دانشته‌های هر چند اندک خودم مجموعه ویدیویی بسازم و برای دانلود در خدمت دوستان قرا بدم.

در این مجموعه جلسات قصد آموزش ajax رو به کمک jquery دارم. و همچنین در سمت سرور از php و mysql استفاده کردم. در این جلسات نه تنها ajax رو یاد خواهید گرفت بلکه کار با دیتابیس در php اونم بروش pdo رو هم فراخواهید گرفت. این مجموعه قراره ۶ جلسه باشه که جلسه اول به معرفی ajax و روش استفاده از اون در jquery میپردازه

 دانلود از dropbox

  دانلود و نمایش در آپارات

دستورات مورد نیاز mysql در خط فرمان

با این که در کار با mysql یک DBMS قوی بنام phpmyadmin در اختیار برنامه‌نویسان می‌باشد. و حتی بالاتر از آن ابزار workbrench نیز در دسترس برنامه‌نویسان می باشد.
اما در بعضی شرایط مثل کار با سرور دیگر شما به محیط ui یا وقت نصب کردن و کار با phpmyadmin را ندارید در هر صورت بهترین راه بهره‌گیری از دستورات قوی mysql می باشد. در این‌جا دستورات اصلی مورد نیاز برای ساخت دیتابیس جدید و atach کردن یک دیتابیس به mysql میپردازیم:
۱− لاگین
برای لاگین دستور زیر را وارد کرده و در صورت داشتن پسورد آنرا در مرحله بعد وارد کنید و در غیر داشتن پسورد فقط enter را بزنید.
mysql -u root -p

۲−ساخت دیتابیس
بعد از لاگین کردن
CREATE DATABASE mydatabase

۳−حذف دیتابیس
DROP DATABASE mydatabase

۴− atach کردن یک دیتابیس از فایل sql به درون دیتابیس
 mysql -u root -p mydatabase < myfile.sql

5- گرفتن backup از دیتابیس
mysqldump -p -u root mydatabase>myfile.sql