برای نوشتن یه بات تلگرام که به ازای هر دستور یه متن یا فایل خاصی ارسال کنه
همیشه کدی که میزدم از یه مشت if و else تو در تو،
دیشب گفتم خب چکاریه؟ کارای تکراری رو دیگه اینطوری نکنم!
یه کد زدم که yaml از شما میگیره
و به ازای هر دستور شما میتونید متن، عکس، ویدیو یا وویس مشخص کنید
هر تایم کاربر دستور رو داخل تلگرام وارد کرد، مقدار هایی که تایین کردین براشون ارسال میشه
اینطوری میتونید بینهایت دستور داشته باشید.
کد رو هم نیاز نیست تغییر بدین برای اضافه کردن دستور جدید، کافیه کانفیگ رو عوض کنید!
https://github.com/shabane/commodore
همیشه کدی که میزدم از یه مشت if و else تو در تو،
دیشب گفتم خب چکاریه؟ کارای تکراری رو دیگه اینطوری نکنم!
یه کد زدم که yaml از شما میگیره
و به ازای هر دستور شما میتونید متن، عکس، ویدیو یا وویس مشخص کنید
هر تایم کاربر دستور رو داخل تلگرام وارد کرد، مقدار هایی که تایین کردین براشون ارسال میشه
اینطوری میتونید بینهایت دستور داشته باشید.
کد رو هم نیاز نیست تغییر بدین برای اضافه کردن دستور جدید، کافیه کانفیگ رو عوض کنید!
https://github.com/shabane/commodore
❤1
Bit Orbit 🪐
برای نوشتن یه بات تلگرام که به ازای هر دستور یه متن یا فایل خاصی ارسال کنه همیشه کدی که میزدم از یه مشت if و else تو در تو، دیشب گفتم خب چکاریه؟ کارای تکراری رو دیگه اینطوری نکنم! یه کد زدم که yaml از شما میگیره و به ازای هر دستور شما میتونید متن، عکس،…
این کد رو داکرایز هم کردم الان، میتونید با یه کامند رانش کنید،
بعد یه کار جالبی که کردم اینه که اگه فایل prompts.yaml رو هر زمانی تغییر بدین
نیاز نیست که کانتینر رو ریست کنید، خود برنامه فایل رو reLoad میکنه.
بعد یه کار جالبی که کردم اینه که اگه فایل prompts.yaml رو هر زمانی تغییر بدین
نیاز نیست که کانتینر رو ریست کنید، خود برنامه فایل رو reLoad میکنه.
docker run -d -v ./prompts.yaml:/code/prompts.yaml -v ./assets:/code/assets -e API_KEY='<API_KEY>' mshabane/commodore:1.0.0
👏1
Bit Orbit 🪐
به بخش راک دارم بیشتر از 300 آهنگ اضافه میکنم :) یادمون باشه همه این روند، درواقع از دانلود آهنگ تا کانورت به فرمت مناسب برای وب تا نگهداری موزیک ها و حتی خود سایت روی گیتهاب داره انجام میشه و هیچ سرور که از خودم باشه درگیر نیست! گیتهاب ازم شکایت نکنه…
به radio دو ایستگاه دیگه هم اضافه کردم
یکی به اسم jazz و یکی دیگه هم به اسم خواننده محبوب گذشتهام Leonard Cohen.
نظرتون چیه یه فورک از این ریپو بگیرید و وصلش کنید به بات تلگرام تا استیشن خودتون رو داشته باشید؟
هنوز سبک و خواننده های زیادی هستن که اینجا جاشون کمه، جدا از اینها
یه پلی لیست موزیک برای برنامه نویسی هم جای خالی بزرگی داره اینجا.
یکی به اسم jazz و یکی دیگه هم به اسم خواننده محبوب گذشتهام Leonard Cohen.
نظرتون چیه یه فورک از این ریپو بگیرید و وصلش کنید به بات تلگرام تا استیشن خودتون رو داشته باشید؟
هنوز سبک و خواننده های زیادی هستن که اینجا جاشون کمه، جدا از اینها
یه پلی لیست موزیک برای برنامه نویسی هم جای خالی بزرگی داره اینجا.
GitHub
GitHub - js-radio/station_schema: the schema of station and workflow to download musics
the schema of station and workflow to download musics - js-radio/station_schema
❤4
Bit Orbit 🪐
به radio دو ایستگاه دیگه هم اضافه کردم یکی به اسم jazz و یکی دیگه هم به اسم خواننده محبوب گذشتهام Leonard Cohen. نظرتون چیه یه فورک از این ریپو بگیرید و وصلش کنید به بات تلگرام تا استیشن خودتون رو داشته باشید؟ هنوز سبک و خواننده های زیادی هستن که اینجا جاشون…
احتمالا به دو دلیل مشارکت نمیکنید:
1. از رقیبم اسپاتیفای استفاده میکنید
2. توی تیم گیتهاب هستین :)
دلیل سوم که داخل کامنت بهش اشاره شد: سرتون شلوغه :_
1. از رقیبم اسپاتیفای استفاده میکنید
2. توی تیم گیتهاب هستین :)
دلیل سوم که داخل کامنت بهش اشاره شد: سرتون شلوغه :_
😁6
یه سیستم عامل داریم به اسم batocera.
این سیستم عامل برای کنسول های قدیمی مثل sega, atari, nintendo و کلی دیگه از کنسول ها emulator هاشون رو کانفیگ کرده و داخل سیستم عامل قرار داده، بعد برای ما کافیه که batocera رو روی یک فلش بوت کنیم و وصل کنیم به لپتاپ و تمام، میتونیم کلی بازی های ارکید قدیمی رو بازی کنیم. فقط یه مشکلی هست! اینکه خود این سیستم عامل بازی های زیادی رو داخل خودش نداره، پس راهکار اینکه که بریم و دانلود کنیم و داخلش قرار بدیم. البته یک گزینه هم برای سرچ و دانلود بازی هم داره که بعضی از بازی هاش بعد از دانلود برای من کار نکرد.
بعد یکی batocera رو گرفته و 128,000 بازی رو روش نصب کرده و اسمشو گذاشته wolfazone این امیج خودش 128 گیگه! و مشکلش اینه که فقط برای پردازنده های arm اینکارو کرده و نسخه x86 batocera رو استفاده نکرده، میشه روی رزبری رانش کرد ولی خب خرید رزبری اصلا منطقی نیست برای اینکار.
من این ایمیج رو با تورنت دانلود کردم، بعد بعنوان loop device ماونتش کردم و رفتم چند گیگ از رام هاشو کپی کردم روی batocera خودم، به خوبی کار کرد :) هر بازی رو باز کردم بدون مشکل باز شد!
این سیستم عامل برای کنسول های قدیمی مثل sega, atari, nintendo و کلی دیگه از کنسول ها emulator هاشون رو کانفیگ کرده و داخل سیستم عامل قرار داده، بعد برای ما کافیه که batocera رو روی یک فلش بوت کنیم و وصل کنیم به لپتاپ و تمام، میتونیم کلی بازی های ارکید قدیمی رو بازی کنیم. فقط یه مشکلی هست! اینکه خود این سیستم عامل بازی های زیادی رو داخل خودش نداره، پس راهکار اینکه که بریم و دانلود کنیم و داخلش قرار بدیم. البته یک گزینه هم برای سرچ و دانلود بازی هم داره که بعضی از بازی هاش بعد از دانلود برای من کار نکرد.
بعد یکی batocera رو گرفته و 128,000 بازی رو روش نصب کرده و اسمشو گذاشته wolfazone این امیج خودش 128 گیگه! و مشکلش اینه که فقط برای پردازنده های arm اینکارو کرده و نسخه x86 batocera رو استفاده نکرده، میشه روی رزبری رانش کرد ولی خب خرید رزبری اصلا منطقی نیست برای اینکار.
من این ایمیج رو با تورنت دانلود کردم، بعد بعنوان loop device ماونتش کردم و رفتم چند گیگ از رام هاشو کپی کردم روی batocera خودم، به خوبی کار کرد :) هر بازی رو باز کردم بدون مشکل باز شد!
🔥5⚡1
archivemount
یه ابزار خیلی باحاله که میشه باهاش یک فایل ارچیو مثل tar رو روی یک دایرکتوری ماونت کرد.
من همیشه وقتی یه چیزی رو tar میکنم از فلگ lzma-- استفاده میکنم که فایل به بیشترین حد ممکن فشرده بشه.
جالبی این ابزار اینکه که فشرده سازی رو هم ساپورت میکنه، و هر تغییری که روی دایرکتوری ماونت شده بدین، توی فایل ارچیو اصلی هم انجام میشه.
🔥3
Bit Orbit 🪐
archivemount یه ابزار خیلی باحاله که میشه باهاش یک فایل ارچیو مثل tar رو روی یک دایرکتوری ماونت کرد. من همیشه وقتی یه چیزی رو tar میکنم از فلگ lzma-- استفاده میکنم که فایل به بیشترین حد ممکن فشرده بشه. جالبی این ابزار اینکه که فشرده سازی رو هم ساپورت میکنه،…
از خوبی های arch اینه که مجبور میشی برای یه کار ساده کلی چیز بخونی در عوض کلی هم چیز یاد میگیری.
یه ابزاری داریم(البته یه ماژول توی کرنل لینوکس) که اجازه میده هر کسی یک فایل سیستم برای خودش بسازه بدون اینکه کد های خود کرنل رو تغییری بده، اسم این ابزار fuse هست.
و خب کلی فایل سیستم بر اساس fuse درست شده تا الان که خیلی جالبن واقعا، مثلا یکی دیگه که قبلا درموردش توی بلاگم نوشتم sshfs هست که میشه باهاش یک فایل سیستم که
روی یک سرور هست روی یک جای دیگهای ماونت کرد
لیست بعضی از این فایل سیستم ها رو از اینجا میشه پیدا کرد
یه ابزاری داریم(البته یه ماژول توی کرنل لینوکس) که اجازه میده هر کسی یک فایل سیستم برای خودش بسازه بدون اینکه کد های خود کرنل رو تغییری بده، اسم این ابزار fuse هست.
و خب کلی فایل سیستم بر اساس fuse درست شده تا الان که خیلی جالبن واقعا، مثلا یکی دیگه که قبلا درموردش توی بلاگم نوشتم sshfs هست که میشه باهاش یک فایل سیستم که
روی یک سرور هست روی یک جای دیگهای ماونت کرد
لیست بعضی از این فایل سیستم ها رو از اینجا میشه پیدا کرد
🔥5
یک اروری کلی از تایم منو گرفت تا درست بشه امشب این بود request_uri$
حالا این یعنی چی؟
ما معمولا روی یک سرور کلی وب سرویس مختلف میاریم بالا
همه رو روی پورت های رندوم لوکال ران میکنیم
و بعد با nginx ست میکنیم که اگه کسی به پورت 443 در خواست داد
ببین به چه دامنهای درخواست داده، و درخواست به اون دامنه رو بفرست به لوکال خودت روی پورتی که مشخص شده برای اون دامنه.
مثلا روی یک سرور من یک next cloud دارم و یه n8n
هر دوی این هم روی پورت 443 باید باشه، ولی همزمان یک برنامه فقط میتونه روی این پورت ها شنود کنه،
اینجاست که nginx میاد جلوی این دو و خود این ها هم روی پورت های دیگه فعال میشن.
بعد وقتی وارد دامنه next.exampel.com بشم، nginx بخاطر دامنه خودش میدونه که به کدوم پورت ریکوئست ارسال کنه.
حالا مشکل من اینجا بود که خب وقتی ریکوئست ارسال میشه به اون پورت، بقیه مسیر ارسال نمیشه، مثلا اگه به example.com/some/path ریکوئست بفرستم، اون مقدار /some/path از سمت nginx ارسال نمیشه، مگه اینکه مشخص کنم،
حالا برای اینکار میایم و از uri$ استفاده میکنیم که هر مسیری کاربر داده بود هم ارسال بشه از طریق nginx
ولی این یه مشکل دیگه داشت، اینکه http parameter رو ارسال نمیکرد، برای اینکار فقط کافی بود بجای uri$ از request_uri$ استفاده کنم.
http parameter میشه مثلا این:
example.com/some/p/?key=value
میتونید درباره nginx proxy pass بیشتر بخونید.
حالا این یعنی چی؟
ما معمولا روی یک سرور کلی وب سرویس مختلف میاریم بالا
همه رو روی پورت های رندوم لوکال ران میکنیم
و بعد با nginx ست میکنیم که اگه کسی به پورت 443 در خواست داد
ببین به چه دامنهای درخواست داده، و درخواست به اون دامنه رو بفرست به لوکال خودت روی پورتی که مشخص شده برای اون دامنه.
مثلا روی یک سرور من یک next cloud دارم و یه n8n
هر دوی این هم روی پورت 443 باید باشه، ولی همزمان یک برنامه فقط میتونه روی این پورت ها شنود کنه،
اینجاست که nginx میاد جلوی این دو و خود این ها هم روی پورت های دیگه فعال میشن.
بعد وقتی وارد دامنه next.exampel.com بشم، nginx بخاطر دامنه خودش میدونه که به کدوم پورت ریکوئست ارسال کنه.
حالا مشکل من اینجا بود که خب وقتی ریکوئست ارسال میشه به اون پورت، بقیه مسیر ارسال نمیشه، مثلا اگه به example.com/some/path ریکوئست بفرستم، اون مقدار /some/path از سمت nginx ارسال نمیشه، مگه اینکه مشخص کنم،
حالا برای اینکار میایم و از uri$ استفاده میکنیم که هر مسیری کاربر داده بود هم ارسال بشه از طریق nginx
ولی این یه مشکل دیگه داشت، اینکه http parameter رو ارسال نمیکرد، برای اینکار فقط کافی بود بجای uri$ از request_uri$ استفاده کنم.
http parameter میشه مثلا این:
example.com/some/p/?key=value
میتونید درباره nginx proxy pass بیشتر بخونید.
https://www.redhat.com/en/topics/containers/what-is-podman
اگه داکر بلدین، این رو هم بخونید، هم جالبه هم کاربردیه.
اگه داکر بلدین، این رو هم بخونید، هم جالبه هم کاربردیه.
Redhat
What is Podman?
Podman is an open source tool for developing, managing, and running containers on your Linux systems.
👍2
Bit Orbit 🪐
https://dev.to/sibyx/migrating-data-between-two-online-minio-instances-53ia
بذارید براتون بگم.
وقتی آموزش برنامه نویسی میدن، همیشه میان فایل های که از سمت کلاینت میاد رو داخل سروری که کد اجرا شده میریزن، ولی توی برنامه های واقعی این راه اصلا درست نیست.
دلایل زیادیم داره. مثلا چند سرویس مختلف که روی سرور های مجزایی هستند نیازه با این فایل ها کار کنند.(شاید بگین خب NAS استفاده میکنیم، درسته ولی راه بهتر هم هست)
توی دنیای واقعی از Object Storage استفاده میشه. مثلا minIO، که API بهت میده توی کدت کال میکنی و اپریشین های مختلف روی فایل ها انجام میدی.
اینجا این پست داره توضیح میده چقدر با minIo فرایند میرور کردن کل دیتا سادهست و براش ابزار هست.
وقتی آموزش برنامه نویسی میدن، همیشه میان فایل های که از سمت کلاینت میاد رو داخل سروری که کد اجرا شده میریزن، ولی توی برنامه های واقعی این راه اصلا درست نیست.
دلایل زیادیم داره. مثلا چند سرویس مختلف که روی سرور های مجزایی هستند نیازه با این فایل ها کار کنند.(شاید بگین خب NAS استفاده میکنیم، درسته ولی راه بهتر هم هست)
توی دنیای واقعی از Object Storage استفاده میشه. مثلا minIO، که API بهت میده توی کدت کال میکنی و اپریشین های مختلف روی فایل ها انجام میدی.
اینجا این پست داره توضیح میده چقدر با minIo فرایند میرور کردن کل دیتا سادهست و براش ابزار هست.
👍3
Xu A. System Design Interview. An Insider_s Guide 2ed 2020.pdf
22 MB
شروع کنیم به خوندن این کتاب، بنظرم که کتاب خوبیه برای یه DevOps
❤4
Bit Orbit 🪐
Xu A. System Design Interview. An Insider_s Guide 2ed 2020.pdf
خب میدونید که میشه از ssh بعوان یه VPN tunnel استفاده کرد.
اما مشکل اینجاست که زیاد استیبل نیست و اگه قطع بشه، یهو سرویسی که داره از این
تانل استفاده میکنه هم قطع میشه، دیروز برای همین مشکل یه سرویس systemd نوشتم که این مشکل رو
حل کنه و در صورت قطع شدن و یا ریبوت شدن سیستم، مجدد وصل بشه.
https://github.com/shabane/ssh-daemon
اما مشکل اینجاست که زیاد استیبل نیست و اگه قطع بشه، یهو سرویسی که داره از این
تانل استفاده میکنه هم قطع میشه، دیروز برای همین مشکل یه سرویس systemd نوشتم که این مشکل رو
حل کنه و در صورت قطع شدن و یا ریبوت شدن سیستم، مجدد وصل بشه.
https://github.com/shabane/ssh-daemon
GitHub
GitHub - shabane/ssh-daemon: simple tool to create a resistance ssh tunnel daemon.
simple tool to create a resistance ssh tunnel daemon. - shabane/ssh-daemon
👏4
while true
do
date >> ./log
ping 1.1.1.1 -c 2 >> ./log
ping 8.8.8.8 -c 2 >> ./log
echo '---------------------------' >> ./log
done
یه سروری داریم که توی تایم های خاصی کانکشنش به اینترنت قطع میشه.
بنظرم این اسکریپت چیز بدی نیست برای چک کردن اینکه توی چه تایمی داره این اتفاق میوفته.
اول اومدم به Ai گفتم بنویسه یه چیزی که اینکار رو بکنه. بعد با پایتون نوشت :/
دیدم کاری نداره همینو با bash نوشتم. دیفالت AI احتمالا اینکه که هرچی بهش بگی رو با پایتون بنویسه مگه اینکه غیر این رو بهش بگی.
👍4