تبليغاتX
برنامه نویس کوچولو

برنامه نویس کوچولو

یادداشتهای یه برنامه نویس خیلی ^ 100 کوچولو

About Agavi

Agavi at a glance

Agavi is a general purpose PHP application framework built around the Model-View-Controller architecture originally based on the Mojavi 3 Web application framework written by Sean Kerr. It provides a rich toolset that solves most of the routine problems in Web application development.

Agavi is designed for serious development. It is not a complete website construction kit but rather a skeleton over which you build your application. The architecture of Agavi allows developers to retain very fine control over their code. Agavi itself is written to be extensible, and powerful. Whereas this documentation serves as an important resource, many developers are comfortable learning from Agavi's source code.

Agavi strives to leave most implementational choices to the developers. Agavi's components are inherently extensible, and the framework itself is designed around a XML-based configuration system that provides a very flexible environment. For you — as a developer — this architectural style means that you are required to perform less hacking (or, in most cases, none at all!) at the framework level and therefore have more time to get your application written.

The framework works for almost all kinds of applications but excels most in large codebases, long-term projects, extreme cases of integration and other special situations.

+ نوشته شده در  دوشنبه هجدهم خرداد 1388ساعت 15:53  توسط علیرضا مسکین ملک  | 

گوگل مرورگر اینترنتی متن باز عرضه می‌کند

شرکت گوگل با انتشار برنامه جدیدی روی سایت اینترنتی خود، اعلام کرد که مرورگر اینترنتی خود را به بازار عرضه خواهد کرد.

براساس این گزارش، قرار است مرورگر اینترنتی گوگل با نام Chrome از روز جاری برای بارگذاری روی اینترنت قرار گیرد.
گوگل اعلام کرد، این نرم ‌افزار متن ‌باز سرعت جست ‌و جوهای اینترنتی را افزایش می ‌دهد و به کاربران کمک می ‌کند تا بدون بارگذاری نرم‌ افزارها روی کامپیوتر خود، از این ابزارها به ‌صورت آسان ‌تر استفاده کنند.
"ساندار پیچای"(Sundar Pichai) یکی از مدیران ارشد بخش تولیدات گوگل، روی سایت این شرکت نوشت: «ما دریافته ‌ایم که اینترنت از تعداد زیادی صفحات نوشتاری ضعیف تا قوی و ابزارهای کاربردی تشکیل شده است.این مسئله باعث شده تا ما تفکرات خود را در مورد نحوه استفاده از مرورگرهای اینترنتی تغییر دهیم. آنچه که ما هم‌ اکنون به آن نیاز داریم فقط یک مرورگر نیست، ما به یک پلتفورم مدرن و جدید برای صفحات و ابزارهای اینترنتی نیازمندیم. این چیزی است که ما هم‌ اکنون قصد تولید آن را داریم».
منبع خبر:
http://news.cnet.com/8301-13846_3-10030533-62.html

لینک دانلود:
http://www.4shared.com/file/61651874/d1d88828/Google_Chrome_Full_Installer.html?s=1

+ نوشته شده در  یکشنبه هفدهم شهریور 1387ساعت 12:16  توسط علیرضا مسکین ملک  | 

معرفی متدولوژی LINQ

در اواخر سال 2007 شرکت مایکروسافت  .Net Framework 3.5 را به همراه Visual studio 2008 عرضه کرد که نسبت به نسخه های پیشین تغییرات چشمگیری پیدا کرده بود. حمایت ذاتی از AJAX (در نسخه های قبلی باید Asp.Net Ajax Framework از سایت Microsoft.com بارگذاری و روی سیستم نصب می گردید) ، معرفی چند کنترل جدید کار با داده ها درAsp.net مانند ListView ، ارائه کلاسهای جدید برای برنامه نویسی موبایل و ... که شکل (1) این تغیرات را  نشان میدهد. اما مهمترین تغییر ، معرفی متدولوژی  LINQ (Language Integrated Query) بود که  قصد داریم به معرفی آن بپردازیم.

با جستجو در وب با تعاریف مختلفی از این فناوری  مواجه خواهیم شد ولی به طور ساده می توان گفت که " LINQ متدولوژی است که فرآیند پیاده سازی هر گونه دستیابی به داده ها را ساده تر میکند". به عبارت دیگر LINQ شما را به استفاده از یک معماری خاص مجبور نمی کند.

 

 

امروزه داده ها بوسیله برنامه هایی که  می توانند به " دامنه های داده ای" مختلفی وابسته باشند مدیریت می شوند : آرایه ها ، اسناد XML ، پایگاه های داده ، فایل های متنی و حتی فایلهای نرم افزار Excel شرکت Microsoft  نمونه ای از این دامنه ها هستند.

هر دامنه مدل دستیابی  به داده مخصوص به خود را دارد.برای مثال هنگامی که  می خواهید پرس و جویی از یک پایگاه داده به عمل آورید ، به طور نمونه از زبان SQL استفاده می کنید ، یا برای کار با اسناد XML از DOM(Document Object Model) و یا XQuery  وبرای دستیابی به داده های یک فایل Excel از توابع API استفاده می کنید که هر کدام " مدل برنامه نویسی متفاوتی از همدیگر برای دستیابی به داده ها از منبع  داده ای دارند". LINQ  یک روش واحد برای دستیابی و مدیریت داده ها بدون توجه به منبع داده ای تعریف میکند.برای مثال در پرس و جوی LINQ زیر :

Var Query=

From C  in  Costumer

Where C.Country = "Italy"

                                                                                                                                      Select C.CompanyName

