Bit Orbit 🪐
380 subscribers
99 photos
10 videos
45 files
293 links
Talking about world of bit and bytes.
Download Telegram
من سروری که برای خودم خریدم متاسفانه از یک شرکت روسی مجبور به خرید شدم برای همین دسترسی به chatGPT و خیلی از ابزای های دیگه اصلا نداشتم. حتی با توجه به اینکه خود سرور باید توی کشور امریکا می‌بود!
برای همین اسکریپتی هست که چیزی به اسم وارپ فعال می‌کنه که برای کلادفلیر هست.
فعلا داره خوب جواب میده و باعث شده همه سرویس های اینطوری هم باز بشن برای من.
2🤔1
این مدت خواستم از روش icmp tunnelling بگم، اما هر 12 ساعت یکبار سرور من با این روش ‌متاسفانه IP‌اش بلاک شد و اصلا استیبل نبود.
اما خیلی کلی: متصل بود و سرعت خوبی هم داشت.
🔥3👍1
دوست دارم یه سایت بنویسم
برای تایمی که آدمها نیاز به خرید یک دوره‌ای(هر محتوای دیجیتالی) دارند
بعد داخل اون قسمت کاربران دروه رو اضافه کنند و هرکسی وارد سایت که شد دوره‌ای که دوست داره بخره رو به لیستش اد کنه،
اینطوری وقتی کسی دوره‌ای نیاز داره هزینه بین کاربرانش تقسیم میشه.

من خواستم یک دوره‌ی راست بخرم که مدرس‌ش آرین اقبال بود، چند قسمت‌ش رو به واسطه‌ی یکی دیدم، واقعا بینظیر بود،
چون فقط سینتکس راست رو آموزش نمی‌داد، RFC باز می‌کرد و کامل توضیح میداد که مثلا چطوری یک متغیر عدد float نگه‌داری می‌کنه!

اگه بنظرتون شما هم به این دوره علاقه داشتین به منم خبر بدین باهم بگیریم.



ادرس دوره: https://anisa.co.ir/courses/software-development-courses/rust-course.html
1
این چند روز رو دارم ماتریکس ران می‌کنم، برای مواقعی که کلا از اینترنت قطع شدیم و کلا شبکه داخلی داشتیم
مجبور نباشیم بریم داخل پیامرسان های داخلی،
تا الان فقط بخش پیام رسانی رو تونستم بدون مشکل ران کنم.
اما یکی از قابلیت های خوبی که داره میشه باهاش تماس صوتی/تصویری گروهی بدون webRTC third party داشت!
که این قسمت رو هنوز درگیرش هستم،

یک سایت پیدا کردم که دامنه‌ی ماتریکس شما رو می‌گیره و تست می‌کنه و هرجایی که ایراد داشته باشه رو بهتون می‌گه.
https://federationtester.matrix.org/

وقتی کارم تکمیل شد، روندش رو بلاگ می‌کنم :)
🔥61👍1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
یه فایل داریم توی مسیر
~/.ssh/config
فایده‌ش برای تایمیه که کلی سرور رو باید مدیریت کنی و حفظ کردن ای‌پی و یورز های سرور‌ها خیلی اذیت کننده‌س.
از طرفی بازم یه ابزاری هست به اسم sshs که این رو هم راحت‌تر می‌کنه و یه TUI بر اساس اون کانفیگ برات میسازه.

ساختار فایل هم به این شکل هست که شما یک اسم برای کانکشنتون ست می‌کنید و بعد یوزنیم، آدرس و اگه پورت سرور ssh رو تغییر داده باشین، باید پورت رو هم مشخص کنید. برای مثال:


Host production/rabbitmq
HostName 192.168.1.3
User root

Host development/rabbitmq
HostName 10.10.0.2
User arya




قبلا از asbru-cm استفاده می‌کردم. GUI داشت و قابلیت‌های ساده‌ای داشت. ولی یک روز که آرچ رو اپدیت کردم دیگه تصمیم گرفت که دیگه بالا نیاد و به لایبراری ارور بخوره.
2
https://github.com/mcuadros/ofelia




