هنر برنامهنویس بدون هدف، دروازه ای به سوی یادگیری
در دنیا نرمافزار تقریبا هر خط کدی که مینویسیم برای حل یک مشکل انجام میشه، برای حل سرعت دیتابیس، حل باگ UI یا automate کردن یکچیزی، توی دنیا پر از هدف شاید انجام یکسری کارها بدون هدف بتونه خیلی بهتون کمکنه!
چند وقت پیش با ایدهی Recreational programming آشنا شدم. Recreational programming وجه کاملا مخالف کارهای هدف دار و امروزی ما است و ایده اینه که کدی بزنیم صرفا جهت تفریح، ساخت چیزی که دوستداریم یا ساخت چیزی که کنجکاوی مارو بر انگیخته. وقتی داریم این کار میکنیم به چیزی جز تفریح و یاد گرفتن فکر نمیکنیم. کدی که مینویسیم قرار نیست پولی دربیاره و قرار نیست کسی حتی بخونتش، کدی که مینویسیم برای خودمون و یادگیری خودمون. اما چه چیزهایی به عنوان Recreational programming حساب میشن؟
- Esoteric Languages (Esolangs):
نوشتن یک برنامه تو زبانهایی که صرفا جهت MEME ساخته شدن یا کاربرد خاصی ندارن مثل brainfuck یا حتی julia
- Code Golf:
تلاش کنیم یک مشکل خاص تو کمترین خط کد ممکن حل کنیم، مثلا سعی کنی فیبوناچی توی ۴ خط حل کنیم یا کمتر. این مورد فقط درباره خط کد نیست و متونه به بایت هم محدود بشه.
- Quines:
برنامهای بنویسیم که خروجی دقیقا کپی سورس کد خودش باشه بدون اینکه فایل برنامه خودش رو بخونه. مثال های زیادیشو میتونید با HTML پیاده کنید :)
- Generative Art & Demoscene:
برنامه ای بنویسیم که یک نقاشی بسازه شاید یک عکس رو ادیت بزنه. یادمه قدیمهای یک برنامه بود که عکس تبدیل به یک گیف میکرد یک دست داشت نازش میکرد D:
- Algorithmic Puzzle:
حل کردن پازلهای برنامهنویسی. گاهی لازم نیست حتی کد بزنید میتونید چالشهای برنامهنویسی حل کنید. چالشهایی مثل Bandit یا Project Euler
اما Recreational programming چه مشکلی حل میکنه؟
اکثر برنامهنویسها وارد برنامهنویسی شدن چون برنامهنویسی فان بود و میشد کارهای بامزه باهاش کرد، یک بازی کوچولو ساخت، یک اسکریپت باحال یا یک ربات تلگرام شخصی، خیلی از ما هدفمون درامد ازش نبود اما وقتی برنامهنویسی از تفریح به شغل تبدیل شد دیگه بهش به عنوان یک چیز شاد و بامزه نگاه نمیکنیم، بهش به عنوان شغل و یک وضیفه نگاه میکنیم که باید انجام بشه تا پول دربیاریم و اگر پول در نمیاریم خوب انجامش نمیدیم!
اما اگر دیدگاهمون تغییر بدیم و دوباره تبدیلش کنیم به یک تفریح میتونیم خیلی چیزها یاد بگیریم و حتی درامد بیشتری داشته باشیم. Recreational programming به مشکلاتی مثل burnout کمک میکنه شاید عجیب باشه ولی شما میتونید burnout ناشی از کار به عنوان برنامهنویس رو با برنامهنوشتن حل کنید.
توصیههایی درباره چطوری و چگونه:
برای Recreational programming لازم نیست پروژهاتون تموم کنید.
لازم نیست پروژه خفنی باشه، یک ربات آبوهوا یا بازی ساده یا اسکریپت جالب میتونه کافی باشه.
سعی کنید از زبانهای low level استفاده کنید.
خلق کردن دوباره چرخ میتونه راه بامزهای برای یادگیری باشه، مثل نوشتن یک وبسرور از پایه یا ساختن دوباره git
در نهایت برنامهنویسی میتونه همچنان فان و بامزه باشه دقیقا مثل مواقعی که شروعش کردیم و هنوز میتونه پر از چیزهای جالب برای یادگیری باشه. Recreational programming مثل یک بسته LEGO میمونه که منتظر شما باهاش یکچیزی بسازید.
@TorhamDevCH
در دنیا نرمافزار تقریبا هر خط کدی که مینویسیم برای حل یک مشکل انجام میشه، برای حل سرعت دیتابیس، حل باگ UI یا automate کردن یکچیزی، توی دنیا پر از هدف شاید انجام یکسری کارها بدون هدف بتونه خیلی بهتون کمکنه!
چند وقت پیش با ایدهی Recreational programming آشنا شدم. Recreational programming وجه کاملا مخالف کارهای هدف دار و امروزی ما است و ایده اینه که کدی بزنیم صرفا جهت تفریح، ساخت چیزی که دوستداریم یا ساخت چیزی که کنجکاوی مارو بر انگیخته. وقتی داریم این کار میکنیم به چیزی جز تفریح و یاد گرفتن فکر نمیکنیم. کدی که مینویسیم قرار نیست پولی دربیاره و قرار نیست کسی حتی بخونتش، کدی که مینویسیم برای خودمون و یادگیری خودمون. اما چه چیزهایی به عنوان Recreational programming حساب میشن؟
- Esoteric Languages (Esolangs):
نوشتن یک برنامه تو زبانهایی که صرفا جهت MEME ساخته شدن یا کاربرد خاصی ندارن مثل brainfuck یا حتی julia
- Code Golf:
تلاش کنیم یک مشکل خاص تو کمترین خط کد ممکن حل کنیم، مثلا سعی کنی فیبوناچی توی ۴ خط حل کنیم یا کمتر. این مورد فقط درباره خط کد نیست و متونه به بایت هم محدود بشه.
- Quines:
برنامهای بنویسیم که خروجی دقیقا کپی سورس کد خودش باشه بدون اینکه فایل برنامه خودش رو بخونه. مثال های زیادیشو میتونید با HTML پیاده کنید :)
- Generative Art & Demoscene:
برنامه ای بنویسیم که یک نقاشی بسازه شاید یک عکس رو ادیت بزنه. یادمه قدیمهای یک برنامه بود که عکس تبدیل به یک گیف میکرد یک دست داشت نازش میکرد D:
- Algorithmic Puzzle:
حل کردن پازلهای برنامهنویسی. گاهی لازم نیست حتی کد بزنید میتونید چالشهای برنامهنویسی حل کنید. چالشهایی مثل Bandit یا Project Euler
اما Recreational programming چه مشکلی حل میکنه؟
اکثر برنامهنویسها وارد برنامهنویسی شدن چون برنامهنویسی فان بود و میشد کارهای بامزه باهاش کرد، یک بازی کوچولو ساخت، یک اسکریپت باحال یا یک ربات تلگرام شخصی، خیلی از ما هدفمون درامد ازش نبود اما وقتی برنامهنویسی از تفریح به شغل تبدیل شد دیگه بهش به عنوان یک چیز شاد و بامزه نگاه نمیکنیم، بهش به عنوان شغل و یک وضیفه نگاه میکنیم که باید انجام بشه تا پول دربیاریم و اگر پول در نمیاریم خوب انجامش نمیدیم!
اما اگر دیدگاهمون تغییر بدیم و دوباره تبدیلش کنیم به یک تفریح میتونیم خیلی چیزها یاد بگیریم و حتی درامد بیشتری داشته باشیم. Recreational programming به مشکلاتی مثل burnout کمک میکنه شاید عجیب باشه ولی شما میتونید burnout ناشی از کار به عنوان برنامهنویس رو با برنامهنوشتن حل کنید.
توصیههایی درباره چطوری و چگونه:
برای Recreational programming لازم نیست پروژهاتون تموم کنید.
لازم نیست پروژه خفنی باشه، یک ربات آبوهوا یا بازی ساده یا اسکریپت جالب میتونه کافی باشه.
سعی کنید از زبانهای low level استفاده کنید.
خلق کردن دوباره چرخ میتونه راه بامزهای برای یادگیری باشه، مثل نوشتن یک وبسرور از پایه یا ساختن دوباره git
در نهایت برنامهنویسی میتونه همچنان فان و بامزه باشه دقیقا مثل مواقعی که شروعش کردیم و هنوز میتونه پر از چیزهای جالب برای یادگیری باشه. Recreational programming مثل یک بسته LEGO میمونه که منتظر شما باهاش یکچیزی بسازید.
@TorhamDevCH
❤3👍2🔥1
تورهام | TorhamDev
هنر برنامهنویس بدون هدف، دروازه ای به سوی یادگیری در دنیا نرمافزار تقریبا هر خط کدی که مینویسیم برای حل یک مشکل انجام میشه، برای حل سرعت دیتابیس، حل باگ UI یا automate کردن یکچیزی، توی دنیا پر از هدف شاید انجام یکسری کارها بدون هدف بتونه خیلی بهتون کمکنه!…
یکی از آدمهای باحالی که میتونید در این محبث دنبال کنید Alexey Kutepov یک برنامهنویس روس که چند وقت پیش یکی از ویدیوهاش وایرال شد همون که ui رو با C مینوشت. گیتهابش:
https://github.com/rexim
https://github.com/rexim
GitHub
rexim - Overview
Recreational Programming. rexim has 79 repositories available. Follow their code on GitHub.
❤2👏2👍1🔥1
یک ابزاری که این روزها به کار میاد mtr یا My Traceroute هستش که ping و traceroute باهم داخل یک برنامه ترکیب کرده و بهتون کمک میکنه به جای اینکه از دوتا ابزار جدا جدا استفاده کنید جفتشون کنار هم باشه. هدفش اینه با استفاده از ICMP از هاب به هاب بره مسیر رو بررسی کنه.
میتونید دربارش تو این مقاله بخونید:
https://www.redhat.com/en/blog/linux-mtr-command
@TorhamDevCH
میتونید دربارش تو این مقاله بخونید:
https://www.redhat.com/en/blog/linux-mtr-command
@TorhamDevCH
👍3
بعد از اینکه دولت روسیه پاول دورف به تهسیل فعالیتهای تروریستی ( اوکراینیها از تلگرام استفاده میکنند) متهم کرده توییتر تلگرام این عکس اپلود کرده و همچنین پروفایل پاول دورف هم به اون یکی عکس در تلگرام تغییر کرده 😂
یکی از آیدیهای تلگرام پاول دورف @monk هستش
@TorhamDevCH
یکی از آیدیهای تلگرام پاول دورف @monk هستش
@TorhamDevCH
🤣9
دو روش مختلف هندل کردن یک ایونت. Debouncing و Throttling
قبل از اینکه به موضوع اصلی برسیم اول بیایید بینیم یک ایونت اصلا چی هستش.
یک مثال خیلی ساده از یک ایونت میتونه یک سرچ باکس باشه، برای مثال یک سرچ باکس یک وبسایت فیلم. زمانی که یوزر شروع به تایپ کردن اسم فیلمی که میخواد جستوجو کنه میکنه با هر لغتی که تایپ میکنه یک ایونت ساخته میشه، اما حالا سوال اینجاست که این ایونت رو چطور هندل کنیم و چه زمانی درخواست رو برای بک اند ارسال کنیم تا نتایج جستوجو رو دریافت کنیم؟
روش پیشفرض: حالت پیشفرض(دیفالت) اینه که با هر لغتی که یوزر تایپ کرد یک درخواست به بکاند بزنیم محتوا دانلود کنیم و لیست رو نشون بدیم. مشکل این ماجرا کاملا مشخص شما نه تنها درخواست بیش از اندازه به بکاند میزنید بلکه کلاینت هم باید یک فانکشن رو بارها اجرا کنه که نتیجه اش کند شدن کلاینت و بکاند خواهد بود.
Debouncing:
در این روش شما یک تایمر اصلی دارید. فرض کنیم تایمر ما هر ۵ ثانیه است. زمانی که یوزر شروع به تایپ کردن لغات میکنه ما فانکشن رو صدا میزنیم اما این بار فانکشن ۵ ثانیه صبر میکنه قبل از ارسال درخواست و اگر در این ۵ ثانیه ایونت جدیدی ساخته شد ( کاربر لغت جدیدی تایپ کنه) تایمر ۵ ثانیه ریست میکنه و دوباره ۵ ثانیه صبر میکنه، در نتیجه شما تنها زمانی درخواست رو ارسال میکنید که از اخرین چیزی که کاربر نوشته باشه ۵ ثانیه گذشته باشه، اینطوری نه تنها کلاینت شما منابع کمتری استفاده میکنه بلکه بک اند هم درخواستهای کمتری دریافت میکنه.
Throttling:
در این روش ما بازهم یک تایمر داریم اما تفاوت این روش با روش debouncing اینه که بلافاصه که یوزر شروع به تایپ کردن لغتی کرد ما درخواست به بکاند ارسال میکنیم و بعدش ۵ ثانیه صبر میکنیم و دوباره هرچیزی که یوزر نوشته بود ارسال میکنیم و این رو تا ابد انجام میدیم مگر اینکه از اخرین باری که فانکشن اجرا شده باشه تغییری رخ نداده باشه. در نتیجه تو این روش فانکشن در یک بازه زمانی مشخص همیشه اجرا میشه.
البته throttling خیلی گزینه خوبی برای این مثال نیست و debounce گزینه درست هندل کردن این مثال هست.
@TorhamDevCH
قبل از اینکه به موضوع اصلی برسیم اول بیایید بینیم یک ایونت اصلا چی هستش.
یک مثال خیلی ساده از یک ایونت میتونه یک سرچ باکس باشه، برای مثال یک سرچ باکس یک وبسایت فیلم. زمانی که یوزر شروع به تایپ کردن اسم فیلمی که میخواد جستوجو کنه میکنه با هر لغتی که تایپ میکنه یک ایونت ساخته میشه، اما حالا سوال اینجاست که این ایونت رو چطور هندل کنیم و چه زمانی درخواست رو برای بک اند ارسال کنیم تا نتایج جستوجو رو دریافت کنیم؟
روش پیشفرض: حالت پیشفرض(دیفالت) اینه که با هر لغتی که یوزر تایپ کرد یک درخواست به بکاند بزنیم محتوا دانلود کنیم و لیست رو نشون بدیم. مشکل این ماجرا کاملا مشخص شما نه تنها درخواست بیش از اندازه به بکاند میزنید بلکه کلاینت هم باید یک فانکشن رو بارها اجرا کنه که نتیجه اش کند شدن کلاینت و بکاند خواهد بود.
Debouncing:
در این روش شما یک تایمر اصلی دارید. فرض کنیم تایمر ما هر ۵ ثانیه است. زمانی که یوزر شروع به تایپ کردن لغات میکنه ما فانکشن رو صدا میزنیم اما این بار فانکشن ۵ ثانیه صبر میکنه قبل از ارسال درخواست و اگر در این ۵ ثانیه ایونت جدیدی ساخته شد ( کاربر لغت جدیدی تایپ کنه) تایمر ۵ ثانیه ریست میکنه و دوباره ۵ ثانیه صبر میکنه، در نتیجه شما تنها زمانی درخواست رو ارسال میکنید که از اخرین چیزی که کاربر نوشته باشه ۵ ثانیه گذشته باشه، اینطوری نه تنها کلاینت شما منابع کمتری استفاده میکنه بلکه بک اند هم درخواستهای کمتری دریافت میکنه.
Throttling:
در این روش ما بازهم یک تایمر داریم اما تفاوت این روش با روش debouncing اینه که بلافاصه که یوزر شروع به تایپ کردن لغتی کرد ما درخواست به بکاند ارسال میکنیم و بعدش ۵ ثانیه صبر میکنیم و دوباره هرچیزی که یوزر نوشته بود ارسال میکنیم و این رو تا ابد انجام میدیم مگر اینکه از اخرین باری که فانکشن اجرا شده باشه تغییری رخ نداده باشه. در نتیجه تو این روش فانکشن در یک بازه زمانی مشخص همیشه اجرا میشه.
البته throttling خیلی گزینه خوبی برای این مثال نیست و debounce گزینه درست هندل کردن این مثال هست.
@TorhamDevCH
❤3👍1
تورهام | TorhamDev
Photo
استرالیا هم علیه تلگرام به اتهام انتشار محتوا تروریستی اقدام قانونی کرد که این اتفاق بعد از این افتاد که تلگرام ویدئوهای مربوط به اعدامهای تروریستی از بستر تلگرام پاک نکرده و اگه استراليا موفق بشه، پاول باید ۵۴ میلیارد دلار استرالیا پرداخت کنه.
@TorhamDevCH
@TorhamDevCH
🤬3
این روزها دارم رو این پروژه کار میکنم، هدف اولام این بود که یک برنامه داشته باشم که فایلهای Obsidian ام جایی آنلاین ذخیره کنم که داشته باشمش و اگه روزی لینوکسام عوض کردم فایلها رو از دست ندم، بعد از اینکه پروژه رو شروع کردم دیدم میتونم هرچیزی که دلم میخواد باهاش یکجایی تو اینترنت سینک کنم :) در نتیجه اسمش عوض کردم.
پروژه سبکی هست در این لحظه و کلا دوتا کتابخونه واچداگ و ریکوئستز استفاده کردم و کارش اینه که با پترن debounce میاد گوش میده به دایرکتوری که بهش دادید و اگه تغییری توش رخ بده با یک تاخییر که خود یوزر مدتش تایین میکنه میاد فایل اپلود میکنه داخل یک کانال تلگرام. هنوز در حال توسعه است اما میتونید فیچر تلگرامش رو تست کنید چون کامل کار میکنه.
خیلی کار داره، تست میخواد کدش باید تمیز بشه و میخوام قابلیت انتخاب همزمان چندتا پلتفرم بزارم و باید ارور هندلینگ داخلش انجام بشه.
نکته بعدیش اینه که از ai استفاده نکردم کد به روش قدیم نوشتم :)
اگه ایده ای دارید خوشحال میشم بهم بگید.
https://github.com/TorhamDev/File-sync-tool
@TorhamDevCH
پروژه سبکی هست در این لحظه و کلا دوتا کتابخونه واچداگ و ریکوئستز استفاده کردم و کارش اینه که با پترن debounce میاد گوش میده به دایرکتوری که بهش دادید و اگه تغییری توش رخ بده با یک تاخییر که خود یوزر مدتش تایین میکنه میاد فایل اپلود میکنه داخل یک کانال تلگرام. هنوز در حال توسعه است اما میتونید فیچر تلگرامش رو تست کنید چون کامل کار میکنه.
خیلی کار داره، تست میخواد کدش باید تمیز بشه و میخوام قابلیت انتخاب همزمان چندتا پلتفرم بزارم و باید ارور هندلینگ داخلش انجام بشه.
نکته بعدیش اینه که از ai استفاده نکردم کد به روش قدیم نوشتم :)
اگه ایده ای دارید خوشحال میشم بهم بگید.
https://github.com/TorhamDev/File-sync-tool
@TorhamDevCH
GitHub
GitHub - TorhamDev/File-sync-tool: Sync your files cross free platforms
Sync your files cross free platforms. Contribute to TorhamDev/File-sync-tool development by creating an account on GitHub.
❤5👍3