نقل و نبات شماره هفت (tips & tricks) ( sqlite )

خوب برای امروز میخواهیم یک اشنایی کوچیکی با یکی از جالب ترین دیتابیسایی که تا حالا دیدم داشته باشیم!

مدتها پیش به برنامه هایی برخورد کردم که با اینکه به نظر میومد دارن با دیتابیس کار میکنن ولی هر چی میگشتم از ارتباط با دیتابیس های شناخته شده ی من تا اون زمان خبری نبود ! یه روز یکی از رفقا امد و گفت فرید یه سری سی ام اس امده که به جای دیتابیس یه فایل dll کنارش داره ! گر چه بعد ها فهمیدم اون فایل dll نیس و در حقیقت کل یه دیتابیس کوچیک ولی کارا رو شامل میشه !

به قول شاعر : فل فل نبین چه ریزه بشکن ببین چه تیزه :D

خلاصش فهمیدیم بهش میگن  sqlite ! به نقل از ویکی پدیا :

SQLite یک پایگاه داده کوچک (حجمی در حدود ۵۰۰ KB) که به زبان C در قالب یک کتابخانه (Library) نوشته شده است و از پایگاه داده‌های RDBMS به حساب می‌آید. این پایگاه داده بدون لیسانس (Public Domain) ، آزاد و open source منتشر می‌شود. مزیت: پایگاه داده‌ای تک فایلی با حجم کم و عدم وابستگی به سیستم عامل. دارای محیط مدیریتی خوب که تمامی امکانات آن را پوشش می‌دهند. تنها مشکل بزرگ عدم پشتیبانی از تمامی امکانات استاندارد sql هست که ضعف بزرگ اون محسوب می‌شود.

اگه بخواهید اطلاعات بیشتری رو بدست بیارید توصیه میکنم به این پست نوشته های یک برنامه نویس مراجعه کنید ولی یک قسمت از مطلب ایشون رو هم اینجا میارم:

ابزارهای توسعه

یکی از مهمترین مزیت های این پایگاه داده امکان استفاده آن در اکثر زبانهای برنامه نویسی است. برنامه های دسترسی به این پایگاه داده در اکثر زبانها نوشته شده است و در دسترس است. برای مشاهده ابزارهای دسترسی به این ادرس مراجعه کنید: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
مهمترین کتابخانه های رابط برای استفاده از SQLite

dotNET Framework: http://sqlite.phxsoftware.com/
dotNET Framework: http://www.mono-project.com/SQLite
Delphi: http://www.aducom.com/
Delpi: http://wikitaxi.org/delphi/doku.php/products/sqlite3/index
C++: http://www.sqliteplus.com/
Java: http://www.ch-werner.de/javasqlite
PHP: SQLite is bundled with PHP 5. http://www.php.net/
Python: http://pysqlite.org/

برای طراحی و ایجاد پایگاه داده SQLite می توانید از ابزارهای زیر استفاده کنید:
SQLite Manager: یک extension برای مرورگر فایرفاکس که با به سادگی امکان دسترسی به تمامی امکانات SQLite رو فراهم می کند. لینک: https://addons.mozilla.org/en-US/firefox/addon/5817

SQLite مورد مقبولیت فراوانی برای استفاده به عنوان یک دیتابیس Embeded قرار گرفته و در پروژه های زیر مورد استفاده قرار گرفته است:

  • FireFox – این مرورگر برای ذخیره اطلاعات خود از SQLite استفاده می کند.
  • Mac OS X – سیستم عامل شرکت Apple به صورت داخلی از SQLite به عنوان یک پایگاه داده استاندارد استفاده می کند.
  • Skype – این نرم افزار چت و گفت و گوی آنلاین که با مقبولیت خوبی روبروست از SQLite استفاده می کند.
  • Symbian – سیستم عامل گوشی های موبایل در نسخه های جدید خود از این پایگاه داده به صورت توکار استفاده می کند.
  • Android – سیستم عامل جدید گوگل برای موبایل
  • iPhone و iPod touch : در این دو دستگاه محصول Apple از این پایگاه داده استفاده شده است.
  • Google Gears – ابزار گوگل برای نوشتن برنامه های تحت وب با استفاده از تکنولوژی های مختلف روز.
  • معایب

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

  • سخن آخر