این ایمیج خیلی جالبیه.
کارش اینه که مثلا شما نیاز دارین تا توی یک تایم خاصی یک کانتینر داکر اجرا بشه و روی اون یک کامند اجرا بشه و بعد exit بشه.

سینتکس‌ش هم ساده‌ست.
[job-run "job-executed-on-new-container"]
schedule = @hourly
image = ubuntu:latest
command = touch /tmp/example
2
قطعا nexus رو میشناسین، دقیقا ساخته شده برای وضعیت ایران(اما با هدف دیگه‌ای)
وقتی اینترنت قطع میشه و هیچ چیزی رو نمی‌تونید بیلد کنید چون تمامی لایبراری‌هایی که استفاده کردین از سرور‌های اصلی npm, pypi میاد، اینجاست که یک Repository manager بکارتون میاد.
روش کارش اینطوریه که مثلا شما توی داکر تنظیم می‌کنید که تمامی ایمیج ها از nexus داخلی خودتون پول بشه، و با اینکار نکسوز هر ایمج رو برای شما کش می‌کنه و دفعه بعد از اینترنت دانلود نمی‌کنه.

اما حالا فرض کنید که نیاز دارین تا ایمیج‌ها و لایبراری‌های خوتون رو هم داخل یک ریپازیتوری لوکال داشته باشین، خب این امکان رو نکسوس بهتون میده.
اما یک ایرادی داره، اونم اینکه ما نیاز داریم تا وقتی می‌گیم مثلا ایمیجی که خودمون ساختیم رو بگیر، نکسوس ایمیج رو از ریپازتوری که تنظیم کردیم بگیره، خب اینم مشکلی نداره.
پس مشکل کجاست؟
اینکه حتما باید یک url مجزا برای pull و push رو داخل کلاینت‌ها مشخص کنیم(تا جایی که من می‌دونم و سرچ کردم)چون push داخلی هست اما pull اول باید از اینترنت بیاد.
برای اینم نکسوس یه راه حل داده که نیاز نباشه دو ریپازیتوری مختلف رو تعریف کنیم، اینکه از ویژنگی group استفاده کنیم
با این ویژگی نکسوس اول سعی می‌کنه pull/push رو به ریموت ریپازیتوری اولی بزنه، بعد که fail شد میره سراغ دومی که همون self host خودمون روی نکسوس هست.
اما این قابلیت پولیه و یا کرک نیاز داره :(

من از این دو مورد تا جایی که یک ابزار مناسب و open source باشه دوری می‌کنم.
ابزار جایگزین برای nexus که همه این ویژگی‌ها رو رایگان داره میشه pulpManager


اینکه با زبان با زبان java نوشته نشده هم شاید یه فیچر باشه :)))
🤔2
فکر نمی‌کردم واقعا این امکان رو داشته باشیم QR ها رو اینطوری بسازیم!

https://qrframe.kylezhe.ng/

ریپو
🤩4
فرض کنید وقتی یکی به سرورتون ssh کرد، بجای اینکه shell بگیره،
هر برنامه‌ای که شما از قبل تنظیم کرده باشین اجرا بشه.
مثلا یک متن رندوم بهش نشون بده.
اینکار با تنظیم ForceCommand داخل ssh_config انجام میشه.

#/etc/ssh/ssh_config
Match User guest
ForceCommand /home/guest/random_number.sh



مثلا تست کنید روی سرور من, cmatrix اجرا میشه :)

NOTE: من این تست رو بر میدارم، صرفا جنبه فان داشت اما الان بنظرم دیگه ممکنه خطری باشه، گرچه تنظیمات امنیتی رو سعی کردم رعایت کنم.
ssh [email protected]
👍4🔥1
این مقاله/پست درباره string خیلی جاله،‌ من قبلا درباره فرق unicode با utf-8 خونده بودم، اما اینجا بیشتر درباره تاریخشون فهمیدم،

