بایگانی دستهٔ برنامه نویسی
اصول نرمافزارهای متنباز
نوشتهشده به وسیلهٔ سیاوش در مقالات, اپن سورس, برنامه نویسی در اکتبر 26, 2008
بسیاری از کاربران تصور میکنند که استفاده از نرمافزار متنباز(open source)، به معنی استفاده کامل و آزاد از کدهای منبع آن نرمافزار است، در حالی که باید توجه داشت یک نرمافزار متنباز الزاما همه کدهای منبع خود را عرضه نمیکند. عرضه یک نرمافزار متنباز باید شامل موارد زیر شود:
1. عرضه رایگان: باید توجه داشته باشید که نرمافزارهای متنباز همواره رایگان عرضه میشوند. کاربرانی که قصد استفاده از این نرمافزارها را دارند باید بهصورت رایگان و بدون پرداخت هر گونه هزینه مجوز استفاده از آن نرمافزار را دریافت کنند. برنامههایی که از این طریق در اختیار کاربر قرار میگیرد ممکن است محتوایی را شامل شود که از چندین منبع مختلف بهدست آمده است.
2. کدهای منبع: باید کدهای منبع در این قبیل برنامهها در اختیار کاربر قرار گیرد. در هنگام توزیع این کدها باید به گونهای باشند که کاربر بتواند از آنها استفاده کند. با این وجود،برخی از انواع نرمافزارهای متنباز هستند که بدون کدهای منبع عرضه میشوند. این نرمافزارها که از کدهای منبع دیگر نرمافزارهای کدباز استفاده میکنند بهصورت رایگان از اینترنت بارگذاری میشوند. کدهای منبعی که در برنامههای متنباز عرضه میشوند طوری نوشتهشدهاند که برنامهنویسان میتوانند با استفاده از آنها امکانات جدیدی را به نرمافزار بیفزایند. باید توجه داشت که تخریب کدهای منبع و نوشتن آنها بهصورت گنگ و پیچیده مجاز نیست.
3. فعالیتهای قابل استنتاج: مجوز استفاده از این نرمافزارها باید به گونهای طراحی شود که قابلیت اصلاح داشته باشد. بر این اساس، نسخههای جدیدی که از یک نرمافزار متنباز تهیه میشوند باید بهگونهای باشد که امکان انتشار نرمافزار همانند نسخه اصلی آن فراهم شده باشد.
كدام زبان برنامهنویسی را انتخاب كنیم؟
نوشتهشده به وسیلهٔ سیاوش در مقالات, برنامه نویسی در اکتبر 24, 2008
اشاره :كدام زبان برنامهنویسی را انتخاب كنم؟ از كدام نوع دیتابیس استفاده كنم؟ اینها سؤالات قدیمی و تاحدودی كلیشهای هستند. با این حال خواندن یكی دو مقاله جالب در اینترنت باعث شد، طرح مجدد این موضوع همیشگی را خالی از فایده ندانم.
اصولاً هر از گاهی باید این پرسش را مجدداً در كلیه سطوح مهندسی نرمافزار، چه در صنعت، چه در رسانهها و چه در دانشگاهها مطرح كرد و دلیل آن هم، بسیار ساده است. زبانهای برنامهنویسی نیز مانند زبانهای گویشی انسانها پویا هستند و مرتباً متحول میشوند. در این راستا برخی خود را با نیازهای روز تطابق داده و برخی نیز از این تحولات جا میمانند.
به همین دلیل لازم است هر چند وقت یكبار این پرسش را مطرح كرده و جدیدترین پاسخها را به نقد بگذاریم. برای اینكه بحث از حالت نظری خارج شود و حالت كاربردی پیدا كند، اجازه میخواهم نظرم را در این مورد به اختصار بیان كنم.