شاید این تصور پیش آید که این یک طرز برنامه نویسی جدید برای SQL است ولی اصلا اینگونه نیست بلکه یک پرس وجوی LINQ با استفاده از زبان C# 3.0 است. اولین سوالی که پیش می آید اینست که دامنه داده ای Costumer  چیست؟ آیا آرایه ای از Object  ها در حافظه است ؟ آیا یک جدول از پایگاه داده  و یا یک Dataset است؟ جواب اینست که همه اینها و این نقطه قوت LINQ در مقایسه با سایر مدلهای دستیابی به داده هاست و شما می توانید پرس و جوی بالا را برروی یک پایگاه داده SQL  ،Dataset  ، فایل متنی و .... به کار ببرید.البته باید توجه داشت که LINQ یک زبان نیست بلکه در واقع یک Syntax است. مثلا کد بالا  با زبان C# 3.0 نوشته شده است.

ساختار LINQ

LINQ تکنولوژی است که دامنه های داده ای زیادی را پوشش می دهد.برخی از این دامنه ها در شکل (2) نشان داده شده است.

همانطور که می بینید در ابتدا فقط زبانهای C# 3.0 و VB 9.0 از این فناوری پشتیبانی می کردند ولی مایکروسافت این امکان را قرار داده تا زبانهای دیگر هم بتوانند از آن استفاده کنند (اخیرا LINQ با PHP  و JavaScript  هم استفاده شده است).

مزیت دیگر LINQ اینست که پرس و جوهایی که با این Syntax نوشته می شوند توسط Debugger   قابل اشکال زدایی هستــند . همانطور که می دانــید تمــام قسمتهای کد یک برنامه به جز پرس و جوها قابل اشکال زدایی هستند  چرا که پرس وجوها به صورت رشته های متنی در می آیند و لی LINQ به خاطر اینکه خود بخشی از سورس کد است این مشکل را حل کرده است و این همان خاصیت Integrated بودن آنست. شکل 3 با دو پرس و جو  که اولی بدون استفاده از LINQ و دومی با استفاده از آن نوشته شده این تفاوت را نمایش میدهد.                    

                                                                            شکل ۳

     

برای استفاده از linq در php می توانید از آدرس زیر استفاده کنید :

PHPLinq

منبع : http://jahadu.blogfa.com/

+ نوشته شده در  سه شنبه هفتم خرداد 1387ساعت 12:12  توسط علیرضا مسکین ملک  | 

سال نو مبارک


سلام
سال نو رو به همه دوستان تبریک میگم و امیدوارم که ساله خوبی داشته باشند.
+ نوشته شده در  دوشنبه بیست و هفتم اسفند 1386ساعت 22:12  توسط علیرضا مسکین ملک  | 

extension نویسی برای php

با سلام به همگی

اگه تو منوال پی اچ پی دیده باشید واسه نوشتن یه ماژول خیلی ساده بایستی کلی کدهای اضافی هم بنویسیم امروز می خوام یه ابزاری رو معرفی کنم بنام swig که توسط آقای David Beazley طراحی شده و می توانید از آدرس http://www.swig.org/ دانلود کنید به ما این امکان رو میده که فقط قسمت اصلی تابع مورد نظر را بنویسید و شما رو از نوشتن کدهای اضافی دیگر راحت می کنه.
البته من این مطلب رو چند وقت پیش تو سایت Iranphp.net توضیح داده بودم ولی چون تو وبلاگ نبود گفتم شاید بدرد کسی بخوره بهر حال اگه دوستان قبلاً دیدن نگن آقا مطلب مطلب تکراریه.

این ابزار کار خود را از طریق خواندن یک فایل رابط که شامل تعاریف متد ها و توابع می باشد انجام می دهد ، سپس بصورت خودکار تبدیل نوع داده ها ، چک کردن ایرادات کد ، ایجاد فایل C ، کامپایل فایل و ایجاد فایل ماژول را انجام می دهد .
این ابزار بسیار مفید و کاری بوده چون از طریق آن می توان کد های مختلف نوشته شده را به راحتی به ماژولهایی نه تنها برای PHP بلکه برای زبانهایی مثل C# , Java , modula3 , perl , php , pike , python , ruby , tcl و ... تبدیل کرد .

خب برای شروع ابتدا فایلی بنام hellomodule.c را ایجاد و برنامه زیر را در اون می نویسیم

#include
void say_hello(const char* name) {
printf("Hello %s!\n", name);
}

یه نکته مهم این که این برنامه ها چون تبدیل به یک library میشن نیاز به تابع main ندارند سپس یک فایل دیگه به اسم hello.I ایجاد کرده و کد زیر را توی اون می نویسیم :

%module hello
extern void say_hello(const char* name);
اکنون دستور زیر را در ترمینال وارد کنید :

swig -php hello.I
ین دستور دو فایل بنامهای hello.php و hello_warp.c به ما میده که حالا نوبت کامپایل این ماژوله ابتدا باید php-devel رو نصب کرده باشید تا بتونیم اونو کامپایل کنیم البته اگه اگه از روی سورس کامپایل کرده باشید نیازی به نصب این بسته نیست
شما باید مسیر قرار گرفتن فایلهای include مرتبط با phpرو بدونید که میتونید از دستور زیر برای بدست آوردن این اطلاعات استفاده کنید

php-config --includes
خروجی این دستور را که مشابه کد زیر است به جای $PHPINCLUDE در دستور کامپایل که در زیر آمده جایگذاری کنید

-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib

دستور کامپایل :

gcc -fpic -c hellomodule.c hello_wrap.c $PHPINCLUDES

gcc -shared hellomodule.o hello_wrap.o -o php_hello.so

