Forwarded from محتوای آزاد سهراب (Sohrab)
Forwarded from Agora (Alireza)
Swiss Table
______________________________
روشهای مرسوم رفع تصادم (collision) توی hashmap رو تو درس ساختمان داده خوندیم:
1- open addressing
2- chaining
3- hybrid
خیلی خلاصه بخوام هرکدوم رو مرور کنم اینطور میشه:
در open addressing اینطور عمل میکنیم که وقتی تصادم رخ داد، اینقدر توی آرایهی wrap شده جلو میریم تا به اولین خونهی خالی برسیم و item رو اونجا بذاریم.
در روش chaining هر خونهی آرایهی ما یک عنصر نگه میداره و یک پوینتره به یک ساختماندادهی دیگه که میتونه یک linked list باشه یا یک درخت متوازن مثل red-black یا AVL. در صورتی که توی اون خونهی آرایه از قبل دادهای وجود داشته باشه، آیتم جدید رو push میکنیم توی اون ساختماندادهای که اون خونه بهش اشاره میکنه.
در روش سوم، یکی از روشهای اول و دوم رو با مکانیزم هشچندباره ترکیب میکنیم. به این صورت که چند الگوریتم هش متفاوت رو در نظر میگیریم. در صورتی که با هش آیتم مدنظرمون تصادم رخ داد، یک الگوریتم هش جدید رو انتخاب میکنیم. مکانیزم انتخاب الگوریتم هش هم میتونه هرچی باشه. ما ساده و round robin در نظر میگیریم. این کار رو تا زمانی ادامه میدیم که تمام الگوریتمهای هشمون رو تست کرده باشیم و همشون منجر به تصادم شده باشن. بعد با استفاده از یکی از روشهای ۱ یا ۲ اقدام به ذخیره کردن آیتم میکنیم.
تمام این قصهها چیزهایی هست که تا اینجا میدونیم و مرسومه. ولی واقعاً چقدر از این روشها استفاده میشه؟ آیا میشه پا رو فراتر گذاشت و عملکرد رو از این هم بهتر کرد؟
توی جاهایی مثل Cloudflare که عملکرد در حد میکروثانیه مهمه، گاهی باید پا رو فراتر گذاشت. گاهی سادهترین جزئیات میتونن تفاوت چندبرابری در سرعت ایجاد کنن. انگار یه نوع amplification رخ میده؛ بهینهسازی کوچیک که باعث میشه کل سیستم خیلی سریعتر بهنظر بیاد.
یکی از ایدههایی که دقیقاً با همین ذهنیت طراحی شده، ساختار Swiss Tableه. گوگل با در نظر گرفتن چالش کش سرورها دست به طراحی این ساختار زده. زبانهایی مثل Rust هم از همین ساختار برای پیادهسازی پیشفرض HashMap خودشون استفاده میکنن.
گوگل تو کنفرانس CppCon 2017 هم دربارهی طراحی و بهینهسازی این ساختار ارائهای داشت که دیدنش خالی از لطف نیست:
CppCon 2017: Matt Kulukundis – Designing a Fast, Efficient Hash Table
Swiss Table در اصل هنوز از ایدهی open addressing استفاده میکنه؛ یعنی دادهها مستقیماً در یک آرایه ذخیره میشن و وقتی تصادم رخ بده، دنبال خونهی بعدی میگردیم تا جایی برای درج پیدا کنیم. ولی تفاوت اصلیش اینه که چطور این آرایه
bucket
بندی میشه و چطور CPU ازش استفاده میکنه.
در Swiss Table، آرایهی اصلی به چند bucket تقسیم میشه. هر bucket معمولاً چند تا slot داره (مثلاً 8 تا)، یعنی هر bucket خودش میتونه تا 8 تا عنصر نگه داره.
در کنارش یه آرایهی کوچیکتر از metadata داریم که برای هر slot فقط یه بایت اطلاعات ذخیره میکنه. توی این بایت، یه تیکه از هش کلید (مثلاً 7 بیت از اون) نگه داشته میشه تا CPU بتونه سریعتر بفهمه کدوم slot احتمالاً مربوط به کلید مورد نظره.
وقتی میخوایم دنبال یه کلید بگردیم یا کلید جدیدی وارد کنیم، Swiss Table با استفاده از
SIMD (Single Instruction, Multiple Data)
چند بایت metadata رو با هم میخونه (مثلاً 16 تا در یک لحظه) و در عرض یک دستور CPU بررسی میکنه که آیا هش کوچیک ذخیرهشده توی اونها با هش کلید ما یکیه یا نه.
بعد اگه یکی از اونها match کرد، تازه میره سراغ دادهی واقعی و بررسی دقیقتر انجام میده.
Swiss Table تنها نمونهی چنین طراحیای نیست. بعد از گوگل، پروژههای بزرگ دیگه مثل
Facebook’s F14
ایدههای مشابه استفاده کردن.
زبانهایی مثل Rust و Go هم با الهام از همین طراحی، نسخههای خودشون رو ساختن.
در پیادهسازی Go، تیم توسعه با یه چالش جدی روبهرو شد که بهطور مفصل توی این پست توضیح داده شده:
The Go Blog – Swiss Table
مشکل از اینجا شروع شد که وقتی آرایهی اصلی هشمپ به حد آستانهی ظرفیتش میرسه، باید سایزش دو برابر بشه و کل دادههای قبلی داخل آرایهی جدید کپی بشن.
این فرایند در سیستمهای عادی چندان مشکلی ایجاد نمیکنه، ولی در سرورهای کش که چند ترابایت دیتا داخل مموری دارن، این resize میتونه به شدت زمانبر و کند باشه.
راهحلی که گولنگ برای این موضوع ارائه داد، استفاده از hashmapهای چندلایه (multi-level) بود. بهجای resize کامل، دادههای جدید در یک لایهی بالاتر ذخیره میشن و بهصورت تدریجی دادههای قدیمی جابهجا میشن. اینطوری عملیات resize به بخشهای کوچیک تقسیم میشه و فشار ناگهانی از روی سیستم برداشته میشه.
این پست رو هم از دست ندین:
A new fast hash table in response to Google’s new fast hash table
______________________________
روشهای مرسوم رفع تصادم (collision) توی hashmap رو تو درس ساختمان داده خوندیم:
1- open addressing
2- chaining
3- hybrid
خیلی خلاصه بخوام هرکدوم رو مرور کنم اینطور میشه:
در open addressing اینطور عمل میکنیم که وقتی تصادم رخ داد، اینقدر توی آرایهی wrap شده جلو میریم تا به اولین خونهی خالی برسیم و item رو اونجا بذاریم.
در روش chaining هر خونهی آرایهی ما یک عنصر نگه میداره و یک پوینتره به یک ساختماندادهی دیگه که میتونه یک linked list باشه یا یک درخت متوازن مثل red-black یا AVL. در صورتی که توی اون خونهی آرایه از قبل دادهای وجود داشته باشه، آیتم جدید رو push میکنیم توی اون ساختماندادهای که اون خونه بهش اشاره میکنه.
در روش سوم، یکی از روشهای اول و دوم رو با مکانیزم هشچندباره ترکیب میکنیم. به این صورت که چند الگوریتم هش متفاوت رو در نظر میگیریم. در صورتی که با هش آیتم مدنظرمون تصادم رخ داد، یک الگوریتم هش جدید رو انتخاب میکنیم. مکانیزم انتخاب الگوریتم هش هم میتونه هرچی باشه. ما ساده و round robin در نظر میگیریم. این کار رو تا زمانی ادامه میدیم که تمام الگوریتمهای هشمون رو تست کرده باشیم و همشون منجر به تصادم شده باشن. بعد با استفاده از یکی از روشهای ۱ یا ۲ اقدام به ذخیره کردن آیتم میکنیم.
تمام این قصهها چیزهایی هست که تا اینجا میدونیم و مرسومه. ولی واقعاً چقدر از این روشها استفاده میشه؟ آیا میشه پا رو فراتر گذاشت و عملکرد رو از این هم بهتر کرد؟
توی جاهایی مثل Cloudflare که عملکرد در حد میکروثانیه مهمه، گاهی باید پا رو فراتر گذاشت. گاهی سادهترین جزئیات میتونن تفاوت چندبرابری در سرعت ایجاد کنن. انگار یه نوع amplification رخ میده؛ بهینهسازی کوچیک که باعث میشه کل سیستم خیلی سریعتر بهنظر بیاد.
یکی از ایدههایی که دقیقاً با همین ذهنیت طراحی شده، ساختار Swiss Tableه. گوگل با در نظر گرفتن چالش کش سرورها دست به طراحی این ساختار زده. زبانهایی مثل Rust هم از همین ساختار برای پیادهسازی پیشفرض HashMap خودشون استفاده میکنن.
گوگل تو کنفرانس CppCon 2017 هم دربارهی طراحی و بهینهسازی این ساختار ارائهای داشت که دیدنش خالی از لطف نیست:
CppCon 2017: Matt Kulukundis – Designing a Fast, Efficient Hash Table
Swiss Table در اصل هنوز از ایدهی open addressing استفاده میکنه؛ یعنی دادهها مستقیماً در یک آرایه ذخیره میشن و وقتی تصادم رخ بده، دنبال خونهی بعدی میگردیم تا جایی برای درج پیدا کنیم. ولی تفاوت اصلیش اینه که چطور این آرایه
bucket
بندی میشه و چطور CPU ازش استفاده میکنه.
در Swiss Table، آرایهی اصلی به چند bucket تقسیم میشه. هر bucket معمولاً چند تا slot داره (مثلاً 8 تا)، یعنی هر bucket خودش میتونه تا 8 تا عنصر نگه داره.
در کنارش یه آرایهی کوچیکتر از metadata داریم که برای هر slot فقط یه بایت اطلاعات ذخیره میکنه. توی این بایت، یه تیکه از هش کلید (مثلاً 7 بیت از اون) نگه داشته میشه تا CPU بتونه سریعتر بفهمه کدوم slot احتمالاً مربوط به کلید مورد نظره.
وقتی میخوایم دنبال یه کلید بگردیم یا کلید جدیدی وارد کنیم، Swiss Table با استفاده از
SIMD (Single Instruction, Multiple Data)
چند بایت metadata رو با هم میخونه (مثلاً 16 تا در یک لحظه) و در عرض یک دستور CPU بررسی میکنه که آیا هش کوچیک ذخیرهشده توی اونها با هش کلید ما یکیه یا نه.
بعد اگه یکی از اونها match کرد، تازه میره سراغ دادهی واقعی و بررسی دقیقتر انجام میده.
Swiss Table تنها نمونهی چنین طراحیای نیست. بعد از گوگل، پروژههای بزرگ دیگه مثل
Facebook’s F14
ایدههای مشابه استفاده کردن.
زبانهایی مثل Rust و Go هم با الهام از همین طراحی، نسخههای خودشون رو ساختن.
در پیادهسازی Go، تیم توسعه با یه چالش جدی روبهرو شد که بهطور مفصل توی این پست توضیح داده شده:
The Go Blog – Swiss Table
مشکل از اینجا شروع شد که وقتی آرایهی اصلی هشمپ به حد آستانهی ظرفیتش میرسه، باید سایزش دو برابر بشه و کل دادههای قبلی داخل آرایهی جدید کپی بشن.
این فرایند در سیستمهای عادی چندان مشکلی ایجاد نمیکنه، ولی در سرورهای کش که چند ترابایت دیتا داخل مموری دارن، این resize میتونه به شدت زمانبر و کند باشه.
راهحلی که گولنگ برای این موضوع ارائه داد، استفاده از hashmapهای چندلایه (multi-level) بود. بهجای resize کامل، دادههای جدید در یک لایهی بالاتر ذخیره میشن و بهصورت تدریجی دادههای قدیمی جابهجا میشن. اینطوری عملیات resize به بخشهای کوچیک تقسیم میشه و فشار ناگهانی از روی سیستم برداشته میشه.
این پست رو هم از دست ندین:
A new fast hash table in response to Google’s new fast hash table
YouTube
CppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
https://CppCon.org
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2017
—
Hash tables consume a large volume of both compute resources and memory across Google's production system. The…
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2017
—
Hash tables consume a large volume of both compute resources and memory across Google's production system. The…
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
YouTube
I built ChatGPT with Minecraft redstone!
I built a small language model in Minecraft using no command blocks or datapacks!
The model has 5,087,280 parameters, trained in Python on the TinyChat dataset of basic English conversations. It has an embedding dimension of 240, vocabulary of 1920 tokens…
The model has 5,087,280 parameters, trained in Python on the TinyChat dataset of basic English conversations. It has an embedding dimension of 240, vocabulary of 1920 tokens…
Forwarded from محتوای آزاد سهراب (Sohrab)
Forwarded from محتوای آزاد سهراب (Sohrab)
فروم رو یک سری تغییرات دادم و زدم ایمیج کانتینرش از اول بیلد بشه پس اگر ارور 5xx دیدید نترسید.
@SohrabContents
@SohrabContents
Forwarded from کانال اطلاعرسانی توزیع پارچ
مشکل ورود با گوگل، دیسکورد و گیتهاب در فروم پارچ برطرف شد.
منتظر حضور شما در فروم پارچ بخصوص کافه پارچ هستیم :)
@ParchLinux
منتظر حضور شما در فروم پارچ بخصوص کافه پارچ هستیم :)
@ParchLinux
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰ایجاد و اضافه کردن کاربر به گروه sudo
اگر زمانی با خطای زیر رو برو شدید User is not in the sudoers file از دستور زیر استفاده کنید.فایل sudoers: این فایل لیستی از کاربران و گروههایی را که مجاز به استفاده از sudo هستند، حفظ میکند. اگر نام کاربری شما در این فایل نباشد، سیستم به شما اجازه اجرای دستورات با امتیازات root را نخواهد داد.
ابتدا
su -
را وارد کنید. سپس رمز را وارد کنید و سپس دستور زیر را وارد کنید
به عنوان مثال، اگر بخواهید یک کاربر جدید با نام ali ایجاد کنید و به او اجازه دهید از دستور sudo استفاده کند، دستورات زیر را اجرا میکنید:
اگر زمانی با خطای زیر رو برو شدید User is not in the sudoers file از دستور زیر استفاده کنید.فایل sudoers: این فایل لیستی از کاربران و گروههایی را که مجاز به استفاده از sudo هستند، حفظ میکند. اگر نام کاربری شما در این فایل نباشد، سیستم به شما اجازه اجرای دستورات با امتیازات root را نخواهد داد.
ابتدا
su -
را وارد کنید. سپس رمز را وارد کنید و سپس دستور زیر را وارد کنید
sudo usermod -aG sudo username
به عنوان مثال، اگر بخواهید یک کاربر جدید با نام ali ایجاد کنید و به او اجازه دهید از دستور sudo استفاده کند، دستورات زیر را اجرا میکنید:
sudo usermod -aG sudo ali
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
دارم Cursor میریزم ببینم چیه که حتی توی اگهی شغلی گفته بودن باید بلد باشید
Forwarded from محتوای آزاد سهراب (Sohrab)
یکی از شاهکار های بشریت سایت رزرو غذای دانشگاه ملی مهارت یا همون سماد هستش.
همونطور که میبینید داره ارور CORS میخوره، چون این سایت سماد یک فرانته روی اون سایت قدیم سبا :))
نام اثر: شاهکار مهندسی
@SohrabContents
همونطور که میبینید داره ارور CORS میخوره، چون این سایت سماد یک فرانته روی اون سایت قدیم سبا :))
نام اثر: شاهکار مهندسی
@SohrabContents
Forwarded from محتوای آزاد سهراب (Sohrab)
اگر سرورهای آموزش و پرورش روی ویندوز سرور ۲۰۰۳ باشن، سرورهای دانشگاههای ملی مهارت از گنو/هرد استفاده میکنن که روی Proxmox نصب شده.
@SohrabContents
@SohrabContents
Forwarded from جامعهٔ فارسی زبان کیدیای
چطور در میزکار کیدیای میتونیم تصاویر روز رو به عنوان تصویر زمینه انتخاب کنیم؟ 🤔
برای این کار نیازی به نصب برنامه اضافهای نیست، صرفاً باید از افزونههای داخلی میزکار استفاده کنید.
طبق تصویر وارد تنظیمات تصویرزمینه بشید و نوع رو بر روی تصاویر روز قرار بدید.
همچنین با استفاده از دکمه get new میتوانید افزونههای بیشتری نظیر تصویر زمینه متحرک را نیز بارگیری و نصب کنید.
#چیزهای_کیدیای
کیدیای برای شما
@KDE_fa
برای این کار نیازی به نصب برنامه اضافهای نیست، صرفاً باید از افزونههای داخلی میزکار استفاده کنید.
طبق تصویر وارد تنظیمات تصویرزمینه بشید و نوع رو بر روی تصاویر روز قرار بدید.
همچنین با استفاده از دکمه get new میتوانید افزونههای بیشتری نظیر تصویر زمینه متحرک را نیز بارگیری و نصب کنید.
#چیزهای_کیدیای
کیدیای برای شما
@KDE_fa
Forwarded from a pessimistic researcher (Kc)
PhD in TCS @ Warwick University
—————————————————————
PhD positions are available at the Theory and Foundations group in the Department of Computer Science, University of Warwick, UK. The group works on various aspects of theoretical computer science including:
* algorithmic game theory
* approximation algorithms
* automata and formal languages
* combinatorics and graph algorithms
* computational complexity
* logic and games
* online and dynamic algorithms
* parallel algorithms and distributed computing
* parameterized complexity and structural graph theory
* random structures and randomized algorithms
* sublinear and streaming algorithms
* theoretical foundations of machine learning
The group has strong ties with the Centre for Discrete Mathematics and its Applications (DIMAP), established in 2007 jointly with Warwick Mathematics Institute and Warwick Business School. Together with DIMAP, the group is one of the leading theory groups in Europe, with regular publications in top international conferences and journals in theoretical computer science.
The Department of Computer Science at Warwick offers an excellent research environment. It was ranked 4th in the latest UK research assessment in Research Excellence Framework (REF) in 2021.
The university campus is located on the border of two counties, West Midlands and Warwickshire, is about one hour train ride from London, and 15 minutes from Birmingham International Airport.
The applicants are expected to have a strong background in discrete mathematics, algorithms, computational complexity, automata, logic, formal languages, verification, or related topics with undergraduate and/or master’s degrees in computer science, mathematics, or related disciplines. The position(s) will be fully funded, and the successful applicant(s) will be receiving a stipend at rate in line with current Research Councils UK rates.
If you are interested in this opening, please send an email with subject line `Application for PhD position’ to either Sayan Bhattacharya <[email protected]> or Dmitry Chistikov <[email protected]> with a SINGLE .pdf file containing: (i) your CV, (ii) contact email address, and (iii) the names and email addresses of two references. The deadline for receiving the applications is 11 November 2025.
You are strongly encouraged to informally contact faculty members in the group you might want to work with prior to submitting your application. Only those candidates whose applications are endorsed by a faculty member in the group will be interviewed informally during the week of 17 November 2025. The following subset of faculty members of the group are looking for PhD students this year.
* Dmitry Chistikov
* Artur Czumaj
* Charilaos Efthymiou
* Matthias Englert
* Christian Ikenmeyer
* Marcin Jurdzinski
* Ranko Lazic
Relevant links:
Theory and Foundations research group
Department of Computer Science at Warwick
List of all faculty members in the group
—————————————————————
PhD positions are available at the Theory and Foundations group in the Department of Computer Science, University of Warwick, UK. The group works on various aspects of theoretical computer science including:
* algorithmic game theory
* approximation algorithms
* automata and formal languages
* combinatorics and graph algorithms
* computational complexity
* logic and games
* online and dynamic algorithms
* parallel algorithms and distributed computing
* parameterized complexity and structural graph theory
* random structures and randomized algorithms
* sublinear and streaming algorithms
* theoretical foundations of machine learning
The group has strong ties with the Centre for Discrete Mathematics and its Applications (DIMAP), established in 2007 jointly with Warwick Mathematics Institute and Warwick Business School. Together with DIMAP, the group is one of the leading theory groups in Europe, with regular publications in top international conferences and journals in theoretical computer science.
The Department of Computer Science at Warwick offers an excellent research environment. It was ranked 4th in the latest UK research assessment in Research Excellence Framework (REF) in 2021.
The university campus is located on the border of two counties, West Midlands and Warwickshire, is about one hour train ride from London, and 15 minutes from Birmingham International Airport.
The applicants are expected to have a strong background in discrete mathematics, algorithms, computational complexity, automata, logic, formal languages, verification, or related topics with undergraduate and/or master’s degrees in computer science, mathematics, or related disciplines. The position(s) will be fully funded, and the successful applicant(s) will be receiving a stipend at rate in line with current Research Councils UK rates.
If you are interested in this opening, please send an email with subject line `Application for PhD position’ to either Sayan Bhattacharya <[email protected]> or Dmitry Chistikov <[email protected]> with a SINGLE .pdf file containing: (i) your CV, (ii) contact email address, and (iii) the names and email addresses of two references. The deadline for receiving the applications is 11 November 2025.
You are strongly encouraged to informally contact faculty members in the group you might want to work with prior to submitting your application. Only those candidates whose applications are endorsed by a faculty member in the group will be interviewed informally during the week of 17 November 2025. The following subset of faculty members of the group are looking for PhD students this year.
* Dmitry Chistikov
* Artur Czumaj
* Charilaos Efthymiou
* Matthias Englert
* Christian Ikenmeyer
* Marcin Jurdzinski
* Ranko Lazic
Relevant links:
Theory and Foundations research group
Department of Computer Science at Warwick
List of all faculty members in the group
warwick.ac.uk
Theory and Foundations
Division of Theory and Foundations (FoCS: Foundations of Computer Science research group)
Forwarded from a pessimistic researcher (Kc)
اینم بگم که Dmitry دانشجوی قدیم استاد من بوده و هر از چندگاهی هنوز میاد MPI و باهاش کار میکنیم. فوقالعاده آدم نایس و گلیه و امان از هوش و قدرت انتقال مطلبش :) خلاصه که برای دکتری بسیار بسیار پیشنهاد میشه
Forwarded from محتوای آزاد سهراب (Sohrab)
«افراط و خودبرتربینی مانع پیشرفته»
توسعه دهنده ارشد کیدیای نیت گراهام، یک پستی توی بلاگ شخصی خودش گذاشته:
https://pointieststick.com/2025/10/04/a-mac-like-experience-on-linux/
که اگر بخاطر Liquid Glass دارید مهاجرت میکنید باید چیکار کنید.
اولین میزکاری که پیشنهاد کرده گنوم بوده، و این برای من قابل اهمیته که چرا این مدل افراط درمورد میزکار فقط توی جوامع ایرانی وجود داره؟ :))
الان شاید بگید مگه خودت طرفدار افراطی کیدیای نیستی؟ من از گنوم هم استفاده میکنم روی موبایل شخصی خودم، و صرفاً وقتی یکی میاد افراطی نظر میده منم یکمی اذیتش میکنم:))
ولی جدای از اینها، امیدوارم این رفتارها رو کمتر ببینیم.
@SohrabContents
توسعه دهنده ارشد کیدیای نیت گراهام، یک پستی توی بلاگ شخصی خودش گذاشته:
https://pointieststick.com/2025/10/04/a-mac-like-experience-on-linux/
که اگر بخاطر Liquid Glass دارید مهاجرت میکنید باید چیکار کنید.
اولین میزکاری که پیشنهاد کرده گنوم بوده، و این برای من قابل اهمیته که چرا این مدل افراط درمورد میزکار فقط توی جوامع ایرانی وجود داره؟ :))
الان شاید بگید مگه خودت طرفدار افراطی کیدیای نیستی؟ من از گنوم هم استفاده میکنم روی موبایل شخصی خودم، و صرفاً وقتی یکی میاد افراطی نظر میده منم یکمی اذیتش میکنم:))
ولی جدای از اینها، امیدوارم این رفتارها رو کمتر ببینیم.
@SohrabContents
Adventures in Linux and KDE
A Mac-like experience on Linux
In 2016, after being a Mac guy for 23 years, I took the plunge and made a full-time switch to Linux. I did my research, and over and over again encountered the idea that GNOME was good for MacOS re…
Forwarded from IRCF | اینترنت آزاد برای همه
جمهوری اسلامی ایران آماده ابلاغ و اجرای قانونی شده که برای استفادهکنندگان از اینترنت #استارلینک، مجازات اعدام وضع کرده است.
اهمیت این مصوبه در آن است که برای اولینبار در جهان استفاده از فناوریهای اینترنت ماهوارهای با مجازات مرگ روبهرو شده و این رکورد به نام جمهوری اسلامی ثبت شده است.
© iranwire
🔍 ircf.space
@ircfspace
اهمیت این مصوبه در آن است که برای اولینبار در جهان استفاده از فناوریهای اینترنت ماهوارهای با مجازات مرگ روبهرو شده و این رکورد به نام جمهوری اسلامی ثبت شده است.
© iranwire
🔍 ircf.space
@ircfspace
😁1
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 لاراول ایده برنامه دارد که فیلدهای جدیدی برای رابط کاربری مدل لاراول در PHPStorm اضافه کند.
مانند فیلد جدید Index و Filament resource
#لاراول
@TheRaymondDev
مانند فیلد جدید Index و Filament resource
#لاراول
@TheRaymondDev