پایگاه داده SQLite یک ابزار کوچک سریع و مطمئن است که برای مقاصد خاص نوشته شده است. از این پایگاه داده می توانید برای سیستم های Embeded استفاده کنید. یا برای نزم افزار های کوچک و تک کاربره خود تا خود را از شر مشکلات انتشار پایگاه داده های بزرگ همراه نرم افزار خود دور بمانید.
همچنین این یک گزینه فوق العاده برای کسانی است که از access صرفا برای پایگاه داده خود استفاده می کنند.

  • منابع مفید

سایت اصلی: http://www.sqlite.org
دانلود نسخه اصلی: http://www.sqlite.org/download.html
ویژگی های حذف شده از SQL استاندارد: http://www.sqlite.org/omitted.html
ویژگی های پیاده سازی شده: http://www.sqlite.org/lang.html

اما نمیدونم چرا من تا مدتها سراغش نرفتم ! بهر حال قسمت شدو بلاخره در php هم یه سری بهش زدیمو دیدم دستوراتش تفاوت زیادی با اون چیزی که قبلا کار میکردیم نداره ! از اونجایی که این نوشته نقل و نباته و قرار نیس من زیاد توش توضیح بدم فقط مثالی رو که درست کردم اینجا درج میکنم ، باشد که باعث اشنایی دیگران با این تکنولوژی جالب بشه:

برای دانلود مثال اینجا را کلیک کنید

در پایان اگه بخوام یه منبع برای آموزش sqlite در php معرفی کنم مطمئنا سایت زتکد خواهد بود:

http://www.zetcode.com/databases/sqlitephptutorial

پ . ن : جدیدا به این نتیجه رسیدم خیلی غافل بودم طرف sqlite نرفتم اخه تو برنا مه های موبایل خیلی جاهای دیگه کارایی بالایی داره حتی تو برنامه بلاگیلو مهردادم استفاده میشه

پ . ن . ۲ :

مرا مهر سيه چشمان ز سر بيرون نخواهد شد        قضاي آسمان است اين و ديگرگون نخواهد شد
رقيب آزارها فرمود و جاي آشتي نگذاشت        مگر آه سحرخيزان سوي گردون نخواهد شد

پ . ن . ۳ : راستی این هفتمین نوشته نقل و نباته منه  و به نظر من هفت عدد خیلی باحالیه :D

پ . ن . ۴ : راستی یادم رفت این لینکم ببینید:(افزودنی‌های فایرفاکس)

SQLite Manager 0.5.14

نقل و نبات شماره شش (tips & tricks) ( اجرای دستورات خط فرمان در php )

خوب برای امروز ، قصد این رو دارم دو تا تابع فوق العاده در php رو معرفی کنم:

  • exec
  • system

من همیشه دلم میخواست بفهمم چه طور ما برنامه هایی داریم که اینترفیس تحت وب دارن ولی کارای سیستمی انجام میدن ! مثلا وقتی ما وارد مودمون میشم و nat و firewall رو تنظیم میکنیم مسلما از دستور iptable لینوکس استفاده میشه !

و آیا میشه این کارارو با php کرد ؟

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

مثلا:

echo(exec(“whoami”));

به ما میگه که الان php ما با چه کاربری اجرا میشه که همون nobody معروفه!

اما وقتی شما خروجی دقیقا معادل اون چیزی که تو خط فرمان میبینیدو بخواهید اگه مجوزهای کاربر nobody اجازه بده باید از دستور system استفاده کنید!