حالا ماژول بدست اومده رو می بایست تو مسیر extension_dir کپی کنید و بعد از restart کردن PHP کد زیر را درون یک فایل PHP قرار داده و اجرا کنید :

	if(!extension_loaded('hellomodule'))
dl("hellomodule.so");
say_hello("Alireza meskin malek");
?>

حال باید این فایل رو اجرا کرد من که از طریق کنسول اجرا می کنم :

php -f hello.php

خروجی به صورت زیر خواهد بود که نشان دهنده اینست که ماژول به درستی نصب شده و کار می کند

Alireza meskin malek

این مثالی کوچک از ابزاری بزرگ بنام swig است . البته در منوال خود ابزار مثالهایی یرای نوشتن کلاس وجود داره.
امیدوارم که مفید بوده باشه.
+ نوشته شده در  سه شنبه هفتم اسفند 1386ساعت 18:19  توسط علیرضا مسکین ملک  | 

سان MySQL را مي‌خرد!

شرکت معظم سان (Sun) روز چهارشنبه گذشته (27 دي 86، 16 ژانويه 2008) پيشنهادي يک ميليارد دلاري به شرکت سوئدي MySQL براي خريد اين پايگاه داده متن‌باز ارايه کرد. در صورت توافق و انجام اين خريد، سان خود را وارد بازار 15 ميليارد دلاري پايگاه داده خواهد کرد. MySQL چند سالي است که به عنوان يک پايگاه داده متن‌باز سبک، کارآمد و سريع، و همچنين يک ستون از چهار ستون LAMP (Linux-Apache-MySQL-Perl/Python/PHP) بازاري چند ميليون دلاري براي خود ايجاد کرده است. اين معامله بزرگ‌ترين معامله متن‌باز تا به امروز خواهد بود و سان را به يکي از بازيگران اصلي مجموعه LAMP بدل خواهد کرد. مسئولان سان عقيده دارند که با اين کار، مشتريان MySQL از پشتيباني سازمان بزرگ‌تري برخوردار خواهند شد و اين نرم‌افزار نيز قدرت رقابت بيشتري با محصولاتي چون Oracle و MS SQL Server خواهد داشت.
+ نوشته شده در  جمعه سوم اسفند 1386ساعت 18:50  توسط علیرضا مسکین ملک  | 

مايکروسافت کد دات‌نت را منتشر مي‌کند!

مايکروسافت با انتشار کد بخش‌هايي از دات‌نت به جامعه متن‌باز نزديک مي‌شود.

هفته گذشته مايکروسافت به وعده خود مبني بر منتشر کردن کد بخش‌هايي از دات‌نت فريم‌ورک (.Net Framework) و فراهم آوردن امکان خطايابي (debug) در Visual Studio 2008 عمل کرد. روز پنج‌شنبه (17 ژانويه 2008 - 27 دي 1386) اسکات گاثري (Scott Guthrie)، مدير بخش برنامه‌نويسي مايکروسافت، در وب‌لاگ خود اعلام کرد که بخش‌هايي از اين کد در دسترس عموم قرار خواهد گرفت. کتاب‌خانه‌هايي که قرار است کدشان منتشر شود، عبارت‌اند از .NET Base Class Libraries ، Windows Forms ، Windows Presentation Foundation ، ASP.NET ، ADO.NET و XML . وي همچنين اعلام کرد که کتابخانه‌هاي بيشتري، از جمله LINQ, WCF  و  Workflowنيز طي هفته‌ها و ماه‌هاي آتي در اختيار برنامه‌نويسان قرار خواهد گرفت.

در ضمن، مايکروسافت مجوز مرجع (Reference License) خود را به نحوي تغيير خواهد داد که مشمول برنامه‌نويساني نشود که نرم‌افزارهاي غيرمبتني بر ويندوزي مي‌نويسند که ويژگي‌ها و عملکرد کم‌وبيش مشابهي با دات‌نت فريم‌ورک ارايه مي‌کنند.


+ نوشته شده در  جمعه سوم اسفند 1386ساعت 18:46  توسط علیرضا مسکین ملک  | 

قانونی کردن ویندوز

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

لینک به فایل
+ نوشته شده در  چهارشنبه هفدهم بهمن 1386ساعت 17:56  توسط علیرضا مسکین ملک  | 

موبایلهای لینوکسی

این لیست موبایلهایی است که بر پایه لینوکس هستند
http://www.linuxdevices.com/articles/AT9423084269.html
+ نوشته شده در  جمعه دوازدهم بهمن 1386ساعت 18:5  توسط علیرضا مسکین ملک  | 

مخفی سازی فایل در درون عکس توسط نرم افزار WinRar

در حاضر نرم افزار WinRar را میتوان معروفترین و همچنین قدرتمندترین نرم افزار فشرده سازی فایل دانست. بسیاری از کاربران از این نرم افزار به منظور فشرده سازی فایلها و همچنین باز کردن فایلهای فشرده rar و zip استفاده میکنند. اما از این نرم افزار میتوان استفاده دیگری نیز کرد! در این ترفند قصد داریم به معرفی ترفندی بپردازیم که با بهره گیری از آن میتوان یک فایل یا یک فولدر را در داخل یک عکس مخفی ساخت! به شکلی که پس از مخفی سازی شما تنها یک عکس خواهید داشت و تنها با باز کردن عکس توسط خود نرم افزار WinRar میتوان به فایل دسترسی داشت. از این ترفند میتوان به عنوان یک شیوه بسیار حرفه ای مخفی سازی فایل و فولدر نام برد.
برای این کار:

