بایگانی برچسب: s

اقتصاد API محور – چگونه Wrapper ها ما را به کشتن خواهند داد؟

مدت زیادی می‌شد که هرجا برای جذب سرمایه یا حتی حمایتی برای پلتفرم هوش مصنوعی مانی می‌رفتم، سوال اصلی این بود «چرا یک API از دالی یا میدجرنی نمی‌گیری خودتو راحت کنی؟» و حتی با این که خیلی هم حرف بی‌راهی نیست و تولیدکننده تصویر چیز خاصی نیست که بابت دیتا بخواهیم نگرانی بزرگی داشته باشیم، پاسخ‌های متعددی می‌دادم.

و خب طبیعیه که در طی چند سال گذشته سرویس‌های زیادی مانند اول‌ای‌آی اومدند که به شما امکان ساخت wrapper روی APIهای مدل‌های زبانی و تصویری متعددی رو میدن. در این مطلب، میخواهیم یک بررسی جامعه داشته باشیم که چرا این API wrapper ها می‌تونن ما و کسب و کارمون رو به ته دره هدایت کنند 🙂

اصلا API Wrapper یعنی چی؟

در دنیای هوش مصنوعی ما دو تا راه داریم که یک محصول بسازیم. تقریبا میشه گفت بسته به شرایط، یکی می‌تونه نسبت به اون یکی برتری داشته باشه اما در این مطلب، میخواهیم ببینیم که «معایب» ساخت API Wrapper چیه. به همین خاطر اول به این پرسش باید پاسخ داد که «اصلا API Wrapper یعنی چی؟»

فعل wrap در زبان انگلیسی یعنی چیزی که به چیز دیگر احاطه پیدا می‌کنه و اون رو می‌پوشونه. یعنی ما ابزاری بسازیم که در واقع فقط فرانت‌اند یک API معروف (مثل OpenAI) باشه.

حالا خیلی‌ها این API رو مستقیم از OpenAI یا DeepSeek یا MiniMax تهیه می‌کنند، یا از واسطه‌های خارجی مثل UseAPI و OpenRouter و یا این که از واسطه داخلی مثل اول‌ای‌آی و لیارا.

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

چرا ساخت API Wrapper ایده خوبی نیست؟

در اینجا مواردی رو میارم که ساخت API Wrapper ایده خوبی نیست. شاید در پستی در آینده، مواردی رو برشمردم که اتفاقا می‌تونه ایده خوبی هم باشه.

در حال حاضر، تمرکز ما روی اون دوستانیه که با API دمو می‌کنند و مدعی میشن مدل خودشونه و این داستانا که اتفاقا عمدتا هم وقتی به سیستم‌های Air Gap یا لوکال میان، تازه مشخص میشه دموشون چقدر دروغ و دغل بوده.

خلاقیت رو ازمون می‌گیره

اولین و شاید مهم‌ترین بخش استفاده از APIها دقیقا اینه که خلاقیت ما رو می‌گیره. مثلا در نسخه‌های اولیه مانی، یک جا روشی که «میدجرنی» برای تولید عکس پیش می‌گرفت رو برای ساخت تصویر با کمک مدل خودمون تست کردم و نتیجه‌ش رو می‌تونید از این لینک مطالعه کنید.

اینجا، اگر خودم دست به Google Colab و Stable Diffusion نمی‌بردم، قاعدتا امکان این که بتونم پروسه میدجرنی رو تا حد زیادی مهندسی معکوس کنم، وجود نداشت.

جریان داده دست خودمون نیست

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

یا اگر هم سراغ API ها می‌رین، برید سراغ خود تامین‌کننده‌های رسمی. به جز خود OpenAI و Anthropic و DeepSeek معمولا Open Router و Together AI هم جزء تامین‌کنندگان رسمی مدل‌های زبانی هستند. همچنین Fal AI, Runware و Replicate هم جزء تامین‌کنندگان رسمی مدل‌های ویدئویی و تصویری هستند و می‌تونید از این دوستان هم API رو تهیه کنید.

آفلاین نیست

آخرین و شاید یکی از مهم‌ترین ارکان APIها – بخصوص برای مایی که در ایران زندگی می‌کنیم – این موضوعه. این موضوع یک عیب بزرگه و خب میشه با ابزارهایی مانند Ollama تا حدی از پسش بر اومد.

چطور ممکنه API Wrapper به کشتنمون بده؟

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

  • تعطیلی ارائه‌دهنده
  • قطع و وصل شدن API (چیزی که بخصوص در APIهای واسط مثل اول‌ای‌آی کاملا پیش میاد)
  • هک شدن API و لو رفتن دیتا
  • ارسال دیتا به واسطه‌هایی که ازشون مطمئن نیستیم
  • عدم کنترل روی محصول وقتی اینترنت با مشکل مواجه می‌شه.

ممکنه مشکلات دیگری هم در میان باشه، اگر شما هم چیزی به ذهنتون رسید می‌تونید همینجا در بخش نظرات بهم بگید.

جمع‌بندی

در کل API Wrapper نوشتن برای پروژه‌های عام‌منظوره، کار عجیب و بدی نیست و خب هزینه خروج و شکست رو به وضوح کمتر می‌کنه، در حالی که برای انجام کار جدی و حساس، گزینه مناسبی نیست. اگر هرکدوم از معایبی که برشمرده شد رو تونستید برطرف کنید، احتمالا گزینه مناسبی برای شما، پروژه یا کسب و کارتونه؛ در غیر اینصورت باید کمی Local تر فکر کنید.

در نهایت، ازتون ممنونم که وقت گذاشتید و این مطلب رو خوندید. باز هم اگر نظر و پیشنهادی پیرامونش داشتید، ممنون میشم در بخش نظرات همین بلاگ یا بخش گفتگوی کانال تلگرام به من بگید.

Share

یک تخم مرغ اضافه کن: رساله‌ای در باب اثر IKEA

احتمالا شما هم در دهه هشتاد شمسی، تبلیغ معروف تلویزیونی «به همین سادگی، به همین خوشمزگی، پودر کیک رشد» رو یادتون باشه. پودرهای کیک آماده، یکی از اختراعات جالب بشر بودند که هنوز هم فکر کردن بهشون برای من شخصا جالبه. اما موضوعی که وجود داره، اینه که این پودرها، باعث شدند مفهومی به اسم اثر IKEA یا IKEA Effect به وجود بیاد.

در این مقاله، قصد دارم که ربط پودر کیک آماده به آیکیا رو توضیح بدم و بگم که چرا مهمه که از اثر آیکیا در تولید محصول استفاده کنیم و در نهایت هم یک نمونه خیلی خوبی از اثر آیکیا رو با هم نظاره‌گر خواهیم بود.

پودر کیک آماده: مردها هم آشپزی می‌کنند!

در سال ۱۹۳۰ میلادی شرکتی با نام Duff and Sons محصولی به بازار ارائه کرد. پودر کیک آماده! این محصول با شعار مردها هم آشپزی می‌کنند سعی داشت بگه در حدی کار پختن کیک رو ساده کرده که آقایون هم می‌تونن صرفا با اضافه کردن آب یا شیر به این پودر و قرار دادنش در فر، کیک بپزند.

اما یک مشکلی به مدت دو دهه، گریبان این محصول رو گرفت. نه فقط شرکت Duff and Sons بلکه هر شرکت دیگری که پودر کیک تولید می‌کرد، چنین معضلی رو باهاش روبرو بود. نمی‌تونستند بفروشند.

اما چرا یک محصولی که همه جوره کامل بود نمی‌تونست بفروشه؟ آیا مساله اعتماد بود؟ آیا مساله کیفیت بود؟ نه. اتفاقا مشتریان هرچند اندک این شرکت‌ها، از کیفیت کیکی که به دست می‌آوردند راضی بودند و کاملا به تولیدکننده اعتماد می‌کردند.

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

یک تخم مرغ اضافه کنید!

بالاخره بعد از دو دهه که محصول «پودر کیک آماده» در بازار موجود بود، شرکتی به نام Betty Crocker اومد و یک ایده بهتری داد. این‌ها گفتند که چطوره خود مشتری هم بخشی از پروسه تولید کیک بشه؟

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

همین هک ساده، باعث افزایش چند برابری فروش این محصول شد. اما حالا ربطش به آیکیا چیه؟ بهتره یه بررسی روی آیکیا داشته باشیم!