زمانی که ascii معرفی شد کلا برای حروف انگلیسی ساخته شده بود، و البته یکسری از کاراکتر‌ها و دستورات دیگه.
مثلا برای اسپیس کد 32 و مثلا برای حرف A از کد 65 داخلش استفاده میشد.
ولی کد‌های قبل 32 چی؟ اون‌ها برای دستورات استفاده میشه مثلا کد 7 برای صدای beep هست!

حالا تمامی این کاراکتر‌ها کلا توی 7 بیت قرار می‌گیرن و بیشتر نیاز ندارن.
مثلا اگه حرف z رو درنظر بگیریم، کد اسکیش میشه 122
و باینری 122 میشه 1111010 و همینطور که می‌بینید، با فقط هفت بیت حروف انگلیسی، اعداد، سیمبل‌ها و دستورات رو می‌تونم داشته باشیم،
اما کامپیوتر ها با هشت بیت کار می‌کنند، پس پیاده سازی ascii که داخل کامپیوتر یک بیت اضافه‌ای به ما میده!(آخرین بیت سمت چپ) پس از کد 128 تا 255 برای هیچکاری استفاده نمیشه داخل تیبل ascii

اینجاست که شرکت‌ها و برنامه نویس ها تصمیم می‌گیرن اون بیت آخر رو برای کار های خودشون استفاده کنند.
همچنین هر زبانی مثلا یونانی از برای خودش یه کد پیج داشته
مثلا توی بعضی از سیستم عامل ها از کد 130 برای کاراکتر é استفاده میشده، و یه ورژن دیگه‌ای از همون سیستم عامل(DOS) از این کد برای کاراکتر ג استفاده میشده.
اینم باید بگم که همه قبول کردن که تمامی کد های زیر 128 دست نخورده بمونه خوشبختانه.
اینکه کدهای بالای 128 نماینده چه کاراکتری باشه بستگی داره به اینکه از چه code page استفاده می‌کردن. مثلا code page 862 در اسرائیل استفاده میشده و 737 در یونان.
حالا سیستم عامل DOS از کلی کد پیج ساپورت می‌کرده، ولی همزمان نمیشده توی یک فایل تکست از دو زبان استفاده کنی.


حالا عجیب‌تر اینکه این سسیتم توی زبان هایی مثل چینی بدرد نمی‌خوره، چون خب از 'حرف' استفاده نمی‌کنند و کاراکترهاشون نماده و هزاران کاراکتر دارند،
پس توی 8 بیت جا نمی‌شن. خب اینا چیکار کردن؟ از چیزی به اسم DBCS استفاده کردن این یعنی double bytes character set
درواقع برای پیاده‌سازی زبان چینی باید تعداد بایت ها رو دو برابر می‌کردن،
این خودش یه مشکلی داره، اینکه تایپ یک کاراکتر ساده‌ست(حرکت رو به جلو) اما اگه بخای به عقب برگردی، این یه چالشه، چون نمی‌دونی کاراکتری که تایپ کردی یک بایتی بوده یا دو بایتی.
تا اینجا انچنان مشکلی نداشتیم، اما وقتی پای اینترنت به کامپیوتر‌ها باز شد، دیگه اینجا بود متن‌ها توی سیستم‌های مختلف به خوبی کار نمی‌کردند. و unicode اختراع شد.

به صورت خلاصه unicode به ازای هر کاراکتری یک کد داره، که بهش میگن code point، یونیکد طوری ساخته شده که حتی اگه در آینده‌هم کاراکتری و یا زبانی اختراع بشه، با unicode میشه یک کد منحصر بفرد بهش داد.
مثلا برای کاراکتر A از کد U0041 استفاده میشه،
و یا برای مثال U+0048 U+0065 U+006C U+006C U+006F. میشه Hello.
این کد‌ها هگزا دسیمال هستند.