شما به یک فایل تصویر با فرمت GIF و یا JPG و همچنین فایل یا فولدری که میخواهید مخفی کنید نیاز خواهید داشت.
ابتدا باید باید فایل یا فولدر مورد نظر را توسط خود نرم افزار WinRar فشرده سازی کنید. بدین منظور روی آن راست کلیک کرده و Add to archive را انتخاب کنید. محض نمونه نام آن را softestan.rar بگذارید.
اکنون این فایل فشرده که قصد مخفی سازی آن را دارید را در کنار تصویر مورد نظر خود که به عنوان مثال softestan.jpg نام دارد قرار دهید.
یعنی این دو فایل در کنار هم و در یک پوشه.
حال ، از منوی Start وارد Run شده و دستور cmd را وارد کرده و Enter بزنید تا وارد Command Prompt شوید.
اکنون در داخل CMD به فولدری که این دو فایل در آن قرار دارد مراجعه کنید. (یادآوری میشود برای تعویض دایرکتوری در CMD از دستور cd استفاده میشود.)
پس از مراجعه به دایرکتوری مورد نظر ، کافی است کد زیر را در CMD وارد کرده و Enter بزنید:


copy /b softestan.jpg + softestan.rar New-softestan.jpg


در کد فوق softestan.jpg نام عکس اولیه ، softestan.rar نام فایل فشرده که قصد مخفی سازی آن را داریم و در پایان New-softestan.jpg نام عکس تولیدی جدید است که فایل فشرده در آن مخفی میشود.
حالا کافی است به فولدری که فایلها در آن موجود بود مراجعه کنید ، یک عکس با نام New-softestan.jpg ایجاد شده است. تصویر این عکس همان عکس اولیه است ، اما در داخل این عکس جدید فایل فشرده ما نیز مخفی شده است که به هیچ وجه قابل مشاهده نیست!
اما برای دستیابی به فایل مخفی شده کافی است روی عکس تولید شده راست کلیک کرده و از Open with روی Choose Program کلیک کنید. در صفحه باز شده از میان لیست برنامه ها WinRar را انتخاب نموده و OK کنید. خواهید دید که نرم افزار WinRar عکس شما را به گونه ای اجرا میکند که فایل مخفی شده در دل عکس نیز پدیدار میگردد! حالا کافی است در WinRar دکمه Extract to را بزنید تا فایل فشرده از دل عکس خارج گردد.

همان طور که ذکر شد این روش یک روش بسیار حرفه ای برای مخفی سازی فایل و فولدر میباشد.

 
+ نوشته شده در  پنجشنبه چهارم بهمن 1386ساعت 10:55  توسط علیرضا مسکین ملک  | 

از فواید دیسک زنده

سلام

راستی تا حالا با خودتون فکر کردین که LiveCD  ها واسه چه کارهایی  مفیدند ؟ شاید جواب خیلی از دوستان چند مورد زیر باشه :

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

 

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

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

.لی این دیسکها چون روی CD قرار دارند به هیچ عنوان ویروسی نخواهند شد (البته اگر از قبل ویروسی نبوده باشند ) و شمایی که می خواهید خرید کنید یا کار دیگه ای رو انجام بدین با قرار دادن این CD ها تو سیستم و بوت کردن سیستم کار خودون رو انجام داده و بعد هم با خیاله راحت CD  رو خارج کرده بدون اینکه ویروسی شما رو تهدید کنه .

به نظر من اگه دوستانی که در زمینه Live CD  فعال هستند همت کنند ویک دیسک به صورت فارسی و البته به همراه درایورهای winmodem  (چون اکثر کاربران ما از این نوع مودم ها استفاده می کنند) که مودمهای دوستان استفاده کننده رو شناسایی کنه و با حجم کم و بدون برنامه هایی غیر ضروری ایجاد کنند و اونو تنها واسه این دسته از کارها آماده کنند شاید کمکی بشه واسه اعتماد ملت در مورد خرید اینترنتی و البته ترغیب اونها به استفاده از لینوکس .

البته این یه نظر بیش نیست .

تا پست بعد خداحافظ.

+ نوشته شده در  دوشنبه بیست و چهارم دی 1386ساعت 17:30  توسط علیرضا مسکین ملک  | 

Linux Reader

با این برنامه می تونید داریوهای لینوکس رو تو ویندوز مشاهده کنید البته فقط به صورت خواندنی

http://www.diskinternals.com/download/Linux_Reader.exe
+ نوشته شده در  یکشنبه بیست و سوم دی 1386ساعت 14:4  توسط علیرضا مسکین ملک  | 

انتشار نسخه چهارم KDE

بالخره امروز پس از ۶ سال انتظار نسخه چهارم KDE منتشر شد. KDE یا K Desktop Enivronment ، یکی از محبوبترین سیستمهای مدیریت میز کار برای سیستمهای بر پایه UNIX می باشد. این میز کار بر پایه فریمورک Qt عرضه می شود و در حالت پیشفرض شامل نرم افزارهای‌:

* Amarok - پخش کننده موسیقی
* Akregator - خبر خوان
* K3b - نرم‌افزار ساخت دیسکهای نوری
* Kate - ادیتور متن
* KDevelop - Integrated Development Environment (IDE)
* KMail - نامه رسان
* KNode - خبر رسان
* Konsole - شبیه ساز ترمینال
* Kontact - نرم افزاری معادل Outlook در ویندوز.
* Kopete - پیغام رسان
* Konqueror - مرورگر اینترنت
* KWord - واژه پرداز
* KWrite - Lightweight text editor

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

+ نوشته شده در  شنبه بیست و دوم دی 1386ساعت 15:21  توسط علیرضا مسکین ملک  | 

