Astro Terminal
معرفی خلاصه ای از hashing و کاربرد اون توی bloom filter #DSA #Hash
یکی از کاربرد های hashing در bloom filter هاست که یک ساختار تشخیص وجود یا عدم وجود یک آیتم در آرایهس:
🤔فرض کنید شما مسئول تحویل کتاب یک کتابخانه اید. به همین دلیل روزانه افرادی به سراغ کتاب های مختلف می آیند و شما در بد ترین حالت مجبور هستید هر بار برای اطمینان از موجودی یا عدم موجودی کتاب خواسته شده به تمام قفسه ها سر بزنید.
☑️یک آرایه از بیت های یک تا n درست کنید که هر بیت میتواند روشن باشد یا خاموش. در نظر داشته باشید که n مقدار ماکسیممی است که خودمان انتخاب میکنیم. همچنین به یک hash function هم نیازمندیم که نام هر کتاب را به یک عدد (در بازه 1 تا n) نسبت دهد.
- محاسبات داخل هش فانکشن برای ما مهم نیست صرفا هش فانکشن باید Deterministic باشد یعنی برای هر کتاب فقط یک عدد را نسبت دهد. همچنین تا جایی که ممکن است برای کتاب های مختلف عدد های(hash-value های) مختلفی نسبت دهد.
☑️هر کتاب داخل کتابخانه را از hash function تعریف شده عبور می دهیم و سپس مقدار یک را در آرایه در نظر گرفته شده به m امین ارایه نسبت میدهیم (m = hash-value).
☑️حال اگر یک مراجعه کننده کتابی را درخواست بکند ابتدا نام آن کتاب را به هش فانکشن داده و سپس در آرایه مان دنبال آن عدد میگردیم:اگر بیت متناظر با آن عدد دارای مقدار یک بود آنگاه احتمال وجود آن کتاب در کتابخانه هست. (گفتیم که hash function ما صرفا برای هر کتاب مقداری را نسبت میدهد و امکانش هست که دو کتاب مقداری یکسان داشته باشند میتوان گفت برای هر کتاب در بار اول مقدار رندومی را نسبت میدهد که ممکن است با مقدار کتابی دیگر یکی باشد)
⁉️حال این سوال پیش می آید که چگونه میتوان احتمال درست بودن اطلاعات bloom filter مان را افزایش دهیم؟
1️⃣ یک روش این است که تعداد هش فانکشن ها را بیشتر کنیم: یعنی مثلا قبلا اطلاعات هر کتاب به صورت زیر بود:
ولی اینبار بیش از یکی هش فانکشن داریم که برای بار اول مقدار رندوم به کتاب نسبت میدهند :
اینبار اگر مراجعه کننده کتابی را درخواست کند پس از به دست اوردن سه مقدار هش برای آن کتاب اگر در بلوم فیلتر ما هر سه مقدار برابر یک بود حال میتوانیم با خیال راحت تر از موجودیت آن کتاب صحبت کنیم.
2️⃣ روش دیگر این است که تعداد بیت های موجود در bloom filter مان را افزایش دهیم. اگر n را افزایش دهیم درواقع جامعه آماری افزایش یافته و اعدادی که توسط hash function به صورت رندوم برای بار اول برای کتاب تولید میشوند به احتمال بیشتری یکتا میباشند.
@Astro_Terminal
☑️یک آرایه از بیت های یک تا n درست کنید که هر بیت میتواند روشن باشد یا خاموش. در نظر داشته باشید که n مقدار ماکسیممی است که خودمان انتخاب میکنیم. همچنین به یک hash function هم نیازمندیم که نام هر کتاب را به یک عدد (در بازه 1 تا n) نسبت دهد.
- محاسبات داخل هش فانکشن برای ما مهم نیست صرفا هش فانکشن باید Deterministic باشد یعنی برای هر کتاب فقط یک عدد را نسبت دهد. همچنین تا جایی که ممکن است برای کتاب های مختلف عدد های(hash-value های) مختلفی نسبت دهد.
☑️هر کتاب داخل کتابخانه را از hash function تعریف شده عبور می دهیم و سپس مقدار یک را در آرایه در نظر گرفته شده به m امین ارایه نسبت میدهیم (m = hash-value).
☑️حال اگر یک مراجعه کننده کتابی را درخواست بکند ابتدا نام آن کتاب را به هش فانکشن داده و سپس در آرایه مان دنبال آن عدد میگردیم:اگر بیت متناظر با آن عدد دارای مقدار یک بود آنگاه احتمال وجود آن کتاب در کتابخانه هست. (گفتیم که hash function ما صرفا برای هر کتاب مقداری را نسبت میدهد و امکانش هست که دو کتاب مقداری یکسان داشته باشند میتوان گفت برای هر کتاب در بار اول مقدار رندومی را نسبت میدهد که ممکن است با مقدار کتابی دیگر یکی باشد)
به همین دلیل به این ساختار که به bloom filter معروف است probabilistic data structure میگویند. (ساختار داده احتمالی)
⁉️حال این سوال پیش می آید که چگونه میتوان احتمال درست بودن اطلاعات bloom filter مان را افزایش دهیم؟
1️⃣ یک روش این است که تعداد هش فانکشن ها را بیشتر کنیم: یعنی مثلا قبلا اطلاعات هر کتاب به صورت زیر بود:
{book : hash-value} ولی اینبار بیش از یکی هش فانکشن داریم که برای بار اول مقدار رندوم به کتاب نسبت میدهند :
{book : hv1, hv2, hv3 } اینبار اگر مراجعه کننده کتابی را درخواست کند پس از به دست اوردن سه مقدار هش برای آن کتاب اگر در بلوم فیلتر ما هر سه مقدار برابر یک بود حال میتوانیم با خیال راحت تر از موجودیت آن کتاب صحبت کنیم.
2️⃣ روش دیگر این است که تعداد بیت های موجود در bloom filter مان را افزایش دهیم. اگر n را افزایش دهیم درواقع جامعه آماری افزایش یافته و اعدادی که توسط hash function به صورت رندوم برای بار اول برای کتاب تولید میشوند به احتمال بیشتری یکتا میباشند.
@Astro_Terminal
وقتی بحث پردازش کامپیوتری وسط میاد، دوتا از اصلی ترین قطعات CPU و GPU هستن ولی تفاوت این دوتا چیه؟
واحد پردازش مرکزی یا همون CPU به عنوان مغز کامپیوتر وظیفه اصلی پردازش رو به دوش میکشه، مدار مجتمعی از ترانزیستور ها و گیت های منطقی که دستور العمل ها رو به فرم صفر و یک پشت سر هم به نوبت اجرا میکنند.
برای پردازش های پشت سر هم و دنباله ای (sequential) CPU مناسبه ولی وقتی به دنیای گرافیک و انیمیشن کامپیوتری وارد میشیم با حجم زیادی از محاسبات موازی (Parallel) مواجهیم که با CPU قابل انجام نیست برای مثال برای نمایش انیمیشن های بازی ویدیویی مورد علاقتون نیازه به دستور العمل هایی که اطلاعات رو برای نمایش در هزاران پیکسل به صورت موازی و مکرر پردازش میکنن.
ازونجا که GPU برای محاسبات ماتریسی به صورت موازی بهینه شده نه تنها برای پردازش گرافیکی بلکه برای آموزش دادن مدل های هوش مصنوعی هم به کار میره و همین باعث شده که سهام شرکت NVIDIA در این چند سال اخیر به شدت بالا بره!
@Astro_Terminal
واحد پردازش مرکزی یا همون CPU به عنوان مغز کامپیوتر وظیفه اصلی پردازش رو به دوش میکشه، مدار مجتمعی از ترانزیستور ها و گیت های منطقی که دستور العمل ها رو به فرم صفر و یک پشت سر هم به نوبت اجرا میکنند.
برای پردازش های پشت سر هم و دنباله ای (sequential) CPU مناسبه ولی وقتی به دنیای گرافیک و انیمیشن کامپیوتری وارد میشیم با حجم زیادی از محاسبات موازی (Parallel) مواجهیم که با CPU قابل انجام نیست برای مثال برای نمایش انیمیشن های بازی ویدیویی مورد علاقتون نیازه به دستور العمل هایی که اطلاعات رو برای نمایش در هزاران پیکسل به صورت موازی و مکرر پردازش میکنن.
ازونجا که GPU برای محاسبات ماتریسی به صورت موازی بهینه شده نه تنها برای پردازش گرافیکی بلکه برای آموزش دادن مدل های هوش مصنوعی هم به کار میره و همین باعث شده که سهام شرکت NVIDIA در این چند سال اخیر به شدت بالا بره!
@Astro_Terminal
This media is not supported in your browser
VIEW IN TELEGRAM
پردازشگر گرافیک برای بار اول توسط شرکت NVIDIA در سال 1999 معرفی شد و این ویدیو به خوبی تفاوت CPU و GPU رو به تصویر میکشه
@Astro_Terminal
@Astro_Terminal
Intel Rapid Storage Technology (Intel RST)?
#Intel
Intel Rapid Storage Technology:
یک سری از ویژگی های نرمافزاری است که با هدف بهبود عملکرد و پایداری سیستم های ذخیرهسازی در کامپیوترهای شخصی و سرورها توسط Intel ارائه شده است. برخی از ویژگی های اصلی آن شامل موارد زیر است:
- پشتیبانی از فناوری RAID برای افزایش عملکرد و قابلیت اطمینان ذخیرهسازی
- پشتیبانی از فناوری SSD Caching برای بهبود زمان پاسخگویی سیستم
- پشتیبانی از فناوری فایل سیستم هوشمند برای بهینه سازی نحوه مدیریت داده ها
- ابزارهای مدیریتی برای پایش و کنترل وضعیت درایوهای ذخیره سازی
این ویژگی ها باعث بهبود عملکرد سیستم میشه. Intel RST معمولاً به صورت یکپارچه با چیپست های Intel ارائه میشه پس اگه سیستم AMD دارید نگران این قضیه نباشید!
اما نگران کدوم قضیه؟
#Intel
Intel Rapid Storage Technology:
یک سری از ویژگی های نرمافزاری است که با هدف بهبود عملکرد و پایداری سیستم های ذخیرهسازی در کامپیوترهای شخصی و سرورها توسط Intel ارائه شده است. برخی از ویژگی های اصلی آن شامل موارد زیر است:
- پشتیبانی از فناوری RAID برای افزایش عملکرد و قابلیت اطمینان ذخیرهسازی
- پشتیبانی از فناوری SSD Caching برای بهبود زمان پاسخگویی سیستم
- پشتیبانی از فناوری فایل سیستم هوشمند برای بهینه سازی نحوه مدیریت داده ها
- ابزارهای مدیریتی برای پایش و کنترل وضعیت درایوهای ذخیره سازی
این ویژگی ها باعث بهبود عملکرد سیستم میشه. Intel RST معمولاً به صورت یکپارچه با چیپست های Intel ارائه میشه پس اگه سیستم AMD دارید نگران این قضیه نباشید!
اما نگران کدوم قضیه؟
Astro Terminal
Intel Rapid Storage Technology (Intel RST)? #Intel Intel Rapid Storage Technology: یک سری از ویژگی های نرمافزاری است که با هدف بهبود عملکرد و پایداری سیستم های ذخیرهسازی در کامپیوترهای شخصی و سرورها توسط Intel ارائه شده است. برخی از ویژگی های اصلی آن شامل…
وقتی بخواهیم سیستم عامل ویندوز نصب کنیم روی سیستم هایی که از CPU های اینتل نسل 10 به بعد استفاده میکنن، با این صحنه مواجه میشیم که بخاطر عدم وجود درایور Intel Rapid Storage عه (باید خودمون این درایور رو به صورت دستی از سایت خود اینتل دانلود و به صورت دستی در فرایند پارتیشن بندی Load بکنیم)
یکی از دلایلی که ترجیح میدم سیستم عامل اصلیم لینوکس باشه اینه که ناخوداگاه چیزای مختلف یاد میگیری در حین استفاده از سیستم...
مثلا من میخواستم در کنار لینوکس ویندوز نصب کنم مجبور بودم که پارتیشن Root سیستم رو تغییر سایز بدم که بتونم ویندوز رو در کنارش بریزم...
فهمیدم چون پارتیشن روت همیشه در حال استفادس نمیشه پارتیشن رو تغییر سایز داد
پس باید از یک Linux Live USB استفاده میکردم تا بتونم این کار رو روی یک محیط live لینوکسی انجام بدم، ولی وقتی خواستم این کار رو بکنم به یک ارور خوردم که ورژن لایو سیستمی که دارم قدیمیه (چون از یک
Kali Linux live
که از قدیم داشتمش استفاده کردم)
شاید بگید خب اپدیتش میکردی😂 سعی کردم ارور 403 گرفتم (عکسشو این پایین میذارم) چون داخل ایرانیم و ظاهرا مخزن های پکیج های کالی فیلترن⁉️
حالا دارم یه ابونتو رایت میکنم روی فلش که از محیط لایو اون استفاده کنم🪛🔧
همیشه فایل ISO دیسترو ای که نصب میکنید رو نگهدارید (اگر قابلیت اجرای Live رو داره) برای اینجور کارها به کارتون میاد و اگه لینوکس یوزر تازه کار هستید از Error ها لذت ببرید چون ازشون یادمیگیرید...
همین🧩🕞
@Astro_Terminal
مثلا من میخواستم در کنار لینوکس ویندوز نصب کنم مجبور بودم که پارتیشن Root سیستم رو تغییر سایز بدم که بتونم ویندوز رو در کنارش بریزم...
فهمیدم چون پارتیشن روت همیشه در حال استفادس نمیشه پارتیشن رو تغییر سایز داد
پس باید از یک Linux Live USB استفاده میکردم تا بتونم این کار رو روی یک محیط live لینوکسی انجام بدم، ولی وقتی خواستم این کار رو بکنم به یک ارور خوردم که ورژن لایو سیستمی که دارم قدیمیه (چون از یک
Kali Linux live
که از قدیم داشتمش استفاده کردم)
شاید بگید خب اپدیتش میکردی😂 سعی کردم ارور 403 گرفتم (عکسشو این پایین میذارم) چون داخل ایرانیم و ظاهرا مخزن های پکیج های کالی فیلترن⁉️
حالا دارم یه ابونتو رایت میکنم روی فلش که از محیط لایو اون استفاده کنم🪛🔧
همیشه فایل ISO دیسترو ای که نصب میکنید رو نگهدارید (اگر قابلیت اجرای Live رو داره) برای اینجور کارها به کارتون میاد و اگه لینوکس یوزر تازه کار هستید از Error ها لذت ببرید چون ازشون یادمیگیرید...
همین🧩🕞
@Astro_Terminal
چند شبه دارم روی یک پروژه طراحی مدل سه بعدی کار میکنم.🎭
قضیه اینه که با درون یابی نقاط مهم صورت (نقاطی که در تصویر در صورت انتخاب شدن) یک رویه براوردی نزدیک به شکل صورت رسم بشه.(هرچقدر تعداد نقاط بیشتر، مدل به تصویر اصلی نزدیکتر)
داخل ریپو گیتهابم میتونید کد و توضیحات بیشتر رو ببینید: github👾
@Astro_Terminal 🛸
قضیه اینه که با درون یابی نقاط مهم صورت (نقاطی که در تصویر در صورت انتخاب شدن) یک رویه براوردی نزدیک به شکل صورت رسم بشه.(هرچقدر تعداد نقاط بیشتر، مدل به تصویر اصلی نزدیکتر)
داخل ریپو گیتهابم میتونید کد و توضیحات بیشتر رو ببینید: github👾
@Astro_Terminal 🛸
#Linux #Shell #Customization #Bash
شخصی سازی ترمینال!
1. Intstall Nerd font 🤓:
یکی از فونت های این سایت رو نصب کنید تا از آیکون هایی که داخل تصویر میبینید پشتیبانی بشه!
https://www.nerdfonts.com/font-downloads
2. Install StarShip 🚀:
پرامپت StarShip (https://starship.rs/) رو نصب کنید:
3. Config Neofetch:
برنامه neofetch یک ابزار خط فرمان برای نشان دادن مشخصات سیستم که در تصویر میبینید
برنامه neofetch رو با پکیج منیجرتون دانلود کنید.
محتویات این کانفیگ فایل رو کپی کنید
https://github.com/chick2d/neofetch-themes/blob/main/normal/acenoster.conf
و جایگزین محتویات فایل کانفیگ برنامه neofetch کنید، آدرس فایل:
@Astro_Terminal
شخصی سازی ترمینال!
1. Intstall Nerd font 🤓:
یکی از فونت های این سایت رو نصب کنید تا از آیکون هایی که داخل تصویر میبینید پشتیبانی بشه!
https://www.nerdfonts.com/font-downloads
2. Install StarShip 🚀:
پرامپت StarShip (https://starship.rs/) رو نصب کنید:
curl -sS https://starship.rs/install.sh | sh
3. Config Neofetch:
برنامه neofetch یک ابزار خط فرمان برای نشان دادن مشخصات سیستم که در تصویر میبینید
برنامه neofetch رو با پکیج منیجرتون دانلود کنید.
محتویات این کانفیگ فایل رو کپی کنید
https://github.com/chick2d/neofetch-themes/blob/main/normal/acenoster.conf
و جایگزین محتویات فایل کانفیگ برنامه neofetch کنید، آدرس فایل:
~/.config/neofetch/config.conf@Astro_Terminal
#Obsidian
اگر دوست دارید یک شبکه از نت هاتون رو روی سیستم داشته باشید که میتونه مثل ویکی پدیای Local یا حتی مغز دوم شما عمل کنه میتونید از نرم افزار Obsidian استفاده کنید.📝
آبسیدین یک نرم افزار نت برداریه که از فرمت md (markdown) استفاده میکنه. شما میتونید نت های مرتبط به ایده های مرتبط رو به هم لینک کنید🔗 (مثل شبکه ای که در تصویر بالا میبینید).
علاوه بر اینها این پروژه تعداد بسیار زیادی افزونه و اکستنشن داره که میتونید نرم افزار رو طبق استفادتون شخصی سازی کنید.🪛
@Astro_Terminal 👾
اگر دوست دارید یک شبکه از نت هاتون رو روی سیستم داشته باشید که میتونه مثل ویکی پدیای Local یا حتی مغز دوم شما عمل کنه میتونید از نرم افزار Obsidian استفاده کنید.📝
آبسیدین یک نرم افزار نت برداریه که از فرمت md (markdown) استفاده میکنه. شما میتونید نت های مرتبط به ایده های مرتبط رو به هم لینک کنید🔗 (مثل شبکه ای که در تصویر بالا میبینید).
علاوه بر اینها این پروژه تعداد بسیار زیادی افزونه و اکستنشن داره که میتونید نرم افزار رو طبق استفادتون شخصی سازی کنید.🪛
@Astro_Terminal 👾
