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

پارچ، روحی تازه در کالبد اکوسیستم گنو/لینوکس ایران

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

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

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

آشنایی اجمالی با آرچ

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

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

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

بریم سراغ پارچ!

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

اول بگم که با شناختی که از پروژه پیدا کردم، سازندگان توزیع، روی KDE بیشتر مانور دادند و وقت گذاشتن (و البته این به معنای بد بودن سایر نسخه‌ها نیست) و اگر سیستم خوبی دارید، به نظر من بهتره مستقیم برید سراغ این نسخه.

من از اونجایی که میخواستم روی ماشین مجازی تست کنم و بعد به یک لپتاپ قدیمی ببرمش، نسخه XFCE رو دانلود و نصب کردم.

برخوردهای اولیه

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

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

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

اینجا برام جالب بود. عموما XFCE در چنین توزیع‌هایی، پنلی به تقلید از ویندوز در پایین صفحه دارند، یا این که نرم‌افزارهایی مثل cairo-dock یا Plank رو پایین صفحه قرار میدند و پنل رو به بالا منتقل می‌کنند (به تقلید از macOS) که خب در اینجا کلا شکل متفاوتی از پنل xfce رو شاهدیم. پنل که گوشه سمت چپ صفحه نمایش قرار گرفته و امکان خوبی برای استفاده از فضای افقی مانیتور فراهم می‌کنه.

مورد بعدی، Welcome Screen جذاب این توزیعه. این هم از مواردیه که در توزیع‌هایی مثل پارچ، خیلی کمتر به چشم میخوره. ولی خب تا اینجا پارچ بسیار فراتر از یه ریمستر ساده از آرچ خودش رو نشون داده.

نصاب

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

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

به همین خاطر، نماگرفت‌های بیشتری از نصاب اینجا قرار نمی‌دم.

پروسه نصب، حدود ۳-۴ دقیقه طول می‌کشه و بعد از اون به این صفحه می‌رسیم:

و اینجاست که با یک ریبوت، به دنیای پارچ می‌ریم 🙂

تست پارچ پس از نصب

راستش یکم نقدم اینجا قراره تند بشه به چندین دلیل. نخستین دلیل اینه:

وقتی در syslinux که موقع بوت شدن ISO دیدیم اون پس‌زمینه زیبا به چشم میخوره، انتظار داشتم در گراب هم همون شمایل رو ببینم. با توجه به این که VirtualBox دارم انتظار لود شدن کامل plymouth نداشتم (اگر توزیع داشته باشه) ولی انتظار گراب زیباتری رو داشتم. گرچه پس‌زمینه گراب فقط یه عکسه و تغییری در کارکرد سیستم نداره.

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

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

محیط گرافیکی و عملکرد آن

خب، پس از فیکس کردن SDDM چنین صفحه‌ای رو می‌بینیم:

و پس از ورود پسورد، به محیط زیبای XFCE وارد می‌شیم:

برای تست یه سری موارد هم، ترمینال رو باز کردم و GIMP رو روی پارچ نصب کردم و همه‌چی خیلی خوب و روان پیش می‌رفت.

جمع‌بندی

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

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

حتی با توجه به سخت‌افزار لپتاپ قدیمی (پردازشگر i5 نسل چهارم و ۱۶ گیگابایت حافظه) عجیب نیست که نسخه‌های KDE یا GNOME هم بتونم بدون مشکل اجرا کنم. قطعا پس از نصب روی ماشین واقعی هم نقد مجددی بر این توزیع، خواهم نوشت.

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

موفق و موید باشید.

Share

مارال اینجاست، مدل ۷ میلیارد پارامتری با پشتیبانی از زبان فارسی

در دنیایی که AI و بخصوص از نوع Generative به شدت در اون مهم شده، یکی از مسائل بزرگی که باهاش روبرو هستیم، چیرگی زبان انگلیسی بر جویه که ساخته شده.

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

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

مارال هفت میلیارد پارامتری و مزایای آن

در تابستان امسال یا دقیق‌تر بگم روز ۱۵ تیر ۱۴۰۲، من رویدادی با نام Summertime AI برگزار کردم. رویداد برای معرفی چندین ابزار هوش مصنوعی بود و من اشاره‌ای به ابزاری به اسم «مارال» کردم.

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

