نوشته هایی پیرامون برنامه نویسی و طراحی وب

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

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

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

خوب، آیا در مورد اینکه فراخوانی های سیستمی چطور در لینوکس کار میکند کنجکاو هستید؟ آیا میخواهید نحوه ردگیری فراخوانی های سیستمی را یاد بگیرد؟ آیا کنجاوید که کدام فراخوانی های سیستمی باید مانیتور شوند و چرا؟

پس به خواندن متن ادامه دهید، این مطلب برای شماست.

۰ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

خودکار کردن فرآیند طراحی ظاهر وب سایت با استفاده از grunt.js

مشکل !

کارکردن روی چندین پروژه و محصول مرتبط با رابط کاربری و ظاهر وب سایت در چندین ماه گذشته، باعث شد که تصمیم بگیرم فرآیند توسعه front-end را در این پروژه ها بهینه کنم. قبلا در مورد فریمورکهایی مانند Bootstrap و پیش پردازشگرهای CSS مثل SASS و اینکه چگونه میتوانند سرعت ایجاد سایتهای زیبا و responsive را به نسبت روشهای سنتی انجام این کارها افزایش دهند، صحبت کرده بودم.

تا وقتی که روی پروژه های انفرادی کار می کردم استفاده از این فریمورک ها خوب جواب میداد، اما مشکل در هنگام کار با اعضای یک تیم، در جایی که درک مشترکی از این ابزارها وجود نداشت، نمایان شد. تداخل ها بوجود آمدند و واقعا زمان زیادی از من صرف یکسان سازی و ادغام این تفاوتها شد.

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

راه حل

Grunt.js وارد می شود! اخیرا یک اسکرین کست در مورد نکات CSS از Chris Coyier تماشا میکردم که در آن از فرآیند توسعه خود برپایه Jekyll, Grunt, SASS و SVG صحبت میکرد. ناگهان فهمیدم که Grunt پاسخ مشکل من است. 

۲ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

دیباگ کردن یک اپلیکیشن Flask با استفاده از PyCharm

پیش فرض :

پیش فرض ما این است که شما با زبان برنامه  نویسی Python و فریمورک Flask آشنایی دارید. همچنین از محیط PyCharm برای برنامه نویسی پروژه های تحت پایتون خود استفاده می کنید.

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

PyCharm

PyCharm یک IDE (محیط برنامه نویسی مجتمع) برای توسعه برنامه های تحت Python هست که توسط شرکت JetBrains نوشته شده. اگر از ویژوال استدیو استفاده میکنید حتما با پلاگین Resharper محصول این شرکت آشنایی دارد. در این آموزش من از نسخه comuinty این نرم افزار که رایگان و اپن سورس هست استفاده خواهم کرد.

محیط توسعه PyCharm این قابلیت رو دارد که کد برنامتون رو به پروسسهای در حال اجرا ضمیمه (Attach) کنید. به کمک این قابلیت میتونید روی کد breakpoint بذارید و برنامه رو دیباگ کنید.

مشکل کجاست؟

مشکل از اینجا شروع میشه که میخواهید برنامه تحت Flask خودتون رو دیباگ کنید. خود Flask یک دیباگر داره و میشه از خروجی اون برای دیباگ کردن کد استفاده کرد اما کار کردن با این دیباگر یه مقداری آزاردهنده ( حداقل برای من) است. خوب راه حل اینه که کد پروژه در حال اجرای خودتون را به پروسس در حال اجرای Python که داره اپلیکیشن فلسک رو اجرا میکنه ضمیمه کنید. این کار میتونید از منوی Tools>Attach To Proccess انجام بدهید. اما این کار در مورد برنامه های فلسک جواب نمیده.

چکار باید کرد؟

اولین گام برای اینکه فرآیند Attach کردن کد به پروسس به درستی انجام بشه اینه که PyCharm رو با دسترسی root اجرا کنید. برای این کار میتونید از دستور gksudo استفاده کنید.

۱ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

بازگشت به مبانی : توابع بی نام و بستارها

توابع بی نام و بستارها (closures) مفاهیم مفیدی هستند که در بیشتر زبانهای برنامه نویسی مدرن استفاده می شوند. مثل بسیاری دیگر از اجزای زبانهای برنامه نویسی مدرن بستارها ریشه در زبان برنامه نویسی لیسپ دارند.

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

ابتدا نگاهی به توابع بی نام می اندازیم. یک تابع بی نام به برنامه نویس اجازه می دهد تا تابعی ایجاد نماید که نام  ندارد. به عبارت دیگر یک تابع بی نام برای نگه داشتن جزئی از عملکرد در یک متغیر و پاس دادن آن به عملکرد حول خودش استفاده می شود. با هم به مثالی از توابع بی نام در روبی و جاوااسکریپت نگاهی می اندازیم:

۰ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

پیاده سازی رابط برنامه نویسی وب با استفاده از پایتون و فلسک

مقدمه

برای شروع :

sudo pip install flask

فرض ما بر این است که شما با مبانی REST آشنا هستید.

Flask یک میکروفریمورک پایتون بر مبنای Werkzeug (یک کتابخانه ابزار WSGI) می باشد.

Flask انتخاب خوبی برای یک REST API می باشد زیرا :

  • به زبان پایتون نوشته شده است
  • استفاده راحتی دارد
  • انعطاف پذیر است
  • چندین راهکار مختلف برای پیاده سازی دارد
  • دارای تجزیه request مبتنی بر REST است

من معمولا از curl برای تست تقاضاها روی سرور استفاده میکنم. انتخاب خوب دیگر در این زمینه REST Console برای Google Chrome است.

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

۱ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

طراحی رابط برنامه نویسی وب (Web API) مبتنی بر REST

مبتنی بر REST فکر کنید

اگر این مقاله را میخوانید، احتمالا در مورد طراحی رابطهای برنامه نویسی حساس هستید و دوست دارید از اصول طراحی اثبات شده در طراحی Web API خود استفاده کنید.

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

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

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

۶ نظر موافقین ۰ مخالفین ۰
بهنام ایزدی

یک مدل موفق از کنترل ورژن با Git

git branching model

چرا گیت؟

جنگ شدیدی بین توسعه دهندگان نرم افزار در مورد نرم افزارهای کنترل ورژن برقرار است. به عنوان یک برنامه نویس من Git را به همه آنها ترجیح میدهم. Git روش برنامه نویسان را در مورد ادغام و شاخه بندی تغییر داد. در دنیای کلاسیک نرم افزاری های کنترل ورژن (CVS/Subversion) که من از آن می آیم ادغام و شاخه بندی ( merging/branching) کار ترسناکی محسوب میشود و چیزی نیست که بخواهید هر روز انجام دهید.

اما با گیت این اعمال با گیت بسیار ساده و ارزان خواهند بود و واقعا به عنوان فرآیند روزانه کاری شما بدل خواهند شد. در کتابهای CVS , Subversion شاخه بندی و ادغام در فصل های آخر کتاب بحث میشود اما در هرکتاب گیت بحث در این مورد از فصل سوم شروع میشود.

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

۲ نظر موافقین ۱ مخالفین ۰
بهنام ایزدی