یه مثال خوب رو نگاه کنید :

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML ۲٫۰//EN">
<html>
<head>
<title>The WorldsEnd.NET - Free Ping Script, written in PHP</title>
</head>
<?php
//  This script was writen by [email protected], Aug.2001
//  http://www.theworldsend.net
//  This is my first script. Enjoy.
//
// Put it into whatever directory and call it. That's all.
// Updated to ۴٫۲ code
// Get Variable from form via register globals on/off
//-------------------------
$max_count = ۱۰; //maximum count for ping command
$unix      =  ۱; //set this to ۱ if you are on a *unix system
$windows   =  ۰; //set this to ۱ if you are on a windows system
// -------------------------
// nothing more to be done.
// -------------------------
//globals on or off ?
$register_globals = (bool) ini_get('register_gobals');
$system = ini_get('system');
$unix = (bool) $unix;
$win  = (bool)  $windows;
//
If ($register_globals)
{
$ip = getenv(REMOTE_ADDR);
$self = $PHP_SELF;
}
else
{
$submit = $_GET['submit'];
$count  = $_GET['count'];
$host   = $_GET['host'];
$ip     = $_SERVER['REMOTE_ADDR'];
$self   = $_SERVER['PHP_SELF'];
};
// form submitted ?
If ($submit == "Ping!")
{
// over count ?
If ($count > $max_count)
{
echo 'Maximum for count is: '.$max_count;
echo '<a href="'.$self.'">Back</a>';
}
else
{
// replace bad chars
$host= preg_replace ("/[^A-Za-z0-9.-]/","",$host);
$count= preg_replace ("/[^۰-۹٫]/","",$count);
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo("Ping Output:<br>");
echo '<pre>';
//check target IP or domain
if ($unix)
{
system ("ping -c$count -w$count $host");
system("killall ping");// kill all ping processes in case there are some stalled ones or use echo 'ping' to execute ping without shell
}
else
{
system("ping -n $count $host");
}
echo '</pre>';
}
}
else
{
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo '<p><font size="2">Your IP is: '.$ip.'</font></p>';
echo '<form methode="post" action="'.$self.'">';
echo '   Enter IP or Host <input type="text" name="host" value="'.$ip.'"></input>';
echo '   Enter Count <input type="text" name="count" size="2" value="4"></input>';
echo '   <input type="submit" name="submit" value="Ping!"></input>';
echo '</form>';
echo '<br><b>'.$system.'</b>';
echo '</body></html>';
}
?>

در این مثال ما عمل ping رو تحت وب اجام میدیم ! خیلی جالبه نه؟

امیدوارم خودتون راجع به اینا تحقیق کنید و راجع به سوال اول من ، که اینکه اگه بخواهیم کارای سیستمی با مجوز بالا با اینترفیس وب انجام بدیم باید چه کرد؟

پ . ن . ۱ : البته من جواب سوالمو با کمک استاد پژمان مقدم پیدا کردم! لا اقل یکی از جوابهای ممکن! ایشالله سر فرصت اونم مینویسم.

پ . ن .۲ : منبع کد بالا به همراه مثالهای با حالتر رو از اینجا ببینید!

پ . ن . ۳:

ستاره‌ای بدرخشيد و ماه مجلس شد

دل رميده ما را رفيق و مونس شد

نگار من که به مکتب نرفت و خط ننوشت

به غمزه مسله آموز صد مدرس شد


نقل و نبات شماره پنج (tips & tricks) ( خالی کردن رم مجازی )

خوب امشب داشتیم دنبال یه پوسته جدید برای زنجان لاگ میگشتیمو برای وبلاگمم عوض کردم و الان ساعت دو نصف شبه و دیگه بد جور کم اوردم ! و حال نوشتن نیس اما امروز یکی از مشکلات قدیمیم با لینوکس حل شد اونم این بود که وقتی هایبرنت میکردم دفعه بعد میگفت not enoth free swap space یعنی رم مجازیت پر شده که سرچ زدم دیدم دستوری برا خالی کردنش نیس ولی یه ترفند داره و اونم اینه که یه بار خاموش روشنش کنیم !

حالا چطوریشو از روی یکی از کدهای استاد عزیزم اقای پژمان مقدم بر داشتم ، اینم کد بش اسکریپت مورد نظرکه این کارو میکنه:

###############
## Emty Swap ##
###############

#!/bin/sh
free -m
echo
sync
echo 3 > /proc/sys/vm/drop_caches
echo 0 > /proc/sys/vm/drop_caches
FREE_RAM=$(free|grep Mem:|awk ‘{print $4}’)
SWAP_SIZE=$(free|grep Swap:|awk ‘{print $3}’)
echo “Free RAM  : ${FREE_RAM}”
echo “Used SWAP : ${SWAP_SIZE}”
if [ “${FREE_RAM}” -gt “${SWAP_SIZE}” ]; then
swapoff -a
swapon -a
echo
free -m
else
echo “Not enough Free RAM”
fi
echo

# Pejman Moghadam
# Thu Oct 22 13:50:56 IRST 2009

پ . ن : این منبع کد بالا

پ . ن . ۲ : به به تفعل امشبمون چی امد! فقط چون الان ذهنم خالیه نمیدونم مراد از “باز آید” کیه؟!

یوسف غمگشده باز آید به کنعان غم مخور      کلبه احزان شود روزی گلستان غم مخور

این دل غم دیده حالش به شود دل بد مکن        وین سر شوریده باز آید به سامان غم مخور

