Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
خیلی وقته که براتون لینک تخفیف دوره یودمی نذاشتم.
دوره پرامپت نویسی chat gpt با قیمت ۲۰ یورو.
با لینک زیر رایگان برای شما

https://www.udemy.com/course/chatgpt-101-42/?couponCode=4FD47E6896B03DA2C89E

@DevTwitter | <Farhad Fallah/>
چون این رو خیلی‌ها فرستادید.

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

Github
Forwarded from Geek Alerts
کارمندهای دولت توی آمریکا یه سری کارت اعتباری دارن که با اون لوازم و تجهیزات میخرن یا هزینه‌های سفرشون رو حساب میکنن. بعد ترامپ و ایلان ماسک اومدن ۲۴ هزار تا از این کارت‌هارو غیر فعال کردن، میگن کارمندهای دولت از این کارت‌ها دارن پول الکی خرج میکنن.

البته ایده به وجود اومدن کارت‌های اعتباری سر این بود که فرایند خرید تجهیزات و نیازهای دولت کلی طول میکشید و خودش ۱.۲ میلیارد دلار هزینه ایجاد میکرد، به همین خاطر کارت‌های اعتباری رو دادن به دولتی‌ها تا اول برن خرید کنن بعد مستنداتش رو ثبت کنن.

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

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

🔗 wired
🤓 @geekalerts
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Go Casts 🚀
استراترژی های cache eviction متنوع هستند و ما معمولا از ساده ترین و دم دست ترین گزینه که eviction by ttl هست استفاده می کنیم. اما شیوه های مختلفی از eviction وجود داره که میتونه کاربردی باشه. مثلا فرض کنید یه فروشگاه دارید که اطلاعات هر محصول رو کش می کنید با ttl مشخص، احتمالا لود این محصولات یکسان نیست و ممکنه محصولی باشه که خیلی دیده میشه و یک محصولی هست که خیلی دیر به دیر دیده میشه، تو این شرایط بهتره سیاست هوشمندانه تری برای eviction داشته باشیم.


1. Least Recently Used (LRU):
- Evicts the least recently accessed items first.
- Assumes that items accessed recently are more likely to be accessed again soon.
- Implemented using a linked list and a hash map for efficient access and updates.

2. First In, First Out (FIFO):
- Evicts the oldest items in the cache first, regardless of how often or recently they were accessed.
- Implemented using a queue.

3. Least Frequently Used (LFU):
- Evicts the least frequently accessed items first.
- Assumes that items accessed frequently are more likely to be accessed again.
- Can be implemented using a min-heap and a hash map.

4. Most Recently Used (MRU):
- Evicts the most recently accessed items first.
- Useful in scenarios where older items are more likely to be accessed again.
- Implemented using a linked list and a hash map.

5. Random Replacement (RR):
- Evicts a random item from the cache.
- Simple to implement but may not be as efficient in terms of cache performance.

6. Least Recently Used with Time-to-Live (LRU-TTL):
- Combines LRU with a time-to-live (TTL) value for each item.
- Evicts items that have expired (TTL has elapsed) first, then falls back to LRU.

7. Segmented LRU (SLRU):
- Divides the cache into two segments: a probationary segment and a protected segment.
- New items enter the probationary segment and are promoted to the protected segment upon subsequent accesses.
- Evicts items from the probationary segment first.

8. 2Q (Two Queues):
- Uses two queues: one for items accessed once (A1 queue) and one for items accessed multiple times (Am queue).
- Evicts items from the A1 queue first, promoting items to the Am queue upon subsequent accesses.

9. Clock (Second Chance):
- Uses a circular buffer (clock) and a reference bit for each item.
- Evicts items with a reference bit of 0, giving items with a reference bit of 1 a "second chance" by resetting their bit.

10. Adaptive Replacement Cache (ARC):
- Combines LRU and LFU to adaptively balance between recency and frequency.
- Maintains two lists: one for recently accessed items and one for frequently accessed items.
- Adjusts the size of these lists dynamically based on access patterns.

11. Greedy-Dual Size (GDS):
- Evicts items based on a cost-to-size ratio, considering both the cost of fetching the item and its size.
- Useful for caches where items have varying sizes and fetch costs.

12. Time-Aware Least Recently Used (TLRU):
- Extends LRU by considering the time of access and the duration since the last access.
- Evicts items that have not been accessed for the longest time.

13. Write-Once:
- Specifically for write caches, evicts items that have been written once and not read.
- Useful in scenarios where write operations are more frequent than read operations.

