Bit Orbit 🪐
داشتم به این فکر میکردم که سایتی مثل jadi.net فیلتره، چه راهکاری هست که بشه از سایت هایی مثل این بدون فیلتر استفاده کرد؟ مثلا به سایت bbc، اکثر دیتا متن های خبر هاست، خب این سایت ها رو چطور میشه دیتاشون رو بدون فیلتر دردسترس داشت؟ بعد اینکه حالا فرض کنید…
نتیجه این اکشن که الان داره ران میشه رو بهتون میگم به زودی،
و اگر که خودتون دوست دارین ببنید این لینک رو چک کنید.
و ایکه اگه ایدهای دارین، منو با خبر کنید،
این کارم یکم شبیه به سایت internet archive هست ولی فقط برای یک سایته.
و دیتا رو روی گیتهاب نگه میداره که میشه بردش روی pages گیتهاب.
و اگر که خودتون دوست دارین ببنید این لینک رو چک کنید.
و ایکه اگه ایدهای دارین، منو با خبر کنید،
این کارم یکم شبیه به سایت internet archive هست ولی فقط برای یک سایته.
و دیتا رو روی گیتهاب نگه میداره که میشه بردش روی pages گیتهاب.
❤3👏2👍1🔥1
Bit Orbit 🪐
نتیجه این اکشن که الان داره ران میشه رو بهتون میگم به زودی، و اگر که خودتون دوست دارین ببنید این لینک رو چک کنید. و ایکه اگه ایدهای دارین، منو با خبر کنید، این کارم یکم شبیه به سایت internet archive هست ولی فقط برای یک سایته. و دیتا رو روی گیتهاب نگه میداره…
نتیجه اولین تست: بخاطر اینکه این جاب بیشتر از 6 ساعت زمان برد، گیتهاب کنسلش کرد :'(
من فکر نمیکردم اینقدر تایمش بره بالا،
باید سوییچ --verbose رو میزدم که ببینم کجای کار چنین مشکلی پیش میاد،
احتمال میدم فایل هایی که حجم زیادی دارند هم دانلود شده، سر همین اینبار محدودیت حجم دانلود میذارم در حد 150MB.
من فکر نمیکردم اینقدر تایمش بره بالا،
باید سوییچ --verbose رو میزدم که ببینم کجای کار چنین مشکلی پیش میاد،
احتمال میدم فایل هایی که حجم زیادی دارند هم دانلود شده، سر همین اینبار محدودیت حجم دانلود میذارم در حد 150MB.
👍5❤1
Bit Orbit 🪐
کرد :'(
من فکر نمیکردم اینقدر تایمش بره بالا،
باید سوییچ --verbose رو میزدم که ببینم کجای کار چنین مشکلی پیش میاد،
احتمال میدم فایل هایی که حجم زیادی دارند هم دانلود شده، سر همین اینبار محدودیت حجم دانلود میذارم
من فکر نمیکردم اینقدر تایمش بره بالا،
باید سوییچ --verbose رو میزدم که ببینم کجای کار چنین مشکلی پیش میاد،
احتمال میدم فایل هایی که حجم زیادی دارند هم دانلود شده، سر همین اینبار محدودیت حجم دانلود میذارم
حتی با اینکه من محدودیت سایز فایل دانلود رو هم تنظیم کردم، باز هم سایت کامل میرور نشد و بعد از 6 ساعت جاب کنسل شد،
در نتیجه این راه فکر نمیکنم مناسب باشه :_(
انگار جادی بیشتر چیزی که فکرشو میکنم پست داشت :)، استفاده از httrack بنظرم خیلی مفید بود نسبت به wget
دلیل اولم اینبود که از multi threads ساپورت میکنه، دوم اینکنه نیاز نیست سویچ خاصی رو مشخص کنم، فقط با یک url رانش میکنم ولی با wget ممکنه سوییچ رو جا بندازم.
در نهایت باید راه مناسب تری هم برای اینکار باشه، یکبار با wget هم ران میکنم ببینم اصلا تفاوتی میکنه.
گیتهاب داره این وسط بهم فحش میده فکر کنم.
در نتیجه این راه فکر نمیکنم مناسب باشه :_(
انگار جادی بیشتر چیزی که فکرشو میکنم پست داشت :)، استفاده از httrack بنظرم خیلی مفید بود نسبت به wget
دلیل اولم اینبود که از multi threads ساپورت میکنه، دوم اینکنه نیاز نیست سویچ خاصی رو مشخص کنم، فقط با یک url رانش میکنم ولی با wget ممکنه سوییچ رو جا بندازم.
در نهایت باید راه مناسب تری هم برای اینکار باشه، یکبار با wget هم ران میکنم ببینم اصلا تفاوتی میکنه.
گیتهاب داره این وسط بهم فحش میده فکر کنم.
😁5
Bit Orbit 🪐
حتی با اینکه من محدودیت سایز فایل دانلود رو هم تنظیم کردم، باز هم سایت کامل میرور نشد و بعد از 6 ساعت جاب کنسل شد، در نتیجه این راه فکر نمیکنم مناسب باشه :_( انگار جادی بیشتر چیزی که فکرشو میکنم پست داشت :)، استفاده از httrack بنظرم خیلی مفید بود نسبت به…
این میان به یک چیز جالب دیگه رسیدم، یادمه تایمی که روسیه به اوکراین حمله نظامی کرد و جنگ رو شروع کرد، خیلی از اکتویسیت ها اسکریپت هایی نوشتن که سایت های دولتی روسیه رو DOS کنه و خب موفق هم شدن.
اما این اسکریپت ها چطوری بود؟ یکسری ابزار داریم برای بنچمارک گرفتن از یک سایت، که مثلا شما وقتی آدرس یک سایت بهش میدی اون ابزار سعی میکنی با چندین thread مختلف همزمان به صفحه های زیادی از سایت رکوئست بده و دیتا هاشو دانلود کنه. به تنهایی ران کردن فقط یک ابزار بنچمارک خودش شبیه اینه که دهها کاربر(حتی بیشتر) دارن از سایت استفاده میکنند، خب با اینکار سایت لودش میره بالا و میتونن بسنجن که حداقل با چه میزان کاربر سایت میتونه جوابگو باشه.
اکتیویستها برای اینکه کار DOS رو برای همه راحتتر کنند این ابزار ها رو کانفیگ و داکرایز کردن، بعد فقط گفتن یه docker run بزنید و تمام، کانتینر شما شروع میکنه به Dos.
الان میبینم چرا همینکارو با گیتهاب اکشن نکنیم؟ کاری کنیم برای 6 ساعت سرور های گیتهاب یک سایت رو Dos کنه. البته اگر که اکانتمون بن نشه.
اما این اسکریپت ها چطوری بود؟ یکسری ابزار داریم برای بنچمارک گرفتن از یک سایت، که مثلا شما وقتی آدرس یک سایت بهش میدی اون ابزار سعی میکنی با چندین thread مختلف همزمان به صفحه های زیادی از سایت رکوئست بده و دیتا هاشو دانلود کنه. به تنهایی ران کردن فقط یک ابزار بنچمارک خودش شبیه اینه که دهها کاربر(حتی بیشتر) دارن از سایت استفاده میکنند، خب با اینکار سایت لودش میره بالا و میتونن بسنجن که حداقل با چه میزان کاربر سایت میتونه جوابگو باشه.
اکتیویستها برای اینکه کار DOS رو برای همه راحتتر کنند این ابزار ها رو کانفیگ و داکرایز کردن، بعد فقط گفتن یه docker run بزنید و تمام، کانتینر شما شروع میکنه به Dos.
الان میبینم چرا همینکارو با گیتهاب اکشن نکنیم؟ کاری کنیم برای 6 ساعت سرور های گیتهاب یک سایت رو Dos کنه. البته اگر که اکانتمون بن نشه.
🔥4
Bit Orbit 🪐
دارم یه سرویس ساده مینویسم برای ارسال فایل به دیگران با استفاده از ایمیل. خیلی ساده شما فایلی رو انتخاب میکنید، ایمیل مقصد رو وارد میکنید و بعد فایل به سرور آپلود میشه. بعد از آپلود، یک ایمیل ارسال میشه حاوی لینک دانلود فایل. همینطور که مشخصه این برنامه…
اون تایم این سرویس رو نوشتم بعد گفتم قبل از اینکه منتشرش کنم یک وباپ هم براش درست کنم ولی بعد از امتحاناتم دیگه فرصت نشد.
بجاش اینجا معرفی میکنم و خب کسایی که توی این چنل هستن به محیط گرافیکی نیاز ندارن ;)
ایده کلی اینبود که مثلا من نیاز دارم تا یک دیتایی رو برای کسی ایمیل کنم درصورتی هویت من مشخص نشه.
اینطوری شد که یک سرویس برای اینکار نوشتم. بیشتر هم داشتم تایپ اسکریپت تمرین میکردم تا نوشتن یک چیز مفید.
برای استفاده کافیه فقط با curl یک دیتایی رو پست کنیم به آدرسی که سرویس روش هاست شده.
مثلا اگه سرویس روی example.com باشه میتونیم اینکارو بکنیم:
آدرس گیتهاب
بجاش اینجا معرفی میکنم و خب کسایی که توی این چنل هستن به محیط گرافیکی نیاز ندارن ;)
ایده کلی اینبود که مثلا من نیاز دارم تا یک دیتایی رو برای کسی ایمیل کنم درصورتی هویت من مشخص نشه.
اینطوری شد که یک سرویس برای اینکار نوشتم. بیشتر هم داشتم تایپ اسکریپت تمرین میکردم تا نوشتن یک چیز مفید.
برای استفاده کافیه فقط با curl یک دیتایی رو پست کنیم به آدرسی که سرویس روش هاست شده.
مثلا اگه سرویس روی example.com باشه میتونیم اینکارو بکنیم:
curl -L -F file='@path/2/file' example.com/?mail=someOneMail@mail.com
آدرس گیتهاب
GitHub
GitHub - shabane/phantom: simple API and web app to send a file to a email without any singup or other bullshits!
simple API and web app to send a file to a email without any singup or other bullshits! - shabane/phantom
👍2
هر بار که یک پروژه رو شروع میکنم، بعد از git init کردن باید سرچ کنم و دنبال یک .gitignore فایل مشخص برای اون پروژه باشم،
سایت http://gitignore.io/ کار رو راحت کرده، کافیه کیورد رو توش سرچ کنید تا فایل مناسب رو بهتون بده.
از این بهتر یک پلاگین برای zsh هم هست که توی ترمینال با این سایت کار میکنه و نیاز به سرچ توی مرورگر هم دیگه ندارین.
مثلا برای پایتون کامند میشه:
و برای مثلا پایتون و جنگو
و خب اینکار فقط تمپلیت رو نشون میده، میشه خیلی ساده تمپلیت رو ریدایرکت کرد به فایل
سایت http://gitignore.io/ کار رو راحت کرده، کافیه کیورد رو توش سرچ کنید تا فایل مناسب رو بهتون بده.
از این بهتر یک پلاگین برای zsh هم هست که توی ترمینال با این سایت کار میکنه و نیاز به سرچ توی مرورگر هم دیگه ندارین.
مثلا برای پایتون کامند میشه:
gi pythonو برای مثلا پایتون و جنگو
git python,djangoو خب اینکار فقط تمپلیت رو نشون میده، میشه خیلی ساده تمپلیت رو ریدایرکت کرد به فایل
gi python >> .gitignoreToptal
gitignore.io
Create useful .gitignore files for your project
1🔥4
بیشتر وقت ها که من کد مینویسم یک آهنگی هم پخش میکنم که صدا های اطراف تمرکزمام رو بهم نریزند(اکثر اوقات خوابگاهم)
ولی اکثر تایمها بخاطر همون آهنگ حواسم پرت میشه :))
بیشتر بخاطر اینکه من موزیک ها رو از تلگرام گوش میکنم و خب تلگرام چون یک شبکه اجتماعیه، پیام ها حواسم رو پرت میکنند.
دلیل دوم اینکه قابلیت تغییر آهنگ رو دارم، و کلی چنل که بتونم برم یکیشون رو برای پخش آهنگ انتخاب کنم در نهایت هیچکدوم ریتم مشخص هم ندارند.
اینطوری بود که ایده ساخت یک وبسایت به ذهنم رسید که برامون آهنگ پخش کنه و هیچ کنترل خاصی روش نداشته باشیم بجز تغییر استیشن رایدیویی و کم/زیاد کردن صدا
قدم اول گفتم من اگه این سایت رو بنویسم، باید یک سرور هم بگیرم که آهنگ ها رو داخلش قرار بدم و این هزینه داره
خب گیتهاب مگه چشه؟ میتونه آهنگ ها همه روی خود گیتهاب باشه و از طریق خود گیتهاب پخش بشه!؟
فقط به یک UI نیازه که به API ریکوئست بده و استیشن ها رو لیست کنه و یکیشون رو انتخاب کنه تا آهنگشو پخش کنه.
خب خود UI هم باید یکجایی قرار داده بشه تا سرو بشه! سایت های vercel یا netfy رایگان اینکار رو برامون میکنند ولی چون که همه چیز رو داره
گیتهاب هندل میکنه خودش، خب اینم قرار میدیم روی گیتهاب پیجز :)
سایت رو توی این چهار روز گذشته نوشتم و روی آدرس https://radio.wiregeek.ir قرارش دادم، فعلا استیشن های Rock, Lo-Fi و کانتری داخلش هست.
ولی ژانر های دیگههم به زودی اضافه میکنم.
اگه شما خواستین یک استیشن داشته باشید، کافیه یک ریپازیتوری درست کنید و موزیک ها رو داخلش قرار بدین
بعد یک ایشو توی گیتهاب باز کنید و بهم بگین که استیشن شما رو اضافه کنم.
به صورت تکنیکی هر استیشن یک submodule git هست و من کافیه دستور git add submodule رو بزنم. امیدوارم یک استیشن برای jazz داشته باشیم 3>
گیتهاب پروژه: https://github.com/shabane/radio
و خود سایت هم: https://radio.wiregeek.ir/
ولی اکثر تایمها بخاطر همون آهنگ حواسم پرت میشه :))
بیشتر بخاطر اینکه من موزیک ها رو از تلگرام گوش میکنم و خب تلگرام چون یک شبکه اجتماعیه، پیام ها حواسم رو پرت میکنند.
دلیل دوم اینکه قابلیت تغییر آهنگ رو دارم، و کلی چنل که بتونم برم یکیشون رو برای پخش آهنگ انتخاب کنم در نهایت هیچکدوم ریتم مشخص هم ندارند.
اینطوری بود که ایده ساخت یک وبسایت به ذهنم رسید که برامون آهنگ پخش کنه و هیچ کنترل خاصی روش نداشته باشیم بجز تغییر استیشن رایدیویی و کم/زیاد کردن صدا
قدم اول گفتم من اگه این سایت رو بنویسم، باید یک سرور هم بگیرم که آهنگ ها رو داخلش قرار بدم و این هزینه داره
خب گیتهاب مگه چشه؟ میتونه آهنگ ها همه روی خود گیتهاب باشه و از طریق خود گیتهاب پخش بشه!؟
فقط به یک UI نیازه که به API ریکوئست بده و استیشن ها رو لیست کنه و یکیشون رو انتخاب کنه تا آهنگشو پخش کنه.
خب خود UI هم باید یکجایی قرار داده بشه تا سرو بشه! سایت های vercel یا netfy رایگان اینکار رو برامون میکنند ولی چون که همه چیز رو داره
گیتهاب هندل میکنه خودش، خب اینم قرار میدیم روی گیتهاب پیجز :)
سایت رو توی این چهار روز گذشته نوشتم و روی آدرس https://radio.wiregeek.ir قرارش دادم، فعلا استیشن های Rock, Lo-Fi و کانتری داخلش هست.
ولی ژانر های دیگههم به زودی اضافه میکنم.
اگه شما خواستین یک استیشن داشته باشید، کافیه یک ریپازیتوری درست کنید و موزیک ها رو داخلش قرار بدین
بعد یک ایشو توی گیتهاب باز کنید و بهم بگین که استیشن شما رو اضافه کنم.
به صورت تکنیکی هر استیشن یک submodule git هست و من کافیه دستور git add submodule رو بزنم. امیدوارم یک استیشن برای jazz داشته باشیم 3>
گیتهاب پروژه: https://github.com/shabane/radio
و خود سایت هم: https://radio.wiregeek.ir/
GitHub
GitHub - shabane/radio: radio web app which feeds with repo for streaming!
radio web app which feeds with repo for streaming! - shabane/radio
🔥18👏4👍1
Bit Orbit 🪐
بیشتر وقت ها که من کد مینویسم یک آهنگی هم پخش میکنم که صدا های اطراف تمرکزمام رو بهم نریزند(اکثر اوقات خوابگاهم) ولی اکثر تایمها بخاطر همون آهنگ حواسم پرت میشه :)) بیشتر بخاطر اینکه من موزیک ها رو از تلگرام گوش میکنم و خب تلگرام چون یک شبکه اجتماعیه،…
اگر بعد از بازکردن این سایت خودکار براتون آهنگ پلی نمیشه، راهکار اینه که اون slide bar پایین رو تغییر بدین به یک استیشن دیگه
بعد اگه همون استیشن اول رو خواستین میتونید برشگردونید.
اما دلیل این اتفاق چیه؟
کروم و کلا مرورگر ها انگار یک مکانیزمی دارند که کاربران با پخش خودکار یک آهنگ اذیت نشن
این مکانیزم میگه فقط در حالتی یک موزیک پخش میشه که کاربر با سایت تعامل داشته باشه!
و یا اینکه به صورت muted(بیصدا) باشه که پخش بشه(چرا واقعا؟؟) بیشتر برای ویدیو بکار میره فکر کنم.
من سعی کردم با js اینکار رو دور بزنم و یک addEventListener برای سایت گذاشتم که وقتی موزیک به اندازه کافی لود شد، خودکار هم پخش بشه
اما مروگر جلوی این رو هم گرفت :`(
میتونید اینجا دربارهش بخونید که این مکانیزم چیه.
در آخر برای اینکه راحت باشین دسترسی به پخش صدا رو فعال کنید.
بعد اگه همون استیشن اول رو خواستین میتونید برشگردونید.
اما دلیل این اتفاق چیه؟
کروم و کلا مرورگر ها انگار یک مکانیزمی دارند که کاربران با پخش خودکار یک آهنگ اذیت نشن
این مکانیزم میگه فقط در حالتی یک موزیک پخش میشه که کاربر با سایت تعامل داشته باشه!
و یا اینکه به صورت muted(بیصدا) باشه که پخش بشه(چرا واقعا؟؟) بیشتر برای ویدیو بکار میره فکر کنم.
من سعی کردم با js اینکار رو دور بزنم و یک addEventListener برای سایت گذاشتم که وقتی موزیک به اندازه کافی لود شد، خودکار هم پخش بشه
اما مروگر جلوی این رو هم گرفت :`(
میتونید اینجا دربارهش بخونید که این مکانیزم چیه.
در آخر برای اینکه راحت باشین دسترسی به پخش صدا رو فعال کنید.
👍3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
این ابزار خیلی جالبه،
خروجی اخرین کامندی که اجرا کردین رو براتون توضیح میده
pipx install wut-cli
خروجی اخرین کامندی که اجرا کردین رو براتون توضیح میده
pipx install wut-cli
👏1
Bit Orbit 🪐
بیشتر وقت ها که من کد مینویسم یک آهنگی هم پخش میکنم که صدا های اطراف تمرکزمام رو بهم نریزند(اکثر اوقات خوابگاهم) ولی اکثر تایمها بخاطر همون آهنگ حواسم پرت میشه :)) بیشتر بخاطر اینکه من موزیک ها رو از تلگرام گوش میکنم و خب تلگرام چون یک شبکه اجتماعیه،…
همینطور که قبلا گفتم، پلی کردن آهنگ توی سایت به صورت خودکار اتفاق نمیوفته مگر اینکه کاربر توی تنظیمات اول اجازه پخش صدا رو بده
یا اینکه قبل از پخش موزیک، کاربر تعامل داشته باشه با سایت، چون من کدم به این صورت بود که به صورت خودکار با ورود کاربر آهنگ پخش بشه، مرورگر جلو این رو میگرفت.
برای حل این مشکل، یک دکمهای اضافه کردم که توانایی پخش/توقف به سایت اضافه میکنه. اینطوری اگر آهنگ پخش نشد
شخصا باید این دکمه رو بزنید :)
پس مجدد یه تستی بکنید: https://radio.wiregeek.ir/
یا اینکه قبل از پخش موزیک، کاربر تعامل داشته باشه با سایت، چون من کدم به این صورت بود که به صورت خودکار با ورود کاربر آهنگ پخش بشه، مرورگر جلو این رو میگرفت.
برای حل این مشکل، یک دکمهای اضافه کردم که توانایی پخش/توقف به سایت اضافه میکنه. اینطوری اگر آهنگ پخش نشد
شخصا باید این دکمه رو بزنید :)
پس مجدد یه تستی بکنید: https://radio.wiregeek.ir/
🔥2👏2👌1
Bit Orbit 🪐
همینطور که قبلا گفتم، پلی کردن آهنگ توی سایت به صورت خودکار اتفاق نمیوفته مگر اینکه کاربر توی تنظیمات اول اجازه پخش صدا رو بده یا اینکه قبل از پخش موزیک، کاربر تعامل داشته باشه با سایت، چون من کدم به این صورت بود که به صورت خودکار با ورود کاربر آهنگ پخش بشه،…
برای تست کردن این سایت از بس آهنگ راک پلی کردم یکی از باند های لپتاپم پاره شده الان و اون یکی صدا نمیده.
به زودی انتظار دارم گیتهاب بخاطر این حجم آهنگ هم بنم کنه :((
به زودی انتظار دارم گیتهاب بخاطر این حجم آهنگ هم بنم کنه :((
🌚4
یکی اومده ChatGpt و Gemini رو بهشون پرامپت یکسان داده و عملکردشون رو باهم مقایسه کرده.
https://www.tomsguide.com/ai/chatgpt/i-put-gemini-vs-chatgpt-to-the-test-with-7-prompts-heres-the-winner
https://www.tomsguide.com/ai/chatgpt/i-put-gemini-vs-chatgpt-to-the-test-with-7-prompts-heres-the-winner
👍2
این QR خیلی جالبه
اگه توی زاویه های مختلف اسکنش کنید
متوجه میشید که به دو جای مخلتف لینک میشه!
چطور کار میکند؟
به زبان ساده، کد QR به گونهای ساخته شده که دو مجموعه داده را به هم میآمیزد. هنگامی که یک اسکنر QR کد را میخواند، معمولاً اولین مجموعه دادهای را که با آن مواجه میشود تفسیر میکند و به وب سایت اول میرود. اما اگر اسکنر QR دیگری با تنظیمات متفاوت یا قابلیت خواندن پیشرفتهتر همان کد را اسکن کند، ممکن است مجموعه داده دوم را تفسیر کند و به وب سایت دوم هدایت شود.(تفسیر gemini)
منبع
اگه توی زاویه های مختلف اسکنش کنید
متوجه میشید که به دو جای مخلتف لینک میشه!
چطور کار میکند؟
به زبان ساده، کد QR به گونهای ساخته شده که دو مجموعه داده را به هم میآمیزد. هنگامی که یک اسکنر QR کد را میخواند، معمولاً اولین مجموعه دادهای را که با آن مواجه میشود تفسیر میکند و به وب سایت اول میرود. اما اگر اسکنر QR دیگری با تنظیمات متفاوت یا قابلیت خواندن پیشرفتهتر همان کد را اسکن کند، ممکن است مجموعه داده دوم را تفسیر کند و به وب سایت دوم هدایت شود.(تفسیر gemini)
منبع
👍8🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
اگه نتونستید اسکن کنید، ویدیو رو میتونید ببینید
👍6
فرض کنید یک فانکشن مینویسید توی پایتون که دو ورودی میگیره
و بعد اون ورودی ها رو باهم جمع میکنه و نتیجه رو بر میگردونه.
حالا اگه خودتون یک تایپ جدید مثلا یک کلاسی که خودتون ساختین رو بهش بعنوان ورودی بدین چی میشه؟
بیایین با کد این مثال رو برسی کنیم:
اگه این کد رو یک تایپ جدید در نظر بگیریم
و این فانکشن رو در نظر بگیریم که قراره دو مقدار رو جمع کنه:
حالا دو متغییر درست کنیم از جنس Person
خب بیایین حالا این دو متغییر رو جمع کنیم
اما قبلش باید بگم فانکشنی که ساختیم صرفا باید دو چیز را جمع کند که اصلا جنسش مشخص نیست
و پایتون حتی اگر جنس ورودی های فانکشن رو هم مشخص کنیم باز هم هر نوعی میتونیم بعنوان ورودی به فانکشن بدیم
و فانکشن سعی میکنه اون وردی ها رو جمع کنه
اما وقتی کلاسی که ما نوشتیم این رو ساپورت نمیکنه، چه اتفاقی میوفته؟ خب اینجاست که run time ارور میگیریم.
اما یک مسئله دیگه.
اگه کلاس ما اپراتور جمع رو ساپورت کنه ولی مقدار اشتباهی بعنوان ورودی به فانکشن داده بشه چی میشه؟ خطای لاجیکال یا همون خطای منطقی رخ میده.
این یعنی برنامه هیچ اروری بر نمیگردنه اما از لحاظ منطقی برنامه دچار اشکاله و درست عمل نمیکنه. اگه بخام مثال بزنم، میتونم بگم فرض کنید شما فانکشنی میخواهید که فقط دو استرینگ رو جمع بزنه اما این فانکشن میتونه هر چیزی که dunder به اسم
حالا همین مسئله توی زبان rust در زمان compile جلوش گرفته میشه. حالا چطوری؟ برای من خیلی جالبه.
اینکه یک چیزی داره به اسم trait. شما میتونی موقعی که ورودی یک فانکشن رو مشخص میکنی، مشخص کنی که اون ورودی ها باید چه فانکشن هایی رو باید پیادهسازی کرده باشند!
البته rust یک زبان static type هم هست، این یعنی اصلا همون اول باید فانکشنی که مینویسی مشخص باشه چه تایپی میگیره و اگه تایپی غیر از اون بهش بدی بازم کامپایل تایم بهت ارور میده.
ولی قابلیتی توی این زبان هست به اسم generics که باهاش میشه مشخص کرد که فانکشن هر تایپی رو بتونه از ورودی بگیره.
اینطوری کامپایلر وقتی میبینی یک فانکشن سه بار با ورودی های مختلف صدا زده شده، اون فانکشن رو خودش سه بار انگار از نو مینویسه.
و خب برای اینکه جلوی مسئله ران تایم اروری گرفته بشه که فانکشن یک متد روی یک تایپ استفاده کنه که اون پیاده سازی نشده، قابلیت trait boundary رو بهت میده.
سینتکس جالبی هم داره:
و بعد اون ورودی ها رو باهم جمع میکنه و نتیجه رو بر میگردونه.
حالا اگه خودتون یک تایپ جدید مثلا یک کلاسی که خودتون ساختین رو بهش بعنوان ورودی بدین چی میشه؟
بیایین با کد این مثال رو برسی کنیم:
اگه این کد رو یک تایپ جدید در نظر بگیریم
class Person:
def __init__(self, name):
self.name = name
و این فانکشن رو در نظر بگیریم که قراره دو مقدار رو جمع کنه:
def summer(n, m):
return n + m
حالا دو متغییر درست کنیم از جنس Person
a = Person("arash")
b = Person("someOne")خب بیایین حالا این دو متغییر رو جمع کنیم
اما قبلش باید بگم فانکشنی که ساختیم صرفا باید دو چیز را جمع کند که اصلا جنسش مشخص نیست
و پایتون حتی اگر جنس ورودی های فانکشن رو هم مشخص کنیم باز هم هر نوعی میتونیم بعنوان ورودی به فانکشن بدیم
و فانکشن سعی میکنه اون وردی ها رو جمع کنه
اما وقتی کلاسی که ما نوشتیم این رو ساپورت نمیکنه، چه اتفاقی میوفته؟ خب اینجاست که run time ارور میگیریم.
summer(a, b)
TypeError: unsupported operand type(s) for +: 'Person' and 'Person'
اما یک مسئله دیگه.
اگه کلاس ما اپراتور جمع رو ساپورت کنه ولی مقدار اشتباهی بعنوان ورودی به فانکشن داده بشه چی میشه؟ خطای لاجیکال یا همون خطای منطقی رخ میده.
این یعنی برنامه هیچ اروری بر نمیگردنه اما از لحاظ منطقی برنامه دچار اشکاله و درست عمل نمیکنه. اگه بخام مثال بزنم، میتونم بگم فرض کنید شما فانکشنی میخواهید که فقط دو استرینگ رو جمع بزنه اما این فانکشن میتونه هر چیزی که dunder به اسم
__add__ رو پیاده سازی کرده جمع بزنه.حالا همین مسئله توی زبان rust در زمان compile جلوش گرفته میشه. حالا چطوری؟ برای من خیلی جالبه.
اینکه یک چیزی داره به اسم trait. شما میتونی موقعی که ورودی یک فانکشن رو مشخص میکنی، مشخص کنی که اون ورودی ها باید چه فانکشن هایی رو باید پیادهسازی کرده باشند!
البته rust یک زبان static type هم هست، این یعنی اصلا همون اول باید فانکشنی که مینویسی مشخص باشه چه تایپی میگیره و اگه تایپی غیر از اون بهش بدی بازم کامپایل تایم بهت ارور میده.
ولی قابلیتی توی این زبان هست به اسم generics که باهاش میشه مشخص کرد که فانکشن هر تایپی رو بتونه از ورودی بگیره.
اینطوری کامپایلر وقتی میبینی یک فانکشن سه بار با ورودی های مختلف صدا زده شده، اون فانکشن رو خودش سه بار انگار از نو مینویسه.
و خب برای اینکه جلوی مسئله ران تایم اروری گرفته بشه که فانکشن یک متد روی یک تایپ استفاده کنه که اون پیاده سازی نشده، قابلیت trait boundary رو بهت میده.
سینتکس جالبی هم داره:
fn summer<T: std::ops::Add>(n: T, m: T) {
return n + m
}
👍4
Bit Orbit 🪐
فرض کنید یک فانکشن مینویسید توی پایتون که دو ورودی میگیره و بعد اون ورودی ها رو باهم جمع میکنه و نتیجه رو بر میگردونه. حالا اگه خودتون یک تایپ جدید مثلا یک کلاسی که خودتون ساختین رو بهش بعنوان ورودی بدین چی میشه؟ بیایین با کد این مثال رو برسی کنیم: اگه…
الان متوجه شدم یک مکانیزمی هست توی پایتون که میشه اونو استفاده کرد تا چک کنیم ایا میشه dunder که برای اپراتور + یعنی
اونکار با استفاده از فانکشن isinstance() هست، ولی مسئله اینجاست که بازم ارور توی ران تایم اتفاق میوفته.
__add__ هست رو صدا بزنیم یا نه.اونکار با استفاده از فانکشن isinstance() هست، ولی مسئله اینجاست که بازم ارور توی ران تایم اتفاق میوفته.
یک مدت پیش یک کد زدم با جنگو
وسطش گفتم بیام خب از هوش مصنوعی کمک بگیرم ببینم اینکه همه دارن ازش کمک میگیرن توی کد چیه
بعد ازش پرسیدم چطوری باید user رو هندل کنم توی جنگو کدش رو بزن
هوش مصنوعی متاسفانه نمیدونست اخرین ورژن جنگو 4 هست و کدی که بهم داد برای جنگو 3 بود
در نهایت که کد رو نوشتم بر اساس اون دیتا، هنوزم گاهی نیاز میشه که برم یک مشکل رو پچ کنم
صرفا بخاطر اینکه کورکورانه تصمیم گرفتم از کدی که سر در نمیارم استفاده کنم.
وسطش گفتم بیام خب از هوش مصنوعی کمک بگیرم ببینم اینکه همه دارن ازش کمک میگیرن توی کد چیه
بعد ازش پرسیدم چطوری باید user رو هندل کنم توی جنگو کدش رو بزن
هوش مصنوعی متاسفانه نمیدونست اخرین ورژن جنگو 4 هست و کدی که بهم داد برای جنگو 3 بود
در نهایت که کد رو نوشتم بر اساس اون دیتا، هنوزم گاهی نیاز میشه که برم یک مشکل رو پچ کنم
صرفا بخاطر اینکه کورکورانه تصمیم گرفتم از کدی که سر در نمیارم استفاده کنم.
👍6
یه کانسپتی هست توی دواپس که بهش میگن scale up یا vertical scaling حالا این یعنی چی؟
وقتی ما یک برنامهای توسعه دادیم و بعد روی یک سرور با یک ریسورس خاص اوردیم بالا
بعد از مدتی با بالاتر رفتن تعداد کاربران ممکنه ریسورس ما کم بیاد
برای همین ما میزان اون منابع رو بیشتر میکنیم، مثلا بجای 2GB از رم، بهش 4GB رم میدیم.
حالا کنار این یک کلمه دیگهای داریم به اسم scale out یا horizontal scaling این یعنی چی؟
وقتی یک برنامهای نیاز به ریسورس پیدا میکنه، منابع برنامه رو بیشتر نمیکنی،
بجای منابع بیشتر یک رپلیکا ازش میاری بالا، یعی دقیقا یک نسخه دیگه ازش میاری و یک چیزی به اسم لود بالانسر میذاری بینش
با اینکار بار بین هر دو ریپلیکا تقسیم میشه. فایده این روش بیشتره، چرا؟
فرض کنیم یک دیتاسنتر داریم و یک نسخه از سرویس فقط و فقط روی اون یک دیتاسنتره، اگه مشکلی برای دیتاسنتر پیش بیاد، سرویس ما هم میاد پایین
برای همین ریپلیکا رو روی دیتاسنتر های دیگه میسازی
از طرف دیگه توی هزینه هم کمک میکنه
هر تایم که یوزر ها زیاد شدن شما برنامه رو scale out میکنی و هر تایم که یوزر ها کمتر بودن برنامه رو scale down میکنه
وقتی ما یک برنامهای توسعه دادیم و بعد روی یک سرور با یک ریسورس خاص اوردیم بالا
بعد از مدتی با بالاتر رفتن تعداد کاربران ممکنه ریسورس ما کم بیاد
برای همین ما میزان اون منابع رو بیشتر میکنیم، مثلا بجای 2GB از رم، بهش 4GB رم میدیم.
حالا کنار این یک کلمه دیگهای داریم به اسم scale out یا horizontal scaling این یعنی چی؟
وقتی یک برنامهای نیاز به ریسورس پیدا میکنه، منابع برنامه رو بیشتر نمیکنی،
بجای منابع بیشتر یک رپلیکا ازش میاری بالا، یعی دقیقا یک نسخه دیگه ازش میاری و یک چیزی به اسم لود بالانسر میذاری بینش
با اینکار بار بین هر دو ریپلیکا تقسیم میشه. فایده این روش بیشتره، چرا؟
فرض کنیم یک دیتاسنتر داریم و یک نسخه از سرویس فقط و فقط روی اون یک دیتاسنتره، اگه مشکلی برای دیتاسنتر پیش بیاد، سرویس ما هم میاد پایین
برای همین ریپلیکا رو روی دیتاسنتر های دیگه میسازی
از طرف دیگه توی هزینه هم کمک میکنه
هر تایم که یوزر ها زیاد شدن شما برنامه رو scale out میکنی و هر تایم که یوزر ها کمتر بودن برنامه رو scale down میکنه
❤4