یه نویسنده

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

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

یه نویسنده

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

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

۳۸ مطلب با کلمه‌ی کلیدی «برنامه نویسی وب» ثبت شده است

بدون شرح


یه لحظه داشتم شک میکردم که خدای نکرده توی ویندوزم.

راه اندازی command tools فریم ورک yii بر روی اوبونتو

تجربه من در codeigniter‌و راه اندازی دو پروژه توسط اون بسیار لذت بخش بود از قابلیت‌های این فریم ورک:

۱− همه چیز دست برنامه نویس و تغییرات در اون بسیار راحت

۲− یادگیری فوق العاده سریع

۳− دوری از تنظیمات زیاد برای استفاده از تمپلیت یا مدل

و خیلی مزایای دیگه که کار با اون رو لذت بخش میکنه.

ولی نبود command line در اون خیلی عذاب آوره در صورتی که بیشتر فریم ورک‌های ابزاری برای crud,controller,model و خیلی از کارهای دیگه که ضرف چند ثانیه میشه بیشتر زحمات عمومی یک پروژه رو انجام داد.

و اما yii که در حال مطالعه بر روی اون هستم خیلی چشممو گرفته. انگار این همون ci ولی با قابلیت‌های بیشتر هست.

و اما بریم سر اصل قضیه برای اضافه کردن command line در سیستم عامل لینوکس اوبونتو ابتدا به مسیر پوشه ای که yii رو در اون extra کردید برید و البته باید در پوشه framework باشید و دستور زیر رو وارد کنید تا مسیر جاری برای نشون داده بشه

pwd

که مسیر جاری من بصورت زیر هست

/home/mehrdad/host/yii/framework

آدرسی که نشون داده میشه رو کپی کنید و دستورات زیر رو با آدرس اون در ترمینال وارد کنید

export PATH=$PATH:/path/to/framework

بهترین توابع validation برای javascript

برای چک کردن مقدار ورودی کاربری روشهای زیادی هست که سمت کاربر معمولا با html5 یا javascript و یا هر دو با هم استفاده میشه. البته در اینجا با validation سمت سرور کار نداریم

ساعتها وقت نیاز هست تا یک تابع validation  رو بر روی تمام مرورگرها و سیستمها تست کنید تا از کار کرد خوب اون مطمئن بشید. در اینجا بهترین توابع validation رو که بر حسب تجربه جمع آوری کردم رو میزارم


برای number

// check 0-9 digit
function is_digit(input)
{
  return (input - 0) == input && (input + '').replace(/^\s+|\s+$/g, "").length > 0;
}

برای ایمیل
// Check if string is a valid email address
        function valid_email(fData)
        {
            var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
            return reg.test(fData);
        }

اجبار بر پرکردن یک کادر(گذشتن از این تابع غیر ممکن است)
// Check if string is non-blank
        var isNonblank_re = /\S/;
        function none_blank(input) {
            return String(input).search(isNonblank_re) != -1
        }
تعداد حروف وارد شده در متن(زبان فارسی بدلیل encoding دو برابر نشان داده می‌شود)
// Get String Length
        function regGetStrLength(input)
        {
            var valLength = input.length;
            var reg = new RegExp("^[\u0391-\uFFE5]$");
                    var result = 0;
            for (i = 0; i < valLength; i++)
            {
                if (reg.test(input.charAt(i)))
                {
                    result += 2;
                }
                else
                {
                    result++;
                }
            }
            return result;
        }
البته کدهای دیگری هم هستن که به مرور زمان بعد از تکمیل شدن اینجا میزارم. تمام برنامه‌های نوشته شده رو در یک بسته میتونید دانلود کنید.

دریافت
حجم: 2.26 کیلوبایت

ابزاری برای mysql

DBMS یا همان سیستم مدیریت پایگاه داده به ابزاری مجتمع برای مدیریت و نگهداری پایگاه داده معروف است. شاید معروفترین آنها MSSQL مایکروسافت باشد و oracle بالاتر از آن. ولی برنامه‌نویسان وب php با mysql آشنایی بیشتری دارند. پایگاه داده‌ای اوپن سورس و بسیار خوش دست و نرم رفتارتر از sql server مایکروسافت.(این را تنها کسانی که بصورت حرفه ای با sql server کار کرده اند می دانند) بر عکس امکانات بسیار زیاد آن ولی کاملا بر روی اعصاب می باشد.

برای mysql از DBMS معروف آن PhpMyAdmin‌استفاده می شود. ولی در اینجا قصد دارم تا شما را با WorkBench که ابزاری از طرف توسعه دهنده گان mysql هست آشنا کنم.

استفاده از تابع jdf در codeigniter