آیکیا: کسب و کار اضافه کردن تخم مرغ به پودر کیک

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

هرچیزی که ازش می‌خرید رو خودتون باید سر هم کنید.

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

اما چرا این موضوع «سرهم کردن کتابخونه توسط خودمون» خیلی مهمه؟ چون داره مشتری رو وارد پروسه تولید می‌کنه و این یعنی فروش حس به مشتری.

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

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

اثر آیکیا در خدمت تکنولوژی

قبل از این که بخوام از نمونه‌های عملی اثر آیکیا در تکنولوژی صحبت کنم، لازمه ذکر کنم خود آیکیا، از اثر آیکیا در تکنولوژی استفاده کرده. چطور؟ خیلی ساده‌ست.

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

اما در یک سال اخیر، ابزارهای جالبی مثل Bolt یا v0 دیدیم. این ابزارها هم در واقع همین اثر آیکیا رو دارند در زمینه برنامه‌نویسی و تولید نرم‌افزار پیاده‌سازی می‌کنند.

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

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

جمع‌بندی

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

ضمنا در حال حاضر که بحث اتوماسین و ایجنت‌ها داغه، لازمه بگم که یک دوره n8n ضبط کردم که از طریق آکادمی نُد در دسترسه و به صورت هفتگی هم آپدیت روی اون میاد. اگر علاقمندید می‌تونید در این دوره هم شرکت کنید.

در پایان امیدوارم موفق و موید باشید و از خیزش ربات‌ها هم نترسید 🙂

Share

خانواده‌ مدل‌های زبانی Xei برای اجرای روی دستگاه شما آمده‌است!

مدتی پیش، پروژه‌های مختلفی مثل مارال یا جبیر رو با هدف انتشار و ساخت یک مدل زبانی بزرگ با همون LLM (مخفف Large Language Model) شروع کرده بودم اما بحث این مدل‌ها و شاید همزمان شدن انتشار این‌ها با نسخه‌های جدیدی از پلتفرم‌های مانی و آتلیه، کمی باعث شده بود که از هدف اصلی دور بشیم.

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

اما هرمز شد بخشی از یک پروژه بزرگتر، چرا که کمی دقت به بزرگان این حوزه، نشون از این بود که تقریبا همه شرکت‌های خوب و موفق در این حوزه، به جای این که «یک مدل» منتشر کنند «یک خانواده مدل» منتشر کردند که خب باید از این قضیه تا حدی الگوگیری می‌شد.

تصمیم به ساخت یک خانواده از مدل‌ها

از تولیدکنندگان بزرگ و تجاری مدل‌های جنریتیو که بگذریم، بسیاری از شرکت‌هایی که مدل‌های اوپن سورس تولید می‌کنن و نام‌داران این عرصه هم هستند (مثل Alibaba Cloud, DeepSeek, Mistral و حتی Meta) عموما به یک عدد مدل کفایت نمی‌کنند.

مدل‌هایی که این شرکت‌ها تولید می‌کنند عموما در یک «خانواده» قرار داره و این خانواده هم بر اساس تعداد پارامتر، توانایی استنتاج (یا همون Reasoning) توانایی بینایی ماشین (یا همون vision) و …، تعیین می‌شن. برای مثال یکی از مدل‌های معروف این حوزه که LLaMA نام داره و توسط شرکت متا ساخته شده، معمولا در یک نمونه کوچک (۷ یا ۸ میلیارد پارامتری)، یک نمونه متوسط (۱۱ یا ۱۳ پارامتری) و نمونه‌های بزرگ (۷۰ میلیارد پارامتر و بیشتر) تولید میشه.

اما خب یک مورد دیگری هم که به چشمم خورد، کاری بود که DeepSeek با R1 کرده بود. در واقع اومده بودن مدل‌های کوچکتر (از یک و نیم میلیارد تا هفتاد میلیارد پارامتر) رو با روش Distillation درست کرده بودند.

در واقع مدل‌هایی مثل LLaMA, Qwen, Mistral و … رو با داده‌هایی که از مدل دیپ‌سیک ۶۷۱ میلیارد پارامتری به دست آورده بودند، مجدد آموزش دادند که در اختیار افراد بیشتری قرار بگیره.

همین موضوع، باعث شد که به این فکر بیفتیم که در سال ۱۴۰۴ به جای این که هفته‌ای یک LLM ریلیز کنیم 😁 یک خونواده خوب از LLMها برای تمام فصول ریلیز کنیم که باز هم از DeepSeek V3 و ترین‌ کردن QLoRA و مرج کردن روی اون شروع شد.

اسم Xei از کجا میاد؟

پیش از این که بخواهیم در مورد خود مدل‌ها و روش اجراشون صحبت کنیم، کمی در مورد اسم توضیح بدم.

ریاضیدانان ایرانی مثل خوارزمی، موقعی که معادلات خاصی رو حل می‌کردند از عبارت «شیء» بعنوان مجهول استفاده می‌کردند. وقتی اروپایی‌ها آثار این دانشمندان رو به زبان‌های خودشون ترجمه کردند، درک کردند که این «شیء» در واقع مجهوله و به جای این که Object (یا چیزی معادلش) ترجمه‌ش کنند، برای حفظ حالت مجهولش از عبارت xei استفاده کردند که بعدا شد xای که در معادلات مختلف استفاده می‌کنیم.

یکی از دلایل این اسم، اینه که هم تلفظش برای داخلی‌ها راحته هم خارجی‌ها و هم یک بکگراند جالب ایرانی داره.

اما حالا مدل‌ها چی هستند؟ چرا انقدر این خونواده از مدل‌ها مهم بود؟

اهمیت خانواده مدل Xei

یکی از دلایل اصلی ساخته شدن Xei این بود که این مدل‌ها بتونن هم روی دستگاه‌های کاربر نهایی مثل من و شما اجرا شن هم روی زیرساخت‌های بزرگ و صنعتی.

در واقع هم تعدادی مدل On Device داشته باشیم و هم تعداد زیادی مدل برای استفاده Enterprise و به همین خاطر ۷ تا مدل در این خونواده، قرار گرفته که در ادامه بررسی می‌کنیم.

مدل‌های Xei

  • مدل ۰.۱ میلیارد پارامتری، مبتنی بر لاماست و صرفا زبان انگلیسی می‌فهمه و می‌تونه در کارهایی مثل کدنویسی به شما کمک کنه.
  • مدل ۰.۵ میلیارد پارامتری، مبتنی بر Qwen ساخته شده. با این که از دیتای چندزبانی درش استفاده شده ولی بهترین عملکرد رو روی انگلیسی داره و همچنان برای کارهایی مثل کدنویسی و نوشتن ایمیل، مناسبه.
  • مدل ۲ میلیارد پارامتری که مبتنی بر Gemma 2 ساخته شده و محمد شجاعی عزیز زحمت ساختش رو کشیده، اولین مدلیه که به خوبی فارسی رو درک می‌کنه و می‌تونه به زبان فارسی به شما پاسخ‌های درست بده.
  • مدل ۸ میلیارد پارامتری که در واقع همون هرمز قدیمی خودمونه و مبتنی بر Command-R از Cohere ساخته شده.
  • مدل ۳۲ میلیارد پارامتری که باز هم مبتنی بر Command-R ساخته شده و نتایج بهتر و دقیق‌تری می‌تونه تولید کنه.
  • مدل ۱۰۰ میلیارد پارامتری که باز هم مبتنی بر Command-R ساخته شده 😁
  • و در نهایت مدل ۶۷۱ میلیارد پارامتری که مبتنی بر DeepSeek V3 ساخته شده و از معماری MoE بهره می‌بره.

و خب همونطوری که می‌بینید، تا مدل ۸ میلیارد پارامتری به سادگی روی اکثر رایانه‌های شخصی حتی بدون کارت گرافیک NVIDIA قابل اجراست ولی نمونه ۳۲ و ۱۰۰ و ۶۷۱ نیاز به منابع بیشتری دارند که در ادامه به اون‌ها هم می‌پردازیم.

چطوری به Xei دسترسی پیدا کنیم؟

اگر می‌خواهید مستقیما به سمت مدل ۶۷۱ میلیارد پارامتری بریم، کافیه که به این سرویس برید، یک حساب کاربری بسازید و شروع به چت کنید.