خداحافظ بیل


 
امسال نمایشگاه لوازم مصرفی لاس وگاس 2008 شاهد یک اتفاق تاریخی بود اتفاقی که باعث شد تا دنیای فناوری اطلاعات یکی از مدیران برتر خود را بازنشسته کند.در این نمایشگاه بیل گیتس رئیس مایکروسافت با اجرای برنامه زنده و ویدنوئی موسیقی “راک” که هدیه ای بود به طرفدارانش و با معرفی محصولات برتر این شرکت رسما از حضور در میادین فناوری اطلاعات جهانی خداحافظی کرد.بیل در این نمایشگاه برای آخرین بار به معرفی محصولاتی چون ویستا،زن،سورفیس، وایکس باکس 360 پرداخت و مدیریت ملایکروسافت را به استیو بالمر سپرد.
+ نوشته شده در  شنبه بیست و دوم دی 1386ساعت 15:2  توسط علیرضا مسکین ملک  | 

سهمیه بندی

حالا بعد از سهمیه بندی بنزین به نظر میرسه که نوبت سهمیه بندی دیسک سخت باشه اینم تبصره ۱۳ برای دیسک سخت.

سهمیه بندی دیسک سخت در لینوکس

+ نوشته شده در  پنجشنبه بیست و چهارم آبان 1386ساعت 14:32  توسط علیرضا مسکین ملک  | 

تریگرها در MySQL

تریگرها امکان جدیدیست که از نسخه 5.0 به MySQL اضافه شده ولی در این نسخه محدودیتهایی وجود داشت که در نسخه 5.1 برطرف شده است بهتر است از نسخه 5.1 استفاده کنید , امکاناتی که تریگرها در اختیار ما قرار می دهند رو میشه به 3 قسمت تقسیم بندی کرد :

 

  • شما از اینها می توانید برای چک کردن و یا لغو کردن ورود اطلاعات غیر مفید به بانک اطلاعاتی خود استفاده کنید .
  • می توانید از این امکان برای تغییر دادن و یا بی اثر کردن جملات INSERT , UPDATE و یا DELETE استفاده کنید .
  • امکان مفیدی است برای مانیتور کردن تغییرات اعمال شده روی بانک اطلاعاتی .

برای بهتر کارکردن با این امکان شما باید ابتدا اطلاعاتی در مورد روالهای ذخیره شده ( Stored Procedures ) داشته باشید زیرا نحوه نوشتن تریگرها تا حدود زیادی مشابه نوشتن رواللهای ذخیره شده است به طور مثال :

  • استفاده از جملات ترکیبی (BEGIN / END) ( که برای مشخص کردن شروع و پایان دستورات می باشد) مجاز است .
  • استفاده از عبارات کنترلی همانند IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE, ITERATE مجاز می باشد.
  • تعریف متغیر (DECLARE) و مقدار دهی آن ( امکان پذیر است .

نحوه نوشتن تریگرها :

	CREATE TRIGGER 
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON
FOR EACH ROW
 

مشخصات تریگرها :

نام : تریگرها می بایست حتما دارای نام باشند و البته کمتر از 64 حرف و می توانید از جدا کننده هایی استفاده کنید همانند نامهای دیگر در MySQL.
می توانید از ساختار مشابه زیر استفاده کنید :
نام جدول + '_' + نوع تریگر . به طور مثال اگر اسم جدول t29 بوده و می خواهید این تریگر در زمان قبل(BEFORE) از UPDATE اجرا شود از نام t29_bu برای تریگر خود استفاده کنید که البته ابن اختیاریست و می توانید از هر نام دیگری نیز استفاده کنید.

زمان : تریگرها دارای زمان فعالیت می باشند که می توانند قبل و یا بعد از یک عملی اجرا شوند که توسط قسمت { BEFORE | AFTER } INSERT | UPDATE | DELETE } زمان آن مشخص می شود .
به طور مثال اگر بخواهید آن را قبل از عمل حذف اجرا کنید از " BEFORE DELETE " استفاده می کنید.

رویداد : که یکی از اعمال INSERT , UPDATE و یا DELETE است که در قسمت قبل توضیح داده شد.

جدول : تریگرها می باست مربوط به جول باشند که در هر INSERT , UPDATE و یا DELETE اجرا شده روی آن جدول تریگر مربوطه آن اجرا شود . البته به خاطر داشته باشید که نمی توانید دو تریگر برای یک جدول و یک زمان مشابه بسازید.

سطرهای جدول : عبارت FOR EACH ROW حاکی از این است که تریگرها روی سطرهای جدول اجرا می شوند نه روی تمام جدول.

عبارات : تریگرها می توانند شامل هیچ عبارتی نباشند و هم می توانند شامل عبارت باشند و شامل همه آن محدودیتای توابع که قبلا گفته شد.

ستونهای NEW و OLD : در تریگر میتوانید به هر سطر جدول ارجاع داشته باشید ولی نمی توانید فقط نام ستون را مشخص کنید چون باعث ابهام خواهد شد . به همین خاطر از NEW و OLD استفاده می کنیم . NEW مقدار جدید و OLD نمایانگر مقدار قدیمی است. و به صورت زیر از آنها استفاده می کنیم:
NEW | OLD "." نام ستون

در موقع INSERT فقط NEW و در موقع DELETE فقط OLD مجاز است ولی در موقع UPDATE استفاده از هر دو اینها مجاز است . در زیر یک مثال از نحوه استفاده آن آمده :

	CREATE TRIGGER t21_au 
BEFORE UPDATE
ON t22
FOR EACH ROW
BEGIN
SET @old = OLD. s1;
SET @new = NEW.s1;
END;//

حال اگر جدول t22 شامل یک سطر با مقدار 55 در ستون s1 خود باشد بعد از اجرای دستور " UPDATE t21 SET s1 = s1 + 1 " و وقتی بروزرسانی به پایان برسد متغیر @old مقدار 55 و متغیر @new مقدار 56 را دارا خواهد بود.