حقیقتا GPT2 هرقدر هم ساختار خوبی داشت، ظاهرا مدل مناسبی برای این موضوع نبود!

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

مارال چیه؟

مارال، یک مدل بزرگ زبانی یا LLM بر مبنای مدل Mistral 7B (لینک) و تیو‌ن‌شده برای زبان فارسیه. این مدل، به صورت «پیروی از دستورالعمل» یا Instruction Following کار می‌کنه و نتایجی که تولید می‌کنه هم تقریبا هم‌ارز GPT-3.5 هستند.

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

همچنین مدل و جزییاتش در این لینک موجودند.

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

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

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

اما بحث Text Generation چطور؟ این بحث به صورت خاص در همون سال‌های ۲۰۱۶ تا ۲۰۱۸ که در دنیا مدل‌های LSTM و GPT-2 خیلی مطرح بودند، پا گرفت. بسیاری از اشخاص و شرکت‌های ایرانی، به سمت تولید مدل رفتند. در ادامه، دوتا از این مدل‌ها که «اختصاصا» برای زبان فارسی ساخته شدند رو بررسی و مشکلاتشون هم مطرح می‌کنم.

مدل‌های تجاری

در حال حاضر، تنها مدلی که به صورت تجاری در دسترسه، مدل وبسایت «خودنویس»ئه که خب، این مدل علیرغم این که خروجی‌های بسیار خوبی می‌تونه تولید کنه، تجاریه و نمیشه خیلی بررسی دقیقی روش داشت.

علاوه بر اون، خروجی‌هایی که تولید می‌کنه من رو یاد خروجی مدل‌هایی مانند GPT NeoX 20B و GPT J 6B میندازه و خب با توجه به قدمت این وبسایت، این موضوع کاملا طبیعیه.

یکی از مشکلاتی که مدل‌هایی مثل GPT J دارند، اینه که علاقه خاصی به تکرار خودشون دارند، البته این مشکل تا حدی هم به Tokenizer های مدل‌ها برمی‌گرده که برای زبان فارسی، مناسب‌سازی نشدند.

مدل‌های آزاد

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

  • مدل ParsGPT: این مدل، دقیقا GPT2 اون هم نسخه ۱۴۲ میلیون پارامتری بود که روی دیتای فارسی ترین شده، گرچه دقت نسبتا خوبی در تولید محتوای فارسی داره، اما دو تا مشکل بزرگ داشت. اول، این که طبق معمول عادت به تکرار خودش داره (این مساله رو در ادامه در موردش صحبت خواهم کرد) و دوم این که از یه جایی به بعد، دقیقا مطالب بی‌ربط به پرامپتی که داده شده تولید می‌کنه. مثلا ممکنه از یه مطلبی پیرامون هوش مصنوعی، برای شما متن یک خبر مرتبط با وزارت خارجه بورکینافاسو تولید کنه!
  • مدل GPT2 Medium Persian: این مدل باز کمی بهتر بود. مدل بزرگ‌تر و با حدود ۳۰۰ میلیون پارامتر. اما مشکل به طور واضح، دیتایی بود که مدل باهاش pretrain شده. به قول معروف روی «آشغال‌های سئوشده وب فارسی» ترین شده و احتمال این که مطالب خلاف واقع تولید کنه بسیار بالاست. گذشته از این، هنوز مشکل تولید محتوای بی‌ربط هم در این یکی مدل به چشم میخورد.

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

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

  • دیتاست بهتر
  • پارامترهای بیشتر
  • مدل پایه جدیدتر
  • خروجی‌های بهتر

خواهند بود.

مزایای مارال نسبت به مدل پایه‌ش (Mistral 7B) چیه؟

اولین روزی که از میسترال استفاده کردم متوجه شدم نسبت به مدل‌های قبلی مثل LLaMa, LLaMa2, StableLM 7B و Vicuna و امثالهم، درک بهتری از الفبای فارسی/عربی داره.

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

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

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

