Diem یک CMS و CMF

Diem یک CMS و CMF بسیار قوی است که با استفاده از symfony و یه تعدادی از کلاس های ZendFramework نوشته شده. برای رابط کاربری از Jquery استفاده کرده و یک محیط فوق العاده قوی و امن رو برای ساخت یک CMS بوجود میاره. Diem به نظر من قدرتمند ترین CMS هست که تا به حال ساخته شده.
در آینده توضیحات بیشتری در رابطه با این CMF&CMS در وبلاگ جدید می دم که البته وبلاگ جدیدم رو هم با همین Diem دارم می نویسم. 
» ادامه مطلب

انتقال وبلاگ

به زودی وبلاگم رو به هاست خودم انتقال می دم
» ادامه مطلب

گوگل کروم و کارکتر فارسی

نمی دونم چرا این گوگل کروم  با زبان فارسی درگیره کلا
امروز هم توی بلاگر هم توی جیمیل وقتی می خواستم یه متن فارسی رو لینک کنم این صفحه رو نشون داد
رفتم باگ ریپورت بدم گفت این صفحه اومد
نمی دونم مشکل از ادیتور هست یا از کروم اما یکی از این دوتا مشکل دارن :)
» ادامه مطلب

فریم ورک ؟ کار کمتر یا بیشتر ؟

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

چگونه از دیتابیس رکورد تصادفی استخراج کنیم

سلام
اکثرا برنامه نویس ها زمانی که نیاز به استخراج رکورد تصادفی از دیتابیس دارند تابع ()RAND رو درون Query قرار می دهند . که البته این روش به راحتی دردیتابیس هایی با حجم پایین رکورد تصادفی را استخراج می کند اما زمانی که با یک دیتابیس با حجم بالا سر و کار داشته باشید کاملا متوجه می شوید که این کار تا چه اندازه تاخیر ایجاد می کنه.
یکی از روش هایی که برای جلوگیری از این اتفاق استفاده می شه با استفاده از ۲ Query انجام می شه که نظر شخصی من اینه که این روش خیلی روش مناسبی هست چون من روی دیتابیس های تاحدودی سنگین هم تست کردم و جواب داده.
این روش رو بصورت معمولی بدون استفاده از ORM و یا Framework توضیح می دم.



$res = mysql_query("SELECT COUNT(*) FROM TABLE_NAME");
$row = mysql_fetch_array($res);

سپس با استفاده از تابع RAND در پی اچ پی یک عدد تصادفی ایجاد می کنیم.

$offset = rand(0, $row[0]);

حالا این عدد تصادفی را به عنوان offset در نظر می گیریم

$res = mysql_query("SELECT * FROM TABLE_NAME LIMIT $offset, 1");


» ادامه مطلب

کشتی معروف با لنگری افسانه ایی!!!

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

منبع :‌ بيتوته کوتاهی‌ست جهان
» ادامه مطلب

تصویر امنیتی



امروز داشتم واسه سیستم کلیکی دنبال یه تصویر امنیتی می گشتم. هرچی این طرف اون طرف نگاه کردم هیچ اسکریپتی بهتر از این رو پیدا نکردم.
نویسنده این اسکریپت آقای Pascal Rehfeldt در تاریخ 15. January 2006 بوده . اما با اینکه این اسکریپت قدیمی هست به نظر من خیلی خوب کار می کنه و سریعا تصویر رو می سازه.
یه نگاهی به کد نمونه بندازیم با هم :
این کد نمونه هست که به نظر من خیلی سادست و به راحتی می تونید هر مانوری روش بدید یکی از نکات جالب این اسکریپت اینه که بصورت خودکار پوشه فونت رو بررسی می کنه و از میان فونت یا فونت ها یکی رو برای هر کارکتر انتخاب می کنه یعنی اگه شما ۵۰ تا فونت داشته باشید فکر نمی کنم کسی بیکار باشه و بیاد واسه این 50 تا فونت OCR بنویسه که بتونه ردش کنه و حالا اگر شما توی فونت هاتون از قونت های نقطه ای هم استفاده کرده باشید که وا ویلا وا مصیبت. البته نه اینکه نمی شه باز هم می شه اما خب سخت تر.
این کلاس رو میتونید از اینجا دریافت کنید.

» ادامه مطلب

Date/Time Function


امروز با تابع تاریخ درگیری شدیدی داشتم. با خودم گفتم مگه می شه این پی اچ پی برای این کار کلاسی نداشته باشه. یکم فکر کردم یه چیزی اون ته ذهنم یادم اومد :

Date/Time Class
یه مقداری که فکر کردم یادم اومد قضیه چی بود. سریعا منوال رو دوباره مطالعه کردم و باکمی جستوجو تونستم پیداش کنم.
این تابع خیلی خوب کار می کنه به شما هم پیشنهاد می کنم حتما یک بار استفاده کنید
» ادامه مطلب

چرا ما ایرانی ها به ندرت یه کار درست حسابی می دیم بیرون ؟