ولی اگر دوست دارید که این مدل رو روی سیستم شخصی خودتون اجرا کنید، می‌تونید از کتابخونه Ollama نسخه مناسب رو دانلود کنید (با کارت ۲۰۵۰ تا مدل ۳۲ میلیاردی قابل اجراست، گرچه بهترین نتیجه مربوط به همون ۸ میلیاردیه).

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

جمع‌بندی و سخن آخر

در حال حاضر، پروژه Xei بعنوان یکی از پرچم‌داران مجموعه مانی که تحت برند Aqua Regia فعالیت می‌کنه قراره مدتها آخرین و مهم‌ترین پروژه ما باشه. از همین رو، پست بلاگ مربوط بهش هم زود نوشته شد تا این که بتونیم روی اون مانور لازم رو بدیم.

اما کل داستان این نیست و به زودی با سورپرایزهای جدید‌تری، در خدمت شما خواهیم بود. امیدوارم تا اون موقع با Xei کارهای خفنی کرده باشید 😎

Share

با موسیقا، رویای خود را بنوازید!

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

موسیقا، پلتفرمی مبتنی بر تکنولوژی هوش مصنوعی زایا یا Generative AI است که به شما کمک می‌کند تا آنچه در ذهن دارید را با چند کلیک، به موسیقی آن هم در ژانرهای مختلف مانند امبینت، الکترونیک، پاپ و … تبدیل کنید.

نحوه استفاده از موسیقا

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

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

پس از دانلود مدل، یکی از پرامپت‌ها (داخل کادرهای زردرنگ) را انتخاب کرده و یا پرامپت مورد نظر خود را نوشته، سپس دکمه Let’s Party را بفشارید.

بسته به سخت‌افزار خود، صبر کنید تا موسیقی مورد نظرتان تولید شود!

نمونه موسیقی تولید‌شده با موسیقا

حامیان پروژه

شرکت محترم ایران‌سرور، از نیمه دوم سال ۱۴۰۲ هجری خورشیدی، با تامین زیرساخت برای پروژه‌های مانی، وکنتور و موسیقا به نخستین و بزرگترین حامی این استارتاپ تبدیل شده است.

همچنین، مفتخریم اعلام کنیم که برای تامین زیرساخت پروژه‌های دانشجویی شما نیز، آماده ارائه سرویس‌های نوت‌بوک با GPU با همکاری ایران‌سرور هستیم.

Share

مصاحبه با محمدرضا حقیری، مهندس هوش مصنوعی – ابزارهای هوش مصنوعی ما را به جهانی هل می‌دهند که مردم در آن هوشمندانه‌تر کار می‌کنند، نه سخت‌تر

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

مصاحبه با محمدرضا حقیری، مهندس هوش مصنوعی

ما با محمدرضا حقیری، توسعه‌دهنده‌ای از ایران که هم‌اکنون مشغول کار بر روی یک مدل متن به تصویر متن‌باز به نام مانی است، صحبت کردیم.

او دانشش درباره فناوری‌هایی که برای توسعه این مدل استفاده کرده را با ما به اشتراک گذاشته است. هوش مصنوعی چندمدلی او، از Stable Diffusion و Dream Booth استفاده می‌کند.

برای درک بهتر مطلب، مثل همون متن اصلی، سوالات و نظرات اون‌ها رو بولد و پاسخ‌های خودم رو عادی نوشتم.

لطفا خودت رو برای خوانندگان ما معرفی کن. چه کارهایی کردی که به اینجا رسیدی؟ و چطور؟

من محمدرضا حقیری هستم، متولد ۹ خرداد ۱۳۷۵ (۳۰ می ۱۹۹۶) در تهران، ایران. من همیشه علاقه وافری به ساختن چیزهای مختلف داشتم و این علاقه در حوزه علوم کامپیوتر بیشتر و بیشتر شد. در سن ۱۲ سالگی برنامه‌نویسی رو شروع کردم و اولین زبانی که یادگرفتم هم ویژوال‌بیسیک ۶ بود. یادمه اولین برنامه‌ای که نوشتم، ماشین حسابی بود که فشاری که یک جرم به سطح وارد می‌کنه رو محاسبه می‌کرد.

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

اواخر ۲۰۲۱ و اوایل ۲۰۲۲ بود که مفهوم «هوش مصنوعی مولد» و «هنر تولیدشده توسط هوش مصنوعی» رو شناختم و همونطوری که می‌تونی حدس بزنی، عاشقش شدم 😁 به همین خاطر هم مطالعاتم جدی‌تر شدند و سعی کردم مدل خودم رو در قالب یک استارتاپ توسعه بدم تا بتونم اون چیزی که در ذهن دارم رو تولید کنم.

در حال حاضر روی مدل متن به تصویری به اسم Mann-E کار می‌کنی. می‌تونی یکم در موردش توضیح بدی و بگی چطور کار می‌کنه؟

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

هدف اصلی توسعه مانی ساده‌ست، من نمی‌خوام مردم ایده‌ها و احساسات هنرمندانه‌شون رو در ذهنشون نگه دارند. ما در حال حاضر در دنیای «سیل اطلاعات» زندگی می‌کنیم. ذهن‌های ما هرلحظه با دنیایی از اطلاعات روبرو میشن و من باور دارم که داشتن ابزارهای هوش مصنوعی که کمکمون کنند تا افکار و ایده‌هامون رو در قالب عکس و نقاشی داشته باشیم، می‌تونه کمی به آرامشمان کمک کنه.

اگر دوست دارید بدونید چطور می‌تونید از مانی استفاده کنید، می‌تونید به گیتهاب من مراجعه کنید. یک دفترچه یادداشت جوپیتر اونجا هست که می‌تونه به Google Colab وارد بشه. حجم زیادی از کد هم از دید کاربر مخفی شده که حسی مشابه Midjourney یا Dall-E داشته باشه.

تو وبلاگت اشاره کردی که مدل بر مبنای Stable Diffusion ساخته شده. چه فناوری‌هایی برای این هوش مصنوعی استفاده کردی؟

این چیزیه که من بهش میگم «سوال مورد علاقه‌م». می‌تونم ساعت‌ها در مورد فناوری‌هایی که استفاده کردم، صحبت کنم. اول بذارید یک تاریخچه‌ای براتون بگم. وقتی اکثر تولیدکنندگان تصویر خوب «آزاد» نبودند (در مصاحبه گفتم free و ظاهرا یادم رفته مشخص کنم free as in freedom) تنها پایه و مبنای خوب برای یک تولیدکننده اثر هنری با کمک هوش مصنوعی VQGAN بود. یادمه که اگر نتایجش رو با CLIP ترکیب می‌کردی می‌تونست نتایج خوبی ارائه بده. در واقع این یک بازی انکودر-دیکودر بین دوتا مدل هوش مصنوعی بود.

ولی به قدر کافی خوشحال‌کننده نبود، مخصوصا این که midjourney در همون نسخه‌ها هم تصاویری تولید می‌کرد که انگار همین الان از ذهن یک هنرمند چیره‌دست بیرون آمده. پس من چه کردم؟ شخصا به این فکر بودم که چه اتفاقی می‌افتاد اگر یک نسخه متن‌باز از Midjourney داشتیم؟ و همزمان افرادی در شرکت Stability AI هم فکر مشابهی داشتند. وقتی انتشار Sable Diffusion رو اعلام کردند، من واقعا خوشحال شده بودم. کانسپت رو واقعا دوست داشتم با خودم گفتم که این به درد پروژه من هم میخوره! اینجا دقیقا جایی بود که من رفتم هرچی مقاله و تحقیق در مورد Stable Diffusion بود رو خوندم. این برای من یک دنیا ارزش داشت، چون بالاخره یک مدل تولید تصویر بسیار خوب داشت منتشر می‌شد.

این Stable Diffusion فناوری ابتدایی من بود. بی‌نهایت دوستش داشتم. همیشه تلاش می‌کردم بهترین نتایج رو ازش بگیرم. از prompt engineering صرف بگیر تا نوشتن کد‌هایی که بتونه برای من نتایج بهتری ازش بگیره. در ماه‌هایی که از انتشار نسخه اولیه‌ش گذشت، دو تا اتفاق خیلی بزرگ افتاد. اول این که Dream Booth برای Stable Diffusion ریلیز شد ( و صادقانه بخوام بگم، فاین تیون کردن Stable Diffusion رو به شدت ساده کرده) و همزمان RunwayML هم ورژن ۱.۵ از Stable Diffusion رو منتشر کرد. من مواد اولیه اصلی برای ساخت Midjourney متن‌باز رو داشتم!