در حال حاضر چه مشکلاتی ممکنه در استفاده از مارال پیش بیاد؟

  • مدل در هذیان‌گویی (Hallucination) بسیار خوبه. البته، این مشکل تقریبا تمام مدل‌های زبانیه و با گذر زمان، میشه حلش کرد.
  • مدل علاقه زیادی به تکرار خودش داره 😁
  • نتایج مدل در حال حاضر خیلی factual نیستند و می‌تونه misinformation تولید کنه.
  • مدل خیلی بزرگه و با همه سخت‌افزارها قابل اجرا نیست (البته با کد ۸ بیتی که ارائه کردیم قابل اجرا میشه)
  • فرمت پرامپتش، کمی مناسب نیست و نیازه که شروع و پایان جملات به مدل آموزش داده شه.

چه چیزی برای توسعه بهتر مارال لازمه؟

  • دیتاست بهتر (نه الزاما بزرگتر) و حتی شاید دیتاست‌های تخصصی
  • ترین شدن tokenizer روی زبان فارسی

چطور از مارال استفاده کنم؟

چنانچه قصد دارید از مارال استفاده کنید، کدهای اجرای مارال روی GPU رو در این لینک قرار دادیم. می‌تونید این کدها رو روی سیستم خودتون یا در Google Colab اجرا کنید.

جمع‌بندی

پس از این که یک ترین موفق روی Stable Diffusion و ساخت مدل «مانی» که البته در این مطلب در موردش توضیح داده بودم، باعث شد که پلتفرم هوش مصنوعی مانی رو راه‌اندازی کنم و به نوعی یک AI company تشکیل بدم، مسیرم به شکلی تغییر کرد که پشتیبانی بهتر و بهتر از زبان شیرین فارسی رو بتونم به این مدل‌ها اضافه کنم.

در حال حاضر، کاربردهای زیادی برای مدل بزرگ زبانی فارسی مانند مارال میشه متصور شد. گذشته از ربات‌های پشتیبان (که با متد RAG ساخته میشن) میشه به کاربردهای بسیار بیشتری هم برای این مدل فکر کرد. دوست دارم بدونم شما چه فکری در مورد این مدل دارید؟

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

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

نصب کتابخانه tensorflow روی Raspberry Pi

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

اما خب، نمیشه در دنیای تِک ناامید شد؛ به همین خاطر دنبال راهکار و راه حلی گشتم که بتونم تنسرفلو رو روی رزبری پای داشته باشم. یکم سخت‌تر از حالت عادی (که استفاده از pip بود) شد اما ارزشش رو داشت. چون تونستم بدون مشکل مدلی که مدنظر داشتم رو لود و استفاده کنم. همچنین لازمه ذکر کنم که در این مطلب قراره یاد بگیریم چطور خود تنسرفلو رو نصب کنیم و به TFLite کاری نداریم.

رزبری پای چیه؟

رزبری پای (Raspberry Pi) یک کامپیوتر تک‌برد (SBC یا Single Board Computet) محسوب می‌شه که توسط یک بنیاد غیرانتفاعی به همین اسم در بریتانیا طراحی شده (البته تولیدش مثل عمده محصولات دیگر، در کشور چین انجام میشه). این بردها معمولا یک پردازنده ARM دارند و می‌شه روی اونها سیستم‌عامل نصب کرد. خیلی‌هاشون هم ورودی/خروجی عام‌منظوره (General Purpose Input/Output) یا همون GPIO دارند که می‌تونن رابطی بین این کامپیوتر و قطعات الکترونیکی دیگر باشند.

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

تنسرفلو چیه؟

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

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

نصب Tensorflow روی Raspberry Pi

قبل از هرچیزی باید بگم که من این پروسه رو روی Raspberry Pi 4 Model B (با رم ۲ گیگابایت) و سیستم عامل Raspberry Pi OS نسخه Bullseye (بله درست حدس زدید، سیستم‌عامل رزبری پای دبیانه 😁 و صدالبته که می‌تونید توزیع‌های دیگری هم روش نصب کنید) و ویرایش ۶۴ بیتی طی کردم. بسته به مدل رزبری شما و سیستم‌عاملتون، این پروسه می‌تونه متفاوت باشه.

نصب نرم‌افزارهای پایه