هیچ وقت تاحالا به این فکر کردید که چه را اکثر ما ایرانی ها برنامه های ضعیفی تولید می کنیم ؟ چرا همیشه سعی داریم نرم افزار های تحت وب رو با یه سی ام اس پیاده سازی کنیم ؟ چون اکثرا همه دارن به یه نحوی کپی برداری می کنند. چند نفر رو مشناسید که با نرم افزار های اوپن سورس کار می کنند و به لایسنس GPL واقعا اهمیت می دن ؟ من نگاه کردم همه دنبال اینن که یه سوراخی یه راهی یه آب باریکه ای پیدا کنند و بعد ...
دیگه خدا رو بنده نیستند. سیستم های خیلی ضعیف رو به قیمت های خیلی بالا به عوام می فروشند و نمی دونم چرا نمازشون هیچ وقت ترک نمی شه. هیچ کسی هم نیست که این وضعیت رو کنترل کنه.
طرف میاد و دنبال یه سایت می گرده و طی یکی دوتا برخورد با این به اصطلاح برنامه نویس ها یکی رو انتخاب می کنه و بعد از مدتی صاحب یه سایت زیبا می شه. قیمت سایت رو می پرسی می بینی که این به قیمت یه نرم افزار اوپن سورس نمی خوره. حتما طرف خودتش نوشته. با کمی دقت متوجه می شی یا جوملاست یا مامبو یا e107.
این خود بدختیه نه چیزی بیشتر و نه کمتر.
و من واقعا واسه این به اصطلاح برنامه نویس ها ( چرت نویس ) متاسفم. هر ۴ سال یه بار یه کار درست حسابی میاد بیرون. خیلی به ندرت پیش میاد که بتونم در هر سال یه کار خوب از برنامه نویس های ایرانی داشته باشیم.
» ادامه مطلب

ساخت شماره صفحه بدون نیاز به دیتابیس



امروز یه تابع Pagination نوشتم. گفتم بهتره در اختیار همه قرار بگیره


/**
*
*
* @var $rows : Total Row // example : 12000
* @var $per_page : Number Row of Page // example : 1000
* @var $current_page : Current Page Number // example : 45
* @var $page_link : Page Link // example : file.php
*
*
*/

function pagination($rows, $per_page, $current_page, $page_link) {

// Create a Page Listing
$pages = ceil($rows / $per_page);

// If there's only one page, return now and don't bother
if($pages == 1) {
return;
}

// Pagination Prefix
$output = "
    ";

    // Should we show the FIRST PAGE link?
    $output .= "
  • ";
    if($current_page > 2) {
    $output .= "اولین صفحه";
    }else{$output .= "اولین صفحه";}
    $output .= "
  • ";


    $minPage = $current_page - 8 ;
    if ($minPage <= 0 ) $minPage = 1;

    for ($i = $minPage ;$i < $current_page;$i++)
    {
    $output .= "
  • $i
  • ";
    }

    // Current Page Number
    $output .= "
  • ". $current_page ."
  • ";

    $maxPage = $current_page + 8 ;
    if ($maxPage >= $pages ) $maxPage = $pages;

    for ($i = ($current_page+1); $i<= $maxPage;$i++)
    {
    $output .= "
  • $i
  • ";
    }

    // Should we show the LAST PAGE link?
    $output .= "";

    $output .= "
";

// Return the output.
return $output;
}

?>

توجه داشته باشید که آدرس صحیح تصویر را در پایین وارد کنید

/* pagination CSS */
#paginationWKTOP{
font: 80%/1.4 Tahoma, arial, helvetica, sans-serif;
}
#paginationWKTOP a {
color: #FF5917;
text-decoration: none;
}
#paginationWKTOP a:hover, #paginationWKTOP a:focus {
color: #31627e;
}


#paginationWKTOP li {
display: inline;
}

#paginationWKTOP li span {
text-decoration: none;
}

#paginationWKTOP li a, #paginationWKTOP li span {
display: block;
min-height: 18px; line-height: 18px;
vertical-align: middle;
float: left;
text-align: center;
border: 1px solid #79A3BA;
margin-right: 5px;
padding: 0 5px;
background: url('../images/w_pagination_bg.gif') repeat-x 0 -160px;
}

.prev-site, .next-site {
width: 73px;
}

#paginationWKTOP li a:hover, #pagination li a:active, #pagination li a:focus
{
background: url(../images/w_pagination_bg.gif) repeat-x 0 -200px; text-decoration: none;
}

#paginationWKTOP li a.prev-site, #pagination li a.next-site,
#paginationWKTOP li span.prev-site, #pagination li span.next-site
{ width: 85px; height: 20px; padding: 0; border: none;
background: url(../images/w_pagination_bg.gif) 0 0 no-repeat;
}

#paginationWKTOP li span.prev-site.disabled
{
background: url(../images/w_pagination_bg.gif) 0 -240px no-repeat; color: #BBB;
}

#paginationWKTOP li span.next-site.disabled
{
background: url(../images/w_pagination_bg.gif) 0 -280px no-repeat; color: #BBB;
}

#paginationWKTOP li a.next-site, #pagination li span.next-site
{
background: url(../images/w_pagination_bg.gif) 0 -80px no-repeat;
}

#paginationWKTOP li a:hover.prev-site, #paginationWKTOP li a:active.prev-site, #paginationWKTOP li a:focus.prev-site
{background: url(../images/w_pagination_bg.gif) 0 -40px no-repeat; text-decoration: none;}
#paginationWKTOP li a:hover.next-site, #paginationWKTOP li a:active.next-site, #pagination li a:focus.next-site
{background: url(../images/w_pagination_bg.gif) 0 -120px no-repeat; text-decoration: none;}

#paginationWKTOP li span.break, #paginationWKTOP li span.current {
border: 1px solid #BBB; color: #BBB;
background: url(../images/w_pagination_bg.gif) 0 -200px no-repeat;
}
» ادامه مطلب