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

چگونه یک سیستم پس زمینه (backend) شبیه نقشه UBER با ماشینهای متحرک بوسیله زبان Go درست کردیم!

شروع

داستان در سال 2015 با پروژه پایانی توسعه دهنده موبایل ما شروع شد. موضوع پروژه "سامانه سرویس تاکسی" بود. در این برنامه ماشینها بصورت متحرک بودند.

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

چگونه از هوکهای گیت برای اتوماتیک کردن فرایند توسعه و پیاده سازی وب سایت استفاده کنیم - قسمت دوم

در این مثال، روش بهتری برای به روز رسانی سرور  واقعی در حال کار نشان می دهیم. این کار را بوسیله مدل push-to-deploy انجام میدهیم به اینصورت که هر زمان تغییرات به مخزن سرور اعمال (push) شدند، سرور بروزرسانی شود.
می توانیم از از همان سروری که برای توسعه کد استفاده میکنیم برای این کار استفاده کنیم. این سروری خواهد بود که کدمان را روی آن می نویسیم. بعد از هر کامیت قادر خواهیم بود که تغییرات اعمال شده را ببینیم.

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

چگونه از هوکهای گیت برای اتوماتیک کردن فرایند توسعه و پیاده سازی وب سایت استفاده کنیم

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

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

در عین اینکه مجموعه ابزارهای git ویژگیهای کاملی را ارایه میدهند یکی از مفیدترین ویژگیهای git انعطاف پذیری آن است. 

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

در این راهنما ما ایده hooks را بررسی میکنیم و  کدی را نشان خواهیم داد که به شما در اتوماتیک کردن کارها در سیستم منحصر به خودتان کمک خواهد کرد.

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

آموزش ساخت ساب دامین (زیردامنه) بصورت داینامیک با پی اچ پی و آپاچی

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

فرض کنید که یک سایت دارید و میخواهید کاربرانتون با آدرسی شبیه user1.example.com به سایت شما دسترسی داشته باشند. یعنی هر کاربر یک زیردامنه. به عنوان مثال صفحه مختص کاربر2 داری آدرس user2.example.com باشه. راه اول اینه که یک ویرچوال هاست (ٰVirtualHost) در فایل تنظیمات آپاچی برای کاربر درست کنید که هر زیردامنه را به صفحه اختصاصی آن ریداریکت کند. مشکل این راه حل احمقانه این است که شما نمیتوانید برای هر کاربر این کار را انجام دهید. اگر جزو کسانی هستید که اعتقاد دارید میتوانید بصورت دستی برای همه کاربرانتان این کار را انجام دهید از خواندن بقیه مقاله منصرف شوید.

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

راهنمای سریع و ساده گیت - git

ایجاد یک مخزن جدید

یک پوشه جدید ایجاد کنید وارد آن شوید و دستور
git init
را برای ایجاد یک مخزن جدید گیت اجرا نمایید.

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

چگونه ما در Pinterest داده های خود را تکه تکه کردیم!

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

قبل از اینکه به نحوه تکه تکه کردن داده هایمان بحث کنیم اجازه دهید کمی در مورد ماهیت داده هایمان صحبت کنیم.

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

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

دیتابیس توزیع شده خودتان را بسازید

اولین دیتابیس توزیع شده ای که با آن کار کردم CSPIT نام داشت. پروژه بوسیله یک معمار خبره رهبری می شد و چند نفر از باهوش ترین برنامه نویسانی که در آمازون می شناختم در آن بودند.

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

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

چیزی به عنوان plain text وجود ندارد!

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

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

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

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

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

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

استفاده از پایگاه داده MySQL در برنامه های Python

موضوع این مقاله استفاده از پایگاه داده MySQL در زبان برنامه نویسی پایتون است و مبانی برنامه نویسی MySQL در پایتون را پوشش می دهد. در این مقاله از ماژول MySQLdb استفاده خواهیم کرد. مثالها در لینوکس توزیع اوبونتو ایجاد و تست شده اند.

درباره پایگاه داده MySQL

MySQL از پیشروان سیستمهای مدیریت پایگاه داده اپن سورس می باشد. MySQL یک سیستم مدیریت پایگاه داده چند کاربره و چند رشته ای می باشد و بصورت خاص در وب محبوب می باشد. این پایگاه داده یکی از اجزای هر پلتفرم LAMP متشکل از لینوکس، آپاچی، مای سیکوئل و پی اچ پی می باشد. در حال حاضر کمپانی Oracle صاحب این محصول می باشد. این پایگاه داده روی اکثر سیستمهای عامل در دسترس می باشد و روی یونیکس BSD، لینوکس، ویندوز و مک اجرا می شود. ویکی پدیا و یوتوب از MySQL استفاده میکنند. این سایتها میلیون ها کوئری را در هر روز مدیریت می کنند. مای سی کوئل در دو نسخه عرضه می شود: MySQL server و MySQL embeded.

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