ما برای این که بتونیم تنسرفلو رو نصب کنیم، نیاز به نصب تعداد زیادی نرم‌افزار روی خود سیستم‌عامل داریم. به نظر بهتره که ابتدا، لیست بسته‌های مخازن رو بروزرسانی کنیم:

sudo apt update

و صدالبته بهتره که خود سیستم‌عامل هم بروزرسانی‌های آخرش رو دریافت و نصب کنه:

sudo apt full-upgrade

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

sudo apt install gfortran libhdf5-dev libc-ares-dev libeigen3-dev libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev

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

نصب و بروزرسانی بسته های پایتونی

خب ما تعدادی پیش‌نیاز پایتونی هم داریم (که این‌ها رو اکثرا حتی در وبسایت تنسرفلو هم می‌شه پیدا کرد) که با دستورات زیر نصبشون می‌کنیم:

pip3 install pybind11
pip3 install Cython==0.29.21
pip3 install h5py==2.10.0

و سپس بسته setuptools رو هم بروزرسانی می‌کنیم:

pip3 install --upgrade setuptools

و این یکی رو هم نصب می‌کنیم (چرا که باید فایل تنسرفلو رو با این بزرگوار دانلود کنیم)

pip3 install gdown

دانلود و نصب Tensorflow

خب ابتدا به کمک gdown فایل wheel (فایل‌های wheel فایل‌هایی هستند که pip می‌فهمه باید نصبشون کنه) مربوط به نسخه مورد نظر تنسرفلو رو دانلود می‌کنیم:

gdown https://drive.google.com/file/d/1YpxNubmEL_4EgTrVMu-kYyzAbtyLis29

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

سپس کافیه که با اجرای این دستور:

pip3 install <TENSORFLOW WHL FILE>.whl

نصب رو انجام بدید.

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

جمع‌بندی

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

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

در پایان، ضمن تشکر از این که وقت گذاشتید و این مطلب رو خوندید، باید بگم که هنوز می‌تونید من رو به یک فنجان قهوه مهمان کنید 🙂

Share

ایده هایی برای پروژه های بینایی ماشین

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

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

ایده های مرتبط با تشخیص چهره

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

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

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

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

ایده‌ های مرتبط با تشخیص کرکتر

نتایج آزمایش روی دیتاست آزمایشی

تشخیص نوری نویسه یا Optical Character Recognition که به اختصار به اون OCR هم گفته می‌شه، یکی از شاخه‌های پرطرفدار دیگر در حوزه بینایی ماشین می‌تونه به حساب بیاد. پروژه‌هایی که در این حوزه انجام می‌شن به شدت کاربردی هستند و طبیعیه که در حوزه‌های مختلفی کاربرد خواهند داشت. در اینجا تعدادی از ایده‌هایی که می‌تونید روش کار کنید رو اینجا فهرست کردم:

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

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

ایده های مرتبط با پزشکی

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

بینایی ماشین هم استثناء نیست و طبیعتا می‌تونه خیلی به کمک افراد بیاد. در این بخش، تعداد زیادی از ایده‌هایی که می‌تونه به پزشک‌ها در شناخت بهتر مشکلات بیمارهاشون کمک کنه رو فهرست کردم و خب بد نیست اگر شما هم سراغش برید و سعی کنید یکیش رو پیاده کنید (این بخش می‌تونه برای دانشجویان مهندسی پزشکی و پزشکی؛ بسیار مفید باشه)

  • تشخیص نوع تومور مغزی (تصویر این بخش، پروژه‌ای که خودم انجام دادم)
  • تشخیص رتینوپاتی دیابتی در اشخاص مبتلا به دیابت
  • تشخیص MS و مراحل مختلف اون بر اساس MRI
  • تشخیص سلول‌های سرطانی
  • تشخیص میزان درگیری ریه در بیماری‌های تنفسی (مانند COVID-19)
  • تشخیص ناهنجاری‌های پوستی
  • تشخیص آسیب‌های استخوان
  • تشخیص آسیب‌دیدگی‌ها و پوسیدگی‌های دندان

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

سایر حوزه‌ها

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

تشخیص حرکت یا Action Detection

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

خودروهای خودران

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