بخوام خلاصه بگم: هسته اصلی Stable Diffusion ئه، از چک‌پوینت‌های نسخه ۱.۵ ای که runwayml ساخته استفاده کردم و تیون/ترین کردن با Dream Booth انجام شده. اینا Mann-E رو ممکن کردند. همچنین زبان‌های مورد استفاده هم باید بگم که عمدتا از پایتون استفاده کردم و کمی هم کد روبی برای توسعه وب نوشتم. و این تمام چیزیه که من استفاده کردم.

چه تفاوتی با Dall-E, Open Journey و باقی مدل‌ها داره؟

این سوال سختیه، بخصوص که در طول سال گذشته هزاران مدل با تکنیک‌های Textual Inversion و Dream Booth منتشر شدند. ولی اگر بخوام خلاصه بگم که چه فرقی با Dall-E داره، باید بگم که مانی به اون اندازه گرون نیست. برای استفاده از مانی، فقط کافیه که Google Colab رو راه‌ بندازید، نوت‌بوک رو واردش کنید و تمام! می‌تونید بی‌نهایت تصویر باهاش بسازید. این رو با Dall-E مقایسه کنید که به شما ۵۰ تا تصویر رایگان می‌ده و بعدش باید هزینه پرداخت کنید (که البته به نظرم مدل درآمدی بدی نیست).

ولی وقتی بحث به SD و Open Journey می‌رسه، باید بگم که من همیشه از بزرگترین طرفدارای این مدلا بودم و همیشه حس می‌کردم یه چیزی اونجا درست نیست (بخصوص با SD خام). برای این مدل‌ها، این که نتایج پرت و پلا و بی‌ربط تولید کنند چیز عجیبی نیست. پس چه کار می‌تونستم بکنم؟ حدس می‌زدم بهتره سعی کنم مدل‌های خوب رو با هم ترکیب کنم. الان می‌تونم مدعی بشم که مانی، در واقع یک هوش مصنوعی چندمدلی محسوب میشه که در حال حاضر توضیحش یکم سخته، ولی فکر کنم مقاله‌ای به زودی در موردش منتشر خواهم کرد.

اون مدل‌ها برای نقاشی، طراحی، هنر مفهومی، استایل آنالوگ، دابل اکسپوژر و … بودند. با یک چک‌پوینت و کمی prompt engineering الان می‌تونید نتایج بسیار خوبی از مدل دریافت کنید.

روی مدلی به نام Open Journey کار می‌کردی ولی اسمشو عوض کردی. می‌تونی کمی در موردش بگی؟

مانی اول کار، اسم مدل نبود؛ بلکه اسم استارتاپی بود که در تابستان ۲۰۲۲ برای همین کار راه انداخته بودم. اسم مدل Open Journey بود که اشاره به Open Source Midjourney داشت. بعدا، فهمیدم که یک نفر از تیم میدجرنی از تیم prompthero خواسته که اسم مدلشون (که فکر کنم چیزی مثل midjourney-v4-style-stable-diffusion یا چنین چیزی بود) رو عوض کنند و اون‌ها (یعنی prompthero) هم اسم مدل رو به OpenJourney تغییر دادند. من ازشون درخواست کردم که اسم مدل رو عوض کنند ولی از اونجایی که ترجیحم این بود که اون استارتاپ رو در اون برهه زمانی متوقف کنم، اسم مدل رو به مانی تغییر دادم.

و البته یک اتفاق خوشحال‌کننده هم افتاد. یک نفر لینک قدیمی به مدل من (که هنوز اسم رو Open Journey درج کرده بود) رو در هکرنیوز پست کرده بود و وبسایت من هم از لحاظ تعداد بازدیدکننده ترکید. من اون صفحه رو به صفحه درست، ری‌دایرکت کردم و فکر کنم این «ناخواسته‌ترین دیده‌شدن»ی بود که من می‌تونستم از یک پروژه متن‌باز بگیرم.

فکر می‌کنی آینده هوش مصنوعی چطوریه؟ حرف و حدیث در مورد موضوع خیلی زیاده و اکثرا ریشه در محصولات شرکت OpenAI مثل ChatGPT داره. اتفاق بعدی چیه؟

باور دارم که هوش مصنوعی آینده‌ست. برخلاف چیزی که سال ۲۰۲۱ اومد و یه فازی ساخت و رفت (و بله، منظورم متاورس زاکربرگه). هوش مصنوعی واقعی و آینده‌داره. من دارم به چشم می‌بینم که افراد زیادی از این ابزارها برای تولید پست‌های بلاگ، کپی‌رایتینگ، تولید شعار برای شرکت و استارتاپ، تولید آیکون و تصویر شاخص و حتی تولید کد استفاده می‌کنند. این خیلیه، بخصوص با وجود ابزارهایی مثل GPT-3 یا ChatGPT حتی می‌تونه رایج‌تر هم بشه. از طرف دیگر قضیه هم که بخواهیم نگاه کنیم، ابزارهای متن‌بازی مثل BLOOM, BLOOMZ, Flan-T5, GPT-Neo و … رو داریم. افراد می‌تونند این مدل‌ها و API رو متناسب با نیازهای خودشون، تغییر بدند.

و باور دارم که ابزارهای هوش مصنوعی ما را به جهانی هل می‌دهند که مردم در آن هوشمندانه‌تر کار می‌کنند، نه سخت‌تر. می‌دونی، تو می‌تونی شونزده ساعت از بیست و چهار ساعت شبانه روز رو صرف توسعه یه کمپوننت تو پروژه ری‌اکتیت کنی، درسته؟ این خیلی خوبه که شغلت و کاری که می‌کنی رو دوست داره ولی حدس من اینه که این ماجرا برای کارفرما یا سرمایه‌گذار هیچ اهمیتی نداره، بخصوص وقتی می‌فهمن که با ۱۶ دقیقه prompt engineering می‌تونستی همون نتیجه رو از GPT-3 با کمی ویرایش کد بگیری. برای من، این یک دنیای بهتره.

در پایان هم از تو، الکساندر؛ تشکر می‌کنم که اومدی سراغم.

سخن آخر

سالها پیش دوستانی در وبسایت لینوکس سیزن با من مصاحبه‌ای انجام دادند که از اینجا در دسترسه. اما خب این یکی مصاحبه، برای من پراهمیت‌تر بود، چرا که فکر کنم تنها کسی هستم که در ایران، با جدیت روی پروژه‌های Generative AI (هوش مصنوعی مولد) به صورت آزاد/متن‌باز کار می‌کنه و خب حیف بود که الان که موقعشه، منتشرش نکنم.

خلاصه که ازتون ممنونم بابت وقتی که گذاشتید و خوندید. اگر به چنین مطالبی علاقمندید، می‌تونید من رو در ویرگول هم دنبال کنید و اونجا هم مطالب مشابهی رو مطالعه کنید. ممنونم بابت وقتی که گذاشتید و خوندید.

Share

نصب Phosh روی دبیان

گنوم، چندسال اخیر رو در حال بهبود تجربه کاربریش روی دستگاه‌هایی مثل گوشی‌های همراه و همچنین تبلت‌هاست. در کل، داره برای یک انقلاب در صفحات لمسی آماده میشه. حالا، یک رابط کاربری جالب به اسم Phosh (مخففی برای Phone Shell) ارائه کرده که روی دبیان (بله، حتی دسکتاپ!) قابل نصب و اجراست.

نماگرفت زیر، نماگرفتی از صفحه قفل این رابط کاربریه:

و خب همونطوری که می‌بینید، کار تمیز و نسبتا زیباییه. حالا سوال اینه چطور نصبش کنیم؟ در ادامه مطلب مفصلا توضیح میدم 🙂

نصب قدم به قدم Phosh روی دبیان

گام اول: نصب دبیان

توجه داشته باشید که دبیان مد نظر من اینجا، دبیانیه که شما روی پردازنده‌های x86 نصب می‌کنید. اگر قراره این دبیان روی رزبری پای باشه، یا سیستم شخصی شما صفحه لمسی داره، می‌تونید این قسمت رو نادیده بگیرید. اما من نصب رو روی یک ماشین مجازی با کمک Virtual Box انجام دادم. آموزش نصب دبیان، در اینترنت زیاد پیدا میشه؛ فلذا اینجا حرفی از آموزش نصب به میان نمیارم. فقط حواستون باشه نسخه Net Install دبیان رو دانلود و نصب کنید که چیز اضافه‌ای نداشته باشیم. برای دانلود دبیان هم می‌تونید به وبسایت دبیان مراجعه کنید و آخرین ISO مورد نظر رو بگیرید.

