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
Forwarded from Meitix (Null)
حمله breach در زمینه فشرده سازی ریسپانس و gzip

https://en.m.wikipedia.org/wiki/BREACH
Forwarded from Meitix (Null)
لینوکس تنها سیستم عامل دونیا😅

واقعا چیز جالبیه علتش اینه که core
شده مثلا خیلی چیزا که توی برنامه نویسی داریم از اونجا میاد.
مثلا pipe, jail(isolation), regex،makefile و کلی چیزا و شاید پترنای دیگه

پسر cron jobs برای ۱۹۷۰ه😂

همین‌جاست که لینوکس رو از یه سیستم‌عامل ساده جدا می‌کنه و تبدیلش می‌کنه به یه مکتب فکری
Forwarded from Frontend with Erfun👨🏻‍💻 (Erfun Ghodoosi)
اگر به عنوان فرانت اند دولوپر هنوز توی پیاده سازی کردن ui ها مشکل دارید و فکر میکنید css در مواقعی خیلی براتون پیچیده میشه. حتی وقتی پیچیدگی ظاهری خاصی وجود نداره.
پیشنهاد میکنم طرز فکر box model رو تقویت کنید توی‌ خودتون.
نگاهی که همه چیز رو با باکس هایی از بزرگ به کوچیک تقسیم بندی میکنیم تا ریز ترین جزئیات رو با بهترین کیفیت پیاده سازی کنیم.

موضوعی که امروز با یکی از رفقایی که تازه با html css شروع کرده حدودا یک ساعت توی گوگل میت بررسی کردیم و خفن ترین نتیجه رو گرفتیم. حقیقتا من که خیلی کیف کردم از اینکه تونستم در این حد مسئله رو برای کسی که تازه شروع کرده ساده کنم (با حفظ تمام جزئیات در عین سادگی).😁
Forwarded from Frontend with Erfun👨🏻‍💻 (Erfun Ghodoosi)
توی این ویس خودمونی اما پر از نکته‌های ناب، برای اونایی صحبت کردم که واقعاً دارن تلاش می‌کنن و می‌خوان به جای نتیجه‌های نصفه‌نیمه، واقعاً استخدام باکیفیت و درست‌حسابی رو تجربه کنن. اگر دولوپر باانگیزه‌ای هستی که شاید تجربه زیادی نداشته باشی ولی می‌خوای شانس استخدامت رو چند برابر کنی، این ویس دقیقا برای توئه — با راه‌حل‌هایی که از دل تجربه و شناخت واقعی بازار کار اومده.

حتی اگر این ویس رو گوش میدید، تبریک میگم، شما جزو اون چند درصد دولوپری هستید که نتیجه میگیرن. چون خیلیا حتی به خودشون زحمت نمیدن این ویس رو گوش بدن و دور از انتظار هم نیست 😉
Forwarded from Ditty | دیتی
🔺اکمااسکریپت ۲۰۲۵ و متدهای جدید Set

- توی جدیدترین آپدیت اکمااسکریپت (۲۰۲۵) متدهای جدید و کاربردی به مجموعه Set اضافه شده

- توی جدیدترین پست دیتی اونها رو بررسی می‌کنیم:
ditty.ir/589

#javascript
Forwarded from Ditty | دیتی
🔺آزادسازی قانونی جاوااسکریپت

- شاید جالب باشه که بدونیم مالکیت کلمهٔ «جاوااسکریپت» در اختیار شرکت اوراکل هست. این در حالیه که این شرکت نه جاوااسکریپت رو ساخته و نه تلاشی برای توسعهٔ اون انجام داده

- به‌تازگی گروهی از افراد معروف حوزهٔ برنامه‌نویسی (از جمله خالق جاوااسکریپت، خالق نودجی‌اس، خالق npm و ۲۱هزار نفر دیگه) از طریق قانون درخواستی برای لغو مالکیت واژه «جاوااسکریپت» توسط اوراکل رو ارائه دادن

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