مثال :

	DELIMITER // 
CREATE TABLE t22 (s1 INTEGER)//
CREATE TRIGGER t22_bi
BEFORE INSERT
ON t22
FOR EACH ROW
BEGIN
SET @x = 'Trigger was activated!';
SET NEW.s1 = 55;
END;//

ابتدا جدولی به نام t22 ایجاد کرده که شدارای یک ستون از نوع عددی بوده به نام s1 و تریگری که قبل از انجام هر INSERT اجرا شده و مقدار ستون s1 را 55 قرار می دهد .

حال یک sql را اجرا کرده تا نحوه کار این تریگر را بهتر متوجه شوید:
INSERT INTO t22 VALUES (1)//

حال اگر با دستور SELECT اطلاعات این جدول را خراج کنید می بینید که مقدار ستون s1 همیشه 55 خواهد بود.

	SELECT @x, t22.* FROM t22//
+------------------------+------+
| @x | s1 |
+------------------------+------+
| Trigger was activated! | 55 |
+------------------------+------+
1 row in set (0.00 sec)

این تنها آشنایی مختصری با تریگرها بوده و برای اطلاعات بیشتر می توانید از منوالهای MySQL که در سایت آن http://www.mysql.com موجود است استفاده کنید.

در پایان مثالی که در منوال MySQL آمده است را قرار داده تا با یک نمونه عملی آشنا شوید.

	CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,b4 INT DEFAULT 0 );

DELIMITER |


CREATE TRIGGER testref
BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;|


DELIMITER ;

INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL),
(NULL), (NULL);


INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);



mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test1;
+------+
| a1 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test2;
+------+
| a2 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test3; +----+ | a3 | +----+ | 2 | | 5 | | 6 | | 9 | | 10 | +----+ 5 rows in set (0.00 sec) mysql> SELECT * FROM test4;
+----+------+
| a4 | b4 |
+----+------+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+----+------+
10 rows in set (0.00 sec)
+ نوشته شده در  جمعه چهارم آبان 1386ساعت 11:56  توسط علیرضا مسکین ملک  | 

زندگي دوم در فضاي مجازي

در دنياي مجازي زندگي دوم هر شهروند قادر است در محيطي سه بعدي جنسيت خود را انتخاب كند و آنگونه كه مورد علاقه اوست چهره، رنگ پوست و مو، لباس، شغل، محل سكونت، وسايل زندگي و هرچيزي كه مورد نياز يا علاقه‌اش است را ايجاد نمايد. هر شهروند اين امكان را دارد كه ازفضاي گسترده‌اي از صفات بهره‌مند شود. شهروند زندگي دوم قادر است با وسيله مورد علاقه‌اش رانندگي كند، در ارتفاع چهار هزارمتري از سطح زمين پرواز كند، به قايقراني بپردازد، به سفرهاي ماجراجويانه برود و... .
ادامه ....
+ نوشته شده در  پنجشنبه سوم آبان 1386ساعت 15:57  توسط علیرضا مسکین ملک  | 

انواع جداول در MySQL

در این مقاله قصد داریم با انواع جداول موجود در MySQL آشنا شویم. طراحی بانکهای اطلاعاتی همانند سایر کارهای طراحی نیاز به یک سری اطلاعات پیش نیاز دارد، برای مثال در بعضی از موارد کار با بانک اطلاعاتی به نحوی است که transaction-safe بودن جدول را طلب می کند، اما استفاده از جداول transaction-safe موجب افزایش زمان اجرا، فضای دیسک و حافظه می شود. توجه داشته باشید که در این مقاله تنها هدف آشنایی با انواع جداول موجود در MySQL است و به طور کامل با هر کدام آشنا نخواهیم شد!. انواع جداول موجود در MySQL عبارتند از:

● ISAM
● MyISAM
● InnoDB
● BerkeleyDB (BDB)
● MERGE
● HEAP

جداول ISAM :

این نوع جداول تنها برای پشتیبانی از جداول قدیمی در MySQL وجود دارد، تمام کارایی و قابلیتهای آن در MyISAM وجود دارد، پس دلیلی برای توضیح این نوع جداول در اینجا وجود ندارد، بر اساس برنامه کاری برنامه نویسان MySQL قرار است این نوع جدول از نسخه ۵ این RDBMS از آن حذف شود. جداول ISAM ذخیره ای سریع اما غیر transaction-safe به شما ارائه می دهد، جداول ISAM یک سری محدودیتها دارند که همین محدودیتها باعث جایگزینی آنها با MyISAM و حذف این جداول در آینده ای نزدیک شده است، محدودیتهایی که در ISAM وجود داشتند اما در MyISAM برطرف شده اند عبارتند از:

جداول ISAM به پلتفرمی که MySQL در آن نصب است وابسته می باشند، یعنی اینکه اگر شما در یک پلتفرم جداول خود را تولید کنید امکان بارگذاری آن در یک پلتفرم دیگر نیست.

جداول ISAM به شما حداکثر اجازه ذخیره تا 4 GB را می دهند، در حالی که محدودیت شما در جداول MyISAM بستگی به سیستم عاملی که MySQL روی آن نصب است دارد. پس در انتخاب سیستم فایل خود دقت کنید، بعضی از این سیستم ها فقط تا 2GB برای یک فایل را پشتیبانی می کنند، هر چند که شما می توانید با استفاده از جداول MERGE این محدودیت را برطرف کنید اما شما امکان استفاده از MERGE را در جداول ISAM ندارید.