نقل و نبات شماره چهارم (tips & tricks) ( تعمیر ویندوز پس از عوارض لینوکس! )

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

و احتمال قوی منو فحش میداد چون من باعث و بانی لینوکس امتحان کردنش و خود لینوکسش بودم !

به من زنگ زدو باعث شد یه یادی از دوران ویندوز بکنیم ، گفتم اینجا هم بنویسم!

اگه بوت لودر ویندوزتون خراب شده احتیاج به نصب دوباره ویندوزتون نیس کافیه سی دی نصب ویندوزتونو بندازین تو قسمتی که میپرسه نصب کنم یا برم تو کنسول تعمیر همون کلید r رو بزنید و برید تو کنسول تعمیرات!

اونجا اگه help رو بنویسید همه دستورا میاد ولی برا تعمیر بوت و بوت لودر توسیه میشه:

fixboot

fixmbr

اینا رو بزنید و بعد از اتمام فرایند دستورات بالا سیستمو ریستارت کنید و حله!

اما اگه مشکل از بوت لودر نبود و میگفت NTLDR is missing باید تو همون ریپیر کنسول رفته که باز لازمش اینه که ویندوزتونو انتخاب کنید و یوزرو پس بدین تا به محیط خط فرمان کنسول تعمیر کننده وارد شین مثل دفعه قبل ! اما این دفعه نباید دستور خاصی رو بزنید بلکه با کمک دستورات CD و DIR باید به داخل درایو سی دی رامتون رفته و داخل پوشه i386 بشین و با کمک دستور COPY فایل NTDLR رو به درایو سیتون یا حالا هر درایوی که ویندوز روش نصبه کپی کنید!

تا همینجاش این کار باعث رفع مشکلتون میشه ولی ممکنه یه مشکل دیگه هم داشته باشین که بعد از رد شدن از این مرحله خودشو نشون میده و هی سیستم ریسیت میکنه برای رفع اون مشکل هم فایل ntdetect.com رو مثل قبلی از اینجا به درایو ویندوزتون کپی میکنید و بعد از اون با ریستارت کردن سیستم ، از اینکه مجبور نشدین ویندوز رو دوباره نصب کنید شنگول میشید .

پ . ن : ترک هر عادتی سخته ولی باور کنید لینوکس ارزش ترک عادتو داره ! یه روزی میبینید که نمیتونید تو ویندوز یه لحظه دووم بیارین!

پ . ن . ۲ :

در وفای عشق تو مشهور خوبانم چو شمع
شب نشین کوی سربازان و رندانم چو شمع

روز و شب خوابم نمی​آید به چشم غم پرست
بس که در بیماری هجر تو گریانم چو شمع

نقل و نبات شماره سه (tips & tricks) ( فیلمبرداری از دسکتاپ لینوکس )

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

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

ffmpeg -f alsa -itsoffset 00:00:02.000 -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 10 -i :0.0 -sameq -f mp4 -s wvga -y intro
با اجرای کد بالا در ترمینال لینوکستون ، از اونلحظه  محیط کاری لینوکس و تمام صداها ضبط میشن و هر وقت تصمیم به اتمام این کار گرفتین کافیه q رو بزنید و فایلی به عنوان intro.mp4 تحویل بگیرید یک بار دیگه از قدرت خط فرمان لینوکس لذت ببرید.
پ . ن : بعضی وقتا از بودن تو شبکه های عمومی مثل identi.ca خیلی حال میکنم ، مثلا در لحظه اشنایی من با این کد
پ . ن . ۲ : تفعلی زدیمو امد :
صبحدم مرغ چمن با گل نوخاسته گفت
ناز کم کن که در اين باغ بسی چون تو شکفت
گل بخنديد که از راست نرنجيم ولی هيچ عاشق سخن سخت به معشوق نگفت

نقل و نبات شماره دو (tips & tricks)

برا امروز سه تا تجربه رو انتخاب کردم که بگم !

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

من میدونستم که موقع ساخت دیتابیس بهتره بهتره / حتما collation رو روی utf8-persian-ci تنظیم کنید ! من یه دفعه حواسم نبود تنظیم نکردم و بعد از ساختن table هام یادم افتاد رفتن از تنظیمات اونو تنظیم کردم ! چشمتون روز بد نبینه چون ، رو همون برا دفعه اولم بود که فریم ورک code igniter رو تست میزدم هر چی فارسی میزدم درست درج / نمایش داده نمیشد . منم فکر کردم کار این فریم ورک و خلاصه سرتونو درد نیارم یه روز بی خودی باهاش کشتی گرفتمو اخر فهمیدم اگه collation رو عوض کردین بر روی table هایی قبلیتون اعمال نمیشه ! حالا چرا من نمیدونم!!!