- اوراکل چکار کرد؟ اوراکل برای اینکه به دادگاه ثابت کنه که داره از کلمهٔ جاوااسکریپت استفادهٔ تجاری می‌کنه زیاد خودش رو به زحمت نینداخت. رفت از وبسایت رسمی نودجی‌اس یک اسکرین‌شات مرموزانه گرفت و به دادگاه ارائه داد و گفت «من دارم استفاده تجاری می‌کنم. لطفاً برند من رو تمدید کنید!»

- این کار باعث عصبانیت بیشتر رایان دال (مالک نودجی‌اس) شد. تا جایی که شکایتی رو در این مورد هم ثبت کرد (که البته شکایت برای این قسمت به جایی نرسید)

- اما موضوع آزادسازی و عامیت بخشیدن به کلمه «جاوااسکریپت» هنوز در حال بررسی هست و شرکت اوراکل تا تاریخ ۷ آگوست ۲۰۲۵ می‌بایست در این مورد اظهار نظر کنه

- این اتفاق چرا مهمه؟ توی دنیایی که کپی‌رایت اهمیت داره، استفاده کردن از نام جاوااسکریپت ممکنه تبعات قانونی برای افراد و سازمان‌ها داشته باشه و برای همین افراد و سازمان‌ها سعی می‌کنن با ریسک کمتری از این واژه استفاده کنن. مثلاً استفاده از JS Conf بجای JavaScript Conf

- صفحه رسمی با این درخواست:
https://javascript.tm


#javascript
Forwarded from Mulan (Saghar Mulan)
🔖 The Napkin Project
شخصی که این پروژه رو راه‌اندازی کرده Evan Chen که داور المپیاد جهانی ریاضیه دکتراش رو در نظریه اعداد از دانشگاه MIT گرفته. خودشم وقتی دبیرستانی بوده توی IMO مدال طلا می‌گیره. یه کتاب هم توی المپیاد در زمینه هندسه اقلیدسی نوشته. حالا این پروژه‌‌ی Napkin رو برای دانش‌‌آموزان دبیرستانی راه انداخته که یکم با ریاضیات پیشرفته‌تر در اون مقطع آشنا بشن. مثل جبر مجرد، توپولوژی، نظریه رسته‌ها. به قول خودش سعی کرده یه light approach برای این مباحث باشه. پیشنهاد می‌کنم که حتما مقدمه‌ی کتاب رو بخونید. بخشی از مقدمه:
"it is not the purpose of this book to train you to solve exercises or write proofs. I just want to show you some interesting math. I place a strong emphasis over explaining why a theorem should be true rather than writing down its proof. This is a recurrent theme of this book:
Natural explanations supersede proofs."

پ.ن: به نظرم حرکت خوبیه، دکتر ایرد هم بهمون گفته بود که یه سری کشورها در دبیرستان خیلی زودتر از دانشگاه با مفاهیم در جبر و دروس دیگه آشنا می‌شن.
Forwarded from a pessimistic researcher (Kc)
سمِ شب

در semantics زبان‌های برنامه‌نویسی finite data types ها رو مثل List و Tree و این صحبتا رو در قالب یک Initial Algebra نمایش میدن.
حالا امشب قراره شما گوش جان بسپاری به سخنان kc تا برات این سم خالص که nobody gives a fuck about رو عین قند ساده و خوشمزه توضیح بده.

بیاید اول ببینیم خود Algebra چیه. ببینید Algebra یک تاپل یا یک دوتایی هست مثل <x,y> که x یک مجموعه است و y یک عملیات روی اون مجموعه. با یک مثال اگر بخوام براتون بگم، x یک مجموعه‌ای از تمام رشته‌های متناهیه ( یعنی طول رشته محدوده مثل رشته aaa که طولش ۳ هستش وگرنه عناصر خود مجموعه نامتناهیه) که با استفاده از الفبای A ساخته میشه. یعنی خود الفبا هم یه مجموعه است. مثلا اگر الفبا باشه A={a} اون وقت مجموعه‌ی رشته‌های متناهی روی این الفبا میشه {a, aa, aaa, aaaa, ...} اصطلاحا به مجموعه x میگن carrier set. اینم به زبون ساده از من بپذیرید که مجموعه‌ی تمام رشته‌های متناهی ممکن که میشه بر اساس یک الفبا مثل A ساخت رو به شکل A* نمایش میدیم و به نوعی x رو همون A* در نظر میگیریم. حالا بیاید بر اساس مجموعه A* یه algebra تعریف کنیم. عملیات concatenation رو در نظر بگیرید که که میشه باهاش دو رشته رو بهم متصل کرد. مثلا اگر یک رشته داشته باشیم مثل aba و یک رشته داشته باشیم bcb اونوقت ادغام این دو رشته میشه ababcb.
جبرمون بر اساس A* و این اپراتور میشه :