اوکی حالا سوال اینجاست که ما برای هرکاراکتری یک کد در نظر گرفتیم، اوکی خب چطوری روی هارد قراره ذخیره‌ش کنیم؟
در حالت اول و خب خیلی ساده میشه اکثر کد ها رو داخل 16 بیت دخیره کرد، اما دو مشکل وجود داره:
اول اینکه فضای بیشتری برای ذخیره می‌گیره،
دوم اینکه خب اینهمه تکست که از قبل نوشته شده، یکی باید همه اونها رو تبدیل کنه.
یا شاید یه بتونیم الگوریتم backward comaptible ایجاد کنیم.

اینجاست که جادوی utf-8 که یک encondig هست میاد وسط،
توی utf-8 از 0 تا 127 توی همون 8 بیت ذخیره می‌شه
و چیزی که به فضای بیشتری نیاز داره چی؟
وقتی کاراکتری بیشتر از 127 (یعنی نیاز به بیش از 7 بیت) نیاز داشته باشه، UTF-8 از چند بایت استفاده می‌کنه:
بایت اول یه "الگو" داره که نشون می‌ده این کاراکتر چند بایتیه، و بایت‌های بعدی با 10xxxxxx شروع می‌شن.
اینطوری کامپیوتر می‌فهمه این یه کاراکتر چندبایتیه و چطوری باید رمزگشایی‌ش کنه.


> این متن رو از اینجا هم می‌تونید بخونید.
7🔥2
رادیو رو اپدیت کردم،‌ تنها یه فیچر بدرد بخور بهش اضافه کردم که بشه آهنگی که داره پلی میشه رو دانلود کرد.
و خب چون هدفم از این سایت این بود که خیلی ساده باشه، دکمه دانلود رو توی منو کناریش گذاشتم که صفحه‌ش شلوغ نشه.
👍42🔥1
یه چیزی داریم به اسم zip bomb مثلا فایل zip.42 که کلا 42 کیلوبایت هست اما وقتی اکسترکت بشه حجمش به 4.5 پتابایت می‌رسه. ولی چطوری؟
باید بدونیم الگوریتم های زیپ مثل DEFLATE چطوری کار می‌کنند.

الگوریتم های زیب وقتی میخان یه چیزی رو زیپ کنند، داده های تکراری رو حذف می‌کنند،
حالا فرض کنید که این داده‌های تکراری دقیقا کل فایل باشه،
مثلا فایلی با سایز 4.5 پتابایت فقط پر شده از 0
حالا اگه این فایل زیپ بشه چقدر میشه حجمش؟

یه جدولی داخل فایل های زیپ هست به اسم dictionary
این جدول به یک داده‌ی تکراری پوینت می‌کنه
مثلا بجای اینکه چهار ترابایت 0 رو نگه‌داره
به هر جایی که قراره 0 باشه اشاره می‌کنه،

اما به این سادگی نیست، چرا؟ چون اصلا منطقی نیست داخل جدول یه کاراکتر بذاری و بعد داخل دیتا به این کاراکتر اشاره کنی، اینطوری حجم خود فایل بیشتر هم میشه.
پس این الگوریتم چطوری کار می‌کنه؟

میاد و با مجموعه‌ای/توالی از داده‌های تکراری کار می‌کنه.
مثلا وقتی یک توالی داده مثل 00001111 داشته باشیم، الگوریتم همه این رو یکجایی ذخیره می‌کنه و هرجایی که دقیقا همین دیتا تکرار شده باشه،‌ یه پوینتر می‌ذاره.

حالا ما یه محدودیتی داریم، اینکه ما داریم می‌گیم 4.5 پتابایت داده‌های تکراری 0 قراره کنار هم باشن
خب این بازم منطقی نیست که بیای و توی دیکشنری همه این 0 ها رو بذاری و بگی اینا یکجا تکرار شده
و یا اینکه بگی ما یه 0 داریم و بقیه فایل همش از این 0 ساخته شده!