یا باید table ها رو حذف کنید از اول بسازید یا از کد زیر که یکی از دوستان داد استفاده کنید :

$data = chr(255).chr(254).iconv(“UTF-8″,”UTF-16LE”,$data);

اینکه کد بالا چیه فعلا وقت نکردم ببینم ولی اساسش تبدیل داده های درج شده در table سابق برای درج در   table جدید برای حفظ اطلاعات درج شدس!

———————————————————————————————————————

دومین مطلبمم راجع به mysql هست ! کی گفته برا مدیریت mysql گزینه phpmyadmin بهترینه؟ مگه بقیه رو دیدیم؟

AeroSQL – Web based MySql Manager

EMS SQL Manager for MySQL

webyog

MySQL Query Browser

ولی در اخر میبینید ظاهرا phpmyadmin بهترینه با اینکه ما ها  تو اینجور جاها امکان view درست کردن و … نداریم! یا شایدم من ندیدم!!!

phpmyadmin

————————————————————————————————————–

و در اخر یه مطلب مربوط به کتابخونه simplepie که دیروز معرفی کردم برای استفاده از این کتابخونه در فریم ورک code igniter میتونید از تبدیلی که Elliot

ایجاد کرده استفاده کنید و روش استفادشم توضیح داده که میتونید از اینجا این مطلبو ببینید .

البته یه نکته هم من اضافه کنم که برای درست کار کردن سیستم کش این کتابخونه و ندیدن ارور در پوشه application تون یه پوشه cache بسازید و داخل اون پوشه rss رو هم بسازید باشد که درون فریم ورک سریع و زیبای CI از قدرت simplepie نیز برخوردار شوید.

پ . ن . ۱ : از خوندم بعضی وب سایتای تخصصی انگلیسی اگه سوادم برسه لذت میبرم و از دیدن مطالب بزرگان اپن سورس ایران به انگلیسی همیشه ناراحت میشم

پ . ن . ۲ : تفعلی زدیمو امد:

روشن از پرتو رویت نظری نیست که نیست        منت خاک درت بر بصری نیست که نیست

نقل و نبات شماره یک (tips & tricks) ( معرفی کتابخانه SimplePie )

مدتهاست چیزی ننوشتم و یه جورایی وبلاگم مرده ! خوب این اتفاقی که برا خیلیا میوفته و برا خیلیا نمیوفته! این روزا اگه بتونم گوگل ریدرمو صفر کنمو به فعالیت های دنیای اپن سورسم مثل مدیریت زنجان لاگ و لینوکس اف ام برسم هنر کردم !

ولی یه ایده ای دارم اونم اینه که درسته نه وقت و نه حوصله نوشتن متون طولانی دارم ولی میتونم با نکاتی که هر روز برخورد میکونم و یاد میگیریم اینجا رو زنده نگه دارم!

ایشالله که بقیه هم خوششون بیاد و مفید باشه.

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

simplepie یک کلاس فوق العاده ، آسون در بگارگیری و در عین سریع و استاندارد برای کار با rss هست !

برای اینکه درکش کنید و یه نمه کف کنید، توصیه میکنم فیلم آموزشیشو ببینید که به سادگی یه گوگل ریدر کوچولو میسازه:

http://simplepie.org/tutorials/introduction_to_simplepie.mov

اینم یه رفرنس از توابعی که بعضیاشونو تو این فیلم میبینید:

http://simplepie.org/wiki/reference/start

و اینم محل اصلی اموزشای صوتی و تصویری و نوشتاریش:

http://simplepie.org/wiki/tutorial/start

پ . ن : یکی از دلائل علاقه من به زبان اپن سورس پی اچ پی و سوییچ کردنم ازasp.net به php همین زیادی کلاسهای فوق العاده در این زبانه چون php برای همست ;)

پ . ن . ۲: از Chris Monnat بخاطر اینکه سبب آشنایی من با این کلاس شد متشکرم.

پ . ن . ۳ : تفعلی زدیم و آمد :

آنکس که بدست جام دارم     سلطانی جمع مدام دارم