برنامهنویسی وب
فعلاً برنامهنویسی تحت وب داغترین سوژه در دنیای برنامهنویسی است. شاید بد نباشد یادآوری كنم كه اصولاً فلسفه برنامهنویسی تحت وب چه بود كه به اینجا رسید. علت محبوبیت و رشد گسترده برنامهنویسی تحت وب، حل شدن مشكل كلاینت بود.
در این مدل از برنامهنویسی، برنامهنویس دغدغه چندانی درباره قابل نصب بودن برنامهاش روی پلتفرمهای مختلف ندارد زیرا وضعیت تقریباً روشن است. همین كه برنامه شما روی یكی دو مرورگر معروف مانند فایرفاكس و اینترنت اكسپلورر جواب بدهد، كافی است. ادامهٔ این ورودی را بخوانید »
vonJeek
نام مستعار پژوهشگري است که ادعاي جالبي دارد. وي مي گويد توانسته کدي طراحي کند که گذرنامه هاي الکترونيکي را همانندسازي مي نمايد. او جزئيات اين هک را منتشر کرده است.
vonJeek به ZDNet.co.uk اظهار داشته است که با استفاده از تراشه هاي همانندسازي شده، مي توان تمهيدات امنيتي گذرنامه هاي الکترونيکي را دور زد.
وي مي گويد: «وقتي درباره دور زدن (bypassing) صحبت مي کنيم، منظورمان دست بردن در يک سيستم به گونه اي است که پردازش هاي آن، بر خلاف پيش بيني ها و طراحي هاي قبلي، صورت بگيرد.»
هکر عقيده دارد که در گذرنامه هاي الکتريکي براي رديابي تغييرات غيرمجاز اطلاعات تراشه ها، از مکانيسمي به نام passive authentication استفاده مي شود. يک document security object (که به اختصار SOD ناميده مي شود) در تراشه ذخيره شده است که حاوي دو الي شانزده مقادير رياضي بوده و از آن براي شناسايي تغييرات احتمالي در گذرنامه استفاده مي گردد.
مجموعه اين مقادير، حکم يک امضاي ديجيتالي را دارد. اين امضا به همراه کليد عمومي (Public Key) امضا کننده که معيار صحت امضا به شمار مي رود، در فايل SOD ذخيره مي گردد.
براي تاييد صلاحيت و اعتبار گذرنامه هاي الکترونيکي، بايد کارهاي مختلفي صورت بگيرد که بخشي از آن عبارت است از: بررسي فايل ذخيره شده در تراشه، بررسي مقادير ثبت شده در فايل SOD و بررسي امضا و درست آزمايي Public Key.
به گزارش zdnet کشورها مي توانند از يک مکانيسم امنيتي ديگر به نام active authentication نيز استفاده کنند. اين مکانيسم مشخص مي کند که آيا اطلاعات تراشه، دچار تغيير گشته يا اين اطلاعات همانندسازي شده است يا خير.
مکانيسم active authentication در گذرنامه هاي الکترونيکي هلند مورد استفاده قرار مي گيرد.
VonJeek مدعي است يک برنامه مقلد که از آسيب پذيري موجود در گذرنامه الکترونيکي بهره مي برد، مي تواند active authentication را با هر برنامه اضافه ديگري از قبيل اثر انگشت يا مشخصه هاي بيومتريک «دور بزند».
شيوه اي که سيستم گذرنامه الکترونيکي از آن براي رجوع به ايندکس و بررسي فايل هاي ذخيره شده در تراشه استفاده مي کند، باعث بروز اين اختلال امنيتي است.
vonJeek مي گويد که اين برنامه مقلد، مي تواند هر نوع گذرنامه الکترونيکي را دست کاري کند؛ البته به اين شرط که سيستم، دستورالعمل سازمان بين المللي هوانوردي (ICAO) را بدون اعمال تغيير دنبال کرده باشد.
اين محقق مي گويد: گذرنامه هاي الکترونيکي مورد استفاده در انگليس که در آنها از active authentication استفاده نگشته نيز قابل هک شدن است
تاریخچه ی پیدایش زبان های برنامه نویسی جنبه گرا Aspect Oriented Programming
نوشتهشده به وسیلهٔ سیاوش در مقالات, وبلاگ نویسی, برنامه نویسی در اکتبر 19, 2008
جنبهها انقلابي در شيگرايي هستند و راه حلهايي را براي برخي از مشکلاتي ارائه ميدهند که ممکن است در مسير مدلسازي برنامهها با آنها مواجه شويد.
در ابتدای پیدایش علوم کامپیوتر، برنامهنویسان کدهایی در سطح ماشین مینوشتند. به همین دلیل بیشتر توجه آنان معطوف به مجموعه دستورات ماشین بود. به تدریج زبانهای سطح بالا ایجاد شد و در نتیجه توجه برنامهنویسان بیشتر به اصل مسئله معطوف گردید. اکنون سطح انتزاعی بر روی کامپیوترهای مختلف ایجاد شده است. یعنی برنامهی نوشته شده روی هر ماشین اجرا میشود.
در زبانهای ساختیافته ، برنامه را به تعدادی روال تقسیم مینمودند، بدین صورت که هر روال کار خاصی را انجام میداد. برنامهنویسی شیگرایی اجازه میدهد تا سیستمی دارای اشیای مرتبط و همکار داشته باشید. کلاس ها این امکان را فراهم میکنند که جزییات پیادهسازی را پشت واسط برنامهنویسی پنهان نمایید. چندشکلی یا چندریختی ، رفتار و واسط مشترکی را برای مفاهیم مشابه نشان میدهد. بدین وسیله قادر خواهید بود تا پیمانههای خاص و جدیدی را بدون نیاز به دستکاری در پیادهسازی مفاهیم پایه ایجاد نمایید.
روشهای برنامهنویسی و زبانها در واقع راه ارتباط با ماشین را تعریف میکنند. هر روش جدید، شیوههای نو را برای تجزیهی مساله ارائه میدهد که عبارتند از: کد ماشین، کد مستقل از ماشین، روالها، کلاسها و غیره. هر شیوهی جدید، نگرشی تازه جهت تبدیل نیازهای سیستم به زیرساختهای برنامهنویسی ارائه میدهد. تکامل این نوع شیوههای برنامهنویسی امکانی را فراهم مینماید تا سیستمهای پیچیدهتری ایجاد کنید. عکس این مطلب نیز صادق میباشد. یعنی سیستمهای پیچیده میتوانند پیادهسازی شوند.
اکنون، برنامهنویسی شیگرا به عنوان روش ایجاد پروژههای نرمافزاری استفاده میشود. این شیوه قدرت خود را در مدلسازی رفتارهای معمولی نشان داده است. اما این روش به خوبی نمیتواند بر روی رفتارهایی که بین چندین پیمانه مشترک وجود دارند، کار کند. برعکس، شیوهی جنبهگرا تا حد قابل توجهی این مشکل را برطرف میکند.
در سال 1972 پارانز مفهومی به نام جداسازی دغدغهها را مطرح کرده که امروزه جزء مفاهیم اساسی در فرآیند مهندسی نرمافزار به شمار میآید. این مفهوم به صورت زیر تعریف شده است:
«قابلیت تشخیص، کپسولهسازی و کار با دغدغه، هدف و یا مقصود هستند»
دغدغه را میتوان به عنوان محرکی برای تقسیم نرمافزار به بخشهای قابل مدیریت درنظر گرفت. برای نمونه، یک وظیفهمندی خاص نرم افزار و مسائلی که به خواستههای غیروظیفهمندی مرتبط میشوند مانند ثبت وقایع، امنیت و غیره، همگی به عنوان دغدغه هستند، البته با توجه به جداسازی دغدغهها آنها را در قالب واحدهای مستقل کپسوله کردهاند.
در سال 1997، مشهورترین رویکرد زبان جنبهگرا به نام AspectJ ابتدا توسط گروهی درXerox PARC عمومیت یافت. این گروه روی پروتکلها و ایدهی مدلسازی دغدغههای مشترک کار میکردند. در همان حال، گروهی در شرکت IBM برنامهنویسی موضوعگرا را مطرح کردند. برنامهنویسی موضوعگرا و عناوین بعدی آن، تحت نام «جداسازی چندبعدی دغدغهها»، به جداسازی و ادغام پیمانههای مختلف برنامهنویسی بر پایهی دغدغههایی در ابعاد مختلف پرداختهاند. [1]
نخستین کار در دانشگاه Twente هلند انجام یافت که در مورد فیلترهای ادغامسازی کار میکردند. به طوری که در پیادهسازی فیلترهایی که رفتار شی را در اجرا پیشرفت میدادند دخیل بودند. در دانشگاه Northeastern نیز انتزاعی از ساختار کلاسها انجام گرفت که پشتیبانی بهتری از مفهوم دانش و رفتار عملیاتی ارائه میداد. در سال 1997، کریستیانا لوپز از هر دو مقاله استفاده کرد و زبان D-Java را به عنوان اولین مجموعهی رسمی از زبان جنبهگرا ارائه نمود.
شیوهی موضوعی اولین روشی بود که مفاهیم جنبهگرایی را با زبان مدلسازی یکپارچه ادغام کرد. این کار مشترکی از چندین گروه با گروه برنامهنویسی موضوعگرا است. برنامهنویسی موضوعگرا به طراحی موضوعگرا تبدیل شده و در سال 2001 به Theme/UML تبدیل گردید. تعریف و نمایش دغدغهها برای نخستین بار در مستندات الیسا و گیل مورفی از دانشگاه British Columbia ارائه شد و در سال 2003 به عنوان بخشی از شیوهی موضوعی طراحی جنبهگرا به نام Theme/Doc مطرح گردید.
حدود یک دههی قبل، به دنبال موفقیت درخور توجه ابزار CASE ، چیکوفسکی و کراس مبحث مهندسی معکوس و بازیابی طراحی را مطرح نمودند. تعریفی که آنها از مهندسی معکوس داشتند در زیر ارائه شده است:
«مهندسی معکوس، تحلیل یک سیستم به منظور تشخیص اجزا، ترکیبات فعلی، روابط بینابین آنها، استخراج و تولید تجریدهای موجود در سیستم و دادههای مربوط به طراحی است.» [2]
در دو دههی قبل، محققان امکاناتی را به منظور کشف، اعمال تغییر، تحلیل، جمعبندی، تولید، تجزیه و به تصویر کشیدن محصولات نرمافزاری ابداع کردند. این امکانات شامل تهیهی اسناد نرمافزاری در شکلهای گوناگون، نمایش کد میانی، داده و معماری بود. اغلب ابزارهای مهندسی معکوس بر استخراج ساختار درونی سیستم موجود با هدف انتقال آن به ذهن مهندس نرم افزار تمرکز دارد. در هر صورت، این ابزارها راه زیادی در پیش دارند تا به مرحلهای برسند که مورد استفادهی روزانهی مهندسان نرمافزار قرار گیرند. مطالعه و درک برنامه در صنعت نرمافزار به منظور کنترل هزینه و ریسک چرخهی تحولات سیستمهای نرمافزاری از اهمیت بالایی برخوردار میباشد.
منبع:
1. R. Laddad, “AspectJ in Action – PRACTICAL ASPECT-ORIENTED PROGRAMMING”, Manning Publications, 2003.
2. H. A. Muller, “Reverse Engineering: A Roadmap”, Computer Science Department University of Victoria, Canada.
برداشت و نگارش: سیدمصطفی مفیدیان
داستان برنامهنویس و مهندس
نوشتهشده به وسیلهٔ سیاوش در برنامه نویسی, عمومی در اکتبر 14, 2008
یک برنامهنویس و یک مهندس در یک مسافرت طولانى هوائى کنار یکدیگر در هواپیما نشسته بودند. برنامهنویس رو به مهندس کرد و گفت: مایلى با همدیگر بازى کنیم؟ مهندس که میخواست استراحت کند محترمانه عذر خواست و رویش را به طرف پنجره برگرداند و پتو را روى خودش کشید. برنامهنویس دوباره گفت: بازى سرگرمکنندهاى است. من از شما یک سوال میپرسم و اگر شما جوابش را نمیدانستید ۵ دلار به من بدهید. بعد شما از من یک سوال میکنید و اگر من جوابش را نمیدانستم من ۵ دلار به شما میدهم. مهندس مجدداً معذرت خواست و چشمهایش را روى هم گذاشت تا خوابش ببرد. این بار، برنامهنویس پیشنهاد دیگرى داد. گفت: خوب، اگر شما سوال مرا جواب ندادید ۵ دلار بدهید ولى اگر من نتوانستم سوال شما را جواب دهم ٥٠ دلار به شما میدهم. این پیشنهاد چرت مهندس را پاره کرد و رضایت داد که با برنامهنویس بازى کند.
برنامهنویس نخستین سوال را مطرح کرد: «فاصله زمین تا ماه چقدر است؟» مهندس بدون اینکه کلمهاى بر زبان آورد دست در جیبش کرد و ۵ دلار به برنامهنویس داد. حالا نوبت خودش بود. مهندس گفت: «آن چیست که وقتى از تپه بالا میرود ۳ پا دارد و وقتى پائین میآید ۴ پا؟» برنامهنویس نگاه تعجب آمیزى کرد و سپس به سراغ کامپیوتر قابل حملش رفت و تمام اطلاعات موجود در آن را مورد جستجو قرار داد. آنگاه از طریق مودم بیسیم کامپیوترش به اینترنت وصل شد و اطلاعات موجود در کتابخانه کنگره آمریکا را هم جستجو کرد. باز هم چیز بدرد بخورى پیدا نکرد. سپس براى تمام همکارانش پست الکترونیک فرستاد و سوال را با آنها در میان گذاشت و با یکى دو نفر هم گپ (chat) زد ولى آنها هم نتوانستند کمکى کنند.
بالاخره بعد از ۳ ساعت، مهندس را از خواب بیدار کرد و ٥٠ دلار به او داد. مهندس مودبانه ٥٠ دلار را گرفت و رویش را برگرداند تا دوباره بخوابد. برنامهنویس بعد از کمى مکث، او را تکان داد و گفت: «خوب، جواب سوالت چه بود؟» مهندس دوباره بدون اینکه کلمهاى بر زبان آورد دست در جیبش کرد و ۵ دلار به برنامهنویس داد و رویش را برگرداند و خوابید …
Python زبانی برای تمام فصول
نوشتهشده به وسیلهٔ سیاوش در برنامه نویسی در اکتبر 12, 2008
کی از مسائلی که در بحث همبستگی وبلاگهای IT مطرح شد این بود که در بین ما وبلاگنویسهای عالی هست اما برنامهنویس حرفهای نه! اصولا برنامهنویسی پایه و اساس IT هست و چیزی که در بین ما احساس میشود، کمبود Developer یا گسترش دهنده است.
من خیلی وقت است که میخواهم یک زبان برنامهنویسی یاد بگیرم و تا به حال چند زبان را امتحان کردم. اولین زبانی را که شروع کردم Microsoft Visual Basic بود اما پس از مدتی نتیجه گرفتم که این زبان ایدهال من نیست به چند دلیل زیر:
- این زبان در انحصار مایکروسافت است و برنامههایی که با آن نوشته میشود برای پلت فرم ویندوز مناسب است.
- دستورات آن قدری عجیب غریب است و آدم کمی گیج میشود.
- برای کاربردهای مختلف مناسب نیست.
پس از آن به سراغ C رفتم. همان طور که میدانید زبان C یکی از قدرتمندترین و پرطرفدارترین زبانها است. یک زبان ترجمهای (Compiled Language) است و سرعت اجرای فوقالعاده بالایی دارد البته کمی تا قسمتی هم سخت است و برای کارهای بزرگ مناسب است. پس از آن خیلی اتفاقی در مورد زبان Python شنیدم. پیگیر آن شدم و پس از مدتی واقعا به آن علاقهمند شدم و در نهایت فهمیدم که زبان ایدهالم را پیدا کردهام. کار را با آن شروع کردم و هرچه میگذشت علاقهی من به پایتون بیشتر میشد و فهمیدم که واقعا زبان بزرگی است برای همین تصمیم گرفتم دوستان را هم از وجود چنین زبانی آگاه کنم. در ادامه مختصری در مورد Python توضیح خواهم داد.
زبان برنامهنوسی Python یک پروژه اوپن سورس است و توسط Guido Van Rossum و همکارنش در سال 1990 منتشر شد. این زبان برگرفته از زبان ABC است که آن هم توسط Guido Van Rossum همکارانش در سال 1980 ساخته شده است. سازندگان ABC امیدوار بودند که این زبان ساده راه گشای نوآموزان باشد اما به نتایج مطلوبی دست نیافتند و پس از Python متولد شد. پایتون یک زبان برنامهنویسی سطح بالا، تفسیری (Interpreted Language) و شیئیگرا همراه با انعطاف پذیری فوقالعاده زیاد است که باعث میشود در هر پلت فرمی از جمله: ویندوز، لینوکس، مک و حتی در موبایلها قابل استفاده باشد و قدرتی در حد زبانهای C++ و Java دارد.
اما چیزی که باعث جذب شدن من شد سادگی باور نکردنی این زبان است. دستورات آن واقعا قابل فهم است و شما در کار با آن اصلا گیج نمیشوید. برای مثال برنامهای که در پایتون نوشته شده است، از نظر حجم کد نویسی، نصف حجمی است که همان برنامه در C دارد چون این زبان از بسیاری از زوائد چشم پوشی کرده است. من نمیتوانم آن طور که باید شاید قدرت این زبان را به شما نشان دهم بلکه این پست را برای این نوشتم که شما را با این زبان آشنا کنم و اگر با توضیحات من علاقه مند شدهاید میتوانید با کمی تحقیق و بررسی به گفتههای من برسید.
برای شروع چند منبع مفید را معرفی میکنم:
- سایت رسمی پایتون
- آموزش پایتون و سایت این زبان به فارسی
- کتاب «اولین گام در دنیای برنامهنویسی با Python» نوشتهی مهندس احمد مصلی نژاد، انتشارات ناقوس
- پایتون در ویکیپدیا
منابع: ویکیپدیا ، پایتون فارسی و کتاب اولین گام در دنیای برنامهنویسی با Python
مقدمه ای بر PHP
نوشتهشده به وسیلهٔ سیاوش در برنامه نویسی, طراحی وب در اکتبر 6, 2008
تا حالا براتون سوال پیش اومده این همه سایت های رنگارنگ با این همه قابلیت های متفاوت چطوری درست می شن؟
خیلی از شماها جواب میدید آره با html که جواب کاملا درستیه! حتی خیلی از شما با html وبسایت شخصی خودتون رو ساختید ولی هر چی سعی کردید نتونستید برای سایتتون یه Search یا صفحه ی Login بسازید.
خوب این آموزش مربوط به افرادیه که html رو تا حدودی بلد هستند و البته php بلد نیستند.
اول از همه باید ببینیم این php اصلا چی هست؟
php یه زبان برنامه نویسی server-side هست که قابلیت ساختن صفحات پویا رو داره.
server-side یعنه چی؟
» سوال خوبیه! ببین مثلا html رو در نظر بگیر، وقتی یه صفحه ی html رو باز می کنی browser کد html رو می خونه و تبدیلش می کنه به اون چیزی که تو توی صفحه ی browser می بینی! پس html یه زبان client-side هست چون کل کد رو browser تبدیل به صفحه ی نهایی کرد.
اما توی php یه مقدار فرق می کنه. این تیکرو با مثال توضیح میدم. سایت سیاوش . کام با php نوشته شده، خوب حالا شما وقتی وارد www.syavash.com می شید چه اتفاقاتی میفته؟ اول مرورگر (browser) شما یه درخواست میفرسته که من فایل index.php رو می خوام! تا اینجا شبیه وقتیه که یه سایت ساخته شده با html رو باز می کنید، اما از اینجا به بعدش فرق داره. بعد سروری که www.syavash.com روش هست می بینه این فایلی که درخواست شده یه فایل php هست پس اول اون رو میفرسته برای کمپایلر php و کمپایلر php اون رو طبق کد توش اجرا میکنه و در نهایت یه صفحه ی html می سازه و اون صفحرو برای کاربر میفرسته و مرور گر شما صفحه ی html ساخته شدرو نشونتون میده! «گفتید اگه صفحه html بود فرق میکرد. اون موقع چجوری می شد؟
» اگر صفحه html بود بعد از اینکه مرورگر شما اون صفحرو درخواست میکرد سرور بلا فاصله کد اون صفحرو برای مرورگر میفرستاد و اون صفحرو شما می دیدید! «
پس یعنی اگه من بخوام کد php سایت syavash.com رو ببینم نمی تونم چون اصلا اون فایل برای مرورگر من فرستاده نمیشه، درسته؟
» آفرین! کاملا درسته!!! یکی از خوبی های زبان های server-side اینه که کد اصلی اون صفحرو نمی تونه کسی ببینه! «
اما من تو صفحه ی syavash.com وقتی راست کلیک می کنم و View page source رو میزنم بهم کد اون صفحرو نشون میده که!
» همونطوری که گفتم اون کد، کد php نیست و کد تولید شده ی htmlای هست که توسط سرور از اون فایل php تولید شده! «
خوب حالا که server-side رو گفتید چیه، میشه صفحات پویا رو هم بگید؟
برنامه نویسی گروهی با SubVersion
نوشتهشده به وسیلهٔ سیاوش در برنامه نویسی در اکتبر 3, 2008
ساب ورژن = SubVersion
هفت تیر ۷tir.com به قلم نبی کرمعلی زاده : من (و شاید خود شما) همیشه در برنامه نویسی اینطور عمل میکنم که زمانی که تصمیم دارم تغییرات کلی در فایل ایجاد کنم که مطمئن نیستم نتیجه مطلوب خواهد داشت یا خیر، از فایل مورد نظر یک کپی به عنوان backup در همان مسیر قرار میدم و ابتدای نام فایل یک علامت under line (_) قرار میدم. سپس تغییرات را شروع میکنم. اگر تغییرات به نتیجه نرسید مجدداً آن فایل پشتیبان را جایگزین میکنم. اما همیشه داستان به همین سادگی نیست. گاهی فایلها زنجیروار به یکدیگر مرتبط هستند و تغییر کلی در یک فایل مستلزم تغییرات در فایلهای دیگر نیز هست. در این صورت اگر بعد از چند روز کار متوجه بشم که ایده اولیه و کلی من غلط بوده و کار از اصل اشکال داشته و تصمیم بگیرم که به همان سبک و روش قدیمی کار را ادامه دهم. اینجاست که پیدا کردن و اصلاح تغییرات و بازگرداندن تغییرات فایلها مثلا به چند روز قبل تقریباً غیر ممکن خواهد بود. همچنین همیشه با این قضیه مشکل داشتم که از کجا بدونم کدوم فایل رو مجدد ویرایش کردم و نیاز به آپ لود مجدد بر روی سایت داره و کدوم فایلها تغییری نکرده اند و نیاز به آپ لود مجدد ندارند. از طرف دیگه همیشه به این مسئله اعتقاد داشتم که انجام پروژه های برنامه نویسی به صورت گروهی تقریباً ناممکنه چون اعتقاد داشتم هماهنگی و گردآوری افراد درکنار یکدیگر کار مشکلیست. اما باز هم از اینکه پروژه های زیادی روی وب میدیدم که افراد زیادی در انجام اونها مشارکت دارند و جالب اینکه هر کدوم از این افراد در یک نقطه کره زمین زندگی میکنند، بیشتر متعجب میشدم.
پاسخ به سوالات و مشکلات مطرح شده در بالا مبحثی است که در ادامه به آن خواهیم پرداخت.
از وقتی که با مفهومی به نام “سیستم کنترل نسخه” و نرم افزار Subversion آشنا شدم به تمام سوالاتم پاسخ داده شد. و به قول آقای بیژن هومند در [این مقاله] : “بعد از یکبار نصب subversion و کار کردن با آن و عادت کردن به این محیط، مطمئن باشید که این سوال را بارها از خود خواهید پرسید که من تا بحال چگونه بدون آن کار میکردم؟!”سیستم کنترل نسخه (Version Control System یا همون VCS) سیستمیه که بر روی فایلهای پروژه مدیریت میکنه و هرگونه تغییراتی در فایلهای پروژه اعم از ایجاد، حذف و یا تغییر رو به طور دقیق ثبت میکنه .
برنامه های زیادی در این زمینه وجود دارند که از معروف ترین اونها میشه به Subversion یا اختصاراً SVN محصول شرکت CollabNet اشاره کرد که از سایتش به صورت رایگان قابل دریافت و نصب است. subversion قابلیت نصب بر روی هر سیستمی که Apache بر روی آن نصب میگردد را داراست. در [اینجا] یک لیست کامل از اینگونه نرم افزارها رو میتونید مشاهده کنید.
این برنامه امکان مدیریت کامل بر روی فایلهای پروژه رو همراه با ثبت نام ویرایش کننده و تاریخ ویرایش رو فراهم می آوره و کلیه تغییرات رو یک بانک اطلاعاتی قوی ذخیره میکنه به طوری که در هر لحظه میشه پروژه رو به حالتی که مثلا چندین روز و یا سال پیش به اون شکل بوده درآورد و این خیلی فوق العادست! سایت wikipedia هم در مورد مقالات درست همین عمل رو انجام میده، یعنی درسته که مقالات به صورت آزاد قرار گرفته اند و هر شخصی میتونه اونها رو ویرایش کنه اما کلیه تغییرات ثبت میشه و لازم نیست نگران از بین رفتن اطلاعات بود. ضمناً اینکه از واژه “پروژه” استفاده میکنم ببه این دلیله که هیچ محدودیتی در نوع پروژه وجود نداره و حتی در مورد پروژه های صوتی، تصویری و… هم میشه از این سیستم استفاده کرد که احتمالاً تنها نرم افزارهای مروبطه فرق دارند.
بد نیست کمی در مورد روش کار اینگونه سیستمها صحبت کنم. در اغلب این سیستم ها که نرم افزار subversion هم از اون استفاده میکنه، بدین ترتیب عمل میشه که یک مخزن جهت نگهداری فایلهای پروژه درنظر گرفته میشه. این مخزن بر روی سرور اصلی قرار گرفته که در پروژه های گروهی هر شخص اطلاعات مخزن رو میخونه اصطلاحاً checkout میکنه. با اینکار یک نسخه از کلیه اطلاعات مخزن به سیستمش منتقل میشن و هر تغییری که دلش بخواد بر روی اون اطلاعات میده و سپس اونها رو به مخزن برمیگردونه اصطلاحاً commit میکنه. در صورتی که در این فاصله فایل توسط شخص دیگری تغییر کرده باشه به کاربر هشدار میده و کلاً درمورد تغییرات فایلها بسیار هوشمند عمل میکنه، مثلا میتونه متوجه بشه کاربران کدوم خطوط رو ویرایش کردند و تا حد امکان خودش فایلها رو ادغام میکنه …
یکی از نرم افزارهایی که جهت کار با subversion محیط گرافیکی GUI بسیار خوب و قوی در اختیار کاربر قرار میده TortoiseSVN است که به صورت رایگان قابل دریافت و نصب است. این نرم افزار تنها تحت ویندوزه و برای لینوکس میشه از RapidSVN استفاده کرد. احتمالاً موقع نصب Visual Studio با گزینه Source Safe برخورد کردید، این نرم افزار هم جزو همین دسته است.
در پایان توجهتون رو به مقاله فارسی ۹ قسمتی آقای “بیژن هومند” تحت عنوان “آشنایی با Subversion” جلب میکنم:
[بخش نخست: pdf html] [بخش دوم: pdf html] [بخش سوم: pdf html] [بخش چهارم: pdf html] [بخش پنجم: pdf html] [بخش ششم: pdf html] [بخش هفتم: pdf html] [بخش هشتم: pdf html] [بخش پایانی: pdf html]
اگر فقط دو بخش اول این مقاله رو بخونید با پی بردن به قابلیت ها و مزایای subversion ، شک ندارم تا انتهای مقاله رو دنبال میکنید و با من هم عقیده میشید که وجود اون برای ما برنامه نویسا و الاخصوص PHP کاران مخصوصاً اگر کار گروهی باشه یک ضرورته.
- ساب ورژن + SubVersion – برنامه نویسی گروهی
منبع : freedom