مصرف انرژی

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

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

کشاورزی

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

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

جمع‌بندی مطلب

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

 

Share

با هوش مصنوعی، ریاضی ۱ رو پاس کن!

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

ایده‌های زیادی در سر داشتم. برای مثال ایده بازی Red Light – Green Light که در سریال اسکوییدگیم همه دیدیم. اما این ایده علیرغم خوب بودنش، آنچنان کاربردی نبود. پس تصمیم من برآن شد که یک نرم‌افزار دیگر توسعه بدم. نرم‌افزاری که هم چالش داشته باشه، هم در نهایت یک کاربرد درست ازش بشه درآورد.

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

نتیجه حل مساله توسط هوش مصنوعی

گام اول: طرح مساله

در هر پروژه‌ای، اولین گام اینه که مطرح کنیم چه مشکلی رو باید حل کنیم. یا به قول دنیل کوهن Look for the pain. خب دردی که ما اینجا به دنبال حل کردنش بودیم، چی بود؟ این که بسیاری از دانش‌آموزا و دانشجوها سر ریاضی عمومی یا Calculus مشکل دارند. این مشکل ریشه‌ش کجاست؟ برای من شخصا مهم نیست که این ریشه رو بررسی کنم (البته به معنای این نیست که نظری در موردش ندارم، اما از حوصله این مطلب خارجه).

حالا درد این که بسیاری از دانشجوها و دانش‌آموزها مشکل دارند، چطور میشه براشون یک مسکن خوب تجویز کرد؟ بعنوان یک مهندس هوش مصنوعی، یا بهتر بگم مهندس بینایی ماشین در ذهنم این ایده چرخید و اون این بود که:

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

و این پروژه، در نظر پروژه بسیار بسیار بزرگی بود اما در نهایت، پروژه ساده‌ای شد. در ادامه، در راهی که طی شد توضیح خواهم داد.

گام دوم: انتخاب ابزار

گام دوم برای من، انتخاب ابزار بود. اول از همه می‌خواستم برم سراغ OCR های آماده برای تشخیص مسائل پارامتری مثل x و y و … . اما بعد دیدم که اینجا علاوه بر حروف و اعداد، نشانه‌ها هم هستند. ضمن این که به شکلی باید توان و … هم تشخیص داد. پس کمی پروژه رو نگه داشتم تا به ابزارها فکر کنم.

بعد از مدتی تحقیق و تفحص، به دارک‌نت رسیدم که برای ترین کردن YOLOv3 و YOLOv4 استفاده میشه و خب دارک‌نت مشکلات زیادی هم با خودش به همراه داره. برای مثال کاملا در سی‌پلاس‌پلاس نوشته شده و روی سیستم‌های مختلف باید از نو کامپایل بشه. با CPU درست کار نمی‌کنه. کامپایل کردنش روی مک یا ویندوز دردسره و انتقال دادنش به Google Colab هم می‌تونه تا حد زیادی مشکل‌ساز بشه.

بعد از اون الگوریتم YOLOv5 رو کشف کردم. تقریبا همه مراحل کاملا پایتونی پیش می‌رفت و این عالی بود. کم کم دیدم که میشه بعد از ترین کردن قضیه، از pytorch هم استفاده کرد و اشیاء رو تشخیص داد و از اون بهتر این بود که در تشخیص اشیاء، می‌شد خروجی pandas هم گرفت که مختصات شیء مورد نظر به همراه لیبلش در اون data frame خاص موجود بودند. پس به این شکل تشخیص این که ما با چه چیزی روبرو هستیم هم ساده‌تر از گذشته می‌شد.

وقتی این ابزار رو با چند چیز مختلف تست کردم، نوبت این رسید که در این پروژه حتما ازش استفاده کنم. اما این تمام ماجرا نیست. دقیقا وقتی که سمت OCR ماجرا هندل می‌شد، یک بحث خیلی مهم می‌موند. بحث این که چطوری باید مساله حل بشه؟ برای حل مساله هم از Wolfram Alpha گفتم کمک می‌گیرم.

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

نمونه داده‌های پروژه
نمونه داده‌های استفاده شده در این پروژه

گام سوم: جمع‌آوری داده

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