14. Not Recently Used (NRU):
- Evicts items that have not been used recently, based on a simple heuristic.
- Often implemented using a single reference bit per item.

15. Low Inter-reference Recency Set (LIRS):
- Focuses on the inter-reference recency, which is the time between consecutive accesses to the same item.
- Evicts items with low inter-reference recency.

این مقاله هم خوبه که مطالعه بشه
https://newsletter.systemdesigncodex.com/p/cache-eviction-strategies



@gocasts

Ai for Software
@aicasts_ir
Forwarded from Agora (Alireza Azadi)
کمپانی Pebble بین ۲۰۱۲ تا ۲۰۱۶ ساعت هوشمند میساخته و همون دوره هم گوگل اون ها رو خریده. حالا آقای Eric Migicovsky، بنیان‌گذار شرکت، بعد این که گوگل، سیستم‌عامل ساعت رو اوپن سورس کرده دوباره تصمیم گرفته ماجرا رو تحت عنوان rePebble از سر بگیره.

Pebble is an e-paper smartwatch with simple functionality, long battery life, and fun, quirky design. It first launched on Kickstarter in 2012 and sold over 2 million watches before the company's IP was sold to Fitbit in 2016.


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

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

امروز یک آپدیتی اومد از پستی که اخیراً نوشته راجع‌به سفرش به شنژن چین تو ماه فوریه و از ملاقات‌هاش با یه سری تامین‌کننده و تولید کننده حرف زده و اصلا چه در چین گذشت. یک آلبوم عکس جالب هم روی گوگل فوتوز شیر کرده از اون روز‌ها که دیدنیه.

نکته‌ی ماجرا کجاست؟
برای من دیدن این فرآیند و چالش‌ها و شنیدن ماجرا از زبون آدمی که یک کاری میکنه‌س که هیجان‌انگیزه. چه کاری؟ هر کاری! میخواد سازنده‌ی pebble باشه، میخواد Daniel Stenberg باشه سازنده‌ی curl یا میخواد یک آدم رندوم باشه که تو یه کانال تلگرامی، که از وضعیت زندگیش در هفته‌ی گذشته، خوب و شفاف مینویسه. معتقدم که خوندن تجربیات دست اول و بی‌واسطه آدم‌ها، هزاران برابر با ارزش تر از خوندن کتاب‌های این کاره. فکر میکنم این بی‌پرده بودنه، نه‌تنها اون ویژن و درک رو گسترش میده، که بار‌ها و بار‌ها انگیزه‌بخش تره. به اثر‌بخشی تزریق مستقیم مرفین به نخاع.

برای تمام این‌هاست که فکر میکنم یک کتاب خاطرات از بهترین زندگی‌نامه‌ها صد‌ها بار بهتره.
class Subject:
def __init__(self):
self._observers = [] # لیست ناظرها

def attach(self, observer):
self._observers.append(observer)

def notify(self, message):
for observer in self._observers:
observer.update(message)

class Observer:
def __init__(self, name):
self.name = name

def update(self, message):
print(f"{self.name} received: {message}")

# تست کردن
subject = Subject()
observer1 = Observer("کاربر ۱")
observer2 = Observer("کاربر ۲")

subject.attach(observer1)
subject.attach(observer2)
subject.notify("پیام جدید اومد!")

Subject لیستی از ناظرها رو نگه می‌داره و با attach می‌تونین ناظر جدید اضافه کنین.
وقتی notify صدا زده می‌شه، متد update همه‌ی ناظرها اجرا می‌شه و پیام رو دریافت می‌کنن.
این الگو باعث می‌شه ارتباط بین اشیاء پویا و منعطف باشه.

🔍 چرا Design Patterns مهم هستن؟
کد تمیزتر:
با استفاده از الگوها، کدتون ساختارمند و قابل‌فهم‌تر می‌شه.

نگهداری آسون‌تر:
چون از راه‌حل‌های استاندارد استفاده می‌کنین، بعداً تغییر دادن یا گسترش کد راحت‌تره.

ارتباط بهتر:
برنامه‌نویس‌ها با اسم الگوها می‌تونن سریع منظور همدیگه رو بفهمن.

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


جمع‌بندی
Design Patterns مثل یه جعبه‌ابزار برای برنامه‌نویس‌ها هستن. این الگوها فقط یه بخش کوچیک از دنیای بزرگ Design Patterns هستن و تو کتاب Gang of Four، ۲۳ الگوی مختلف معرفی شده که هر کدوم کاربرد خاص خودشون رو دارن.

#️⃣ #programming #software