تمام برنامه نویسان php با تابع jdf آشنایی دارن. تابعی که به جرات میشه گفت هر سایتی دیدید که با php نوشته شده و تاریخ رو به جلالی نشون میده، از تابع jdf استفاده کرده. البته هسته این تابع بهره گیری از unix time هست که توی پست قبلی مختصری دربارش توضیح دادم.

codeigniter بهترین فریم ورک از نظر یادگیری و تسلط سریع هست و حتی در پروژه های کوچک و متوسط بسیار کاربردی. در این پست قصد دارم تا تابع jdf رو در codeigniter راه اندازی کنم.

5ساعت خطایابی صرفا بخاطر استفاده از کتابخانه از قبل کانفیگ شده

این چند روز روی یه سایت خبری دارم کار میکنم(البته از رنگ بنفش). انواع اقسام گالری‌ها روی این سایت پیاده سازی کردم. از تایکر خبری گرفته تا اسلایدر متن و عکس. بیشتر وقت من روی این سایت کار کردن با کتابخونه‌ها و پلاگین‌های jquery برای راه اندازی اسلایدر.

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

خلاصه کار ما کشید به پلاگین گالری galleria که والا انصافا خیلی هم امکانات متنوعی داره. البته برای تهیه تمپلیت‌های متنوع اون باید مبلغ پرداخت بشه. ولی توی سایتها بگردید اگر همون تم رو استفاده کرده باشه میتونید کل کتابخونه به همراه تم رو دانلود کنید. منم سایتی پیدا کردم که تمپلیت folio رو نصب و راه‌اندازی کرده بود. گفتم دیگه دنبال خوندن مستندات برای کانفیگ و نصبش نرم و مستقیما از کانفیگ‌های همین سایت استفاده کنم.

همه چیز خوب پیش رفت تا این که بر روی صفحه من وقتی اسکرول میکردم صفحه کادر سیاه نشون میداد.


اول فکر میکردم شاید پلاگین‌ها دارن روی هم تاثیر میزارن با فایرباگ تست کردم دیدم مشکل خاصی نیست. به فکر غیرفعال کردم اسکرول ماوس بر روی همون div افتادم دیدم نشد. و خلاصه همه کار کردم. بعد از حدود ۴ ساعت بالا و پایین زدن و مقایسه فایل css اصلی گالریا با کانفیگ شده اون فهمیدم از فایل کانفیگ css همون سایت که div نمایش گالریا رو بخاطر همخونی با تمپلیت سایتش حدود 10000px- به طرف چپ برده بود و این بر روی سایت من باعث باز شدن صفحه به عرض 10000 شده که با اولین اسکرول به انتهای عرض طرف چپ میرفت.

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

توابع مفید mysql در برنامه نویسی- تابع UNIX_TIMESTAMP

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

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


بدست آوردن زمان unix:

در برنامه نویسی php با تابع time زیاد سر و کار خواهید داشت مثلا برای ثبت مقاله جدید در سایت نیاز به تاریخ درج مقاله هم هست که از قطعه کد زیر برای بدیت آوردن زمان فعلی و ذخیره اون در دیتابیس استفاده میشه


<?php
$time = time();
$sql = "INSERT INTO `article`(`a_title`,`a_content`,`a_time`)
VALUES
('$title','$content','$time')
?>

 در اینجا اصل کار برای ذخیره زمان فعلی همون تابع time هست که بعد از ذخیره به کمک تابع جامع jdf به راحتی به فرمت دلخواه هجری شمسی نشون داده میشه. البته قابلیتهای زمان unix و همچنین تابع time برای زمان یونیکش بیشتر از اینها هست.

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

حالا تکه کد بالا بصورت زیر در میاد

<?php
$sql = "INSERT INTO `article`(`a_title`,`a_content`,`a_time`)
VALUES
('$title','$content','UNIX_TIMESTAMP(now())')
?>

در برنامه‌های بزرگ که نیاز به فراخوانی زیاد تاریخ درج داره مثل ثبت ساعات ورود و خروج کاربران استفاده کمتر از تابع php و استفاده مستقیم از توابع mysql میتونه در روند اجرای برنامه و از درگیر شدن با الگوریتم‌های مختلف کم کنه. در این روش در همان لحظه‌ای که کوئیری زده میشه ساعت هم توسط mysql بدیت میاد و در دیتابیس ذخیره میشه

اضافه و کم کردن عناصر صفحه به کمک jquery

بعضی اوقات پیش میاد که شما باید به کاربر امکان بدید تا یک عنصری رو در صفحه کم و زیاد کنه. مثلا در فرم های آپلود کاربر اجازه این رو داشته باشه حتی تا 10 فایل رو هم انتخاب کنه و بعد شروع به آپلود کنه البته برای بهم نریختن صفحه و شکیل بودن اون در ابتدا یک یک جعبه دریافت فایل قرار میگیره و بعد دکمه‌‌ای که با انتخاب اون جعبه‌ دریافت فایل بیشتری به کاربر داده میشه. 