گام دوم: قبل از نصب Phosh چه کنیم؟

خب اولین کاری که قبل از نصب Phosh کنید اینه که با خودتون یک فنجان قهوه یا نوشیدنی خنک داشته باشید چون پروسه نصب ممکنه شما رو خسته و تشنه کنه. بعد از اون، بد نیست که سیستم رو بروزرسانی کنید. بعد از بروزرسانی سیستم‌عامل، نوبتی هم باشه نوبت اینه که مستقیم بریم سر نصب Phosh. اینجا هم جا داره نکته مهم رو متذکر بشم که من phosh رو از مخازن نصب می‌کنم تا صرفا کنجکاوی رفع شده باشه وگرنه روش درست‌تر نصب phosh نصب از کد منبعه (حداقل اگر روی سیستم x86 و به قصد توسعه نصب می‌کنید).

گام سوم: نصب و راه‌اندازی Phosh

خب برای نصب کافیه که دستورات زیر رو اجرا کنیم:

sudo apt install phosh-core

و اگر می‌خواهید Phosh شما مناسب تبلت باشه:

sudo apt install phosh-tablet

و اگر می‌خواهید نسخه کامل Phosh رو نصب کنید، کافیه که دستور رو به این شکل تغییر بدید:

sudo apt install phosh-full

و بعد از نصب حدود یک گیگابایت بسته‌های نرم‌افزاری، کل میزکار گنوم مخصوص صفحات لمسی یا همون Phosh برای شما نصب خواهد شد. پس از نصب، کافیه که اول سرویسش رو فعال و سپس راه‌اندازی کنیم:

sudo systemctl enable phosh
sudo systemctl start phosh

سپس، صفحه قفل (که بالاتر عکسش رو قرار دادم) و بعد از اون، صفحه ورود رمز به شما نمایش داده میشه.

پس از ورود رمز، وارد صفحه منوی اصلی می‌شیم که از اونجا می‌تونیم به نرم‌افزارها و ابزارهای نصب شده روی سیستم دسترسی داشته باشیم:

خب، حالا با خیال راحت می‌تونیم از Phosh استفاده کنیم و لذت ببریم 😁

نکات مهم

از اونجایی که Phosh نرم‌افزار نوپا و نسبتا جدیدیه، لازمه چند نکته مهم رو در موردش متذکر بشم:

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

کدوم توزیع‌ها از Phosh پشتیبانی می‌کنند؟

این هم سوال مهمیه، تا جایی که دیدم PostmarketOS (که برمبنای آلپاین ساخته شده) و همچنین Mobian (که برپایه دبیانه) از این میزکار (یا بهتر بگم پوسته) پشتیبانی می‌کنند. در مورد سایر توزیع‌ها/سیستم‌عامل‌هایی که ممکنه گنوم رو اجرا کنند، ایده‌ای ندارم.

جمع‌بندی

این بلاگ اصلا قرار نبود نوشته شه، ولی امروز از سر خستگی (دقیقا خستگی 😂) جستجو کردم ببینم Phosh چطور می‌تونه روی دبیان دسکتاپ نصب بشه. امتحانش کردم و به نظرم پروژه تمیز، باحال و آینده‌داری اومد. حالا هم تستش کردم و هم یک سری ایده‌ اومد به ذهنم. در آینده، احتمالا بیشتر با Phosh کار کنم و در موردش بنویسم. در آخر هم بابت وقتی که صرف کردید و این مطلب رو خوندید، ازتون تشکر می‌کنم.

Share

چرا گولنگ زبان مناسب شما نیست؟

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

در این پست، قصد من اینه که توضیح بدم چرا گولنگ انتخاب مناسبی نیست و چرا بهتره که در یک سازمان کوچک، سمتش نریم و از ابزارهای دم‌دستی‌تری مثل پایتون یا PHP استفاده کنیم. ضمنا اینجا یک سلب ادعا بکنم که «دم‌ستی» به معنای «بد» بودن اون ابزار نیست و اتفاقا در این متن بخصوص، یک مزیت برای اون ابزار ایجاد کرده.

چطور برای پروژه خود یک زبان یا فرمورک مناسب انتخاب کنیم؟

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

جمعیت توسعه‌دهندگان

مهم‌ترین فاکتور در انتخاب زبان و فرمورک برنامه‌نویسی، دقیقا جمعیت توسعه‌دهندگان اونه. می‌پرسید چرا؟ چون اگر امروز خودتون کد رو بزنید، طبیعتا وقتی بیشتر با جنبه بیزنسی کارتون مواجه شید، وقت کمتری برای کد زدن خواهید داشت و نیازمند بزرگ‌تر کردن تیم توسعه استارتاپتون هستید. پس از این جهت نیاز دارید که این مورد رو حتما در نظر بگیرید. دقت کنید که Go از سال ۲۰۰۹ عرضه عمومی شده و چندین ساله که داره بعنوان یک ابزار توسعه وب دیده میشه (که تعداد این سال‌ها به انگشتای دست هم نمی‌رسه).

حالا از طرف دیگر، شما نگاه کنید که چقدر می‌تونید لاراول‌کار پیدا کنید؟ افرادی که لاراول یا جنگو (یا حتی روبی آن ریلز!!!) کار می‌کنند تعدادشون به شدت بیشتر از کسانیه که با Go کار می‌کنند. نتیجه منطقی اینه که سمت ابزاری برید که بزرگ کردن تیم توسعه‌ش براتون کم‌هزینه باشه.

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

مورد مهمی که باید بهش توجه کنید، اینه که زبان مورد استفاده‌تون چقدر ابزار داره؟ چندتا ORM استخوان‌دار داره؟ چقدر طول می‌کشه تا ایده اولیتون رو صرفا با «به هم چسبوندن ابزارهای موجود» بسازید؟ متاسفانه در این مورد هم باید بگم که Go بازندست. البته این رو هم باید در نظر داشت که Go زیادی جوانه و خب طبیعتا از بین این همه شرکت بزرگی که برای توسعه به سمتش رفتند، بالاخره از این جهت هم به بلوغ کافی می‌رسه. اما بحث ما، بحث حال حاضره. در حال حاضر، پایتون از این جهت – به نظر من – بهترین گزینه می‌تونه باشه. می‌دونید چرا؟ چون برای هر چیزی که فکرش رو بکنید یک کتابخونه ارائه کرده و واقعا شما نیاز به پیاده سازی منطقی جز منطق خالص کسب و کار خودتون ندارید.

مقیاس‌پذیری

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

سهولت استقرار

قبل‌تر در همین وبلاگ در مورد مهندسین DevOps توضیح داده بودم (لینک) و خب یه حقیقت تلخ در مورد این عزیزان اینه که نیروهای گرانقیمتی هستند. وقتی شما از ابزاری مثل Go یا حتی پایتون برای توسعه محصولتون استفاده کنید، احتمالا بعد مدتی نیاز دارید که برای استقرار و … محصول، از یک مهندس DevOps کمک بگیرید. این نیاز ممکنه از لحظه استقرار MVP با شما باشه تا وقتی که محصولتون رو بازسازی و ری‌فکتور می‌کنید. در صورتی که برای مثال یک پروژه Laravel ای رو می‌تونید به سادگی روی یک هاست سی‌پنل، میزبانی کنید.

و تیر آخر: زمان توسعه محصول!

در قسمت اول به این موضوع اشاره کردم ولی لازمه که دوباره هم اشاره بشه. چرا که این بخش به بخش کدنویسی و تست (و کلا کارهای برنامه‌نویسانه) محدود نیست و لازمه که موارد دیگر مثل استراتژی ورود به بازار، ارائه بتاهای عمومی و … هم در نظر بگیرید. متاسفانه Go در این مورد بازندست چرا که ابزارهایی به کاملی و خوبی جنگو، ریلز یا لاراول نداره. تنها راه‌حلی که بتونید با Go با سرعت زیادی به این مرحله برسید؛ اینه که چند توسعه‌دهنده حرفه‌ای استخدام کنید که خب هزینه‌هاتون رو شدیدا افزایش می‌ده.

جمع‌بندی

