علاقه مند به فرهنگ، سیاست، تاریخ، فلسفه و ایدئولوژی همچنین یک برنامه نویس و مسافر و طبیعت گرد. کنجکاو نسبت به تمام موضوعات متفرقهای که به نوعی با تکنولوژی در ارتباطن و همچنین تفاوت فرهنگهای مردم
مقدمهای بر برنامه نویسی هنری
توی این مدت کرونا که همه مون قرنطینه بودیم و منم مدت یک الی دو ماهی به صورت دورکاری کار میکردم یه جورایی وقت کردم که یه مقداری خودم رو با مسائلی که دوست داشتم سرگرم کنم و وقت بیشتری رو براشون بزارم. یکی از این کارها برنامه نویسی گرافیکی برای ایجاد تصاویر و مفاهیم بصری و هنری بود که علاقه داشتم بهش و باهاش وقت گذروندم و خب سرگرمی خیلی خوبی برای تو خونه بود.
در طول سرچ کردنهام به چندتا ابزار و زبان برنامه نویسی و چهارچوب رسیدم که خیلی توی منابع فارسی ازشون چیزی ننوشته بود ولی در دنیا استفاده خیلی زیادی از این ابزارها میشه که دیدم اینجا جای خوبیه که اینا رو تا جایی که باهاشون کار کردم معرفی کنم.
اول یک مقدمه ساده از برنامه نویسی هنری بگم و اینکه چطور دوتا مسئله مختلف تو دوتا دنیای کاملا متفاوت به هم مرتبط میشن و چطور دنیای امروز و آینده داره متاثر میشه ازین قضایا.
تعریف هنر
تعریف هنر به نظر من تمام مدیایی میتونه باشه که احساسات شما رو درگیر کنه، هر چیزی مثل آهنگ، فیلم، کتاب، نقاشی، سازه، شکل، عکس، مجسمه و هر چیزی که در تعریف رسانه میگنجه که با احساسات آدمها در یک سطح عمیقتری از اخبار روزانه درگیره رو میتونیم تو طبقهبندی هنر بیاریم. البته که من خودم رو آدم هنرمندی نمیدونم و قطعا کلی تعاریف دیگه میشه ازش ارائه داد اما تو ذهن من در همین حد سادهست.
برنامهنویسی هنری
منظور من از برنامهنویسی هنری یک قسمتی از هنر هست که به صورت بصری و با حسهایی مثل شنوایی و دیداری و بعضا لامسه در ارتباط هست و شکلها و مفاهیمی که ایجاد میشن با سطح عمیقتری از هوشیاری انسان نسبت به خودش و جهان اطرافش و خیلی زیاد با پارامترهای هندسی رندوم و اعداد در ارتباط هست. یکم ممکنه این جمله گیج کننده به نظر بیاد واسه همین ترجیح میدم سریعتر مثالهایی ملموس بیارم ازین قضیه.
در واقع در این نوع از هنر که به نوعی به هنر تعاملی یا Interactive Art معروف هست در واقع استفاده از برنامههای اتوماتیک و کامپیوتری برای دیدن رفتار آدمها و یا دادههای ورودی از طبیعت یا محیط اطراف و سپس وارد کردن آن به صورت پارامترهای مرتبط با ایجاد اشکال و خروجی بصری به صورت یک هنر مولد (Generative Art) میباشد. به بیان دیگه اینجا هنرمند هنر رو مستقیما ایجاد نمیکنه و فقط طراحی الگوریتم ایجاد هنر رو بر عهده داره و خود محصول کار به صورت یک اثر هنری مستقل و کاملا اتوماتیک بر اساس خروجی الگوریتم خلق میشه که میتونه شامل یک نقاشی، یک صفحه گرافیکی زنده و یا حتی موتورهای کوچکی که حرکت میکنن و باعث تغییر ماهیت یک اثر هنری در طول زمان بر اساس دادههای ورودی میشن.
قبول دارم این مفاهیم وقتی قراره وارد زبان فارسی شن به نظرم خیلی پیچیده و دور از ذهن میشن چون شاید خیلی باهاشون دم خور نیستیم تو محاوره روزانه. من به خاطر علاقه خودم و کار و حرفهم که برنامهنویسی هست و با گرافیک کامپیوتری خیلی در تماس مستقیم بودم وارد این حوزه شدم و با یه سری ابزارها و فریمورکها آشنا شدم که میخوام به صورت کلی و اجمالی اینجا اسماشون رو بیارم و یه سری منابع برای یادگیریشون معرفی کنم.
برخلاف اسمش که ممکنه خیلی اسم عمومی و معمولیای باشه یک فریمورک گرافیکی هست که با کمک زبان برنامهنویسی Java نوشته شده و خیلی راحت میشه باهاش اشکال گرافیکی خروجی از کامپیوتر رو ایجاد و کنترل کرد و میشه باهاش اشکال خیلی زیبا و جالبی به وجود آورد که کاملا هندسهشون و مکانیزم ایجادشون دست ماست اما خب خیلی وقتا برای ایجاد یک بینظمی زیبا داخل این اشکال از پارامترهای random توی ایجاد و تغییر مداوم توشون استفاده میشه.
- خوبی Processing اول از همه اینه که بسیار بسیار راحته و اصول اولیه اون رو میتونید از این سایت آموزشی عالی که Daniel Shiffman درست کرده تو یک ساعت به راحتی یاد بگیرید. همچنین Documentation خیلی خوبی روی سایت Processing هست که میتونید ازشون نحوه استفاده از توابع رو یاد بگیرید و مثالهاش رو مطالعه کنید. یکی از خوبیهای این فریمورک نزدیکی بسیار زیاد syntaxش به کدهای Arduino هست که اگر اونو بلد باشید این رو سریع یاد میگیرید. (همچنین میشه باهاش به بوردهای Arduino وصل شد و برخی پارامترهای شکلهامونو از اون بگیریم و یا برای اون دستورات کنترلی بفرستیم مثلا یه سری servo motor رو کنترل کنیم)
- از جمله امتیازات دیگه Processing اینه که علاوه بر اینکه syntax (قوانین نوشتن یک زبان برنامهنویسی) Java رو داره در عین حال میتونید از پورتهای این فریمورک در زبانهای دیگه مثل Python یا Javascript هم استفاده کنید. (گرچه سرعت اجرای برنامهشون پایین تره به تجربه) اما با این میتونید خروجی کارتون رو روی صفحه وب هم اجرا کنید و باهاش سایتهای زیباتری طراحی کنید. بعضی از Artwork هایی که پشت سایتها کار میکنن (به جای Canvas) از Processing استفاده میکنن (برای مثال صفحه اول سایت خودم)
البته خروجیهای خیلی خیلی زیباتری با استفاده از Processing درست میکنن و کدهاش به صورت Open Source هست که به راحتی میتونید خودتون اجراشون کنید یا اینکه از کدهاش نحوه درست کردنشون رو یاد بگیرید و توشون تغییر ایجاد کنید. یکی از سایتهای خوبی که کلی نمونه کار Processing داره سایت OpenProcessing هست که دیدنش رو حتما پیشنهاد میکنم.
- سومین امتیاز بزرگی که Processing به نظرم داره اینه که کتابخونههای خیلی زیادی برای کارهای پردازشی و گرافیکی از جمله کار با دوربینهای مختلف مثل Kinect رو در خودش داره و ابزارهای خیلی خوبی برای پردازش فیلم و عکس و ایجاد تغییر بر روی تمامی پیکسلهای صفحه رو به راحتی در اختیار برنامهنویس و هنرمند قرار میده.
به طور کلی Processing رو به عنوان پله اول وارد شدن به این دنیا توصیه میکنم گرچه ابزارهای دیگهای هم هستن که در ادامه بهشون میپردازیم.
برای اینکه Processing رو خیلی خوب و کامل یاد بگیرید به نظرم یکی از بهترین راهها دیدن فیلهای Daniel Shiffman روی یوتوب هست که خیلی از مسائل پیچیده دنیای تکنولوژی و گرافکی کامپیوتری رو به سادهترین شکل اینجا تو کانال یوتوبش توضیح میده. البته ممکنه این آدم بعدا بشه یکی از معلمهای باحال و با انرژی واستون که کلی چیزای مختلف از تو کانالش یاد بگیرید.
Open Frameworks
این ابزار هم یکی از قویترین ابزارهای و فریمورکهایی هست که توی زمینه ایجاد و خلق آثار هنری دیجیتال و زنده با استفاده از زبان برنامهنویسی C++ به کار میره و به همین دلیل سرعت خیلی بالایی در پردازش داره. در واقع قضیه Open Frameworks مجموعهای از فریمورکهای Open Source هستن که برای پردازش تصویر، خلق تصاویر گرافیکی و پردازش و ایجاد الگوریتمهای مختلف و دریافت و ارسال فرمان به کار میروند که میتونیم باهاشون کارهای مختلفی رو توی حیطههای بسیار وسیعی خلق کنیم.
خودم به شخصه خیلی با Open Frameworks کار نکردم اما چون زبان برنامه نویسی اصلیم C++ هست و یکم باهاش ور رفتم که آشنا باشم باهاش و خب قاعدتا این فریمورک هم از استاندارد برنامه نویسی مشابهی استفاده میکنه که در Processing داشتیم (مثل Arduino) که یک تابع برای ایجاد وضعیت اولیه (معمولا setup) و یک تابع برای پردازش مداوم و ایجاد تغییر و خروجی و … استفاده میشه که در طول برنامه در حال اجراست (معمولا loop)
این فریمورک هم تمام مزایای Processing رو داره بجز اینکه فقط زبان C++ رو پشتیبانی میکنه اما خوبیش اینه که میتونیم با تمام کتابخانههای C++ قوی ای مثل OpenCV یا OpenGL و …برای کارهامون ازش استفاده کنیم.
یک سایت بسیار خوبی هم کارها و پروژههای ایجاد شده به وسیله Open Frameworks رو به معرض نمایش میذاره که میتونید آخرین کارهای انجام شده تو دنیا در این زمینه رو ببینیم و برای کارهاتون الهام بگیرید ازشون که سایت Creative Applications هست.
برو تست کن ببین خوشت میاد؟
خیلی از تجربههای آدمها قابل گفتن نیست توی این پستها و نوشتهها و اینکه اینها صرفا به جهت اینه که شما با مفاهیم جدیدی آشنا شید و همونطور که من لذت بردم از تایم قرنطینه و خودم رو سرگرم کردم شما هم شاید خوشتون بیاد و چیزهای خیلی خوبی توش یاد بگیرید. تاکید بر اینه که برای تست کردن اینکه از این تلاقی دنیای هنر و تکنولوژی و رسانه خوشتون میاد یا نه بایستی خودتون تصمیم بگیرید ولی مطمئن باشید خیلی طول نمیکشه که به نتیجه برسید در مورد خیلی چیزها پس سعی کنید به جای تلف کردن وقت زیاد برید توش.
امیدوارم یه خورده تونسته باشم ذوق و علاقه خودم رو به این مفاهیم توی این نوشتار منتقل کنم و اینکه در آینده بیشتر در مورد این دنیا و آدمهای بزرگی که توش کار میکنن بنویسم و پروژههای کوچیک خودم رو هم اینجا ارائه کنم. اگر سوالی داشتید در این مورد خوشحال میشم بتونم کمک کنم.
مطلبی دیگر از این انتشارات
دانشگاه اگر سیاسی نباشد، بنگاه تربیت سیب زمینی ِ متخصص می شود ...!
مطلبی دیگر از این انتشارات
همسر من ،یک برنامه نویس
مطلبی دیگر از این انتشارات
پاشنهی آشیلِ من ( صحبتی از سرِ یادگاری )