همچنین استفاده بهینه از فضای دیسک که در جداول ISAM وجود ندارد.

جداول ISAM به شما اجازه استفاده از ۱۶ کلید به ازای هر جدول را می دهند و حداکثر طول یک کلید هم ۲۵۶ بایت است، اما جداول MyISAM به شما اجازه استفاده از ۶۴ کلید با هر یک طول حداکثر ۱۰۲۴ بایت را میدهند.

بررسی تمام محدودیتهای جداول ISAM از حوصله این مقاله خارج است اما با نگاهی گذرا می بینیم که این نوع جدول از برنامه های مفیدی مثل CHECK TABLE یا REPAIR TABLE یا BAKCUP TABLE و یا حتی OPTIMIZE TABLE پشتیبانی نمی کند.

هر چند که جداول ISAM وجود دارند اما نباید از آنها برای ساخت جداول جدید استفاده کرد و اگر شما جداول ISAM دارید شدیدا به شما توصیه می شود تا آنها را به MyISAM تبدیل کنید، کاری ساده با نتایجی چشمگیر!

جداول MyISAM:

بسیاری از مردم از MySQL برای سالها استفاده می کنند بدون اینکه متوجه شوند که این RDBMS انواع جداول دیگری را نیز در اختیار آنها قرار می دهد، این افراد از MyISAM استفاده می کنند بدون اینکه بدانند چون این نوع جدول، نوع پیش فرض MySQL است.
این نوع جداول ذخیره ای سریع اما غیر transaction-safe را به شما ارائه می دهند، در اکثر موارد کارایی بالایی از خود نشان می دهند حتی اگر طراح بانک اطلاعاتی در طراحی خود دچار مشکل شود. این نوع جداول در دست یک مدیر حرفه ای توانایی Handle کردن بانکهای طلاعاتی بزرگ و پرمشغله را نیز دارند. جداول MyISAM می توانند در سه حالت: compressed و dynamic, static باشند. یک جدول بر حسب نحوه تعریف ستونهایش به طور خودکار dynamic و یا static می شود اما جداول compressed با استفاده از ابزار myisampack تولید می شوند.
جداولی با سطرهای با طول ثابت به صورت یک جدول static در می آیند اما جداول با طول متغیر سطرها به صورت dynamic در می آید، چگونه می توانیم بگوئیم که یک جدول سطرهای با طول ثابت و یا طول متغیر دارد؟

نوع char و تمام انواع عددی طول ثابت دارند، اما انواع text ، varchar و یا blob طول متغیر بر حسب اطلاعات ذخیره شده در انها دارند ، جدولی که فقط از ستونهای char و یا عددی داشته باشد به صورت static ساخته می شود و هر جدولی که هر یک از حالتهای متغیر را داشته باشد به صورت dynamic ساخته می شود. جداول static برای جستجو کردن از جدوال dynamic و compressed سریعتر است اما خوب بدی این روش هم در این است که اطلاعاتی که ممکن است با هم از نظر طول بسیار متفاوت باشند را در سطرهایی با طول ثابت بریزیم که باعث هدر رفتن فضای دیسک می شود.

هر چند که جدوال نوع static و dynamic بدون دخالت مستقیم ما و بسته به نحوه طراحی به صورت خود به خود ساخته می شوند اما برای ساخت جداولcompressed باید کار بیشتری انجام دهیم. برای فشرده کردن یک جدول باید از myisampack استفاده کنیم که یک برنامه خط فرمان است.فشرده سازی یک جدول امکان خوبی به نظر می رسد اما باید توجه داشته باشید که این امکان تنها می تواند برای بعضی از برنامه ها معنی دار باشد چون بعد از فشرده سازی یک جدول، آن جدول به حالت فقط خواندنی readonly در می آید و اگر شما نیاز به به روزرسانی جدول داشته باشید ابتدا باید آنرا از حالت فشرده خارج کنید و بعد از اعمال تغییرات مجددا آن را فشرده کنید.

امکان دیگری که به نظر می رسد تنها از طریق جداول MyISAM در MySQL در دسترس FullText Searching است ، اندیسهای معمولی برای پیدا کردن سطرهایی خاص از جدول به خوبی کار می کنند اما جستجو برای یک کلمه یا رشته در یک متن هم امکان جالبی به نظر می رسد. شما با استفاده از کد SQL زیر می توانید یک جدول MyISAM با FullText یک اندیس بسازید.

CREATE TABLE articles (
articleID int not null auto_increment primary key,
title varchar(2MERGE),
body text,
fulltext (title,body)
);

و با استفاده از query زیر به دنبال هر رکورد حاوی miniprogrammer بگردید!

SELECT title
FROM article
WHERE MATCH (title, body) AGAINST ('miniprogrammer');

شما امکان گرفتن query های پیچیده تر را هم دارید:

