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
بزرگترین مسئله ای که موتور های جستجوی اوایل باهاش درگیر بودن، رنکینگ صفحات وب بوده. یاهو که اولین موتور جستجوی محبوب توی جهان بوده این مشکلو داشت و خیلی راحت آدمها میتونستن سایتشون رو بیارن توی نتیجه های برتر با ترفندایی مثل استفاده از یه عالمه کلید واژه با رنگ سفید و بکگراند سفید به شکلی که مشخص نباشه. و جالب اینجاست که با بوجود امدن ایده های رنکینگ همچنان مقاومت میکرد در برابر این قضیه، چون بر این عقیده بودن اگر کاربر زودتر جوابشو پیدا کنه کمتر تبلیغ میبینه.
❤2👌1
lore.kernel.org
سایت lore.kernel.org مثل یک "آرشیو وب" برای تمام ایمیلهای مربوط به توسعه لینوکس و پروژههای مرتبطه.
حالا چرا نمیخان رباتا بهش سر نزنن؟
دلیلش اینه که بعضی شرکتهای AI وبسایتها رو بهشدت اسکرپ میکنن (جمعآوری انبوه داده). این باعث فشار و حتی قطعی سایت میشه.
این روش برای مقابله، کاربرها رو مجبور میکنه یک Proof-of-Work (مثل Hashcash) انجام بدن. یعنی مرورگر یه کار محاسباتی کوچک انجام میده تا ثابت کنه "انسانی و معمولی" هستی، نه یک ربات اسکرپر عظیم.
برای کاربر عادی این بار خیلی کمه و حس نمیشه، اما برای اسکرپرهای انبوه خیلی گرون و سنگین میشه.
در ضمن بنظرم کیوت ترین are you a bot تا اینجا بود.
سایت lore.kernel.org مثل یک "آرشیو وب" برای تمام ایمیلهای مربوط به توسعه لینوکس و پروژههای مرتبطه.
حالا چرا نمیخان رباتا بهش سر نزنن؟
دلیلش اینه که بعضی شرکتهای AI وبسایتها رو بهشدت اسکرپ میکنن (جمعآوری انبوه داده). این باعث فشار و حتی قطعی سایت میشه.
این روش برای مقابله، کاربرها رو مجبور میکنه یک Proof-of-Work (مثل Hashcash) انجام بدن. یعنی مرورگر یه کار محاسباتی کوچک انجام میده تا ثابت کنه "انسانی و معمولی" هستی، نه یک ربات اسکرپر عظیم.
برای کاربر عادی این بار خیلی کمه و حس نمیشه، اما برای اسکرپرهای انبوه خیلی گرون و سنگین میشه.
در ضمن بنظرم کیوت ترین are you a bot تا اینجا بود.
🌚1
Forwarded from Go Casts 🚀
مستند Python منتشر شد، پیشنهاد میکنم ببینید.
پایتون یکی از تاثیرگذارترین زبان های سه دهه گذشته بوده و احتمالا تاثیرگذارترین زبان چند سال یا دهه آینده باشه..
https://youtu.be/GfH4QL4VqJ0?si=cR5PFyhoq7kr7EhQ
@gocasts
پایتون یکی از تاثیرگذارترین زبان های سه دهه گذشته بوده و احتمالا تاثیرگذارترین زبان چند سال یا دهه آینده باشه..
https://youtu.be/GfH4QL4VqJ0?si=cR5PFyhoq7kr7EhQ
@gocasts
YouTube
The Story of Python and how it took over the world | Python: The Documentary
This is the story of the world's most beloved programming language: Python. What began as a side project in Amsterdam during the 1990s became the software powering artificial intelligence, data science and some of the world’s biggest companies. But Python's…
🕊4
Media is too big
VIEW IN TELEGRAM
What resources help you get your team to the World Finals?
در حاشیه برگزاری icpc worldfinal معمولن یه گزارش کوتاه بامزه هم بیرون میاد. این منو یاد یدونه گزارش قدیمی ترشون انداخت.
در حاشیه برگزاری icpc worldfinal معمولن یه گزارش کوتاه بامزه هم بیرون میاد. این منو یاد یدونه گزارش قدیمی ترشون انداخت.
🥰1
lab
What resources help you get your team to the World Finals? در حاشیه برگزاری icpc worldfinal معمولن یه گزارش کوتاه بامزه هم بیرون میاد. این منو یاد یدونه گزارش قدیمی ترشون انداخت.
Media is too big
VIEW IN TELEGRAM
What's the favorite programming language for ICPC?
این یکی برا سال 2017 هست. آخر ویدیو ینفر میگه rust😂
این یکی برا سال 2017 هست. آخر ویدیو ینفر میگه rust😂
🥰2
Forwarded from TorhamDev | تورهام 😳
چطوری اسم گذاری کنیم داخل کد.
البته من بعد یک مدت دنبال کردن این پترنها رسیدم به اسمهای خیلی طولانی که طبق قوانین درسته ولی حس میکنم اشتباس :))))
https://youtu.be/-J3wNP6u5YU?si=VMlBQqu-gFR3noXv
البته من بعد یک مدت دنبال کردن این پترنها رسیدم به اسمهای خیلی طولانی که طبق قوانین درسته ولی حس میکنم اشتباس :))))
https://youtu.be/-J3wNP6u5YU?si=VMlBQqu-gFR3noXv
YouTube
Naming Things in Code
It's hard to come up with good names in code, but its also easy to get wrong. By looking at some examples, we can get 80% of the way there. Access to code examples, discord, song names and more at https://www.patreon.com/codeaesthetic
0:00 Introduction
0:31…
0:00 Introduction
0:31…
❤2
lab
امروز 13 سپتامبر و 256امین روز سال میلادی هست. و برنامه نویسا تصمیم گرفتن همچین روزی رو به عنوان روز برنامه نویس در نظر بگیرن چون عدد مقدسیه. یادمه یه چالشی یکبار تو همین روز حل کردم که یادم بیاد میگم چی بود الان یادم نیست عکسو از ردیت کش رفتم
معما این بود:
اگه دوست داشتید خودتون حل کنید همین متن کافیه و بقیه رو میتونید نبینید.
با یک متن ASCII-encoded رو بروییم که بعد از دیکد میرسیم به:
و عبارت بعدی
که اگه عبارت اول رو حل کنین false میشه و عبارت دوم رو اگه حل کنیم true میشه و جواب معما هست 01 (صفر و یک)
"riddle_1": "40 49 55 32 60 32 52 42 51 43 53 41 32 124 124 32 40 56 42 50 32 61 61 32 52 42 52 41 32 38 38 32 33 40 51 43 51 32 61 61 32 54 41", "riddle_2": "33 98 32 63 32 33 98 32 58 32 98"
اگه دوست داشتید خودتون حل کنید همین متن کافیه و بقیه رو میتونید نبینید.
(17 < 4*3+5) || (8*2 == 4*4) && !(3+3 == 6)
!b ? !b : b
🔥1
این مدت با بیلد کردن یک پروژه ای مشکل داشتم. مشکل این بود که لپ تاپ من خیلی زغالیه و این پروژه هم بیلد شدنش خیلی منابع میخاست. تایجایی پیش میرفت و بعد چون کل رمو اشغال میکرد سیستم عامل فریز میشد. اول امدم مصرف رمشو حین بیلد کردن محدود کنم ولی بازم مشکل وجود داشت. در آخر به گیت هاب اکشن ها رو آوردم و الان خیلی راحت سر هر push خودش پروژه رو بیلد میکنه و خیلی خیلی کار راه اندازه. خلاصه از گیتهاب اکشن ها غافل نشید.
👌2
lab
پایین سمت راست
شاید براتون سوال شده باشه که
/g/ - Technology
چیه؟ این بورد تکنولوژی سایت 4chan.org هست که خیلی فعاله و ارزش چک کردن داره
https://boards.4chan.org/g/
/g/ - Technology
چیه؟ این بورد تکنولوژی سایت 4chan.org هست که خیلی فعاله و ارزش چک کردن داره
https://boards.4chan.org/g/
boards.4chan.org
/g/ - Technology - 4chan
"/g/ - Technology" is 4chan's imageboard for discussing computer hardware and software, programming, and general technology.
👌2