<A*, \eta : ( 1 + ( A x A*)) -> A*>
همونطور که میبینید اپراتور eta یک تابع است که میاد یک مجموعه‌ی تک عضوه یا همون singletone مثل {*} (یه چیز dummy که صرفا بتونیم باهاش empty word رو تعریف کنیم) رو مپ میکنه به یک رشته‌ی خالی با epsilon نمایش میدنش و ما توی جبرمون این مجموعه رو با 1 نمایش دادیم.
علاوه بر این، این تابع میاد و یک دوتایی مثل <a,w> که a عضو A هستش و w عضو A* هستش رو مپ میکنه به a.w که اینم عضو A* هستش.

خب اما حالا این شد مفهوم Algebra. باید بیایم تعریف کنیم که Initial Algebra چیه و نشون بدیم که چرا finite data type ها initial algebra هستند.
وقتی میگیم که A* یک initial Algebra هستش یعنی اولا : که کوچکترین algebra در نوع خودش هست یعنی کوچکترین مجموعه‌ای هستش که نسبت به اوپراتوری که روش تعریف میکنیم بسته هست. منظور از بسته بودن یعنی حاصل انجام اون اوپراتور روی هر دو عضوی از مجموعه A* به ما میدهد یک عضوی از مجموعه A*. دوما : به ازای هر Algebra مثل B که روی همون اوپراتور تعریف شده یک homomorphism یکتا وجود داره که ساختار رو حفظ میکنه یا به عبارت دیگه :
h : A* -> B
خب حالا وقتشه که اون سوال احمقانه رو بپرسیم که homomorphism یکتا چیه؟ خب اول باید بگم که خودتو آماده کن یکم category theory یاد بگیری :)

زمانی که ما دو تا algebra داریم به شکل (A, a) و (B,b) که A همون Carrier set ما هستش و a هم همون اوپراتور یا ساختار جبر یا به قول احمقای حوزه کتگوری morphism که فرمالی تعریفش میشه :
a : F(A) -> A

یک homomorphism مثل h وجود داره که :
h : A ->B

به شرطی که :
h∘a = b∘F(h)

پس در حقیقت homomorphism یک تابع هستش که باید شرط فوق رو ارضا کنه.

خب حالا که فهمیدیم initial algebra چیه بریم و List رو توی زبان‌های برنامه‌نویسی در قالب یک Initial lagebra نمایش بدیم :

List(A) فرض کنید تایپ لیست ما اینه
اوپراتورش اینطوری تعریف میشه :
nil : 1 -> List(A) لیست تهی
cons : A x List(A) -> List (A) اضافه کردن یک المنت به لیست
که ترکیب شون میشه :
[nil,cons]:1+ (A×List(A)) ->List(A).

در نتیجه می‌تونیم بگیم که List(A) یک initial algebra هستش برای فانکتور :
F(X) = 1 +‌( A x X)
یعنی هر تابعی که با توصیف عملیات‌های nil و cons تعریف بشه رو میشه به شکل یکتا به یک homomorphism تعمیم داد.

توی functional programming شما این کار رو با foldr میکنید :)

خلاصه جونم براتون بگه که از خیر تعریف least fix-point و induction روی intial algebra هم عبور میکنیم
Forwarded from Linuxor ?
ایلان ماسک یه توییت زده و گفته گراک 4 حتی از Cursor هم توی کد زدن بهتر عمل می‌کنه و به قدری تاکید داره که توییتش رو پین کرده !