حالا که این همه مثنوی هفتاد من سرودم، جای داره که یک جمع‌بندی کلی ارائه بدم از مباحث بالا. اگر موارد بالا رو در نظر گرفتید و دیدید که زبانی مثل Go یا Rust در فاکتورهای بالا برای شما کارآمد و مناسب هستند و انتخاب شخصیتونن و در عین حال، منابع کافی هم براشون دارید؛ خب دیگه پرسش نداره و بهتره هرچه سریع‌تر کارتون رو شروع کنید. در غیر این صورت، اگر از سر جوزدگی قراره از این ابزارها استفاده کنید، چند بار با خودتون مرور کنید که کدوم یکی از این‌ها، نیازهای شما رو مرتفع می‌کنند.

در پایان جا داره بگم که زبان برنامه‌نویسی صرفا ابزاریه که ما بتونیم باهاش برنامه بسازیم و برنامه‌های کامپیوتری، پاسخ‌هایی هستند به نیازهای ما. انتخاب ابزار مناسب، امکان‌سنجی خودش رو نیاز داره و امیدوارم که در این پست؛ تونسته باشم به شما کمی در این امکان‌سنجی، کمک کرده باشم.

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

Share

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

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

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

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

آشنایی با searx

خب searx یک نرم‌افزار آزاده که هدفش، بهبود تجربه جست و جوی افراد در اینترنته. این نرم‌افزار، به دو صورت قابل دسترسیه. اول این که تعدادی نمونه عمومی داره (لینک نمونه‌های عمومی در اینجا قرار گرفته) و هم به صورت «خودمیزبان» یا همون self-hosted. متد خودمیزبان یعنی شما به عنوان کاربر، می‌تونید به صورت رایگان یا با پرداخت پول (بسته به مدل کسب و کار و توسعه اون پروژه خاص)، اون نرم‌افزار رو روی هاست یا سرور مورد نظر خودتون نصب کنید.

در این آموزش، قراره با کمک یک سرور لینوکسی، یک زیردامنه، یک کارساز وب و داکر؛ یک فراجستجوگر ساده رو به کمک هم بیاریم بالا. به این شکل می‌تونیم هم یک نمونه عمومی عرضه کنیم، هم این که دیتای کمتری در اختیار شرکت‌هایی مثل گوگل یا مایکروسافت بذاریم.

ساخت فراجستجوگر

برای ساخت فراجستجوگر خودمون، نیاز به موارد زیر داریم:

  • سرور لینوکسی. من شخصا از اوبونتو ۱۸.۰۴ استفاده کردم. برای پردازش بهتر نتایج و نخوردن به مشکل تحریم و …؛ بهتره که سرور داخل ایران هم نباشه. به همین خاطر، من از سرور هلند استفاده کردم (کشور محل قرارگیری سرور، کاملا به خودتون بستگی داره).
  • یک دامنه یا زیردامنه. برای این پروژه من از searx[dot]haghiri75[dot]com استفاده کردم.
  • کمی آشنایی به کارهای سروری. اگر آشنایی خاصی ندارید هم مهم نیست! در حد لزوم در این مطلب یاد می‌گیرید 😁

آماده‌سازی سرور

وقتی سرور رو از ارائه‌دهنده سرور تحویل گرفتیم (با فرض اوبونتو/دبیان بودنش) نیازه تا اول لیست بسته‌های اون رو کمی به روز کنیم:

sudo apt update

و اگر لازم شد، کل سیستم‌عامل هم یک بار به‌روز می‌کنیم:

sudo apt full-upgrade

بعد از این که این اتفاقات رخ داد، یک دور سرور رو ریبوت می‌کنیم و پس از بوت شدن مجدد و اتصال به سرور، چند بسته نصب می‌کنیم:

sudo apt install nginx python3-certbot-nginx docker.io

خب ببینیم این بسته‌ها برای چین؟

  • nginx: این بسته، وب‌سرور یا همون کارساز وب ماست. چیزی که باعث میشه ما بتونیم بدون مشکل، یک وبسایت یا نرم‌افزار تحت وب رو استفاده کنیم.
  • python3-certbot-nginx: از این بسته استفاده خواهیم کرد تا یک گواهی SSL برای وبسایت خودمون بگیریم.
  • docker.io: داکر یک سیستم کانتینرییزشنه. در واقع نرم‌افزارها رو داخل بسته‌های کوچولو قرار می‌ده و همه ملزوماتشون اونجاست. فقط تنها موردی که داره، اینه که از هسته سیستم عامل استفاده می‌کنه برای مدیریت فرایندها (در واقع تفاوتش با ماشین مجازی همینه).

حالا ما سرور رو آماده کردیم. گام بعدی چیه؟

آماده‌سازی دامنه

برای آماده‌سازی دامنه، کافیه که یک رکورد A با IP سرور مورد نظر ایجاد کنید. البته در بعضی موارد از CNAME هم میشه استفاده کرد اما اینجا چون سرور از وبسایت جدا بود، یک A تعریف شد. بعد از این که رکورد رو تعریف کردیم، باید ۵ تا ۱۰ دقیقه صبر کنیم تا عموم DNS Server های اینترنت، بشناسنمون. بعدش می‌تونیم به کارمون ادامه بدیم.

حالا ۱۰ دقیقه گذشت و یک قهوه هم خوردیم و آماده‌ایم که مرحله بعدی رو انجام بدیم.

دریافت گواهی SSL

خب دریافت گواهی SSL هم بسیار ساده‌ست. کافیه این دستور رو در سرور اجرا کنید (و دامنه من رو با دامنه خودتون عوض کنید):

sudo certbot -d searx.haghiri75.com --nginx

در این مرحله شما باید آدرس ایمیلتون رو وارد کنید و به چند سوال هم پاسخ بدید. در کل همه‌چیز با یک wizard اتفاق میفته و نیازی نیست که زحمت زیادی بکشید. فقط یک نکته مهم رو اینجا باید بهش دقت کنیم. اون نکته اینه که certbot اینجا خودش nginx رو استارت می‌زنه. در مرحله بعدی، نیاز داریم که به این مهم توجه کنیم.

راه‌اندازی داکر و نصب فراجستجوگر

خب اول از همه کاربر خودمون (که در اینجا فرض می‌گیریم نام کاربریش هم Ubuntu ئه) رو به گروه داکر اضافه می‌کنیم:

sudo usermod -aG docker ubuntu

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

بعد از این مورد، ایمیج searx رو از رجیستری داکر دریافت می‌کنیم:

docker pull searx/searx

خب در حال حاضر، اتفاق خاصی می‌افته؟ خیر. فقط تصویری که searx روی اون نصب شده، روی سرور ما دانلود شده.

بعد از اون، نیازداریم که یک کانتینر براش بسازیم. برای این، مراحل زیر رو طی می‌کنیم:

mkdir searx
cd searx
docker run --rm -d -v ${PWD}/searx:/etc/searx -p 8080:8080 -e BASE_URL=http://localhost:8080/ searx/searx

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

اما صبر کنید! هنوز نمی‌تونیم بهش دسترسی پیدا کنیم. پس چه کنیم؟

پراکسی معکوس برای دسترسی به محتوا

خب اینجا نیاز داریم که از پراکسی معکوس استفاده کنیم. انجینکس علاوه بر این که وب‌سروره، پراکسی معکوس هم هست و خیلی از ما عمدتا از قابلیت پراکسی معکوسش برای اجرای نرم‌افزارهای تحت وبمون استفاده می‌کنیم. مثل همین آموزش دپلوی کردن یک پروژه ریلز نوشته بودم (لینک). دونستن این که پراکسی معکوس چیه و چی کار می‌کنه، از ملزومات پایه‌ای مدیریت سیستم و همچنین دواپس و CI/CD محسوب میشه (جهت اطلاعات بیشتر این پست رو بخونید).

پس اگر می‌خواهید در آینده مهندس DevOps بشید، شاید بتونید این مطلب رو فرصتی برای تمرین یکی از مواردش قرار بدید. فکر کنم زیاد صحبت کردیم. بریم سر اصل مطلب. برای این که بتونیم از پراکسی معکوس استفاده کنیم، کافیه که اول با ادیتور دلخواهمون، فایل پیکربندی رو باز کنیم:

sudo nano /etc/nginx/sites-enabled/default

و سپس دنبال دامینمون بگردیم (در نانو با ctrl + W میشه). بعد از این که دامینمون رو پیدا کردیم کافیه بخش location / رو پیدا کنیم (معمولا دو سه خط پایین‌تر از دامین و تنظیماتشه) و سپس به این شکل درش بیاریم:

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                proxy_pass http://localhost:8080;
        }

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