🥷 CHANNEL | GROUP
تجربه برنامه‌نویسی با نرون‌های کمتر :)

چند روز پیش مسئله‌ای پیش آمد که باید داده‌های سایت اداره کل حقوقی قوه قضاییه کرول شود. اما چون این سایت که با فریمورک ASP MVC پیاده‌سازی شده و برای جلوگیری از CRAWL از یک توکن در صفحه به صورت hidden استفاده می‌کند، امکان کرول مستقیم API آن وجود نداشت و باید حتما صفحه ابتدا باز شده و پس از بررسی آن مقدار هش، سپس درخواست‌های API ارسال شود. این چالش فرصتی فراهم کرد که مدل جدید Claude 3.7 sonnet را به صورت thinking امتحان کنم.
ابتدا پروژه را در گیت ساختم و چند فایل خالی به عنوان ساختار اولیه ایجاد کردم. سپس برای ورودی و خروجی API با استفاده از مدل claude-3.7-sonnet-thinking در crusor مدل‌های pydantic ساختم.
توضیحات قدم به قدم اجرای پروژه را در این مقاله به همراه پرامپت‌ها نوشتم.

https://virgool.io/@code/claude-37-sonnet-irwyrfawspao

@DevTwitter | <Mohammadreza Shaghouzi/>
Forwarded from Geek Alerts
نسخه جدید اپ Gemini توی IOS یه سری ویجت توی لاک اسکرین هم نمایش میده، داخل این ویجت میشه کارهایی مثل تایپ پرامپت، مکالمه یا دستیار صوتی و اشتراک‌گذاری تصویر و فایل رو داشت. در واقع دسترسی به Gemini بسیار سریع‌تر و ساده تر هست.

🔗 testingcatalog
🤓 @geekalerts
Please open Telegram to view this post
VIEW IN TELEGRAM
خب خب خب Design Patterns 🏗

امروز می‌خوایم درباره‌ی Design Patterns یا الگوهای طراحی تو برنامه‌نویسی صحبت کنیم. این موضوع خیلی مهمه و توی دنیای نرم‌افزار به شما کمک می‌کنه که کدهاتون رو بهتر، تمیزتر و قابل‌نگهداری‌تر بنویسین. توی این پست تعریف می‌کنیم که این الگوها چی هستن، چه انواعی دارن و ...

🧠 ‏Design Patterns چیه؟

Design Patterns یا الگوهای طراحی، راه‌حل‌های استاندارد و امتحان‌شده‌ای هستن برای مشکلات رایجی که تو طراحی نرم‌افزار بهشون برمی‌خوریم. این الگوها مثل یه نقشه‌ی راهن که به شما نشون می‌دن چطور یه مسئله‌ی خاص رو به بهترین شکل ممکن حل کنین. این مفهوم اولین بار تو کتاب معروف Gang of Four یا GoF
معرفی شد. این کتاب سال ۱۹۹۴ منتشر شد و هنوزم یه منبع معتبر و مرجع به حساب میاد.

این الگوها از یک زبون‌ خاص مستقل هستن، یعنی می‌تونین تو هر زبانی مثل پایتون، جاوا یا سی++ ازشون استفاده کنین. ما اینجا با پایتون مثال می‌زنیم تا ساده و قابل‌فهم باشه.

📚 انواع Design Patterns
طبق دسته‌بندی Gang of Four، الگوهای طراحی به سه دسته‌ی اصلی تقسیم می‌شن:

1⃣Creational Patterns (الگوهای ساختاری):
این الگوها با نحوه‌ی ساختن اشیاء (Objects) سر و کار دارن و به شما کمک می‌کنن که اشیاء رو به روش‌های انعطاف‌پذیر و بهینه بسازین.

2⃣Structural Patterns (الگوهای ساختاری):
این الگوها درباره‌ی سازمان‌دهی و ارتباط بین کلاس‌ها و اشیاء هستن تا ساختار کِدتون منظم‌تر بشه.

3⃣Behavioral Patterns (الگوهای رفتاری):
این الگوها روی تعاملات و مسئولیت‌های بین اشیاء تمرکز دارن و باعث می‌شن ارتباط بین بخش‌های مختلف برنامه‌تون بهتر بشه.

حالا بریم سراغ یه مثال پایتونی از هر دسته تا دقیق ببینین چطور کار می‌کنن.

1️⃣ ‏Creational Pattern: Singleton (تک‌تون)

الگوی Singleton مطمئن می‌شه که از یه کلاس فقط یه نمونه (Instance) ساخته بشه و همه‌جای برنامه به همون یه نمونه دسترسی داشته باشن.