البته گراک 4 هنوز رایگان نیست ولی ممکنه بعدا رایگان بشه؛ بعضی کاربرا که تستش کردن نتیجه خوبی گرفتن و خبر از درک فوق العاده بالای گراک 4 از اجسام سه بعدی دادن این می‌تونه یه جهشی توی بازی سازی و صنعت ویدیویی باشه.

@Linuxor
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 اپل به آرامی در حال تبدیل شدن به نوکیا و بلک ‌بری جدید است.

- یعنی دارد همان اشتباهاتی را تکرار می‌کند که باعث سقوط نوکیا و بلک ‌بری شد.

@TheRaymondDev
مدیرعامل گیتهاب، Thomas Dohmke، یه ارائه داشت که با فیچرهای جدید کوپایلوت یک بازی Snake رو با vibe coding پیاده‌سازی کنه که تا آخر هر کاری کرد کدش کار نکرد و مجبور شد ارائه‌اش رو ناتموم بذاره :))

#wearedevelopers2025
@aminrbg
توی غرفهٔ Hetzner ازشون پرسیدم که چطوری کیفیت خوب و availability بالا رو با این قیمت معقول ارائه می‌دن چون از این نظر اختلاف قابل توجهی با رقیب‌هاش داره. یکی از مسئول‌هاش گفت که دلیلش اینه که تا جای ممکن سعی می‌کنن همه چی رو خودشون بسازن و کارها رو out source نکنن. از پروسهٔ طراحی و معماری دیتاسنترها تا تولید قطعات و رک‌ها. انقدر هم دیتاسنتر دارن که این هزینه‌ها براشون سرشکن می‌شه.
واسه همین هم قیمت مصرف‌کننده تا حد خوبی پایین نگه داشته شده. حتی یه سری درپوش که توی رک‌هاشون استفاده می‌شه رو بهم نشون داد که با پرینتر سه بعدی درست می‌کردن.

#wearedevelopers2025
@aminrbg
Forwarded from Linuxor ?
ترفند جدید و بسیار خلاقانه باج گیر ها؛

یه سایت با ظاهر تاییدیه کلادفلر درست می‌کنن و برای تاییدیه اضافی بهت می‌گن توی Run Dialog کامندی که خودش از قبل توی کلیپ بوردتون کپی کرده رو پیست کنید

و در نتیجه RCE یا اجرای کد از راه دور اتفاق می‌افته و مهاجم می‌تونه هر چیزی روی کامپیوترتون اجرا کنه !

@Linuxor
Forwarded from AI Labdon
🤖 همه‌چیز درباره Grok 4 – نزدیک‌ترین مدل به AGI (مدل انسانی)


🔸 قدرت پردازش: گراک ۴ با ۱۰۰ برابر قدرت بیشتر نسبت به Grok 2 آموزش دیده و نصف تاخیر (Latency) گراک ۳ رو داره.

🔸 دسترسی: احتمالاً نسخه Grok 3 به‌زودی برای دانلود عمومی در دسترس قرار می‌گیره.

📈 بنچمارک AGI:
تو بنچمارک بسیار دشوار ARC-AGI که ماه‌ها هیچ مدلی نتونسته بود حتی از مرز ۱۰٪ عبور کنه، گراک ۴ تونست در کمتر از ۱۲ ساعت به امتیاز ۱۵.۸٪ برسه؛ یک رکورد جدید!

📚 آزمون‌های علمی:
در آزمون HLE با ۲۵۰۰ سؤال در سطح دکترا:

Grok 4: امتیاز %25.4

میانگین انسان‌ها: 5%

Gemini 2.5 Pro: %امتیاز 21.6
OpenAI o3-high: %امتیاز 21

Grok 4 Heavy:
امتیاز عجیب و چشمگیر بیش از ۵۰ درصد


🧠 دیدگاه ماسک:

ایلان ماسک گفته: «دانشجوهای دکترا تو آزمون‌هایی که گراک قبول می‌شه، رد می‌شن!»


