احتمالا شما هم در دهه هشتاد شمسی، تبلیغ معروف تلویزیونی «به همین سادگی، به همین خوشمزگی، پودر کیک رشد» رو یادتون باشه. پودرهای کیک آماده، یکی از اختراعات جالب بشر بودند که هنوز هم فکر کردن بهشون برای من شخصا جالبه. اما موضوعی که وجود داره، اینه که این پودرها، باعث شدند مفهومی به اسم اثر IKEA یا IKEA Effect به وجود بیاد.
در این مقاله، قصد دارم که ربط پودر کیک آماده به آیکیا رو توضیح بدم و بگم که چرا مهمه که از اثر آیکیا در تولید محصول استفاده کنیم و در نهایت هم یک نمونه خیلی خوبی از اثر آیکیا رو با هم نظارهگر خواهیم بود.
پودر کیک آماده: مردها هم آشپزی میکنند!
در سال ۱۹۳۰ میلادی شرکتی با نام Duff and Sons محصولی به بازار ارائه کرد. پودر کیک آماده! این محصول با شعار مردها هم آشپزی میکنند سعی داشت بگه در حدی کار پختن کیک رو ساده کرده که آقایون هم میتونن صرفا با اضافه کردن آب یا شیر به این پودر و قرار دادنش در فر، کیک بپزند.
اما یک مشکلی به مدت دو دهه، گریبان این محصول رو گرفت. نه فقط شرکت Duff and Sons بلکه هر شرکت دیگری که پودر کیک تولید میکرد، چنین معضلی رو باهاش روبرو بود. نمیتونستند بفروشند.
اما چرا یک محصولی که همه جوره کامل بود نمیتونست بفروشه؟ آیا مساله اعتماد بود؟ آیا مساله کیفیت بود؟ نه. اتفاقا مشتریان هرچند اندک این شرکتها، از کیفیت کیکی که به دست میآوردند راضی بودند و کاملا به تولیدکننده اعتماد میکردند.
باگ ماجرا جای دیگری بود. شاید جایی که این محصول سعی داشت به طور کلی دخالت انسان در پخت کیک رو حذف کنه و این خوشایند خیلی از افراد نبود. مثل همون کاری که خیلیها انتظار دارند ایجنتهای هوش مصنوعی انجام بدند.
یک تخم مرغ اضافه کنید!
بالاخره بعد از دو دهه که محصول «پودر کیک آماده» در بازار موجود بود، شرکتی به نام Betty Crocker اومد و یک ایده بهتری داد. اینها گفتند که چطوره خود مشتری هم بخشی از پروسه تولید کیک بشه؟
درسته که این محصول میخواست زحمت پختن کیک رو کم کنه، اما در عین حال این کاهش زحمت و هزینه تا حد خیلی زیادی هم خوشایندی فرایند پخت کیک رو کم میکرد. به همین خاطر اینها گفتن قبل از این که آب یا شیر به این پودر اضافه کنید، یک عدد تخم مرغ هم اضافه کنید.
همین هک ساده، باعث افزایش چند برابری فروش این محصول شد. اما حالا ربطش به آیکیا چیه؟ بهتره یه بررسی روی آیکیا داشته باشیم!
آیکیا: کسب و کار اضافه کردن تخم مرغ به پودر کیک
اگر در فضای کسب و کار و بخصوص حوزه لوازم خانگی فعال باشید حتما اسم آیکیا رو شنیدید. یک برند سوئدی که بخاطر یک موضوع خیلی معروفه:
هرچیزی که ازش میخرید رو خودتون باید سر هم کنید.
در واقع آیکیا کار طراحی، برش، سوراخکاری و به طور کلی فرایندهای کارگاهی رو روی محصول مورد نظر مثل کتابخونه، انجام داده. شما فقط و فقط باید اینها رو به هم وصل کنید. حتی میتونید هزینهای پرداخت کنید که کارشناسی از آیکیا بیاد و برای شما چنین کاری کنه.
اما چرا این موضوع «سرهم کردن کتابخونه توسط خودمون» خیلی مهمه؟ چون داره مشتری رو وارد پروسه تولید میکنه و این یعنی فروش حس به مشتری.
اگر دقت کنید، خیلی از برندهای معروف جهان، مثل اپل، رولکس، گوچی، لامبورگینی و … بیش از این که روی محصول تمرکز کنند دارند روی حسی که مشتری از محصولشون دریافت میکنه تمرکز میکنند. برای مثال شعار خودروساز ایتالیایی، فراری؛ این بوده که شما وقتی یک فراری میخرید که بخواهید برای خودتون کسی باشید. در واقع به این شکل خاص بودن خودروهای خودش رو نشون داده و این خاص بودن رو به مشتری هم انتقال داده.
این مورد که مشتری رو بخشی از فرایند تولید محصول کنیم، بخاطر همین حرکت آیکیا به اثر آیکیا معروف شده و حتی باعث شده که آیکیا طرفدار خاص خودش رو پیدا کنه. یک برندی که نه لاکچریه نه حتی عقبه خیلی خاصی داره و صرفا یک برند مبلمان و لوازم خانگی با کیفیت مطلوبه، بتونه برای خودش یک جامعه هواداری تشکیل بده و این رو با ایجاد یک حس خوب در مشتری تونسته داشته باشه!
اثر آیکیا در خدمت تکنولوژی
قبل از این که بخوام از نمونههای عملی اثر آیکیا در تکنولوژی صحبت کنم، لازمه ذکر کنم خود آیکیا، از اثر آیکیا در تکنولوژی استفاده کرده. چطور؟ خیلی سادهست.
آیکیا از اولین برندهای لوازم خانگی بوده که تکنولوژی واقعیت افزوده رو به سیستمهای نرمافزاریش منجمله وبسایت و اپلیکیشنش اضافه کرد و اینطوری حتی حس داشتن محصولاتش رو قبل از خرید هم تونست به کاربران منتقل کنه.
اما در یک سال اخیر، ابزارهای جالبی مثل Bolt یا v0 دیدیم. این ابزارها هم در واقع همین اثر آیکیا رو دارند در زمینه برنامهنویسی و تولید نرمافزار پیادهسازی میکنند.
این ابزارها به افرادی که تجربه زیادی در راهاندازی استارتاپ یا ساخت نرمافزار ندارند، کمک میکننده ایدههاشون رو بتونن پیادهسازی و ارزیابی کنند و اون دسته افرادی که کمی کارکشتهتر بودند، تونستند از این ابزارها برای جلو انداختن کار خودشون نهایت استفاده رو ببرند و در مدتزمان بسیار کوتاهی، نرمافزارهایی بسازند که بتونه درآمدزایی داشته باشه یا اصلا به صورت کامل توسط یک موجودیت دیگر تملیک بشه.
خلاصه اثر آیکیا، یک حجم خوبی دوپامین رو در مغز مشتری شما ترشح میکنه و این امر باعث میشه مشتری شما نوعی اعتیاد به محصولتون پیدا کنه. احتمالا در آینده از این که چطور میتونیم این اثر رو در محصولاتمون داشته باشیم، بنویسم!
جمعبندی
در عصر امروز، جذب مشتری سختتر از گذشته شده. بسیاری از محصولاتی که ما میسازیم، بهترش توسط غولهای بازار ساخته و عرضه میشه و ما باید بتونیم از چنین آشفتهبازاری، جان سالم به در ببریم. استفاده از هکهای سادهای مثل یک تخممرغ اضافه کن یا همین اثر آیکیا، میتونه به راحتی جذب تعداد خوبی از مشتریهای ما رو تضمین کنه. به همین دلیل، پس از مدت نسبتا طولانی دست به قلم (کیبرد؟) شدم و این مطلب رو نوشتم تا اگر شما هم در حال توسعه محصولی هستید، به نکاتی که حول جذب مشتری با این هکهای شناختی وجود داره توجهی دوچندان کنید.
پاییز دو سال پیش بود که ChatGPT آمد و به شکل خاصی بازار همه چیز رو عوض کرد یا بهتره بگم که به هم ریخت 😁 در این مدت نه فقط OpenAI که هزاران شرکت دیگر هم دست به کار شدند و شروع کردند به ارائه مدلهای زبانی بزرگ یا همون LLMها و خواستند که به شکلی با OpenAI رقابت کنند.
الان که دو سالی از اون روزها گذشته منتها موضوع کمی تفاوت داره و بیش از این که سمت ارائه مدل بریم، بهتره به سمت agent یا «عامل» بریم که خب خودش یک بحث مفصله.
دیشب، در بلاگ انگلیسیم کمی در مورد مدلهای بزرگ و ایجنتها صحبت کردم و امروز تصمیم گرفتم که بلاگ فارسیش رو هم بنویسم که هر دو طرف، محتوای مناسب رو داشته باشیم.
ایجنتها، عملگرایی به LLMها اضافه میکنند.
اگر دنبالکننده بلاگ و در کل محتوای من باشید، احتمالا میدونید که من هم در بازی LLM بودم و مثلا یکی از LLMهای اوپن سورسی که روش کار کردم مدل مارال هفت میلیارد پارامتری بود که روی Alpaca Persian تمرین داده شد.
اما آیا یک مدلی که سوال-جواب کنه کافیه یا به چیزی بیشتر نیاز داریم؟ در واقع برای این که LLMها بتونن موثر واقع بشن، باید بتونن با ابزارهای مختلف تعامل کنند. حالا شما فرض کنید که بخواهیم این تعامل رو در سطح فاینتیون کردن، به مدل اضافه کنیم.
یعنی فرض کنید که ما APIهایی از دیجیکالا، اسنپ، دیوار و مثلا ابر آروان بگیریم. سعی کنیم با کمک تعدادی API Call نمونه، مدل رو تیون کنیم. حالا فرض کنید یک نفر بخواد این مدل رو برای استفاده از تپسی یا باسلام به کار بگیره. چی میشه؟ هیچی! مجددا بار فاینتیون با APIهای جدید میفته روی دوش کاربر.
برای حل این مشکل، ما نیاز به agentها داریم. در واقع در مثالهای فوق هر API و ابزاری که لازم داریم رو برمیداریم، میبریم یک جایی براشون توابع درستی مینویسیم و سپس با کمک LLMها خروجی رو «انسانی» یا Humanize میکنیم. به این شکل بار فاینتیون کردن LLMهم به دوش نمیکشیم و همه چیز هم عالی پیش خواهد رفت.
ساخت ایجنت بدون استفاده از فریمورک
دقیقا از زمانی که OpenAI و سایر شرکتهایی که LLM ارائه دادند APIهای چت و یا Instruction Following خودشون رو هم ارائه کردند، فریمورکهای زیادی مثل Flowise یا Crew AI ساخته شدند که به شما کمک کنند تا ایجنت بسازید.
اما راستش رو بخواهید – همونطور که در بلاگ انگلیسی هم توضیح داده بودم – خیلی از این فریمورکها یه حجم عجیب و غریبی از پیچیدگی رو به فرایند ساخت ایجنت دارند اضافه میکنند.
نتیجه این شد که شخصا به دنبال روشی گشتم که بتونم بدون استفاده از فریمورک خاصی، به راحتی بتونیم یک ایجنت بسازیم. برای همین لازم بود که درک کنم ایجنت اصلا چی کار میکنه؟ چرا انقدر مهمه که ما بتونیم ایجنت رو درک کنیم؟ و صدالبته از هر ایجنتی که اسمش «اسمیت» باشه دوری بجوییم 😂
ایجنتها یک سری «وظیفه» و «ورودی مناسب هر وظیفه» رو درک میکنند. این وظایف یا تسکها در واقع توابعی هستند که در برنامهمون قرار ادادیم که بتونن یک کاری رو انجام بدن (مثلا بره رخداد n ام سری فیبوناچی رو حساب کنه) و ورودیهاشون هم دیتاییه که ایجنت باید با هوش خودش تشخیص بده و بسازه.
در نهایت نیاز به مکانیزمی داریم که بیاد این وظایف و ورودیها رو اجرا کنه، خروجیشون رو دوباره بده به LLM و ازش بخواد که Humanizeش کنه. گذشته از این بد نیست که ایجنت ما یک حافظه کوچکی هم داشته باشه.
نمونه یک ایجنت ساده با پایتون
سلب ادعا: از اونجایی که کد این ایجنت رو در گیتهاب گذاشتم، صرفا مراحل ساخت ایجنت ساده رو توضیح میدم و باقیش رو میتونید از گیتهابم ببینید و ایده بگیرید.
اولین گام ما برای ساخت ایجنت باید این باشه که یک LLM مناسب انتخاب کنیم. شما مختارید هر LLMای که یک OpenAI Compatible API ارائه میده انتخاب کنید اما من شخصا دارم از پروژه جبیر خودم استفاده میکنم 😁
بعد از اون، لازم داریم که بیاییم یک کلاینت ساده OpenAI درست کنیم که بتونه با API مورد نظر ما کار کنه:
from openai import OpenAI
client = OpenAI(api_key="FAKE", base_url="https://openai.jabirpoject.org/v1")
همونطور که قبلا در این پست توضیح داده بودم، کتابخونه OpenAI در پایتون نیازمند یک API Keyئه که اینجا ما از FAKE استفاده کردیم براش.
حالا یک کلاس ایجنت ساده درست میکنیم که حافظه هم داشته باشه:
class Agent:
def __init__(self, system=""):
self.system = system
self.messages = []
if self.system:
self.messages.append({"role" : "system", "content" : system})
def __call__(self, message):
self.messages.append({"role" : "user", "content" : message})
result = self.execute()
self.messages.append({"role" : "assistant", "content" : result})
return result
def execute(self):
completion = client.chat.completions.create(
model = "jabir-400b",
messages = self.messages,
temperature = 0.0
)
return completion.choices[0].message.content
همونطوری که میبینید، این ایجنت میتونه یک تاریخچه از چیزهایی که بهش گفتیم (و بهمون گفته) نگه داره و کم کم باید بریم سراغ این که بهش اکشنهای مورد نظر رو اضافه کنیم.
ولی خب بهتره قبل از اضافه کردن اکشن، تستش کنیم. برای تستش هم این کد رو میتونید اجرا کنید:
sample_agent = Agent("You are a helpful assistant")
print(sample_agent("What is 1+1?"))
کد نمونه با اکشن
اگر دوست دارید بدونید که این ایجنت ما با اکشن چطوری کار میکنه، میتونید به این مخزن گیتهاب مراجعه کنید و ببینید که چطور به راحتی میشه یک اکشن به همین ایجنت ساده اضافه کرد و بار فریمورکها رو هم به دوش نکشید.
جمعبندی
اگر طی دو سه سال گذشته محتوای این بلاگ رو خونده باشید میبینید که علاقه من به هوش مصنوعی از پروژههایی مثل ریاضی ۱ رو با هوش مصنوعی پاس کن یا پلاکخوان فارسی که با Yolo v5 پیاده کرده بودم جدی شد.
این علاقه، کم کم به سمت Generative AI رفت و خب طبیعتا همین علاقه باعث ساختهشدن پلتفرم مانی و همچنین آتلیه شد. اما خب در سال ۲۰۲۵ احتمالا بیش از این که به مدلهای جدید نیاز داشته باشیم، نیاز داریم که مدلها رو به سمت agentic شدن بیاریم و اپلیکیشنها رو به شکل AI agent داشته باشیم.
در زمستان ۱۴۰۱ سرویس مانی، به صورت یک پروژه شخصی و با الهامگیری از میدجرنی، ساخته و سپس در فروردین ۱۴۰۲ به صورت عمومی و به صورت پلتفرم ارائه عمومی شد.
از همان روزهای اولی که مانی عرضه شد بسیاری از دوستان به دنبال سرویس «تصویر به تصویر» یا Image to Image بودند که بتوانند از تصاویر شخصی خود، عزیزان یا حتی محصولاتشان تصاویر شخصیسازیشده ایجاد کنند.
اما یک مساله مهم که وجود داشت این بود که عموم تکنیکهای تصویر به تصویر صرفا از تصویر ورودی «الهامگیری» کرده و سپس به شما این اجازه را میدهند که تصویر نهایی «تا حدی شبیه به تصویر ورودی» دریافت کنید. برای این منظور، در نظر گرفته بودم تا ابزار بهتری توسعه دهم.
مشکلی که وجود داشت
مشکلی که وجود داشت، این بود که عموم ابزارها، حتی ابزارهای متنباز که با Stable Diffusion همخوانی داشتند صرفا Face Swapping انجام میدادند. در واقع این ابزارها، تصویری از شما را میگرفتند و گاهی آن را «به زور» در تصویر تولیدشده جای میدادند.
در همین حین، ایدهای برای من مطرح شد. چه میشد اگر میتوانستیم تصاویر ورودی کاربر را بخشی از هوش مصنوعی خود کنیم؟ این شد که طرح اولیه یا به قولی Flow چیده شد.
پاسخ به مشکل
پاسخی که برای این مشکل در نظر گرفتم بسیار ساده بود. در نظر گرفتم که چه میشود اگر بتوانیم از کاربر تعدادی تصویر دریافت کنیم، این تصاویر را به خورد یک مدل بدهیم و به عبارتی یک Adapter برای مدل مورد نظر درست کنیم.
مدتی هم بود که در حال تحقیق و توسعه روشی بر روی مدل FLUX Dev از شرکت Black Forest Labs بودم که بتوانیم در مدتزمان کوتاهی، یک LoRA یا Low Rank Adapter برای مدل مذکور بسازیم. این فرصت را مغتنم شمردم و پروتوتایپی از چیزی که در نظر داشتم را با کمک زیرساخت شرکت modal ساختم.
پس از آن، کد نوشتهشده برای بهبود فرایند ساخت LoRA را مرحله به مرحله بهبود دادم و سپس با کمک وبسایت Fal AI اقدام به بهبود فرایند تولید تصویر کردم.
در نهایت، تمامی این فرایند باعث شد تا استارتاپی با نام آتلیه به وجود آید. جایی که کاربران، بتوانند متفاوت دیده شده و رویایشان را زندگی کنند.
آتلیه چیست و چه میکند؟
آتلیه، یک پلتفرم هوش مصنوعی است که به شما کمک میکند تا تنها با ارائه یک فایل zip حاوی ۵ الی ۱۰ عکس از خودتان، عزیزانتان یا حتی محصولاتی که تولید میکنید یا میفروشید؛ تصاویر خلاقانه تولید کنید.
در واقع آنچه در مانی ارائه میشد، صرفا ارائه یک پلتفرم برای تولید تصویر از متون ورودی (مشابه میدجرنی یا Dall-E) بود اما آتلیه، مدلهای هوش مصنوعی اختصاصی را با هزینه اقتصادی برای شما تولید میکند و میتوانید از خروجی آن به مقاصد مختلف، استفاده کنید.
چگونه از آتلیه استفاده کنیم؟
برای استفاده از آتلیه، میتوانید ابتدا در وبسایت آتلیه عضو شوید. برای عضویت کافیست یک ایمیل و یک پسورد وارد کنید و نیازی به تایید ایمیل نیست.
پس از عضویت، با مطالعه راهنمای ساخت مدل، کافیست یک مدل هوش مصنوعی دلخواه ایجاد کنید. لازم به ذکر است که اگر از تاریخ ۳۰ آذر الی ۱۴ دی ۱۴۰۳ به عضویت وبسایت درآیید، یک مدل و ده تصویر رایگان هدیهای از طرف ما به شماست.
پس از این که مدل مورد نظر ساخته شود، شما قادر خواهید بود که تصاویر مد نظر خود را ایجاد کنید. برای ایجاد تصویر نیز کافیست تا راهنمای ایجاد تصاویر را مطالعه کنید.
بازخوردها، نظرات و پیشنهادات شما
چنانچه از آتلیه استفاده کردید و بازخورد، نظر و پیشنهادی در رابطه با سرویس دارید، همیشه از طریق فرم تماس وبسایت آتلیه قادر خواهید بود تا با ما تماس بگیرید و نظرات، پیشنهادات، بازخوردها و انتقادات خود را مطرح نمایید.
چندی پیش، در مورد پیشنیازهای یادگیری بینایی ماشین در همین وبلاگ نوشته بودم (لینک) و بعد از اون هم در مطلبی در ویرگول، در مورد این که چرا موجودیتی به اسم «جامعه بینایی ماشین» رو راه انداختم (لینک) صحبت کردم. پس از انجام چندین پروژه و تولید چندین محتوا پیرامون این موضوع، امروز در این پست قراره که ایده هایی که شما میتونید در پروژه های بینایی ماشین و پردازش تصویر خودتون به کار بگیرید رو بررسی کنیم.
توجه داشته باشید که در این پست، فرض رو بر این گذاشتیم که شما با هوش مصنوعی، پایتون، بینایی ماشین و … آشنایی لازم و کافی رو دارید و حالا قصد دارید یک پروژه جدی باهاش انجام بدید اما نمیدونید باید چی کار کنید. اگر آشنایی ندارید هم مشکلی نیست، میتونید این مطلب رو صرفا برای ایجاد علاقه و یا رفع کنجکاوی بخونید 😁
ایده های مرتبط با تشخیص چهره
تشخیص چهره، همیشه یکی از پرطرفدارترین شاخههای پردازش تصویر و بینایی ماشین بوده است. چرا که با استفاده از تشخیص چهره، میتوانیم عملیات جالبی انجام دهیم و پروسههای زیادی از یک کار بزرگتر را، خودکار کنیم. همچنین میتوانیم امنیت خانه و محل کار و … را نیز با استفاده از تشخیص چهره تامین کنیم.
در لیست زیر، تعدادی از پروژههای مرتبط با تشخیص چهره رو برای شما فهرست کردهام:
حضور و غیاب مبتنی بر چهره
دوربین امنیتی (به این شکل که وقتی شخص ناشناسی وارد حریم دوربین شد از طریق ایمیل یا SMS و … به شما اطلاع بده)
قفل هوشمند ( به شکلی که اگر شما رو دید در رو باز کنه و در غیر این صورت، یک سیستم مانند دزدگیر یا سیستم امنیت خونه رو راهاندازی کنه)
تشخیص حالت و احساسات چهره
تشخیص خوابآلودگی (مثلا در یک کلاس این پروژه میتونه کاربردی باشه).
همه ایدههای بالا، به سادگی قابل انجام هستند. فقط کافیه که کار با کتابخانهها و تئوری پردازش تصویر رو بلد باشید. شاید دو سه روزه بتونید یکی از این پروژهها رو به ثمر برسونید 😁
ایده های مرتبط با تشخیص کرکتر
تشخیص نوری نویسه یا Optical Character Recognition که به اختصار به اون OCR هم گفته میشه، یکی از شاخههای پرطرفدار دیگر در حوزه بینایی ماشین میتونه به حساب بیاد. پروژههایی که در این حوزه انجام میشن به شدت کاربردی هستند و طبیعیه که در حوزههای مختلفی کاربرد خواهند داشت. در اینجا تعدادی از ایدههایی که میتونید روش کار کنید رو اینجا فهرست کردم:
تشخیص و استخراج شماره پلاک (که پیشتر در موردش نوشتم – لینک)
تشخیص و حل مسائل ریاضی/فیزیک (که این هم پیشتر در مورد نوشتم – لینک)
تشخیص دستخط فارسی
تشخیص خط نستعلیق (و در کل خوشنویسی) فارسی
تشخیص نسخه پزشکی (نکته جالب اینه که در نسخ پزشکی، بسیاری از خطخطیهایی که میبینید در واقع روش مصرف و دوزاژ دارو هستند، که طبق کدگذاری خاصی نوشته میشن).
البته باید این نکته رو هم عرض کنم خدمتتون که دنیای OCR خیلی گستردهست. تقریبا هرجایی که شما با نوشتن سر و کار داشته باشید، میتونید از OCR هم اونجا استفاده کنید. خیلی چیزا اینجا به خلاقیت و نیازهای خودتون برمیگرده. اگر ایده دیگری داشتید، میتونید در بخش نظرات همین مطلب با من به اشتراک بذارید.
ایده های مرتبط با پزشکی
هوش مصنوعی در علم پزشکی، جایگاه خاصی در سالهای اخیر داشته. چرا که همه دانشمندان کامپیوتر و همچنین پزشکی، دریافتند که با استفاده از راهحلهای هوشمند، میتونند به حد قابل توجهی، خطاهای پزشکی رو کاهش بدند. همچنین تحقیقات دارو و واکسن هم به شدت سریعتر میتونن انجام بدند. برای مثال، همین دنیاگیری ویروس کرونا که در سال ۲۰۱۹ آغاز شد و کماکان ادامه داره رو بررسی کنیم، بارها از این که از هوش مصنوعی برای پیدا کردن ترکیبات دارویی موثر بر ویروس استفاده شده، صحبت کردند. همچنین در پروسه ساخت واکسن هم بسیاری از مراحل رو به ماشین سپردند و به هوش ماشینی اعتماد کردند. شاید یکی از دلایلی که واکسن این بیماری انقدر سریع ساخته شد، استفاده از همین راهکارهای هوشمند در تولید بوده.
بینایی ماشین هم استثناء نیست و طبیعتا میتونه خیلی به کمک افراد بیاد. در این بخش، تعداد زیادی از ایدههایی که میتونه به پزشکها در شناخت بهتر مشکلات بیمارهاشون کمک کنه رو فهرست کردم و خب بد نیست اگر شما هم سراغش برید و سعی کنید یکیش رو پیاده کنید (این بخش میتونه برای دانشجویان مهندسی پزشکی و پزشکی؛ بسیار مفید باشه)
تشخیص نوع تومور مغزی (تصویر این بخش، پروژهای که خودم انجام دادم)
تشخیص رتینوپاتی دیابتی در اشخاص مبتلا به دیابت
تشخیص MS و مراحل مختلف اون بر اساس MRI
تشخیص سلولهای سرطانی
تشخیص میزان درگیری ریه در بیماریهای تنفسی (مانند COVID-19)
تشخیص ناهنجاریهای پوستی
تشخیص آسیبهای استخوان
تشخیص آسیبدیدگیها و پوسیدگیهای دندان
طبیعتا اینها، همه کارهایی که میتونیم در حوزه پزشکی با کمک بینایی ماشین و پردازش تصویر انجام بدیم نیستن و این دامنه میتونه به شدت گستردهتر باشه. طبیعیه که گستردگی این دامنه به خلاقیت خودتون و نیازهاتون برمیگرده. همچنین طبیعتا اگر شما دانشجوی مهندسی پزشکی یا رشته پزشکی و رشتههای مرتبط باشید، احتمالا ایدههای بهتری خواهید داشت.
سایر حوزهها
چندین و چند حوزه دیگر هست که خب مثل باقی حوزههای پوشش داده شده در این مطلب، نمیشه ایدههای پروژههای بینایی ماشین و پردازش تصویرشون رو فهرست کرد. به همین خاطر، توضیح اجمالی راجع به هر کدوم میدم تا شما ببینید که کدوم حوزه رو بیشتر دوست خواهید داشت و در کدوم حوزه ممکنه بتونید ایدهپردازی بهتری داشته باشید.
تشخیص حرکت یا Action Detection
این حوزه به طور خاص، میتونه برای کارهایی مثل تشخیص و ترجمه همزمان زبان اشاره (لینک)، تشخیص حرکات ورزشی و یا تشخیص «نیت» افراد بشه. برای مثال، میتونیم سیستمی بسازیم که حرکات بعدی فرد در یک نبرد تن به تن (مثل مسابقه بوکس) رو پیشبینی کنه و به مربیها و نوآموزهای اون رشته اطلاع بده.
خودروهای خودران
خودروهای خودران یا Self-Driving که پیشتر هم ازشون در همین وبلاگ صحبت کرده بودم (لینک) میتونن با استفاده از بینایی ماشین و پردازش تصویر، تابلوهای راهنمایی، رفتار سایر رانندگان، موانع در مسیر و … رو تشخیص بدند. این حوزه البته پیچیدگی زیادی داره اما کار کردن روی بخشهای مختلفش میتونه برای یادگیری جوانب مختلف ماجرا جذاب و جالب و مفید باشه.
مصرف انرژی
حوزه انرژی هم حوزه جالبی میتونه برای پروژههای بینایی ماشین باشه. برای مثال OCR ای که بتونه دیتای کنتور گاز/برق رو به متن تبدیل کنه و اون رو با یک مرکز محاسبه قیمت، چک کنه و قیمت رو به ما اعلام کنه. همچنین میشه عکسهای حرارتی از خانهها و … تهیه کرد و با استفاده از بینایی ماشین دقیقا بررسی کرد که کجاها انرژی بیشتری داره از دست میره و … .
این پروژهها به خودی خود شاید جالب به نظر نرسن اما ترکیبشون با IoT و هوشمندسازی در سطوح دیگر، طبیعتا میتونه جذاب و حتی پولساز هم باشه.
کشاورزی
این هم گفتن نداره، شما کافیه که یک سری عکس هوایی از زمینهای کشاورزی داشته باشید. احتمالا خیلی راحت بتونید سیستمی توسعه بدید که آفات رو شناسایی کنه. همینطور میتونید نوع خاک و … هم از روی این عکسها طبقهبندی کنید و پیشنهاد بدید که چه محصولی در این زمین کشت بشه بهتره. در حوزه مصرف انرژی هم میتونید یکی از پروژهها رو بردارید بیارید اینجا و ازش بهرهبرداری کنید. چی از این بهتر؟
ضمن این که امنیت زمین کشاورزی و گلخانه، بررسی نور و رنگ و … هم میتونن اینجا کاربردی باشند.
جمعبندی مطلب
در این مطلب، ایدههایی که میتونید بعنوان یک پروژه تفریحی یا جدی پیادهسازی کنید رو بررسی کردیم. همچنین این ایدهها، به جز این که میتونن رزومه خوبی برای شما بسازند طبیعتا میتونن پایه یک کسب و کار و یا یک استارتاپ باشند که شانس خوبی برای به پول رسیدن داره. به همین خاطر هم ممنون میشم اگر هر کدوم از این ایدهها رو پیادهسازی کردید در بخش کامنت همین مطلب در موردش بنویسید و به من اطلاع بدید تا ببینم چه کردید.
همچنین لازم به ذکره که اگر دوست دارید مطالب فنی/علمی دیگری از من بخونید، میتونید به ویرگول من هم مراجعه کنید. در پایان هم بابت وقتی که گذاشتید، ازتون تشکر میکنم و امیدوارم در آینده باز هم بتونم در این وبلاگ، مطلب بنویسم.
در مطلب پیشین (لینک) اشاره کردم که ایدهها و جرقههای ابتدایی پروژه جبیر، از کجا به ذهنم رسید و چرا مهم بود که اون ایده رو پیاده کنم و حتما به اون هدف برسم. این موضوع، باعث شد که من بیش از پیش تلاش کنم که به هدفی که برای خودم گذاشتم برسم.
در این یکی مطلب، قصدم اینه که در مورد فرایندی که جبیر برای ساخته شدن طی کرد صحبت کنم و قطع به یقین، خیلی از این مراحل قدیمیتر از اونی هستند که شما بتونید الان پیادهسازیشون کنید. پس اگر نیازمند این هستید که توزیع لینوکسی مبتنی بر دبیان یا اوبونتو بسازید، میتونید راهنمای عملی قرار دادن فیل در یخچال و همچنین چگونگی ساخت توزیع لینوکس رو بخونید. ولی اگر دوست دارید سفر طولانی یک نوجوان در مسیر پیادهسازی رویاش رو بدونید، به خوندن همین مطلب ادامه بدید.
بررسی راههای ساخت یک سیستمعامل
ابتدای راه، باید بررسی میکردم که سایرین چطور سیستمعامل ساختند و چطور شده که سیستمهای عاملشون، رشد و نمو خوبی داشته. همونطور که در قسمت اول هم اشاره کردم، یکی از idol های من در زندگی، استیو جابز بود (و کماکان هم هست) و طبیعتا اولین سیستمعاملی که به نظرم اومد که داستان موفقیتش رو مطالعه کنم، مک بود. اما مک یک مشکل بزرگ داشت. بررسی درست و حسابیش نیازمند این بود که حتما یک سیستم اپل تهیه کنم. حالا چه آیمک، چه مکبوک و … . به همین خاطر، مک رو بیخیال شدم.
داستان موفقیت ویندوز هم تقریبا اظهر من الشمسه. این سیستمعامل عمده محبوبیتش رو به این خاطر داره که روی سیستمهای سازگار با PC های IBM نصب میشد و از قضا، همون دوره IBM تصمیم گرفته بود که لایسنس تولید کامپیوترهای شخصی مشابه کامپیوترهای خودش رو به کمپانیهای دیگری مثل Dell, Compaq, HP و … هم بفروشه. پس تعداد بیشتر، مصادف شده بود با مصرف بیشتر و محبوبیت بیشتر.
نهایتا، با خودم گفتم که «خب، میرم بین محبوبیت توزیعهای لینوکس جستجو میکنم». اونجا بود که فهمیدم چندین توزیع ایرانی مثل پارسیکس (متوقف شده)، کارآمد (متوقف شده) و آریوس (متوقف شده) وجود دارند. در عین حال، فهمیدم اینها ویژگیهای مشترک زیادی دارند. خلاصه که این مورد رو گذاشتم در لیست مطالعه که بعدتر در موردش مطالعه کنم و ببینم که دنیا دست کیه.
خلاصه، مطالعه پیرامون موفقیت سیستمهای عامل تموم شد. دلم میخواست اون موقع وارد جامعهای از برنامهنویسان بشم و ازشون یاد بگیرم و انتقال تجربه انجام بشه. به همین خاطر، در وبسایت برنامهنویس، ثبتنام کردم. اونجا بود که متوجه شدم یکی از اعضا، یک سیستم عامل نوشته به اسم آراکس. برخلاف عمده پروژههای سیستمعامل که دیده بودم، این یکی توزیع لینوکس نبود بلکه سیستمعاملی بود که از بیخ و بن توسعه داده شده بود و با خودم گفتم که پسر! باید با این رفیق شم حتما. اما خب نشد، یعنی نمیدونم چی شد ولی احتمالا شلوغی سر ایشون و عدم تمایلشون باعث این شد که دوستیای شکل نگیره.
خلاصه، کمی هم به زبان انگلیسی گشتم. اون موقع مثل الان زبانم خوب نبود و در فهم بسیاری از مطالب، مشکل داشتم. با این حال با گشتن در اینترنت به ویکی توسعهدهنگان سیستمعامل رسیدم. جایی که هزاران و دهها هزاران نفر دیگر، مشغول توسعه پروژههای خودشون بودند و همین باعث شده بود که من یک بهشت برین پیدا کنم. اما اونقدری نگذشت که امیدم ناامید شد. چرا؟ چند مدخل رو که خوندم فهمیدم از صفر نوشتن یک سیستمعامل که بتونه کلی کار ریز و درشت انجام بده به این سادگیها هم نیست. که البته اگر نظر خودم رو بخواهید، خیلی خوب شد که این اتفاق افتاد. بعدا در موردش حرف خواهم زد.
به همین خاطر، یک تحقیق بزرگی در مورد سیستمعاملهای متنباز موجود کردم که ببینم کدوم بعنوان پایه سیستمعامل میتونه گزینه خوبی باشه. گنو/لینوکس، بیاسدیها، هایکو و حتی کولیبری رو چک کردم و به این نتیجه رسیدم که خب، لینوکس بهترین گزینهست! حتی در این میان داشتم به اندروید هم فکر میکردم ولی باز پس ذهنم گنو/لینوکس رو داشتم. حالا وقت این بود که ببینم از کدوم یکی میشه یک نسخه شخصیسازیشده بهتر ساخت.
پیدا کردن توزیع مناسب به عنوان مبنا
خب وقتی که فهمیدم قراره بیس سیستمعامل من لینوکس باشه، نیاز داشتم که ببینم کدوم توزیع بهتره. به همین خاطر بارها و بارها، توزیع عوض کردم (و حتی همین امر موجب این شد که هاردم به شدت کند و حتی خراب بشه. بعد از مدتی حتی مجبور به تعویض هارددیسک لپتاپی شدم که اون زمان داشتم). نخستین توزیع، اوبونتو بود. بعدش دبیان. بعد اوپن سوزه، فدورا و … . به همین سبک و سیاق هزاران توزیع رو تست کردم که ببینم کدوم بهتره. البته دروغ چرا، هزاران خیلی مبالغهست. درستترش اینه که هر توزیعی که اسم و رسمی داشت رو نصب و آزمایش کردم که ببینم قضیه چی به چیه.
اما مشکلاتی هم در این میان بودند. یکی از بزرگترین مشکلات پیش روی من، اینترنتی بود که اون زمان داشتیم. اینترنت پرسرعتی بود نسبتا اما دو مشکل اساسی داشت. اولین مشکل محدودیت حجمی بود و خب طبیعتا میدونید که بسیاری از این توزیعها حتی موقعی که نصب میشن هم نیازمند اینترنت هستند و همین یعنی باید فاتحه اون حجم رو خوند. مورد دوم هم قطعیهای زیاد اون خط خاص بود. خلاصه که با تمام این ماجراها، من تهش به چند کاندیدای قدر قدرت رسیدم.
اولین کاندیدا، خود دبیان بود. اصل کاری، پدر اوبونتو. دبیان نصب و راهاندازیش هربار من رو پیر میکرد البته. به همین خاطر ترجیح دادم که مدتی کنارش بذارم. در همین میان، باز به اوبونتو برگشتم. بعد از بازگشتم به اوبونتو، با لینوکس مینت آشنا شدم. حقیقتا از مفهومی که مینت داشت هم خوشم اومد! فهمیدم که مطابق قوانین خیلی از کشورها، یک تعداد زیادی از نرمافزارها مثل فلشپلیر، فونتهای مایکروسافت، کدکها، واین و … امکان «بازتوزیع» یا Redistribute شدن ندارند. اما مینت از این قاعده مستثناء بود. چطور؟ مینت در ایرلند جنوبی ساخته شده. کشور ایرلند هم مثل روسیه و کشور ما، از کشورهاییه که کپیرایت درش به اون شکل مطرح نیست و شما احتمالا راحتتر میتونید این تیپ بازتوزیعها رو انجام بدید.
وقتی دیدم اینطوریه، با خودم گفتم چرا پایه این قضیه مینت نباشه؟ به همین خاطر مینت نصب کردم تا ببینم چی به چیه و دروغ چرا؟ عاشقش شدم. روی مینت گنوم ۳ نصب کردم و کلی باهاش کار کردم و دیدم عجب چیز خوبیه. خلاصه اینجا بود که کاندیداهای من به مینت و اوبونتو، تقلیل پیدا کردند.
پیدا کردن راهی برای پکیج کردن مجدد توزیع شخصیسازی شده
اینجا دیگه روی لپتاپ مینت نصب کرده بودم. شخصیسازیهای مختلفی رو روش انجام داده بودم و وقتش رسیده بود که یک پکیج ازش بسازم. در واقع میخواستم یک ISO بسازم که بتونم بعدا روی لپتاپ خودم یا کامپیوترهای دیگر به طور کل، نصبش کنم. به همین خاطر از Relinux استفاده کردم (این پروژه تقریبا دو سالی میشه که از رده خارج شده، ولی اون موقع جوان اول ابزارهای ساخت توزیع بود). حالا وقت این رسیده بود که یک مینت خوش رنگ و لعاب با هزاران هزار بسته رنگارنگ، به ISO تبدیل بشه و همین تبدیل همانا و سیستمعاملساز شدن من همان!
اما اینجا یه مشکلی پیش اومد. انقدر نرمافزارها زیاد بودند که حجم ISO تولیدی توسط Relinux بالای ۴ گیگابایت رفت. اگر این پست رو تشریف ببرید بخونید، توضیح دادم که استاندارد ISO9660 یک محدودیت روی حجم داره و بیش از چهار گیگابایت رو نمیتونه در خودش جای بده. همین امر، باعث شد که پروژه رو بکوبم و از اول بسازم. به همین خاطر، دوباره DVD اوبونتو 11.10 رو برداشتم (و در همون حین نخستین بتاهای ۱۲.۰۴ هم داشتند میومدند) و روی لپتاپ نصبش کردم. پس از نصب، تغییراتی روش دادم مثل جایگزینی یونیتی با گنوم، نصب تعدادی نرمافزار و جایگزینی تعداد دیگر. این بار شد! این بار واقعا شد و خب خوشحال و خرم بودم.
عکس از توزیع کاپریس است – کاپریس در سال ۹۹ ساخته شد.
انتشار نسخه اول به صورت LTS و اولین اشتباهات
خب در فروردین سال ۱۳۹۱، نخستین نسخه جبیر آمد. یادمه که ده روز قبل از انتشارش حتی این پست رو در فروم اوبونتو ایجاد کردم که خب همونطور که میتونید بخونید؛ کم هم حاشیه نداشته. خلاصه اینجا بود که اولین اشتباهات رو متوجه شدم. در این قسمت بیش از این که بخوام پیرامون این که جبیر چه بود مانور بدم، میخوام روی اشتباهات مانور بدم.
اولین اشتباه شاید برمیگشت به جهانبینی من. اینطور بخوام بگم که این جهانبینی این طور بود که اگر در ۱۶ سالگی یک سیستمعامل مثل جبیر ساختم، دیگه ته دنیای تکنولوژی و اینام. به قول یه بندهخدایی، دچار سندرم «جلوزدگی از خود» شده بودم. خب این مورد در سنین نوجوانی طبیعیه و حتی همین الان باور دارم که نسبت به سن و سال اون زمانم، واقعا کارم خفن بوده ولی نه اونقدری که خودم همیشه فکر میکردم. بهرحال در دوران نوجوانی خیلیها دوست دارند کارهای بزرگ کنن و همونطور که در مطلب پیشین عرض کردم، این قضیه باعث شد من بشم اینی که الان هستم.
خلاصه این اشتباه، اشتباه اول بود. اشتباه دوم این بود که فکر میکردم اینجا میتونم سبک و سیاق اپل رو پیش بگیرم. یعنی چی؟ یعنی که یک سیستمعامل مبتنی بر یک سیستمعامل دیگر بسازم و بعدش، کدش رو ببندم و نهایتا سختافزارهای مبتنی بر اون سیستمعامل رو به ملت بفروشم. نه روی زیرساخت فکری داشتم، نه روی این که پروانهها چه اجازههایی میدند. خلاصه که اینجا کلی اشتباه پشت هم دیدیم. اما تلاش کردم این موارد رو در نسخه ۲ اصلاح کنم.
نسخه ۲، رابط کاربری افسانهای
توزیع آریوس، علاوه بر این که ریمستر از اوبونتو بود دو ویژگی داشت که از سایر توزیعهای ریمستر؛ متمایزش میکرد. یکیش نصاب آفلاین درایورها بود، دیگری این که یک رابط کاربری خیلی خوشگلی هم داشت که خب به شکل یک نشست روی گنوم اجرا میشد. در نسخه دوم تصمیم گرفتم چنین تغییری رو ارائه بدم. به همین خاطر، با کمک AWN, Mutter و یک سری تغییر ریز دیگر، یک رابط کاربری نسبتا کاستوم ساختم و اسمش هم گذاشتم Legendary UI یا «رابط کاربری افسانهای». همچنین در کنار اون نسخه، یک ایزو با XFCE هم ارائه کردم که خب در این مقطع، جبیر با دو میز کار داشت عرضه میشد.
حقیقتا نسخه ۲ تا حد خوبی ترکوند. به حدی که با این پروژه به جشنوارههای استانی و کشوری (منجمله خوارزمی) راه پیدا کرده بودم. این رو هم اینجا بگم چرا که واقعا نمیتونم این رفرنس رو اینجا ندم 😁 در فیلم The Social Network – که داستان ساخت و رشد فیسبوک رو به شکل سینمایی روایت میکنه – کرکتر Divya Narendra (یکی از شرکای دوقلوهای وینکلواس در پروژه Harvard Connection) در مورد مارک زاکربرگ میگه که «مارک بزرگترین شخصیت دانشگاه شده بود. اون هم دانشگاهی که نوزدهتا برنده نول و پونزدهتا برنده پولتیزر و حتی یک ستاره سینمایی داره». حقیقتا در میان دانشآموزان اون مدرسه و حتی شهر بندرعباس من چنین حسی داشتم و همینجا بود که دوباره کمی از خودم جلو زدم. اما این تمام ماجرا نبود. جزییات این بخش رو، در قسمتهای بعدی این داستان خواهیم خوند.
نسخه ۳ و ۴، مشکل اینترنت و متاع خنده؟
در نسخه ۳، تغییر خاصی نبود جز این که قبل از این که Ubuntu GNOME Remix منتشر بشه، این توزیع با میزکار گنوم عرضه شد (حقیقتا جا داشت این مورد شدیدا بهش اشاره بشه). اگر دوست دارید در مورد این نسخه بیشتر بدونید میتونید به این مصاحبه من با لینوکس سیزن مراجعه کنید و کمی با ذهنیت من در اون سال آشنا شید. نسخه ۳ خیلی حاشیه نداشت. در عین حال، خیلی هم سر و صدا و برند نساخت. یک توزیعی بود که نصب میشد و خلقالله استفاده میکردند.
نسخه ۴، برای من خیلی مهم بود. در این حد که حتی اسم نسخهش هم خواستم یک چیز باحال انتخاب کنم و از همین رو، اسم رو گذاشتم Pirates of Galaxy یا «غارتگران کهکشان». در این یکی نسخه خیلی سعی داشتم که همهچی رو مینیمال در عین حال شخصی نگه دارم. اما یک مشکل اساسی اینجا پیش آمد. مشکل چی بود؟ مشکل این که اوبونتو باگی داشت که اگر شما اون رو باز دوباره بستهبندی میکردی، نمیتونست کارت شبکه رو درست شناسایی کنه و به اینترنت متصل نمیشد. همین موضوع باعث این کامنت از جادی شد:
خب بخش اول کامنت تذکری بود به دوستی که ظاهرا ادب رو رعایت نکرده بود. بخش دوم هم از نظر من بد نیست، اما نکته مهم برخورد جامعه نرمافزار آزاد با این موضوع بود. چرا؟ چون من یادمه حتی سال ۹۶ که خودمم یادم نبود چه کرده بودم تو این سیستمعامل، در بعضی جلسات لاگ و بعضی رویدادها این موضوع شده بود متاع خنده! طبیعتا هیچکس خوشش نمیاد کاری که در نوجوانی کرده و حتی کار بدی هم نبوده (ساخت توزیع لینوکس واقعا کار بدی نیست، شاید بیهوده باشه ولی بد، نه!) سوژه خنده یک جمع باشه.
خلاصه اینجا دیگه شد آخرین جایی که جبیر بعنوان یک توزیع گنو/لینوکس عرضه شد و دفترش به پایان آمد. اما حکایتش همچنان باقی ماند.
رفتن سراغ BSD
بعد از جبیر ۴، دیگه تصمیم رو جدی گرفتم. با خودم گفتم لینوکس برای من سیستم بشو نیست :)) در این حد که هرجا بحثی از لینوکس میشد، سریعا اشاره میکردم به این که در PlayStation 4 از FreeBSD استفاده شده، واتسپ داره FreeBSD استفاده میکنه و OpenBSD ایمنترین سیستمعامل جهانه و اپل با BSD اپل شد و اینها و در عین حال لگدی هم به لینوکس میزدم و میگفتم این سیستمعامل، یک سیستمعامل مردهست.
در همین حین، ما باز به تهران برگشتیم و خب کمی سخت بود که روی توسعه جبیر کار کنم چرا که اینترنت درست و درمونی نداشتم، لپتاپم برای کامپایل کردن کدهای FreeBSD ضعیف بود و کلی داستان و مشکل از این قبیل پیش آمد. خلاصه پس از این که مدتی گذشت و کمی این مشکلات حل شد، موفق شدم که جبیر رو دوباره از نو با کرنل FreeBSD تولید کنم و بعد مدتی حتی اسم کرنل رو از FreeBSD به JabirOS تغییر دادم (که خب این خودش یک اشتباه خیلی خیلی بزرگ محسوب میشد چون عملا از پورتها نمیشد دیگه استفاده کرد) و کلا در مسیری بودم که با خودم میگفتم «دو سال دیگه به اپل رسیدم».
یکی از دلایلش، این بود که من کم کم داشتم وارد مدیای خارجی میشدم. مثلا این وبسایت، خبر انتشار جبیر جدید رو کار کرد یا این یکی، با من مصاحبهای ترتیب داد. همه این موارد دست به دست هم دادند تا من خیلی بیشتر از پیش، از خودم جلو بیفتم.
اما خب این موضوعات پشت سر هم، پیشدانشگاهی و کنکور و ورود به دانشگاه باعث شدند که کلا بیخیال پروژه جبیر بشم و این مورد باعث شد که ذهنم برای پروژههای دیگری که در این سالها انجام دادم بازتر بشه.
این داستان ادامه دارد
فکر میکردم شاید این داستان چهار یا پنج قسمت بشه، اما تا اینجا که توضیحاتم رو ارائه کردم، فکر کنم کلا یک مطلب دیگر که کلیت این دو قسمت رو جمعبندی کنه و کمی به رفتارهای اطرافیان – بخصوص جامعه نرمافزار آزاد – و داستانهایی مشابه شرکت در جشنواره خوارزمی و … اشاره کنه، کافی باشه.
خلاصه، دوست دارم ازتون تشکر کنم که تا اینجای مطلب رو خوندید و همراه من بودید. من همیشه دوست داشتم این تجربه رو مکتوب کنم و خب اتفاقات اخیر، موجب این شد که این مطالب مکتوب بشند و در وبلاگ هم به رشته تحریر دربیان.
در نهایت، برای تکتک خوانندگان این بلاگ، آرزوی موفقیت و خوشحالی میکنم.
تولید عدد تصادفی، یکی از کارهاییه که در برنامه نویسی بسیار نیازش داریم. برای چه منظورهایی؟ برای مثال فرض کنید میخواهیم یک شبکه عصبی طراحی کنیم و وزنهای ما باید تصادفی باشن. به همین خاطر، ما از عدد های تصادفی برای تولید وزن استفاده میکنیم. در سطح نرم افزار، تولید عدد تصادفی بسیار آسونه. مثلا در پایتون ما میتونیم به این شکل عدد تصادفی تولید کنیم (راهی غیر از numpy هم هست، ولی من اکثرا از این روش استفاده میکنم) :
from numpy import random
random.seed(1)
print(random.random((1, 1)))
ولی در سطح سختافزار، کار کمی پیچیده تر میشه. در اینجا قصد دارم یک مدار ساده بسازم که دقیقا چنین کاری رو انجام میده. البته به این مدار گفته میشه Pseudo Random Number Generator چون نتایج، تصادفی تصادفی هم نیستند ولی برای کارهایی که به عدد تصادفی نیاز داره، خوبن.
خب، طراحی مدار ما به شکل زیره :
ما اومدیم چهار فلیپ فلاپ D رو به هم متصل کردیم. سپس، دو بیت کم ارزش در اتصال این زنجیره را با یک XNOR با هم مقایسه کردیم و یک پالس ساعت هم به مدار وارد کردیم.
وقتی که دو بیت کم ارزش صفر باشن، خروجی XNOR ما یک میشه. یعنی Q در فلیپ فلاپ پر ارزش (سمت چپ ترین)، برابر با یک خواهد شد. در پالس بعدی این اتفاق برای فلیپ فلاپ بعدی میفته، این اتفاق تا جایی میفته که نتیجه مقایسه، صفر میشه و فلیپ فلاپ پر ارزش مقدارش تغییر میکنه، به این شکل، دقیقا ترتیب اعدادی که در این Ring Counter داریم به هم میریزه و اعداد «شبهتصادفی» تولید میشن.
این هم از شبیهسازی این مدار :
همونطور که در ویدئو مشخصه، داره به صورت رندم عددهای چهاربیتی تولید میکنه.
امیدوارم که این مطلب مفید واقع شده باشه. همچنین اگر با ویدئوی شبیهسازی مشکلی دارید و یا لود نمیشه، میتونید از این لینک دانلودش کنید.
مدتهاست که با دوستان مختلف، روی نوشتن مطالبی پیرامون رشته مهندسی کامپیوتر بحث میکنیم. این بحثها شامل ایرادات روتین بچههای مهندسی کامپیوتر تا کار کردن روی یک پروژه نه چندان بزرگ (ولی پرچالش!) میشه. از اونجایی که تازه هم کنکور گذشته و بچه ها کمی آزاد شدن، ولی ممکنه برای انتخاب رشته دچار تردید بشن؛ وقت خوبی بود که مطالبی در مورد ماهیت این رشته نوشته بشه. مطالبی که مینویسم، حاصل مطالعاتیه که در این چند سال داشتم. سعی میکنم کمی تاریخ تعریف کنم، کمی از علوم کامپیوتر بگم و در نهایت هم کمی از چیستی و ماهیت خود خود کامپیوتر (نه رشته).
کمی تاریخ
باید ببینیم کامپیوترها از کجا اومدن و چه اشخاصی در شکل گیری اونها، نقش داشتن. این کمی سخته که دقیقا بخوایم بگیم از کجا اومدن. انسان، از وقتی هوشمند شد و ابزار ساخت به دنبال ابزار کاملی برای حل مساله بود، پس همیشه هم تلاشش در این راستا بوده که این ابزار رو بسازه. در طول تاریخ هم، علوم و فنون مختلف به کمکش اومدن تا این ابزار رو کامل تر کنه. بذارید تعدادی از این علوم رو با هم بررسی کنیم.
فلسفه و ریاضیات
فلاسفه و ریاضی دانان، افرادی بودن که به دنبال پاسخ بودن. البته فلاسفه، پرسشگران قهارتری هم بودن و گاهی، سوالاتی مطرح کردند و ریاضیدانان، اون سوالات رو پاسخ دادن. حالا با توجه به این که کامپیوتر یک «ابزار حل مساله»س، میشه گفت هر دو گروه به شدت درش دخیل بودن.گاهی هم فلاسفهای که روی علوم کامپیوتر تاثیر داشتند، ریاضی دان هم بودن. نمونهش هم «محمد بن موسی خوارزمی» دانشمند پارسیگو.
خوارزمی، شاید اولین کسی بود که «تفکر رایانش» رو ابداع کرد. در کتاب معروفی به نام «جبر و مقابله» به حل معادلات جبری پرداخته و راه حل هاش، عموما مرحله مرحله و شفافن. به همین خاطر هم وقتی این روش حل مساله به اروپا میرسه، اروپایی ها بخاطر «الخوارزمی» (اسم ایشون) ، که در لاتین «الگوریتمی» گفته میشده، روش حل مساله رو «الگوریتم» اسم گذاشتند. چیزی که هنوز که هنوزه، داره استفاده میشه.
البته، کار خوارزمی نظام بخشیدن و سازمان دادن به علوم و فنونی بوده که در زمان خودش، مطرح میشده. در واقع، از کشف صفر توسط هندی ها تا قضایای که امثال تالس و فیثاغورث پایه گذاشتن، همه در نوشته شدن «جبر و مقابله» و ایجاد تفکر سیستماتیک برای حل مساله، دخیل بودن.
منطق
گرچه بهتر بود این یک مورد رو، قبل از فلسفه و ریاضیات میاوردم، ولی به نظر من منطق حاصل برخورد فلسفه و ریاضیه. گرچه خیلی قبل تر از خوارزمی منطق مطرح شده بود، اما دورانی هم که ماحصل کارش یعنی «جبر و مقابله» به اروپا رسید، ابتدای راه استفاده از منطق در بیان و حل مسائل بودند. پس سعی کردند با استفاده از منطق و جبر، بسیاری از مسائل رو حل کنند. منطقی که در اینجا قراره درموردش صحبت کنم همون منطق «ارسطو» است، منطقی که شاید امروزه پایه و اساس همه کامپیوترهاست.
منطقی که ارسطو بنیان گذاشته، یک منطق صفر و یکی به حساب میاد. بذارید اینطوری بگم؛ با منطق ارسطویی میشه اینطور گفت :
علی از احمد قدبلندتره. احمد از حسن قد بلند تر. پس علی از حسن هم قدبلندتره
و در این مورد، منطق ارسطویی کاملا کار میکنه. مثلا ریاضیاتیش میشه :
اگر x آنگاه y ، اگر y آنگاه p -> اگر x آنگاه p
و این بیان رو ما اصولا در نوعی از ریاضیات به نام «ریاضیات گسسته» یاد میگیریم. چیزی که پایه و اساس علوم و مهندسی کامپیوتر امروزیه. اما، این فقط کافی نیست؛ منطق در یک محیط خاص کار میکنه که ما اعدادی جز صفر و یک نداریم! پس نیاز به نوعی از محاسبه و جبر داریم که برای فقط صفر و یک، کار کنه و کافی باشه. چیزی به اسم «جبر بول»
آقایی که در تصویر میبینید، جورج بول، ریاضیدان و فیلسوف انگلیسیه که با پایه گذاری جبر صفر و یکی بر مبنای «صحیح و غلط» خودش، علوم کامپیوتر رو شدید تسریع کرد. در سده نوزدهم خیلی چیزا ساخته شدن و اکثرا هم، بر پایه همین «بودن یا نبودن» آقای بول کار میکردن. اما اشتباهاتی هم در این میان رخ داده که حالا بهش میرسیم!
وقتی همه چیز مکانیکی شد
محاسبه گرهای مکانیکی، تقریبا از زمانی که معاملات جزئی از زندگی بشر شدند وجود داشتن. مثل چرتکه که حاصل کار چینی ها بوده (روزگاری هم باقی دنیا از چینی ها کپی میکردن!) ، ولی محاسبهگرهایی مثل چرتکه، صرفا چهارعمل اصلی رو انجام میدادن و بعدها ریاضیدانها از اون وسیله برای محاسبه ریشه دوم و سوم اعداد هم سعی کردند استفاده کنن. ولی محاسبه گرهای پیچیده تری لازم بود!
آقایی که در تصویر میبینید «چارلز بابیج» یک ریاضیدان و مهندس انگلیسی بود. ایشون ایده «موتور تحلیلی» رو مطرح کرد که چیزی بود شبیه کامپیوترهای امروز. برنامه پذیر و قابلیت حل تعداد زیادی مساله در زمانی کم. اما، کار ایشون مشکلاتی داشت. ایشون سعی داشت همه چیز رو مکانیکی پیاده کنه و زمانی که این ایده رو مطرح کرد ماشین های مکانیکی هنوز اونقدر پیشرفته نبودن. و مشکل دوم رو بالاتر اشاره کردم، ایشون مدعی بوده که بدون جبر بول هم میتونه کامپیوتر رو پیاده کنه و کامپیوتری بسازه که با مبنای ده کار کنه (چیزی که هنوز هم نشده 🙂 ) .
اما ماشین های مکانیکی کم کم به سمت جبر بول و محاسبات آماری رفتن. یک بار دیگه این تصویر رو با هم ببینیم:
این تصویر، تصویری از یک ماشین «شرط بندی» است که در نیوزلند نصب شده بوده. عملکرد مکانیکی برای محاسبات آماری مربوط به شرط بندی روی مسابقه اسبها داشته.
اما مکانیک کافی نبود، لازم بود اما کافی نبود. پس به عصر «الکترومکانیک» باید سفری کوتاه داشته باشیم!
همه چیز از یک رله شروع شد
رله، قطعه الکتریکیه که میتونه مشابه یک کلید عمل کنه. در واقع اعمال ولتاژ به یک قسمتش، میتونه قطع و وصل شدن جریان الکتریکی در یک قسمت دیگر مدار رو تضمین و کنترل کنه (به این شکل ما مثلا میتونیم با استفاده از اینترنت، یک لامپ رو خاموش روشن کنیم!). در اون زمان، به فکر یه مهندس خوش ذوق آلمانی به اسم «کانراد تسوزه» زد که جبر بول رو با رله پیاده کنه. تسوزه چند تا پیاده سازی داشت ولی معروفترینشون این بود :
کامپیوتر Z4 آلمانی که در دهه ۳۰ ساخته شد و خیلی هم به کمک ارتش آلمان در جنگ دوم جهانی اومد. اما مطمئنا یک نابغه خوش ذوق دیگر در طرف انگلیسی وجود داره که بتونه از ساز و کار این ماشین، سردربیاره!
قبل از این که به اونطرف قضیه بپردازیم، این ماشین به شکل امروزی تونست برنامه اجرا کنه و زبان برنامه نویسی خاص خودش رو داشت. مجهز به سیستم ذخیره و بازیابی «پانچ کارد» بود و خیلی از مفاهیم امروزی رو در خودش داشت. اما هنوز نمیتونست «کامپیوتر» کاملی باشه چون خیلی مفاهیم رو نتونست پیاده سازی کنه، مهم تر از همه، شدیدا وابسته به عامل انسانی بود.
شروع بازی تقلید!
موقعی که کشورهای مختلف درگیر جنگ دوم بودن، اکثرا پیامهاشون رو رمزنگاری میکردن و شکستن رمزها، واقعا یک نابغه میطلبید. یک نابغه خوش ذوق که بتونه قهرمان جنگی باشه و رمز آلمانها رو بشکنه و متفقین رو، پیروز میدان کنه!
آقایی که در تصویر میبینید «آلن تورینگ» انگلیسی، این کار رو کرد. رمز آلمانیها موسوم به «انیگما» رو شکست و به این ترتیب قهرمان جنگی شد. اما کارش به همینجا ختم نشد و در دهه ۵۰ میلادی ایده «تفکر در رایانه» و «هوش مصنوعی» رو مطرح کرد که تا امروز هم مطالعه روی این موضوعات، ادامه داره. این شخص به معنای واقعی، نابغه و خوش ذوق بوده.
ترانزیستور و عصر سیلیکون
خب، این هم از فصل آخر تاریخ کامپیوتر. در اواخر دهه ۴۰ ، کامپیوترها یک دفعه رشد کردند. کشف ترانزیستور باعث شد مدارات الکتریکی و الکترونیکی مورد نیاز برای ساخت کامپیوتر بتونن روی یک سطح چند سانتی متری از سیلیکون خلاصه بشن. قطعاتی با کاربرد بالاتر ساخته بشن. عصر سیلیکون مصادف بود با حضور امثال دنیس ریچی و کن تامپسون و مفاهیمی مثل «سیستم عامل» (توضیح این بخش از تاریخ خودش یک پست جدا میطلبه پس شاکی نباشید از من لطفا!) مطرح بشن و رشد نرم افزاری در این حد، باعث شد که اصلا سرعت رشد یک شکل دیگری به خودش بگیره!
کامپیوتر چیست؟ کامپیوتر کیست؟
شاید باورتون نشه ولی قبل از ظهور ماشین های محاسبه گر، کامپیوتر یک عنوان شغلی بوده برای کسانی که محاسبات پیچیده رو انجام میدادن (و طوری که در موردشون مطالعه کردم، ظاهرا حق پرسش در مورد این که این محاسبه رو چرا دارن انجام میدن نداشتن) و بخش جالبتر این بوده که عموما «کامپیوتر»ها رو در سازمانها، خانمها تشکیل میدادن (البته اولین برنامه نویس جهان هم یک خانم به اسم ایدا لاولس بوده که در تصویر زیر میبیندشون).
البته، اونقدری نمیگذره که «علوم کامپیوتر» مطرح میشه. بعنوان علم مطالعه و پردازش داده. و این پدیده، همزمان بوده با پدیدار شدن کامپیوترهای به معنای امروزی. پس بیشتر اپراتور و برنامه نویس تربیت میکردند.
در تصویر بالا هم، عکسی از اپراتورهای کامپیوتر انیاک (در امریکا) رو میبینید که هم باید به نرم افزار مسلط میبودن و هم سخت افزارش.
اما به طور کل، کامپیوتر امروزه چی تعریف میشه؟ کامپیوتر یعنی وسیلهای برای پردازش داده و استفاده از اون داده در علم. ما داده های مختلفی داریم که کامپیوتر میتونه برای ما پردازشش کنه و نتیجه اون پردازش رو در هر شکلی به ما بده (یک نمودار، روشن و خاموش شدن یک دستگاه خاص یا حتی یادگیری و تکرار یک عمل از روی همون داده ها). پس، تا اینجا هم تا حد زیادی تاریخ کامپیوتر رو تونستیم بفهمیم، هم تعریفش رو. شاید براتون جالب باشه که اصلا کامپیوتر ها چطوری هم ساخته میشن!
کامپیوتر چطور داده رو پردازش میکنه؟
برگردیم به همون جبر بول. ما یه سری وسیله (یا بهتر بگم نمایش الکترونیکی!) از عملیات بولی داریم که بهشون میگن «دروازه منطقی» یا همون گیت. گیتها به این شکل هستند :
هر کدوم از اینها میتونن یکی از توابع بولین رو پیاده کنن. حالا، ما اگر اینها رو کنار هم بچینیم میتونیم بخش بزرگی از محاسبات رو به سادگی انجام بدیم. مثلا این مداری که من ساختم رو ببینید :
این مداریه که یک عدد BCD (که نوعی رمزگذاری در کامپیوتره) رو دریافت میکنه، به صورت دهدهی (دسیمال، مبنای ده) در خروجی قرار میده. حالا ما میتونیم اونطرف با یک Encoder این مقادیر رو دوباره به BCD یا هر فرمت دیگری تبدیل کنیم. در واقع کاری که ما انجام دادیم همون پردازش دادهس. حالا هر قسمتی رو میشه یک بلاک در نظر گرفت و کنار هم قرار داد تا به چنین چیزی رسید :
مداری که در بالا طراحی کردم، یک واحد محاسبه و منطق برای یک کامپیوتر هشت بیتی بود (لینک) و این واحد، همونجاییه که داده پردازش میشه. البته واحد کنترل و حافظه هم در کامپیوتر داریم که برای کنترل پروسه پردازش و ذخیره داده پردازش شده ازشون استفاده میکنیم!
خب، فکر کنم به اندازه کافی اون چیزایی که میخواستم رو پوشش دادم، امیدوارم اگر قصد کامپیوتر خوندن دارید، شیرینی و زیبایی این رشته رو قبل از ورود به دانشگاه درک کنید و وقتی واردش میشید، لذت ببرید 🙂
پروژه های الکترونیک، مثل طراحی مدار، مدارهای منطقی، الکترونیک دیجیتال و … ، همه معمولا توسط نرم افزار Proteus و در سیستم عامل ویندوز انجام میشن. پروتئوس نرم افزار کامل و جامعیه و همه چی هم داره. شما میتونید به سادگی یک پروژه میکروکنترلری در پروتئوس پیاده سازی و اجرا کنید و مطمئن باشید نتیجهای که میگیرید، تا حد بسیار زیاد و قابل قبولی، شبیه نتیجهایه که در پیادهسازی حقیقی از پروژه خواهید داشت.
اما مشکلی که اکثر کاربران لینوکس دارند، اینه که پروتئوس نسخه لینوکس نداره. اجرای اون روی واین هم زیاد چنگی به دل نمیزنه و گذشته از اون، همه هم سیستمی ندارند که ماشین مجازی رو تحمل و ساپورت کنه، پس نتیجتا اکثر افرادی که پروژه های الکترونیک انجام میدن، یک سیستم عامل ویندوز هم کنار لینوکسشون دارند. امروز تصمیم داشتم که یک پروژهای رو آزمایش کنم و میخواستم ببینم که روی اوبونتو، چه ابزاری نصب دارم. طبق معمول به دنبال Logisim گشتم ولی فهمیدم که هنوز نسخه جدیدش رو دانلود نکردم. پس، گفتم بهتره سرچ کنم و به نتیجه مطلوب برسم.
در نتیجه جست و جو، به KTechLab رسیدم. گرچه اسمش برام آشنا بود ولی هیچوقت ازش استفاده نکرده بودم. گفتم که بهتره الان به دنبالش باشم و ازش کمی (حتی شده آزمایشی) استفاده کنم. شاید، نتیجهای که خواستم رو گرفتم. خب، خوشبختانه این نرم افزار اون چیزایی که میخواستم رو داشت. این هم تصویری از محیطش :
و الان یک سوال پیش میاد :
چطور نصبش کنیم؟
من اسمش رو جست و جو کردم و به وبسایتش رسیدم (لینک) و بعد سورس کدش رو دانلود کردم. اما فهمیدم که برای نصبش نیاز به cmake دارم، پس اون رو نصب کردم :
با سلام. قبل از هرچیزی سال جدید رو به همه خوانندگان وبلاگ تبریک میگم و امیدوارم تعطیلات نوروز و سال خوبی رو داشته باشید. مدتیه که خیلی در وبلاگ مطلب نمینویسم و هروقت متن طولانی و درخور توجهی به ذهنم میرسه، دست به قلم (؟ یا کیبورد؟) میشم و در این گوشه اینترنت، چیزی که در ذهنم میگذره رو مینویسم. این پست کمی متفاوت از پستهای قدیمی خواهد بود، چرا که موضوع خاصی نداره و فقط مروری بر تصمیمات چندروز اخیر خودمه 🙂
داستان از اینجا شروع میشه که چهارساله که دارم در مقطع کارشناسی «مهندسی کامپیوتر» و گرایش «سخت افزار» تحصیل میکنم. اونقدری به پایانش نمونده و موقعی رسیده که واقعا باید یک سری علامت سوال از ذهن و زندگی من، رفع بشه. چه علامت سوالهایی؟ مثل این که آیا واقعا قصد دارم تحصیلات عالیه داشته باشم؟ آیا قصد دارم همین کامپیوتر رو ادامه بدم؟ آیا قصد دارم رشته دیگری رو از صفر شروع کنم؟ و هزاران سوال دیگر. سوالاتی که شاید ذهن خیلی هایی که در مقطعی حساس از زندگیشون هستند رو درگیر کنه. همین الان که این پست رو مینویسم، دوستی که به مباحث علوم انسانی علاقه داره (و کامپیوتر میخونه) از من پرسید «به نظرت انصراف بدم برم جامعه شناسی بخونم؟» و خب بعد کلی بحث نتیجهش شد که فعلا دست از این کار بکشه (بعدا در مورد این موضوع هم مفصل توضیح میدم در وبلاگ!)
قبل از این که این سوالات پیش بیاد باید یک علامت سوال بزرگتر رو رفع میکردم. این که «چرا کامپیوتر یک باره فرع زندگی من شد؟»! فکر کنم هرکسی که این وبلاگ رو از مرداد ۹۰ (یا ۹۱؟) خونده باشه و قبلتر من رو از وبلاگهای قبلی، فروم اوبونتو یا حتی انجمن آیفون بشناسه، میدونه که من شدیدا علاقمند به مباحث علوم و مهندسی کامپیوتر بودم (و هستم! و حتی با تقریب درست و زیادی خواهم بود 😀 ) ولی مدتهاست در این زمینه خبری از من نیست. نه به شکل قدیم پروژه هایی رو تعریف میکنم و پیش میبرم، و نه مثل قدیم به صورت فعال وسط بحث های تخصصی حضور پیدا میکنم و سعی میکنم یاد بگیرم.
موضوع از اینجا شروع میشه که مدت زیادیه که از پروژه های کامپیوتری دور شدم و به «موسیقی» رو آوردم. موسیقی خوب و لذتبخشه و حقیقتا لازمه که هر آدمی، درجه خاصی از هنرمندی رو در خودش داشته باشه. حالا یا موسیقی یا خوشنویسی یا نقاشی یا آشپزی و … . مهم این نیست که شما چقدر وقت صرف هنر میکنید، موضوع اینه که میخواید عنوان اصلی شما در جامعه «هنرمند» باشه؟ یا مثلا «مهندس»؟ خب طبیعیه که من بعنوان کسی که مهندسی میخونه (و حقیقتا کم هم بابت این عنوان مهندس خرج نشده، چه هزینه دانشگاه چه وقتی که صرف شده) و رشته انتخابیش رو دوست داره، دوست دارم قبل از این که بهم بگن «هنرمند»، «مهندس» خطابم کنن.
موسیقی ذهن من رو درگیر کرد، آهنگسازی رو در این مدت یاد گرفتم (به صورت درست و علمی)، دوباره کلاس گیتار رفتم، حتی قطعاتی که ساخته بودم رو در اینترنت منتشر کردم و … . ولی این توانایی در آهنگسازی رو از کجا آوردم؟ به نظرم بخاطر تسلطی که روی کامپیوتر داشتم. اگر به این اندازه به زیر و بم کامپیوتر وارد نبودم (گرچه ادعایی هم ندارم درش)، نمیتونستم توی نرم افزاری مثل FL Studio راه بیفتم و کارایی مثل ساخت موسیقی الکترونیک، میکس و مستر و … رو یاد بگیرم. حتی استفاده از گیتار الکتریکم بعنوان یک MIDI Synthesizer .
خب برگردیم به موضوع! این «شروع مجدد» چه چیزی میتونه باشه؟ به خودم قول دادم که در این ایام نوروز، که ماشالله ترکش های تعطیلیش تا اول اردیبهشت هم اصابت میکنه 😂 ، یکی از موضوعات مرتبط با رشتهم رو مطالعه کنم، و سعی کنم تا جای قابل قبولی فرایند یادگیری و تمرین رو براش انجام بدم. حالا یا دوباره یکی از موضوعات مورد علاقم رو میخونم (سیستم عامل، معماری کامپیوتر، ریزپردازنده و …) یا این که یک موضوع جدید رو باز میکنم و سعی میکنم درش به یه حداقلی برسم (که میتونه از برنامه نویسی جاوا یا آندروید رو شامل بشه تا شبکه های عصبی و پردازش موازی یا حتی متدهای رسمی در مهندسی نرم افزار :|) و احتمالا کل امسال رو وقف همون موضوع کنم و در تابستان هم بتونم یک مقدار نوآوری درش داشته باشم!
نتیجهش چه خواهد شد؟ این که من باز به اون اصالت کامپیوتری خودم برگردم. وقتی قراره به عنوان «مهندس» در جامعه حضور داشته باشم نیاز به «دید مهندسی» هم دارم، و دید مهندسی هم چیزی نیست که الکی و یک شبه به دست بیاد. پس امیدوارم امسال، برای من سال «دید مهندسی» و «مهندس بهتر شدن» باشه 🙂
وقتی که داشتم در مورد آیسی 555 و کاربردهاش تحقیق میکردم یک مثال ساده به چشمم خورد : چشمک زن با LED . خیلی از چشمک زن هایی که در اینترنت بودند رو تست کردم و ساختم و دیدم که کار بکن نیستن که نیستن! تا این که دیدم Ben Eater (کسی که یک کامپیوتر برد بوردی هشت بیتی ساخته) ، یک مدار Clock ساخته. یکی از کاربردهای Clock این هست که مدارهای ما رو در لحظات خاص فعال و در لحظات خاص غیرفعال میکنه. همچنین، مدارهایی داریم که میتونن چند تا کلاک رو هندل کنن و یا نیاز دارن دو تا کلاک داشته باشن که برعکس هم کار میکنن. کلاکی که بن ایتر طراحی کرده به قدر کافی خوب و مناسب هست، اما من یک فیچر (اگر بتونیم بهش بگیم فیچر 🤔) بهش اضافه کردم و محصول نهایی شد این :
همانطوری که در شکل می بینید، خروجی کلاک درجای خودش به یک LED زرد متصل شده. و یک مدار ترانزیستوری هم بهش اضافه شده که حالا میخوایم بررسی کنیم اون چیه؟ اگر با NPN ها آشنا باشید میدونید که وقتی جریان در Base برقراره، امکان حرکت الکترونها از Collector به سمت Emitter هم فراهم میشه. یعنی در این مدار زمانی که خروجی ای که به اسم CLK مشخص شده، روشنه، جریان به راحتی از Collector میره به Emitter و اون LED قرمز که با CLK~ مشخص شده، خاموش میشه. زمانی که جریانی در Base ترانزیستور ما نیست، نتیجتا جلوی حرکت جریان از Collector به Emitter گرفته میشه و جریان به CLK~ میره. این به این معناست که زمانی که نیاز داریم کلاکمون برعکس بزنه، میتونیم از اون خروجی مدار استفاده کنیم! حالا یک سوال هست، و اون هم اینه که …
555 چطور کار میکنه؟
اگر دیتا شیت این آی سی رو بخونید، می بینید که پایه های VCC و GND اون با سه تا مقاومت پنج کیلو اهمی به هم وصل شدن، به همین خاطره که به این آیسی 555 گفته میشه. داخل آیسی، دوتا مقایسه گر و یک فلیپ فلاپ هست. در واقع زمانی که ما داریم از این آیسی کار میکشیم، مقادیر اون فلیپ فلاپی که درون آیسی تعبیه شده رو دستکاری میکنیم. برای اطلاعات بیشتر در مورد فلیپ فلاپ توصیه میکنم که دیتاشیت این تراشه رو مطالعه کنید.
در نهایت هم یک فیلم کوتاه از مداری که من ساختم ببینیم :
حجم تصویر متحرک یکم بالاس به بزرگی خودتون ببخشید 😅 یک نکته هم توجه کنید زمانی که مدار رو بستم رنگ LED ها برعکس تصویر شماتیک بود، در شماتیک LED زرد به خروجی کلاک و LED قرمز به خروجی نقیض کلاک وصل شده.
وبلاگ شخصی محمدرضا حقیری، برنامهنویس، گیک و یک شخص خوشحال