الگوریتم میاد و هر 258 بایت که متوالی تکرار شدن رو داخل جدول می‌ذاره
بعد می‌بینه که خب 258 بایت بعدی هم که همونه! پس یه اشاره‌گر(پوینتر) می‌ذاره کنار اشاره‌گر قبلی، و بعد دوباره همین روند رو باید برای 4.5 پتابایت دیتا انجام بده!
اینطوری به اندازه چند ترابایت ما پوینتر درست کردیم :))

پس zip bomb چطوری درست شد؟
خیلی ساده یکبار یک فایل زیپ مثلا 1 گیگ ساخته شد، بعد این فایل چند بار دیگه کپی شد و اون کپی ها زیپ شدن
این روند اینقدر ادامه پیدا می‌کنه تا یه فایل زیپ داشته باشیم که کلی فایل زیپ دیگه داخلش باشه(recursive)
وقتی برنامه‌ای بخاد فایل رو اکسترکت کنه،‌ هر فایل زیپ دیگه‌ای هم داخل باشه اکسترکت می‌کنه.



من یه امتحانی کردم، با dd یک فایل 10 گیگ ساختم که همه از 0 پر شده بود.
بعد با الگوریتم lzma زیپ کردم، فایل نهایی شد 100 مگابایت.

dd if=/dev/zero of=./data bs=100M count=100
tar --lzma -cvf data.lzma.tar ./data


همینکار رو مجدد تکرار کردم اما بجای استفاده از 0 از دیتای رندوم استفاده کردم،‌ فایل زیپ هیچ تغییری نکرد.
dd if=/dev/random of=./data bs=100M count=100
tar --lzma -cvf data.lzma.tar ./data
👍53🔥1
Forwarded from The Machine
موج تغییرات مسکن از ۲۳ خرداد (تحلیل پلتفرم دیوار):

https://divarrealstatesinthesedays.netlify.app

از 23 خرداد تا الان اتفاقات زیادی افتاده، تو چند روز اخیر تعداد آگهی‌های منتشر شده و فروش مسکن به شدت زیاد شده، اینجا می‌تونید یه کم روی نمودار این تحلیل ها رو بررسی کنید، هنوز جای کار داره خیلی ولی خب برای فعلا...

یکی از جذاب‌ترین کارهایی بود که امتحانش کرده بودم، اگه نظری دارین خوشحال میشم بگین.
حقیقتا فهمیدن آمار و اعداد و نمایش اون ها به شیوه درست کار بسی سخت ولی سودمندی هست.

(فعلا حالت سمپل دیتا که بیش از ۴۰۰۰ تا آگهی هستن رو Scrape می‌کنه و تحلیلش رو نشون میده روی Sample data کلیک کنید و بعد آنالیز، بعدا حالت آپلود فایل هم قرار می‌دم که اتومات و بروز تر بشه)
👍4👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
یه سرویس برای systemd درست کرده بودم که سه کار رو باید همزمان انجام می‌داد.
برای مثال
while true; do
sleep 3 &
sleep 5 &
sleep 9 &
done


اتفاقی که افتاد این بود که وقتی این کد ران می‌شد، همون تایم systemd می‌گفت برنامه کارش تموم شد و سرویس exit می‌شد.
بعد از چند روز فهمیدم که مشکل دقیقا همون & آخر هر دستور هست، اینکه برنامه بره توی بکگراند رو نیاز داشتم،
سه دستور هر کدومشون یه loop بینهایت بودن ولی systemd فکر می‌کرد کارشون تموم شده.
متوجه شدم که یک دستوری داریم به اسم wait
باعث میشه که هیچی exit نشه تا آخرین پروسه‌های تو بکگراند کارشون تموم بشه. توی مورد من هیچوقت تموم نمی‌شد.
9
This media is not supported in your browser
VIEW IN TELEGRAM
این TUIOS خیلی جالب بود،
توی ترمینال می‌تونی یکسری window هایی درست کنی و روی هر کدوم یکسری کامند خاص ران کنی،
شبیه i3 هست ولی کلا توی ترمیناله.

https://github.com/Gaurav-Gosain/tuios
2❤‍🔥1