مثال:
فرض کنین می‌خواین یه سیستم لاگ داشته باشین که فقط یه شیء ازش وجود داشته باشه:
class SingletonLogger:
# متغیر استاتیک برای ذخیره‌ی نمونه
_instance = None

# بازنویسی متد __new__ برای کنترل ساخت نمونه
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance

def log(self, message):
print(f"Log: {message}")

# تست کردن
logger1 = SingletonLogger()
logger2 = SingletonLogger()

# چک می‌کنیم که آیا هر دو متغیر به یه شیء اشاره می‌کنن
print(logger1 is logger2) # خروجی: True
logger1.log("سلام دنیا") # خروجی: Log: سلام دنیا
logger2.log("تست دوم") # خروجی: Log: تست دوم

توی متد new چک می‌کنیم که آیا _instance قبلاً ساخته شده یا نه. اگه نشده باشه، یه نمونه جدید می‌سازیم.

چون logger1 و logger2 به یه شیء اشاره می‌کنن، هر تغییری که با یکی بدین، روی اون یکی هم اعمال می‌شه.

خروجی True نشون می‌ده که فقط یه نمونه از SingletonLogger وجود داره.


2️⃣Structural Pattern: Adapter (آداپتور)
الگوی Adapter مثل یه پل عمل می‌کنه که دو کلاس با رابط‌های (Interface) متفاوت رو به هم وصل می‌کنه.

مثال:
فرض کنین یه کلاس قدیمی به اسم OldPrinter دارین که متد print_text داره، ولی سیستم جدیدتون از متد print پشتیبانی می‌کنه:
# کلاس قدیمی
class OldPrinter:
def print_text(self, text):
print(f"Old Printer: {text}")

# آداپتور
class PrinterAdapter:
def __init__(self, old_printer):
self.old_printer = old_printer

def print(self, text):
self.old_printer.print_text(text)

# تست کردن
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)

adapter.print("سلام از سیستم جدید") # خروجی: Old Printer: سلام از سیستم جدید

کلاس OldPrinter یه متد قدیمی داره به اسم print_text.
کلاس PrinterAdapter یه نمونه از OldPrinter رو می‌گیره و متد print رو به print_text وصل می‌کنه.
حالا سیستم جدیدتون می‌تونه با adapter.print() کار کنه، بدون اینکه OldPrinter رو تغییر بدین.

3️⃣Behavioral Pattern: Observer (ناظر)
الگوی Observer یه رابطه‌ی یک‌به‌چند بین اشیاء تعریف می‌کنه. یه شیء اصلی (Subject) وقتی وضعیتش تغییر می‌کنه، به‌طور خودکار به همه‌ی ناظرها (Observers) خبر میده

مثال:
فرض کنین یه سیستم اعلان دارین که وقتی پیام جدید میاد، همه‌ی کاربرها باخبر بشن:

ادامه, پست بعد
🔥 مشاهده و دنبال کردن Log با lnav
مطالعه فایل لاگ بهترین راه برای پیدا کردن مشکل یک سیستم است
🗓 ابزار های زیادی tail/grep/less به صورت standard Unix utilities و
حتی بهینه شده مثل btail یا Toolong که قبلا معرفی کرده بودم هستند ولی فقط پردازش میکنند فایل لاگ را نمیفهمند

☀️ ابزار LNAV -- The Logfile Navigator با قابلیت :
💠تشخیص فرمت فایل
💠ترکیب کردن فایل
💠دنبال کردن، تغییر نام ، ساخت index ازerrors و warnings فایل
💠و خروجی کار با Json
قابلیت بیشتر اینجا
⚙️ برای نصب
 brew install lnav

البته میتوانید آنلاین هم تست کنید یا با نام کاربردی "tutorial 1" آموزش ببینید
$ ssh [email protected]
$ ssh [email protected]

👨🏻‍💻روش استفاده
$ lnav /path/to/file1 /path/to/dir ...
$ journalctl | lnav
$ journalctl -f | lnav

بخش journalctl -o json | lnav برای من کار نکرد کرش میکنه شما تست کنید شاید مشکل از سیستم تست منه

مستندات
❤️ ممنون از حمایت هاتون 💐🌺

#linux #devops #security
This media is not supported in your browser
VIEW IN TELEGRAM
یک کورس جدید بازهم از HuggingFace و این یکی راجع به reasoning و reinforcement learning هست. این مفاهیم را کامل توضیح میده و اینکه چطور مدل DeepSeek R1 کار میکنه به همراه روش آموزش این مدل. واقعا این کورس ارزشش را داره.
Link: https://huggingface.co/learn/nlp-course/en/chapter12/1