بعد از این که مسائل ریاضی رو روی این سطوح و با دست‌خط‌های مختلف داشتم، نوبت عکاسی ازشون بود. از هر بار نوشتن، چندین عکس از چند زاویه گرفتم. چرا که زوایای مختلف باعث میشن توزیع نور هم در تصاویر یکسان نباشه و این خودش یک مرحله data augmentation رو برای من کاهش می‌داد.

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

گام چهارم: پیش‌پردازش داده

بعد از این که ما داده‌های مورد نیاز خودمون رو جمع کردیم، نیازمند اینیم که داده رو پیش‌پردازش کنیم. به طور کلی، پیش‌پردازش داده به پروسه‌ای گفته میشه که در اون قراره داده ها تمیز بشن، تغییر کنند (یا به قولی data augmentation رخ بده)، برچسب زده بشن و داده‌های غیرلازم (یا همون نویز) دور ریخته بشه.

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

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

پروسه برچسب‌زنی

گام پنجم: آموزش مدل YOLOv5

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

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

و گام نهایی: آزمایش مدل و نوشتن رابط ولفرام آلفا

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

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

در نهایت هم برای این که عملکرد قضیه رو ببینید، این ویدئو کوتاه رو می‌تونید تماشا کنید که هم inference رو تست می‌کنیم هم حل مساله با ولفرام رو:

جمع‌بندی و مشکلات این نرم‌افزار

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

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

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

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

Share

داستان پروژه جبیر – استیو جابز نه، خود خودم (قسمت آخر)

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

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

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

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

جشنواره خوارزمی

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

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

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

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

اما این تمام ماجرا نبود …

محمدرضا حقیری (چپ) و رضا باقرزاده (راست) - توسعه‌دهندگان پروژه جبیر

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

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

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

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

جشنواره خوارزمی استانی

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

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

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

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

جشنواره خوارزمی کشوری

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

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

خلاصه ۵ شهریور ۹۱ شد. ما رفتیم فرودگاه بندرعباس و سوار یک عدد ایرباس A300 هواپیمایی ماهان شدیم و به سمت فرودگاه مهرآباد تهران پرواز کردیم. در تهران هم مسول آموزش و پرورش هرمزگان (همون آقای میانسالی که کارهای ما رو انجام داده بود) آمد و ما رو به خوابگاه دانشجویی دانشگاه تربیت دبیری شهید رجایی برد. حقیقتا تا حد خوبی حالمون گرفته شد، چرا که به ما گفته شده بود برای ما هتل رزرو شده و از این دست چرت و پرتا. ولی خب ایرادی نداشت، فرداش روز بزرگی بود.

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

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

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

رفتن روی BSD، بزرگترین اشتباه

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

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

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

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

واکنش‌های جامعه نرم‌افزار آزاد ایران و پیامدهایش

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

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

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

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

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

سخن آخر

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

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

از نظر فنی هم، درس‌های خوبی گرفتم. برای مثال اندازه افرادی که LPIC 1, 2 می‌گذرونند از لینوکس یاد گرفتم. تا حد خوبی پایتون یاد گرفتم. حتی همین امر باعث شد که بعدتر، روبی یاد بگیرم و … . همچنین یاد گرفتم که نیاز نیست برای متفاوت بودن حتما به سمت BSD رفت بلکه یک رابط کاربری متفاوت هم می‌تونه به خودی خود، تا حد خوبی تاثیر مثبت روی ذهن افراد داشته باشه.

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

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

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

Share

داستان پروژه جبیر – رویای نوجوانی استیو جابز شدن (قسمت اول)

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

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

چرا این مطلب نوشته شد؟

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

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

حالا وقت اینه که حدودا ده سال در زمان سفر کنم و برسیم به سال ۸۹-۹۰ که این پروژه رو استارت زدم، بگم چی شد که این پروژه به ذهنم رسید و چطور شد که رفتم سمت لینوکس و … .

جرقه‌های اولیه