sudo systemctl restart nginx

استفاده از فراجستجوگر شخصی

سخن آخر

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

موضوع بعدی اینه که فراجستجوگرها، علاوه بر این که می‌تونن در حفظ حریم شخصی و … موثر باشند، می‌تونن کاملا بیزنسی هم کار کنند. مثلا هرکلید واژه‌ای که سرچ کنید رو صرفا در موضوع خاصی دنبالش بگردند. مثلا شما اگر سرچ کنید «سیب‌زمینی» فقط در وبسایت‌هایی که وبینار میزبانی می‌کنند دنبالش بگرده. وقتی سرچ می‌کنید «قشم» فقط در وبسایت‌های گردشگری دنبالش بگرده و الی آخر.

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



Share

داستان برنامه‌نویس شدن من – قسمت دوم

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

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

ورود به دانشگاه

در طی این سالها، یعنی از حدود ۹۱ تا ۹۳ راه‌های زیادی رو رفتم که سرویس‌ها و نرم‌افزارهای خاصی رو طراحی کنم و خب دروغ چرا، تا حد زیادی هم رویای استیو جابز یا زاکربرگ شدن هم در سر داشتم و خب کارهای مختلفی مثل ایجاد انجمن‌های اینترنتی مختلف (ایران‌بی‌اس‌دی، ایران‌هکینتاش و …) گرفته تا برپا کردن شبکه‌های اجتماعی و نرم‌افزارهای آنلاین دیگر (اکسوال، نکست‌کلود و …) رو انجام می‌دادم. راستش این راه‌ها من رو به قول خارجی‌ها Satisfy نمی‌کرد و همچنان دنبال این بودم که یک سیستم عامل خوب بسازم!

خلاصه شد سال ۹۲ و ما از شهر بندرعباس به تهران برگشتیم. اون سال، سال پیش‌دانشگاهی من بود (و بد نیست این داستانکم رو هم پیرامونش بخونید) و اون سال، یک تصمیم بزرگ هم گرفتم. تصمیمم این شد که جبیر به جای این که مبتنی بر اوبونتو (یک توزیع از گنو/لینوکس)، یک نسخه شخصی‌سازی‌شده از FreeBSD باشه. از همین رو، شروع کردم به رفتن به IRC های مختلف، سوال پرسیدن و مستندات خوندن. بعد از چندین ماه مطالعه، وضعیت اینترنت خونه و خودم تا حد خوبی پایدار شد و بعد شروع کردم به انجام تغییرات روی کد FreeBSD.

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

داستان برنامه‌نویس شدن من - محمدرضا حقیریشرکت در لاگ‌ها و رویدادها و آخر و عاقبت پروژه جبیر

حضور در تهران و دانشجو شدن، به من کمک کرد که وارد جامعه بشم و در رویدادهای نرم‌افزار آزاد و متن‌باز و سایر رویدادها (مثل PyCon و …) شرکت کنم. اولین رویدادی که شرکت کردم، رویدادی بود به اسم «جامعه رایانش ابری آزاد». در اون رویداد با KVM و Docker آشنا شدم و تا حد زیادی هم دانشم در زمینه Containerها و مجازی‌سازی تا حد خوبی بالا رفت.

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

اگر دوست دارید ببینید که پروژه جبیر چه شکلی بوده، می‌تونید این لینک مربوط به وب آرکایو رو هم ببینید: لینک. در ادامه، بنا به دلایلی (که در ادامه این مطلب بهش می‌پردازیم) تصمیم شد که پروژه جبیر بیشتر روی فاز سخت‌افزاری باشه و چند مطلب هم در موردش حتی نوشتم(لینک).

داستان برنامه‌نویس شدن من - محمدرضا حقیری

یادگیری روبی، ورود به حوزه سخت‌افزار و دیگر هیچ!

مهرماه ۹۳ بود که من خیلی جدی تصمیم گرفتم حداقل یک زبان برای توسعه وب رو جدی یاد بگیرم. قبل‌ترش، کتاب «از این پس پایتون» رو خونده بودم و به همین خاطر هم کمی با پایتون و فلسک آشنا بودم. دوستی یک کتاب جنگو هم برای من ارسال کرد. اما در همون هنگام در بحثی در IRC که دقیق یادم نیست مربوط به occc بود یا لاگ کرج، دوستی به من پیشنهاد کرد که روبی و روبی‌آن‌ریلز رو یاد بگیرم. در ادامه‌ش، توصیه کرد که حتما با دیتابیس‌ها آشنا شم و کمی هم مهندسی نرم‌افزار یاد بگیرم.

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

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

وقتی به نتایج جالبی رسیدم، تصمیم گرفتم دوباره دانشم رو با مردم به اشتراک بذارم. به همین خاطر، این بار هم محتوا رو به زبون انگلیسی تولید کردم (لینک) و به رایگان در نسخه انگلیسی همین وبلاگ منتشرش کردم. خلاصه که اینجا تموم نمیشه. در اون سالها، بازار «اینترنت چیزها» یا IoT هم داغ بود و خب طبیعتا شروع کردم به یادگیری آردوینو، رزبری‌پای و … و پروژه‌های جالبی هم با اونها انجام دادم. البته خیلی از این پروژه‌ها رو هنوز که هنوزه عمومی نکردم.

خلاصه این مورد هم گذشت و رسیدیم به شهریور ۹۶. یعنی جایی که من خیلی جدی و رسمی وارد بازار کار شدم.

داستان برنامه‌نویس شدن من - محمدرضا حقیری

ورود به بازار کار

در تیرماه ۹۶، در رویدادی شرکت کردیم که مرتبط با فعالان صنعت بازی رایانه‌ای بود. این رویداد، به طور خاص به آهنگسازان و مهندسین صدا اختصاص داشت و خب بخاطر علاقه شخصیم به موسیقی، در این رویداد شرکت کردم. آخر رویداد گپ و گفتی با سخنران رویداد داشتم که باعث شد شخصی بیاد خودش رو معرفی کنه و بگه که تیمشون نیاز به آهنگساز داره. پس از مدتی، مدیر استودیو به من پیام داد و گفت بازی‌ای در ژانر کودکه و خب نمی‌دونم چی شد که اون موقع، این بحث ادامه پیدا نکرد.

اما شهریور ۹۶ یکی از دوستانی که در همون استودیو مشغول بود، برای یک بازی دیگر من رو دعوت کرد به همکاری. یک مصاحبه ریزی داشتیم و پس از اون مصاحبه، قرار شد من برم و همکاری کنم. پس از این ماجرا، من رسما وارد اکوسیستم و بازار کار شدم تا به امروز.

سخن آخر

خب، در این مطلب هم مثل مطلب قبلی حجم خوبی از خاطرات من رو شاهد بودید. کل حرفی که می‌خواستم بزنم این بود که دوستان، از تجربه کردن و حتی شاخه شاخه پریدن؛ نترسید. این پرش‌ها به خودی خود باعث میشن که شما در کارتون – حتی کارهای فریلنسری و پروژه‌ای – به شدت موفق‌تر عمل کنید. یادتون باشه که زندگی، فان‌تر از اونیه که بخواید با زیادی جدی گرفتن؛ خرابش کنید.

موفق باشید 🙂

 

Share

داستان برنامه‌نویس شدن من – قسمت اول

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

من کی هستم؟

من محمدرضا حقیری هستم. احتمالا خیلی‌ها من رو از «پروژه جبیر» بشناسن. اگر ماجرای پروژه جبیر رو نمی‌دونید، باید بگم که شاید یکی از اولین پروژه‌های جدی من بود که خیلی استارتاپ‌گونه پیش می‌رفت. اطلاعات بیشتری از این پروژه رو می‌تونید از این لینک بخونید. اما الان چطور؟

فکر کنم پس از حدود ۱۰ سال حضور مداوم در جامعه‌های مختلفی مثل نرم‌افزار آزاد، جامعه فارسی‌زبان اوبونتو، جامعه Open Street Map (که البته در این آخری حضورم خیلی کم‌رنگ‌تر بود) و جامعه بینایی ماشین (لینک) دیگه الان بدونید که شخص «محمدرضا حقیری» یک برنامه‌نویسه که دستی بر لینوکس، BSD، پایتون، کمی سخت‌افزار داره و تبحر خاصی هم در تپه نوردی!