@DevTwitter | <Mehdi Allahyari/>
Forwarded from Agora (Alireza Azadi)
Forwarded from Python Hints
ابزار تقلب توی مصاحبه :

Interview Coder AI tool

این ابزار کاملاً open source هم هست، حالا چرا اینجا گذاشتم ؟
نه برای اینکه تقلب کنید (چون درجا گیر میوفتید اگر طرف کار بلد باشه)
برای این هست که فوق‌العاده میشه ازش برای آمادگی مصاحبه فنی استفاده کرد؛ اینکه چی بگید رو هم براتون می‌ذاره.

بخصوص بدرد مرحله اول و دوم مصاحبه که کد زدن و الگوریتم و ... داره می‌خوره
Forwarded from LinNews (Benyamin)
موتور بازی‌سازی Godot 4.4 با بهبودهای بسیاری منتشر شد.

تغییرات نسخه 4.4 عبارتند از:
- فیزیک Jolt با موتور ادغام شده‌ است(تا قبل از این بروزرسانی به‌عنوان یک “افزونه‌” در دسترس بود).

- ویرایش بلادرنگ (Realtime) درون بازی و بهبودهای دیگر برای ویرایشگر Godot.

- پشتیبانی از Ubershader به منظور کاهش لکنت (stuttering)، فیزیک سه‌بعدی و AgX Tone Mapping.

- اکنون، بازی به‌عنوان یک فرایند مجزا از ویرایشگر اجرا می‌شود. درنتیجه در صورت وقوع هرگونه خرابی، اطلاعات از بین نمی‌روند.

- اکنون گودو برای لینوکس، امکان پشتیبانی از دوربین دستگاه‌ها را فراهم می‌کند (بعلاوه تکمیل پشتیبانی قبلی MacOS و IOS).

- ایمپورت سریعتر با استفاده از کمپرسور تکسچر Betsy.

- پشتیبانی‌ از .NET 8.0 برای .NET Scripting.

- پشتیبانی رسمی از زبان برنامه‌نویسی Swift.

- افزودن Recovery Mode.

- بهینه‌سازی‌های متعدد برای بهبود عملکرد و اصلاحات دیگر.
اطلاعات بیشتر در GodotEngine.org

منبع خبر
مرورگر کروم داره روی یه چیزی به اسم «توابع CSS» کار میکنه که یه جورایی منطق وارد CSS میشه، یعنی الان CSS ها بیشتر برای توصیف ظاهر هستن، نه برای محاسبه و تصمیم‌گیری. با این توابع ولی میشه شرط‌بذاری، محاسبه کنی و قوانین خاص اجرا کنی.
مثلا الان وقتی کلی CSS نوشته شده، اگه بخوایم یه سری ویژگی‌هارو تغییر بدیم مثلا رنگ‌ها مجبوریم تمام CSS هارو ویرایش کنیم ولی توی توابع میتونی یه جا تعریفش کنی و جاهای دیگه صداش کنی. خروجی میشه CSS فوق‌العاده کمتر و سرعت بیشتر توی نوشتن و ویرایش کدهای CSS.
از طرفی با نسخه‌ی پیشرفته‌تری از سایت‌ها روبرو میشیم که به مراتب داینامیک‌تر عمل میکنن.
بعد میتونید مجموعه‌ای از توابع رو بسازی (یه جورایی یه کتاب‌خونه ساختی) و توی پروژه‌های بعدیت ازشون استفاده کنی.
فعلا این ویژگی تو نسخه‌ی آزمایشی Chrome Canary اضافه شده
میشه پیش‌بینی کرد همین امسال به کروم اصلی هم اضافه بشه، از اونجایی که بیشتر سهم بازار مرورگرها در اختیار کروم هست و مابقی هم مرورگرهای کروم بیس هستن میشه انتظار داشت از سال آینده توابع CSS به شکل گسترده‌ استفاده بشه.

@DevTwitter | <Geek Alerts/>
Forwarded from Linuxor ?
برخلاف تصورتون توی SQL معنی عدد داخل پرانتز INT(10) شبیه به VARCHAR(10) نیست که حداکثر اندازه رو مشخص کنه؛ عدد داخل پرانتر برای INT یکم متفاوته در واقع داره طول نمایش رو توی حالت ZEROFILL نشون می‌ده و INT همیشه 32 بیته.


@Linuxor