بسیاری از افرادی که من رو می‌شناسند، از ارادتی که نسبت به استیو جابز دارم، خبر دارند. سال حدود ۸۹ بود و من در مجلاتی که اون زمان به صورت روتین از قیمت فلان گوشی و فلان کامپیوتر و فلان کارت گرافیک می‌نوشتند از رونمایی از محصولات جدید اپل مثل iPhone 4 یا iPad می‌خوندم. بعد مدتی، با استیو جابز و زندگی اون آشنا شدم و فهمیدم که این بابا، آدمی بوده که خیلی خیلی از صفر شروع کرده (تقریبا بر خلاف خیلی از ابرپولدارهای سیلیکون‌ولی، ایشون اصلا خونواده متمول و حتی اهل فنی نداشته و خونواده‌ای که درش رشد کرده بوده یک خونواده خیلی معمولی بوده).

خلاصه آشنایی با استیو جابز، بعدش خریدن یک iPod Touch 3G در من جرقه‌ای روشن کرد. جرقه‌ای مبنی بر این که «من باید دنیا را تغییر بدم». تغییر دنیا، کار سختیه. خیلی از ما جایی از زندگی این قصد رو داشتیم ولی کار خاصی براش نکردیم. خیلی‌ها هم حرکتایی زدیم ولی بعدا سرمون به سنگ خورده. خلاصه که خیلیامون اونقدری دیوانه بودیم که روزی بخوایم دنیا رو تغییر بدیم و به قول استیو جابز، افرادی که اونقدر دیوانن که فکر می‌کنن می‌تونن دنیا رو تغییر بدن، دقیقا همونایین که دنیا رو تغییر میدن.

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

خلاصه شبانه‌روز در حال ایده‌پردازی بودم. اما ایده‌ها همین جا متوقف نشدند. ایده‌ها خیلی بیش از اون چه که فکر کنید پیش رفتند در ذهنم. اما نیاز داشتم یک محرک خیلی اولیه داشته باشم. نمی‌دونستم چه محرکی ولی بهرحال یک محرک نیاز بود.

محمدرضا حقیری (چپ) و رضا باقرزاده (راست) - توسعه‌دهندگان پروژه جبیر

من باید سیستم‌عامل بسازم

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

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

در تابستان ۸۹ یا ۹۰ بود که درست یادم نیست؛ در یکی از شماره‌های دانشمند کتاب «سیستم‌های عامل: طراحی و پیاده‌سازی» اثر «اندرو استوارت تنن باوم» معرفی شده بود. به صورت خلاصه بگم، در این مطلب اومده بود که انگیزه تنن‌باوم از نوشتن این کتاب چی بوده و چه فرایندی (بسته شدن کد منبع یونیکس نسخه ۷) باعث شد که سیستم‌عامل خودش رو از بیخ بنویسه و بعد از اون، شروع کنه به این که مراحل توسعه رو مستند کنه و در قالب یک کتاب برای دانشجویانش و هم‌چنین علاقمندان عرضه‌ش کنه.

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

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

نخستین مطالعات، نخستین پیاده‌سازی‌ها

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

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

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

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

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

Share

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

سخن آخر

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

موفق باشید 🙂

 

Share

از کجا برای پروژه‌های هوش‌مصنوعی و علوم داده، داده مناسب تهیه کنیم؟

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

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

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

Kaggle

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

برای دسترسی به کگل، می‌تونید روی این لینک کلیک کنید.

Academic Torrents

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

برای دسترسی به این وبسایت، می‌تونید از طریق این لینک اقدام کنید.

وبسایت دانشگاه‌ها

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

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

دیتاست‌های متن‌باز شرکت‌ها

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

برای مثال، در این لینک می‌تونید دیتاست‌های گوگل رو ببینید. یکی از نمونه‌هایی که خود گوگل اینجا مطرح کرده، دیتاست مرتبط با بیماری کووید-۱۹ است. (لینک)

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

خزیدن (Crawling) صفحات وب

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

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

دوربین، میکروفن، حرکت!

اگر داده‌های مورد نیاز ما حتی به شکلی که بتونیم کراول کنیم موجود نبود چی؟ ساده‌ست. ابزارهای ورودی خوبی برای کامپیوتر وجود داره که می‌تونه بهمون کمک کنه تا داده مورد نظر رو جمع‌آوری کنید.

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

جمع‌بندی

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

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

Share