راهکارهای زیادی برای این کار وجود داره که من اضافه کردن عناصر به کمک id و حذف همون عنصر با id از قبل داده شده.

در ابتدا فرم آپلود رو بصورت آپبود چند تایی بصورت زیر آماده میکنیم.

اضافه و حذف کردن عناصر قراره در داخل تگ‌ div که با add_element مشخص شده صورت بگیره.

دو تا دکمه برای اضافه کردن و کم کردن هم در زیر فرم قرار گرفته شده.

حالا میرسیم به کد نویسی jquery:

در ابتدا دو تا متغییر برای نگهداری و کم و زیاد کردن شماره به المنت تعریف مکنیم.

var current=1;
var prev;

با کلیک بر روی دکمه add باید عنصر جدید به فرم ما اضافه بشه. برای این که فرم بهم نریزه من اون رو در داخل یک div قرار دادم تا با هر با اضافه کردن یک div که همراه با یک جعبه فایل هست بر روی صفحه اضافه بشه

 

$(document).ready(function(){
$('#add').click(function(){
   $('#add_element').append('<div id="adu'+current+'"><input type="file"  name="files[]"/></div>');
   prev = current;
   current += 1;
   console.log(prev+'--'+current);
});

اگر firebox رو روشن کنید با هر با اضافه شدن عنصر در زیر صفحه مقدار current جدید رو نشون میده. در ابتدا مقدار current رو در prev ذخیره میکنه تا برای حذف عنصر آخرین عنصر اضافه شده رو داشته باشیم. برای اضافه کردن عنصرهای جدید با مقدار id جدید هم یکی به تعداد current اضافه میشه.

و برای حذف عناصر اضافه شده:

 

$('#del').click(function(){
	$('#adu'+prev).remove();
	prev -= 1;
});

مقدار prev که آخرین شمارنده اضافه کردن عنصر جدید رو داشت با همون شمارنده آخرین عنصر رو حذف میکنه و برای حذف عناصر بعدی یکی از مقدار prev کم میکنه. البته میشه شرطی هم گذاشت در صورت بودن عنصر اون رو حذف کنه و در غیر اون صورت برنامه ادامه پیدا نکنه. البته به همین شکل هم مشکلی پیش نمیاد.

 


کد کامل این برنامه رو میتونید دانلود کنید.

دریافت
حجم: 73.3 کیلوبایت

فعال کردن نمایش خطا در php بر روی لینوکس اوبونتو

بعد از نصب وب سرور و php بر روی لینوکس اوبونتو در حالت عادی نمایش خطاها در حالت خاموش است و برای روشن کردن آن ابتدا دستور زیر را در حالت super user برای باز کردن فایل php.ini و ویرایش آن وارد کنید:

sudo gedit /etc/php5/apache2/php.ini


در فایل باز شده بدنبال display_errors بگردید که باید در خط ۵۳۷ باشد. مقدار پیش‌فرض آن off است که آنرا برابر On کنید.


احتکار در دنیای تکنولوژی

چند روز پیش توی خبرها خوندم که مایکروسافت میخواد دستگاه xbox one رو به بازار عرضه کنه ولی برای راه‌اندازی سایت مستقل برای این دستگاه به مشکل برخورد کرده. ماجرا از این قرار بود که نزدیک به یک سال پیش شخصی دامنه‌های xboxone.com و xboxone.net را ثبت کرده و تا سال 2016 هم در اختیار وی می باشد. البته همچین ماجرایی برای فیس بوک هم پیش اومده که گوگل تونسته بود دلال‌های دامنه رو محکوم کنه.(منبع گویا آی‌تی)
اسم این کار رو چه میشه گذاشت؟ مثلا چقدر سود قراره از این طریق بدست بیاد؟ مثلا کسی که دست به این کار زده الان چه افتخاری به نبوغ خودش میکنه که تونسته دامنه رو پیش‌بینی کنه و بعد ثبتش کنه تا بعدا به مایکروسات بفروشه. 
حالا بی‌خبر از این که قراره همین بلا سر خودمم بیاد و این شد که امروز صبح طبق معمول اومدیم برا مشتری دامنه ثبت کنیم  دیدیم ای دل غافل این دامنه قبلا ثبت شده خلاصه یکم با حروف بازی کردم دیدم نه نشد انگار همه ثبت شده. اعصابم خرد شد آخه این همه اسامی مشابه برای چی ثبت شده رفتم دیدم به‌به یکی از همین نوابغ در کشور ما هم دست به کار بزرگ‌تری زده!!!!!. یعنی واقعه ای‌ولا داره‌ها طرف رفته دامنه‌های زیادی رو ثبت کرده و حالا براش سایتم راه‌اندازی کرده.

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