اگر دوست دارید بیشتر از من بدونید، در روزی که این پست نوشته شده (یعنی ۱۱ مهر ۱۴۰۰ هجری خورشیدی)، من چندین ماه از بیست و ششمین سال زندگیم می‌گذشته و در حال کار روی یکی از پروژه‌های خیلی جدی بودم و این پست رو برای این نوشتم که این داستان رو با شما به اشتراک بذارم. خب، من رو شناختید؟ بیایید بریم سراغ داستان برنامه‌نویس شدنم.

داستان برنامه‌نویس شدن من - محمدرضا حقیری

شروع برنامه‌نویسی

ما یک سری کتاب برنامه‌نویسی ویژوال بیسیک ۶ (لینک) در کتابخونه داشتیم. فکر کنم اواسط یا اواخر سال ۸۶ بود که من شروع کردم به خوندن یکی از این کتابا. برام خیلی جالب بود که چطور اینقدر این زبان هلوئه 🙂 از اون جالب‌تر این که اون زمان Windows Form هم چیزی بود که خیلی رو بورس بود و خیلی از برنامه‌نویس‌ها ازش استفاده می‌کردند. یادمه که همون دوران، شرکت «پرند» هم یک مجموعه به اسم «کینگ» داشت (و البته فکر کنم هنوز هم داره) که درونش هزاران نرم‌افزار وجود داشت.

در یکی از دیسک‌های کینگ، یک کتگوری Programming بود که ذیل اون، ویژوال استودیو قرار داشت. یادمه که با استفاده از دیسک مربوطه، ویژوال استودیو رو نصب کردم و شروع کردم به پیاده کردن چیزایی که در اون کتاب نوشته بود. یک فرم ساختم و یک لیبل زدم و روی لیبل نوشتم Hello World و شاید ندونید؛ ولی اون لحظه حسی که داشتم با حس آرمسترانگ وقتی رسیده بود روی ماه برابری می‌کرد. خلاصه که بعد از این که دورهای افتخار رو زدم، نشستم به خوندن باقی کتاب. اما می‌دونید چی شد؟ کتاب با VB6 آموزش می‌داد و فکر کنم من ویژوال‌ استودیو ۲۰۰۵ و چنین چیزی رو داشتم.

خیلی دنبال فایل نصبی و حتی دیسک ویژوال بیسیک ۶ گشتم اما چیزی نیافتم. خلاصه در همون دوران بود که با انتشارات کلید آموزش (لینک) آشنا شدم. اولین کتابی که ازشون خوندم «کلید فتوشاپ» بود. در لیست کتابهاشون گشتم و دیدم که «کلید ویژوال بیسیک» هم دارند. اون کتاب رو خریدم و شروع کردم به خوندن و یادگیری از روی اون. خلاصه، بعد از چند ماه کشتی گرفتن، با ویژوال استودیو یک عدد ماشین حساب ساختم و دیگه شما می‌تونید حدس بزنید چقدر خوشحال بودم.

خلاصه که سال تحصیلی بعدیش، من تا حد خوبی روی مهارت‌های توسعه‌دهندگیم کار کردم. البته خیلی از ابزارهایی مثل Multi Media Builder که استفاده می‌کردم، ابزار برنامه‌نویسی محسوب نمی‌شدند، اما خب بهرحال برای این که در جشنواره‌های دانش‌آموزی و … شرکت کنم، بد نبودن. خلاصه که گذشت و گذشت و گذشت و رسیدیم به سال سوم راهنمایی. سوم راهنمایی من، سال جنجالی ۸۸ بود. سالی که تا حد زیادی افراد برای آینده خودشون، نگران شده بودند و طبیعتا من و خانواده من هم از این قاعده مستثناء نبودیم.

در این سال، یه جو قشنگی روی مدرسه حاکم شده بود. به طرز عجیبی مدرسه ما، دوست داشت که قطب تولید نرم‌افزار دانش‌آموزی باشه، قطب رباتیک منطقه خودش باشه و … . حقیقتا من این فرصت رو غنیمت شمردم و با همون ابزارهایی مثل Multi Media Builder نرم‌افزارهایی برای درس‌های علوم و عربی ساختم. خیلی از فرمول‌ها و روش‌هایی که در کلاس ریاضی یادمون می‌دادن رو با ویژوال بیسیک تبدیل به نرم‌افزار می‌کردم. در همین حین، به سبب تمرکز مدرسه روی مسابقات دانش‌آموزی رباتیک، سی++ هم تا حد خوبی یاد گرفته بودم. از طرفی انتشارات کلید هم «کلید دلفی» رو منتشر کرده بود و این یعنی که در حال یادگیری دلفی هم بودم.

شاید بگید چقدر هندونه؟ خب این همیشه روش من بوده. همیشه هم نتیجه داده و همیشه هم ازش راضیم 😁. شاید بد نباشه که اشاره کنم که همزمان با این ماجرا، به سبب داشتن وبلاگ روی بلاگفا هم کمی جاوااسکریپت (زمانی که جاوااسکریپت هنوز انقدر گسترده نبود) یاد گرفته بودم …

داستان برنامه‌نویس شدن من - محمدرضا حقیری

شروع پروژه جبیر

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

اما حالا صحبت دوست جدید بمونه برای بعد، در تابستانی که بین سال اول و دوم دبیرستان داشتم، یادمه یک شماره از «مجله دانشمند» رو خریدم که در اون، کتاب «طراحی و پیاده‌سازی سیستم‌های عامل» از «اندرو تنن‌باوم» رو معرفی کرده بود. نکته اینجا بود که انتهای اون مقاله، در مورد لینوس تروالدزِ، خلق لینوکس و دعواهای معروفش با اندرو تنن‌باوم هم نوشته بود و من اینجا جرقه‌ای در ذهنم زده شد. من باید سیستم‌عامل می‌ساختم! پس از گذشت چند ماه و مهاجرت به لینوکس و تحقیق در موردش و همچنین غرق شدن در دنیای اپل و زندگی شخصی استیو جابز و … (شاید بشه گفت جوگیری‌های رایج دوره نوجوانی) بالاخره به این نتیجه رسیدم که بهتره که پایه سیستم‌عامل من هم لینوکس باشه.

بعد از مدتی، به ذهنم رسید که به کامیونیتی اوبونتو مراجعه کنم و اونجا بپرسم. به همین خاطر این پست رو ایجاد کردم و یه سری سوال پرسیدم. احتمالا در همون تاپیک بتونید راهنمایی‌های دانیال بهزادی رو ببینید که خب بعدتر در پروژه مشابهی حتی با هم همکاری هم کردیم 😂

بگذریم، بهار ۹۱ یک نسخه کاستوم‌شده اوبونتو به اسم «جبیر او اس» منتشر شد که از قضا یک پروژه جنجالی هم شد. اما اثرات جانبی جالبی هم داشت. شاید بتونم مهم‌ترین اثرش رو «ورود رسمی به جامعه نرم‌افزار آزاد» بدونم، اثر دیگرش هم این بود که مدیر مدرسه ما گیر داد که الا و بلا شما باید بیای این رو ببری جشنواره خوارزمی 🙂 بردیمش جشنواره خوارزمی ولی اونجا مقبول نیفتاد. حالا ماجرای خوارزمی رو یک بار باید اساسی‌تر تعریف کنم که در مقوله این مقاله نمی‌گنجه.

خلاصه پروژه جبیر تا حدود ۹۴ ادامه داشت و بعدش به کل رفت به تاریخ پیوست. دلایل متعددی هم داشتم براش، اما خب فعلا تا همین جاش رو قبول کنید ازم.

داستان برنامه‌نویس شدن من - محمدرضا حقیری

و این داستان ادامه دارد …

اول که شروع کردم به نوشتن این داستان، فکر می‌کردم که می‌تونم در یک پست جمعش کنم، ولی دیدم که خیلی پیچیده‌تر از این حرفاست و شاید ۳-۴ قسمت ازش دربیاد. اما خب در کل، قصدم اینه که تا زمانی که وارد بازار کار شدم رو برای شما تعریف کنم (یعنی دو پست نگهش دارم) و بعدا سر فرصت مناسبی، تجربیات کاری خودم هم باهاتون به اشتراک بذارم.

پس، فعلا این پست رو از من داشته باشید و منتظر قسمت بعدی باشید، قسمت بعدی احتمالا خیلی جذاب‌تر خواهد بود 😁

 

Share