SELECT title
FROM article
WHERE MATCH (title, body) AGAINST ('miniprogrammer apache php
web');

حالا ما به دنبال هر رکوردی هستیم که حاوی هر یک از کلمات فوق باشد. متاسفانه در حال حاضر MySQL از Stemming پشتیبانی نمی کند ، Stemming امکان فوق العاده جالبی است که در خیلی از سیستمهای جستجوی fulltext وجود دارد و با استفاده از آن مثلا اگر شما کلمه acquire را جستجو کنید کلمه acquisitions هم که از همان رده معنایی است بازگردانده می شود، هر کدام از این کلمات برحسب میزان وابستگی معنایی مقدار دهی می شوند و بعد از آن بر همین میزان مرتب می شوند و نتایج بازگشت داده می شوند.

قابلیت بسیار جالب دیگری که در حالت Full-Text به دست می آورید Boolean Full-Text Search است که بسیار جالبتر از Full-Text خالی است!

SELECT title
FROM article
WHERE MATCH (title,body)
AGAINST ('+linux+”Open Source” -desktop Java ~Oracle' IN
BOOLEAN MODE);

در query بالا شما به دنبال رکوردهایی می گردید که دارای کلمه Open Source و linux باشند اما کلمه desktop را نداشته باشند، کلمات Oracle و Java به دلخواه وجود داشته باشند اما هنگام مرتب سازی رکوردها برای مشخص شدن میزان وابستگی به مورد جستجوی ما وجود کلمه Java باعث افزایش امتیاز و Oracle باعث کاهش امتیاز شود.

جداول InnoDB :


این نوع جداول امکانات زیر را در اختیار شما قرار می دهند:

  • Transaction-safe بودن.

  • Row-level locking به این معناست که فقط سطری که در حال استفاده است از دسترس کاربران دیگر خارج است در حالیکه در بسیاری از انواع جداول دیگر جدولی که در حال کار کردن با آن هستیم از دسترس دیگر کاربران خارج است.

  • Support for foreign keys


InnoDB روش خاص خودش رو برای ذخیره اطلاعات دارد، شاخه خاص خود و نیز تنظیمات خاص خود. در جایی که جداول MyISAM هر جدول را در یک فایل ذخیره می InnoDB ممکن است یک جدول را در چندین فایل متفاوت ذخیره کند و همین امر به InnoDB این امکان را می دهد که بدون وابستگی به فایل سیستم سیستم عامل هر چقدر که می خواهد بزرگ شود. توجه داشته باشید که برای یک پروژه مشخص جداول InnoDB به مراتب بیشتر از همان جداول در حالت MyISAM فضا اشغال می کنند.
بسیاری از سایتهای بزرگی که از MySQL استفاده می کنند مثل Slashdot، Google و یا Yahoo! finance از جداول InnoDB استفاده می کنند . InnoDB یکی از سریعترین Transaction-safe در دنیاست.
InnoDB توسط یک کمپانی جداگانه به نام InnoBase Oy توسعه داده می شود که برای به دست آوردن آخرین اطلعات می توانید از وب سایت آنها در www.innodb.com دیدن کنید.

جداول BerkeleyDB :

انتخاب دیگری که برای جداول Transaction-safe وجود دارد BerkeleyDB یا به اختصار BDB است، این جداول توسط شرکت نرم افزاری Sleepycat ارائه شده که از طریق نشانی www.sleepycat.com قابل دسترسی است. این نوع جداول در حالتی که به transaction-safe احتیاج است به اندازه رقیب خود یعنی InnoDB مورد استفاده قرار نگرفته است. موتور BDB مدت زمان زیادی است که وجود دارد اما یکپارچگی آن با MySQL امر تازه ای است. تمام جداول BDB نیاز به یک کلید دارند چیز بدی نیست چون شدیدا به شما توصیه می کنم که برای هر جدول یک کلید مشخص کنید اما اینجا اجباری است و اگر شما یک کلید مشخص نکنید خود BDB اینکار را انجام خواهد داد.

جداول MERGE :


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

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

  • عدم پشتیبانی از auto_increment
  • عدم پشتیبانی از TEXT یا BLOB
  • محدود بودن عبارت جستجو به تنها استفاده از عملگرهای >=< و ...

+ نوشته شده در  پنجشنبه سوم آبان 1386ساعت 15:42  توسط علیرضا مسکین ملک  | 

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

پس از بحث و بررسی های فراوان در انجمنها و جلسات مختلف، به همت گروهی از کاربران علاقه مند، لینوکس شاپ ایران با هدف دسترسی آسان و ارزان کاربران و علاقه‌مندان به انواع محصولات حوزه نرم افزارهای آزاد/متن باز مانند انواع توزیعهای لینوکس و انواع سیستم عاملها و مجموعه های تکمیلی دیگر فعالیت رسمی خود را آغاز نمود. محصولات این فروشگاه را صرفا نرم‌افزارهای آزاد-متن‌باز و سایر محصولاتی که طبق قوانین متداول اپن سورس تهیه و اجازه فروش داشته باشند تشکیل خواهند داد.
ضمنا این فروشگاه در حال حاضر امکاناتی مانند نظردهی درباره محصولات عرضه شده و همچنین یک خبرنامه برای اطلاع از محصولات جدید اضافه شده نیز دارد.
این فروشگاه در آدرس اینترنتی http://linuxshop.ir در دسترس علاقه مندان میباشد.
+ نوشته شده در  پنجشنبه سوم آبان 1386ساعت 13:38  توسط علیرضا مسکین ملک  | 

شماره سی‌ام نشریه الکترونیک لینوکس منتشر شد

 شماره سی‌ام نشریه‌ی الکترونیک لینوکس «ایران‌تاکس» منتشر شد. این شماره نیز با همت نوسندگان محترم نشریه‌ی الکترونیکی ایران‌تاکس و لطف و توجه کاربران گنو/لینوکس ایران با مقالاتی جدید با شما خوانندگان همراه هستیم، مقالات این شماره به عبارت زیر هستند: فارسی نویسی در Qt، راهنمای پورت سریال – قسمت اول، انگیزش اقتصادی نرم‌افزار متن‌باز: از نگاه سرمایه‌گذاران - قسمت اول، آشنایی با هسته لینوکس - قسمت دوم ( مقدمات کاربردی)، نرم‌افزارهای متن‌باز برای SMEها، بهینه سازی وب سرور آپاچی
+ نوشته شده در  پنجشنبه دوازدهم مهر 1386ساعت 19:31  توسط علیرضا مسکین ملک  |