🚀 نسخه Heavy:
مدلی با اسم الهام‌گرفته از Falcon Heavy، که یک مدل مولتی‌ایجنته.
ماسک می‌گه وقتی یه سوال پیچیده ازش بپرسید، به‌جای یک جواب مستقیم، چندین ایجنت با هم مثل یه «تیم مطالعه» همکاری می‌کنن تا به بهترین پاسخ برسن.

🧾قیمت API:
پنجره زمینه: تا ۲۵۶ هزار توکن (عالی برای اسناد حجیم)

قیمت:
ورودی: ۳ دلار / یک میلیون توکن
خروجی: ۱۵ دلار / یک میلیون توکن

👇👇👇👇👇👇👇👇👇
@ai_labdon
Forwarded from Gopher Academy
🔵 عنوان مقاله
Minimock: A Tool to Generate Mocks from Interface Declarations

🟢 خلاصه مقاله:

مقاله به بررسی ابزاری پیشرفته برای برنامه‌نویسان می‌پردازد که قابلیت تولید ماک‌ها و کمک‌کننده‌های با نوع‌گذاری استاتیک و همچنین پشتیبانی از عمومی‌سازی‌ها (ژنریک‌ها) را داراست. این ابزار کاملاً با بسته آزمایشی ادغام شده و فرآیند تست نرم‌افزار را بهبود می‌بخشد، باعث افزایش کارایی و انعطاف‌پذیری در تست‌ها می‌شود.

🟣لینک مقاله:
https://golangweekly.com/link/171564/web


👑 @gopher_academy
Forwarded from Gopher Academy
🔴قابلیت slog.GroupAttrs ویژگی های جدید گولنگ نسخه 1.25

در نسخه Go 1.25**، ویژگی جدیدی به پکیج `log/slog` اضافه شده به نام slog.GroupAttrs که برای **ساخت گروه‌بندی‌شده‌ی Attributeها در لاگ‌ها استفاده می‌شود. این ویژگی باعث می‌شود لاگ‌های شما ساختاریافته‌تر، قابل‌خواندن‌تر، و بهتر برای پردازش توسط ابزارهای خارجی (مثل ELK، Loki، Datadog) باشند.

---

🧠ویزگی slog.GroupAttrs چیه؟

func GroupAttrs(key string, attrs ...Attr) Attr


این تابع یک attribute با کلید key و مقدار یک زیرگروه از attributeها می‌سازه. معادل چیزی شبیه به JSON زیر هست:

{
"user": {
"id": 123,
"email": "[email protected]"
}
}


---

مثال عملی

package main

import (
"log/slog"
"os"
)

func main() {
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))

logger.Info("user logged in",
slog.GroupAttrs("user",
slog.Int("id", 42),
slog.String("email", "[email protected]"),
),
slog.String("ip", "192.168.1.1"),
)
}


🖨 خروجی (به‌صورت متنی):

time=2025-06-15T14:00:00Z level=INFO msg="user logged in" user.id=42 [email protected] ip=192.168.1.1


📦 در حالت JSON:

{
"time": "...",
"level": "INFO",
"msg": "user logged in",
"user": {
"id": 42,
"email": "[email protected]"
},
"ip": "192.168.1.1"
}


---

🔄 مقایسه با قبل از Go 1.25

در نسخه‌های قبلی، باید از slog.Group() استفاده می‌کردی که کمی verbose بود و در هندلرهای custom گاهی نیاز به دست‌کاری دستی داشت. حالا slog.GroupAttrs دقیقاً برای این هدف به‌شکل ساده‌سازی‌شده اضافه شده.

---

## جمع‌بندی

*این slog.GroupAttrs روشی ساده و تمیز برای لاگ کردن داده‌های گروه‌بندی‌شده است.
* ساختار لاگ شما را به شکل JSON درختی درمی‌آورد (برای پردازش، ذخیره و تحلیل بهتر).
* کار کردن با ابزارهای log aggregation را بسیار ساده‌تر می‌کند.
* در پلتفرم‌هایی مثل Grafana Loki, Datadog, یا Cloud Logging ساختار لاگ‌ها خواناتر و قابل فیلتر است.
Forwarded from Gopher Academy
🔴قابلیت os.Root ویژگی های جدید گولنگ نسخه 1.25

