امروز داشتم داخل گیتهاب میچرخیدم چشم به یک پروژه وبسایت شخصی خورد بنظرم جالب بود. با کمی تغییرات نتیجه شد این:
M4t1n.ir
لینک ریپوزیتوری پروژه اصلی:
https://github.com/codewithsadee/vcard-personal-portfolio
M4t1n.ir
لینک ریپوزیتوری پروژه اصلی:
https://github.com/codewithsadee/vcard-personal-portfolio
👨💻6❤2
در کل اینکه تو گیتهاب بچرخید رو بشدت پیشنهاد میکنم. یسری از ریپوزیتوری ها هم بشدت جذابه ( حداقل برا من )
مثل این یکی : https://github.com/sindresorhus/awesome ( یه لیست از هرچیز جالبی )
و در کل کلمه awesome رو که سرچ کنید یه عالمه ریپوزیتوری awesome میاره براتون.
مثل این یکی : https://github.com/sindresorhus/awesome ( یه لیست از هرچیز جالبی )
و در کل کلمه awesome رو که سرچ کنید یه عالمه ریپوزیتوری awesome میاره براتون.
GitHub
GitHub - sindresorhus/awesome: 😎 Awesome lists about all kinds of interesting topics
😎 Awesome lists about all kinds of interesting topics - sindresorhus/awesome
این سایت امده یسری چیز میز که میشه self-host کرد و کاربردیه ( از جمله NAS و یا Git server ) رو قدم به قدم توضیح داده از لحاظ فنی و بقیه لحاظ.
https://coffeeaddict.dev/selfhosted/
خیلی بنظرم سایت بدرد بخوریه بخصوص اگه پول اینجور وسایل رو داشته باشی و حداقل بتونی برا آموزش انجامشون بدی.
اصل ماجرا اینکه یدونه home lab بسازی. این ویدیو رو ببینید: https://www.youtube.com/watch?v=cMVcclMkp7g
و خب NAS یا Network-attached storage یک محل ذخیره سازی اطلاعاته که به اینترنت وصله. اگه ویدیو رو ببینید ایده رو قشنگ متوجه میشید.
https://coffeeaddict.dev/selfhosted/
خیلی بنظرم سایت بدرد بخوریه بخصوص اگه پول اینجور وسایل رو داشته باشی و حداقل بتونی برا آموزش انجامشون بدی.
اصل ماجرا اینکه یدونه home lab بسازی. این ویدیو رو ببینید: https://www.youtube.com/watch?v=cMVcclMkp7g
و خب NAS یا Network-attached storage یک محل ذخیره سازی اطلاعاته که به اینترنت وصله. اگه ویدیو رو ببینید ایده رو قشنگ متوجه میشید.
coffeeaddict.dev
Let's self-host!
A series of blog posts about my personal experience building a home server and self-hosting apps. Learn how I set up my server, what apps I use, and how I maintain it.
🔥2
lab
این سایت امده یسری چیز میز که میشه self-host کرد و کاربردیه ( از جمله NAS و یا Git server ) رو قدم به قدم توضیح داده از لحاظ فنی و بقیه لحاظ. https://coffeeaddict.dev/selfhosted/ خیلی بنظرم سایت بدرد بخوریه بخصوص اگه پول اینجور وسایل رو داشته باشی و حداقل…
یسری از مودما سوراخ usb دارن که شاید شماهم به این فکر کرده باشید که کارش چیه. خیلی ساده اگه یدونه حافظه بهش وصل کنید تو شبکه داخلی خودتون میتونید ازش استفاده کنید و از این به بعد یدونه NAS خیلی کوچولو دارید.
👍4
YouTube video
این ویدیو رو به شدت پیشنهاد میکنم ببینید. چیز جالبی که عملی نشون میده اینکه مراحل کامپایل رو چجوری میشه نگه داشت و چجوری میشه دوتا زبان رو عملن باهم دیگه کامپایل کرد و خب اتفاقی که میفته یکی رو تا قسمت اسمبلی کد میبری و بعد با اون یکی زبان کامپایل میکنی و نکته آخر هم اینکه gcc الان مخفف gnu compiler collection هست چون چندین زبات پشتیبانی میکنه.
این ویدیو رو به شدت پیشنهاد میکنم ببینید. چیز جالبی که عملی نشون میده اینکه مراحل کامپایل رو چجوری میشه نگه داشت و چجوری میشه دوتا زبان رو عملن باهم دیگه کامپایل کرد و خب اتفاقی که میفته یکی رو تا قسمت اسمبلی کد میبری و بعد با اون یکی زبان کامپایل میکنی و نکته آخر هم اینکه gcc الان مخفف gnu compiler collection هست چون چندین زبات پشتیبانی میکنه.
YouTube
Why Some Projects Use Multiple Programming Languages
This video was sponsored by Let's Get Rusty.
Visit https://letsgetrusty.com/start-with-jorge to find out more about their training. They’re laser-focused on Rust education and job placement.
In this video we cover how multiple compiled languages can be used…
Visit https://letsgetrusty.com/start-with-jorge to find out more about their training. They’re laser-focused on Rust education and job placement.
In this video we cover how multiple compiled languages can be used…
اول این پست رو بخونین:
https://news.1rj.ru/str/Linuxor/2505
لینوس توروالدز خیلی راحت بقیه رو تخریب میکنه و کدشون رو به چالش میکشه. این آقا کسیه که pull request داده و لینوس بهش گفته این چه وضعشه. ولی همه اینها به کنار سایت شخصیش در عین سادگی خیلی باحال بود.
https://www.dabbelt.com/~palmer/
https://news.1rj.ru/str/Linuxor/2505
لینوس توروالدز خیلی راحت بقیه رو تخریب میکنه و کدشون رو به چالش میکشه. این آقا کسیه که pull request داده و لینوس بهش گفته این چه وضعشه. ولی همه اینها به کنار سایت شخصیش در عین سادگی خیلی باحال بود.
https://www.dabbelt.com/~palmer/
به برنامه نویسی با کمک هوش مصنوعی میگن vibe coding یا کدنویسی حسی. یوتیوب سرچ کنید یه عالمه آموزش هم میتونید پیدا کنید راجبش😭
🥰1
Why your website should be under 14kB in size
قضیه از این قراره که وبسایتی که حجمش ۱۴ کیلوبایته خیلی از یه وبسایت ۱۵ کیلوبایتی سریع تره. که این به دلیل پروتکل tcp هست و کند بودنش تو فهمیدن اینکه چندتا پکت میتونه بفرسته در آن واحد. اینجارو هم پیشنهاد میکنم بخونید.
این ویدیو هم راجب همین موضوعه:
https://www.youtube.com/watch?v=ciNXbR5wvhU
تنها راه حل این نیست که کل وبسایتمون رو ۱۴ کیلوبایتی کنیم تا از این کندی فرار کنیم. فایل های html قابلیت استریم شدن دارن یعنی همزمان با دانلود توسط browser نشون داده میشند. و فرض کنیم سایتمون خیلی بزرگه، همینکه اولین ۱۴ کیلوبایت سایتمون با معنی باشه و browser چیزی برا نمایش داشته باشه از دیر لود شدن سایتمون به این دلیل فرار کردیم.
این سایت صفحه سرچ گوگل هست ولی با حجم یک کیلوبایت:
https://1kbgoogle.artemka1806.dev/
قضیه از این قراره که وبسایتی که حجمش ۱۴ کیلوبایته خیلی از یه وبسایت ۱۵ کیلوبایتی سریع تره. که این به دلیل پروتکل tcp هست و کند بودنش تو فهمیدن اینکه چندتا پکت میتونه بفرسته در آن واحد. اینجارو هم پیشنهاد میکنم بخونید.
این ویدیو هم راجب همین موضوعه:
https://www.youtube.com/watch?v=ciNXbR5wvhU
تنها راه حل این نیست که کل وبسایتمون رو ۱۴ کیلوبایتی کنیم تا از این کندی فرار کنیم. فایل های html قابلیت استریم شدن دارن یعنی همزمان با دانلود توسط browser نشون داده میشند. و فرض کنیم سایتمون خیلی بزرگه، همینکه اولین ۱۴ کیلوبایت سایتمون با معنی باشه و browser چیزی برا نمایش داشته باشه از دیر لود شدن سایتمون به این دلیل فرار کردیم.
این سایت صفحه سرچ گوگل هست ولی با حجم یک کیلوبایت:
https://1kbgoogle.artemka1806.dev/
🤓1
lab
برا مسائلی که توابع بازگشتی و dp نیازه، برا سریعتر کردن روند محاسبه، تکنیکی به کار میره به اسم memoization حرفش اینه که اگه قراره مقداری رو دوباره بهش نیاز داشته باشی یجا ذخیرش کن که نیاز نباشه دوباره حسابش کنی. مثال بارزش حساب کردن سری فیبوناچی هست. def fib(n…
برج هانوی
اولین بار معلممون سر کلاس این مسئله رو مطرح کرد. چون داشت یه تعداد از بچه هارو برا المپیاد دانشآموزی آماده میکرد بهش برخورده بود. اونجا برام جالب بود ولی نفهمیدم مسئله رو بعد هرچی جلو تر میرفتیم بیشتر فهمیدمش. دیگه سر کلاس ساختمان داده کامل بلدش بودم.
اولین بار معلممون سر کلاس این مسئله رو مطرح کرد. چون داشت یه تعداد از بچه هارو برا المپیاد دانشآموزی آماده میکرد بهش برخورده بود. اونجا برام جالب بود ولی نفهمیدم مسئله رو بعد هرچی جلو تر میرفتیم بیشتر فهمیدمش. دیگه سر کلاس ساختمان داده کامل بلدش بودم.
بر اساس یک افسانه هندی، توی معبدی به اسم برهما، ۶۴ دیسک طلایی روی سه ستون الماس وجود داره. راهبان باید این دیسکها رو طبق قوانین برج هانوی جابهجا کنن، و وقتی این کار تموم بشه، جهان به پایان میرسه! 😅
حالا اگه بخوای حساب کنیم:
برای n دیسک، تعداد حرکتها برابر با 2 به توان n منهی 1 هست.
پس برای ۶۴ دیسک:
2^{64} - 1 = 18,446,744,073,709,551,615
حتی اگه راهبها هر ثانیه یک حرکت کنن، تکمیل این کار بیش از ۵۸۰ میلیارد سال طول میکشه! (که خیلی بیشتر از سن فعلی کیهانه).
پس خیالت راحت، جهان به این زودیها تموم نمیشه. 😄
❤3🥰1
Forwarded from Bit Orbit 🪐 (Arya)
یه چیزی داریم به اسم 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 مگابایت.
همینکار رو مجدد تکرار کردم اما بجای استفاده از 0 از دیتای رندوم استفاده کردم، فایل زیپ هیچ تغییری نکرد.
باید بدونیم الگوریتم های زیپ مثل 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
GitHub
GitHub - iamtraction/ZOD: This is a decompression bomb (also known as zip of death or zip bomb) designed to crash or render useless…
This is a decompression bomb (also known as zip of death or zip bomb) designed to crash or render useless the program or system reading it. - iamtraction/ZOD
👌5