ویژگی جدید os.Root در Go 1.25 همچنان همان نوعی است که در Go 1.24 معرفی شد، ولی در نسخه 1.25 روش‌های جدیدی برای تعامل با فایل‌ها اضافه شده تا استفاده و ایمنی آن ساده‌تر شود

🛡این os.Root چیه؟

این os.Root اجازه میده عملیات فایل را به یک دایرکتوری مشخص محدود کنید.
با این کار، حتی اگر مسیرهایی مثل ../../secret.txt استفاده شود،
دسترسی به بیرون از ریشه os.Root امکان‌پذیر نیست
— این کمک بزرگی در مقابله با حملات Path Traversal است .

برای ایجاد آن:

root, err := os.OpenRoot("data")
if err != nil {
log.Fatal(err)
}


بعداً می‌توان از root به‌جای os برای باز کردن، نوشتن یا پاک کردن فایل‌ها استفاده کرد.

---

⚙️ توسعه در Go 1.25: متدهای جدید

در نسخه 1.25، متدهایی مشابه آنچه در os وجود داشت به os.Root اضافه شده‌اند تا کار با آن کامل شود
— دیگر لازم نیست دائماً تابع‌های عمومی را صدا بزنید، بلکه:

* `root.Chmod(path, mode)`
* `root.Chown(path, uid, gid)`
* `root.Chtimes(path, atime, mtime)`
* `root.Link(oldpath, newpath)`
* `root.MkdirAll(path, perm)`
* `root.RemoveAll(path)`
* `root.Rename(old, new)`
* `root.Symlink(old, new)`, `root.Readlink(path)`
* `root.WriteFile(name, data, perm)`
* `root.ReadFile(name)`

این متدها باعث ساده‌تر و ایمن‌تر شدن استفاده از os.Root می‌شوند.

---

## 📝 مثال واقعی

package main

import (
"fmt"
"log"
"os"
"time"
)

func main() {
root, err := os.OpenRoot("data")
if err != nil {
log.Fatal(err)
}

// ایجاد دایرکتوری
if err := root.MkdirAll("nested/dir", 0750); err != nil {
log.Fatal(err)
}

// نوشتن در فایل
msg := []byte("hello Go!")
if err := root.WriteFile("nested/dir/file.txt", msg, 0644); err != nil {
log.Fatal(err)
}

// تغییر زمان دسترسی و تغییر فایل
at := time.Now()
mt := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
if err := root.Chtimes("nested/dir/file.txt", at, mt); err != nil {
log.Fatal(err)
}

// خونده و چاپ محتوا
content, err := root.ReadFile("nested/dir/file.txt")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Content: %s\n", content)

// پاک‌سازی همه چیز
if err := root.RemoveAll("nested"); err != nil {
log.Fatal(err)
}

fmt.Println("Done")
}


نکات ایمنی

* تمام این عملیات فقط در داخل دایرکتوری data اتفاق می‌افتد؛ تلاش برای دسترسی به بیرون، خطا خواهد داد.
* حمله‌هایی مثل file := "../etc/passwd" مؤثر نیستند.
* در نسخه‌های قبل از 1.24، چنین قابلیت امنیتی به‌صورت ابتدایی وجود نداشت.

---

جمع‌بندی

* این os.Root در Go 1.25 متدهای قدرتمندی برای کار با فایل‌ها اضافه کرده است تا توسعه‌دهنده بتواند در داخل یک ریشه مشخص و ایمن عملیات انجام دهد.
* با وجود این متدها، کار با فایل‌ها ساده‌تر، خواناتر و امن‌تر شده و آسیب‌پذیری‌های مربوط به دسترسی تصادفی یا ناخواسته حذف شده‌اند.
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
ویدیو شماره ۵ - استفاده از MySQL در PDNS

توی این ویدیو اومدم از دیتابیس MySQL به عنوان بک‌اند سرویس PDNS استفاده کردم

https://youtu.be/byDsOIVMnqU