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
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 شرکت ارتباطات زیرساخت:

ارتباط بین الملل برخی مسیرهای زیرساخت کشور با مشکل مواجه شده و اختلال به صورت سراسری روی بیشتر ISP های کشور اتفاق افتاده است.

#خبر

@TheRaymondDev
اگر شما هم مثل من یک عدد نوبی هستید که همیشه به ویکی نیاز دارید حتی در شرایط قطعی اینترنت بهتون پیشنهاد میکنم که پکیج arch-wiki-docs رو نصب کنید اگر آرچ دارید. البته اگر توزیع دیگه ای دارید هم میتونه براتون مفید باشه.
اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.

اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
python -m http.server 8000 --directory /usr/share/doc/arch-wiki/html


چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو

@Philolearn
اگر شما هم مثل من یک عدد نوبی هستید که همیشه به ویکی نیاز دارید حتی در شرایط قطعی اینترنت بهتون پیشنهاد میکنم که پکیج arch-wiki-docs رو نصب کنید اگر آرچ دارید. البته اگر توزیع دیگه ای دارید هم میتونه براتون مفید باشه.
اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.

اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
python -m http.server 8000 --directory /usr/share/doc/arch-wiki/html


چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو

@Philolearn
Forwarded from Gopher Academy
🔵 عنوان مقاله
Cross-Compiling 10,000+ Go CLI Packages Statically

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

مقاله به بررسی رویکرد جدید و غیرمعمول در ساخت ابزارهای خط فرمان Go به عنوان باینری‌های استاتیک با استفاده از زنجیره ابزار Zig می‌پردازد. این روش با هدف ساده‌سازی استفاده از این ابزارها برای کاربرانی که زنجیره ابزار Go را نصب نکرده‌اند، انتخاب شده‌است. استفاده از باینری‌های استاتیک باعث حذف نیاز به مدیریت وابستگی‌ها و پیکربندی‌های مرتبط با محیط Go می‌شود، و در نتیجه تجربه کاربری آسان‌تری را فراهم می‌آورد. این رویکرد نه تنها روند استقرار نرم‌افزار را ساده‌تر می‌کند بلکه دسترسی گسترده‌تری به ابزارهای CLI Go را برای تعداد بیشتری از کاربران فراهم می‌آورد.

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


👑 @gopher_academy
Forwarded from Linuxor ?
قطعی شدید مجدد اینترنت در ایران

تأیید شد: داده‌های زنده شبکه، اختلال عمده‌ای را در اتصال اینترنت در ایران نشان می‌دهد که گزارش‌های گسترده کاربران مبنی بر مشکلات مربوط به اینترنت جهانی را تأیید می‌کند؛ این حادثه تنها چند هفته پس از قطع ارتباطات مخابراتی توسط مقامات در طول جنگ با اسرائیل رخ داده است


@Linuxor
Forwarded from AI Labdon
✍️Alireza KiakojouriAlireza Kiakojouri

بنیانگذار تلگرام: ChatGPT فکر نمی‌کند، فقط حرف می‌زند!/ پروژه‌ی مخفی برادران دورف چیست؟

پاول دورف به نشریه فرانسوی «لو پوئن» گفت: «مدل‌های هوش مصنوعی مثل ChatGPT فکر نمی‌کنند. فقط مقدار زیادی متن خوانده‌اند و پاسخی می‌دهند که به نظر درست می‌آید. اما واقعاً نمی‌فهمند و ما انسان‌ها چون زبان پیچیده را نشانه هوش می‌دانیم، فریب می‌خوریم. مدل‌های زبانی فقط حرف می‌زنند. اما این به معنای فهمیدن یا فکر کردن نیست.»

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

در حالی که غول‌هایی مانند OpenAI، گوگل، متا و حتی چین و روسیه در حال رقابت برای ساخت نسل بعدی هوش مصنوعی (AGI) هستند، پروژه نیکلای دورف می‌تواند معادلات را تغییر دهد.

اگر پروژه نیکلای موفق شود، ما شاهد تولد هوش مصنوعی‌ای خواهیم بود که فقط «هوشمندانه صحبت نمی‌کند»، بلکه واقعاً می‌فهمد، فکر می‌کند و تصمیم می‌گیرد.
Forwarded from Gopher Academy
New Feature in Go 1.25 version 🤔
Forwarded from Gopher Academy
🔵 عنوان مقاله
Depot Ships Gocache v2 for 4x Faster Go Builds

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

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

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


👑 @gopher_academy
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 توی هر شغلی اگر ۱ درصد ریاضی بلد نباشید, واقعا لنگ می زنید.

نمونه شغل انبارداری یا حسابداری

من خودم ۲۳ روز کارآموز انباردار شرکت تولید لامپ LED بودم اونم چند سال پیش. وقتی جنسی که وارد انبار میشه که باید با دقت شمرده بشه و اینجوری نیست که یک جعبه جنس محتوای آن به خیال راحت بشمارید که بگی ۱۰۰ تا جنس درون جعبه هست در حالی که این جعبه کسی دیگه می شماره که میگه ۹۹ تاست در حالی که خودت ۱۰۰ تا شمردی که اینجاست که یکیش کم داره و عدد قبلی ۱۰۰ وارد سیستم حسابداری شده و کم بودن یکی از آن دچار مشکل محاسباتی آن می شود.

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

اصلا ریاضیات دست کم نگیرید.

@TheRaymondDev
Forwarded from Curious Geek ⚡️
👨‍💻مقدمه ای بر نکسوس ریپازیتوری
توی این ویدیو روی سرور ایران نکسوس نصب میکنیم با npm بهش وصل میشیم. به چالش docker registry در ایران در زمان داخلی شدن اینترنت می پردازیم و براش راهکار پیدا میکنیم.
اگه از این ویدیو خوشت اومد، حتما لایک کن و سابسکرایب یادت نره!
🔗 https://youtu.be/jOzbzyHqQAA
🆔 @Hiradsajde
Forwarded from Gopher Academy
✍️Behnam Mohammadzadeh

اگر تو زبان Go عمیق شده باشین و سعی کرده باشین با نحوه عملکرد Scheduler آشنا بشین احتمالا Asynchronous Preemption به گوشتون خورده. تو این پست میخوام توضیح بدم که این اتفاق چطور میافته و نحوه عملکردش به چه شکله.

برای شروع شاید بد نباشه که بدونیم asynchronous preemption برای چی به وجود اومد و اصلا چه مشکلی رو حل میکنه؛ به همین منظور با یه مثال پیش میرم.

زمانی که GC میخواد اجرا بشه نیاز به (STW)Stop the World داره که تو این وضعیت باید همه گوروتین ها تو یه safe point متوقف بشن؛ کال شدن فانکشن یک safe point هست که گوروتین در این نقطه میتونه متوقف بشه تا GC کارش رو بدرستی انجام بده. ولی بعضی از گوروتین ها ممکنه موقع اجرا اصلا فانکشن کال نداشته باشن که به این حالت میگن tight loop.

تو این حالت گوروتین وقتی ۱۰ میلی ثانیه اجرا شد یه ترد به اسم sysmon که همیشه بصورت مستقل اجرا میشه میاد تشخیص میده که فلان گوروتین زیادی داره اجرا میشه و باید متوقف بشه تا نوبت به بقیه هم برسه و برای اینکه اون گوروتین رو متوقف کنه یه سیگنال SIGURG میفرسته.
از اونطرف یه گوروتین به اسم gSignal که هر ترد(M) یکی مخصوص خودش رو داره و میاد این سیگنال‌ها رو دریافت و هندل می‌کنه .

وقتی gSignal میبینه سیگنال دریافتی از نوع SIGURG هست متوجه میشه که باید preemption اتفاق بیافته و میاد چک میکنه که آیا این اتفاق باید بیافته یا نه؟ (از لینک پایین هم میتونید این فانکشن رو ببینید)
https://lnkd.in/d-cad4-C

بعدش میاد چک کنه ببینه که اگه preempt کنیم مشکلی پیش میاد یا نه؟ پس این فانکشن رو کال میکنه
https://lnkd.in/d5HV8Sh9

دلیلش هم اینه که ممکنه این گوروتین در حال کال کردن بعضی از فانکشن های runtime باشه که نباید وسط اجرای اون فانکشن ها preemption اتفاق بیافته؛ و همچنین چک میکنه ببینه stack فضای کافی داره یا نه(چون مرحله بعد بهش نیاز داره).
حالا که به یه safe point رسیدیم میاد و کار خفن اصلی رو انجام میده.


همونطور که قبلا دیدیم tight loop هیچ فانکشن کالی نداره! پس چجوری باید گوروتین رو مجبور به اینکار کرد؟
جواب، پوش کردن یک function call instruction به stack frame و تغییر PC هست!


این فانکشن این کار رو انجام میده:
https://lnkd.in/dcReVmHt

این فانکشن اول میاد برای یک instruction جدید داخل stack frame جا باز میکنه و بعد رجیسترهای RSP و RIP رو دستکاری میکنه تا PC به asyncPreempt تغییر کنه و بعد از اینکه اون اجرا شد کد قبلی بطور نرمال مثل گذشته به کارش ادامه بده.

لینک پست در ویرگول:
https://vrgl.ir/CLOKC
Forwarded from Gopher Academy
اصطلاح STW یا Stop The World یکی از مفاهیم مهم در پیاده‌سازی Garbage Collector (GC) در زبان‌هایی مثل Go، Java و… هست. در ادامه با جزییات کامل بهش می‌پردازیم:

---

تعریف STW (Stop The World)

STW به وضعیتی در اجرای برنامه گفته می‌شه که اجرای تمام گوروتین‌ها (یا تردها) متوقف می‌شن تا Garbage Collector بتونه کار خودش رو انجام بده.

> به زبان ساده: GC می‌گه «همه وایسید! من باید حافظه رو مرتب کنم».

---

📦 چرا GC نیاز به STW داره؟

Garbage Collector برای اینکه بتونه حافظه‌ی بدون استفاده رو شناسایی و آزاد کنه، باید بدونه که:

* چه آبجکت‌هایی در حال حاضر در دسترس هستن (reachable)
* چه آبجکت‌هایی دیگه استفاده نمی‌شن (unreachable)

برای اینکه بتونه این بررسی رو دقیق انجام بده، باید:

* بررسی کنه که stack و heap در هر گوروتین در چه حالتی هستن
* مطمئن باشه که گوروتین‌ها در نقطه‌ای امن (safe point) قرار دارن، یعنی وسط نوشتن یا تغییر داده‌ای نیستن که باعث اشتباه در تحلیل بشه.

---

🧩 Safe Point یعنی چی؟

Safe point به جایی از اجرای کد گفته می‌شه که:

* وضعیت حافظه کاملاً قابل پیش‌بینیه
* گوروتین در حال اجرای عملیات بحرانی نیست
* GC می‌تونه بدون نگرانی از race condition، وضعیت حافظه رو بررسی و اصلاح کنه

مثلاً:

* موقع فراخوانی تابع
* موقع خروج از تابع
* قبل یا بعد از تخصیص حافظه

---

⚙️ فرآیند STW چطوری کار می‌کنه در Go؟

1. GC تصمیم می‌گیره که وقت پاک‌سازی حافظه‌ست.
2. سیگنالی به تمام گوروتین‌ها می‌ده که باید به safe point برن.
3. وقتی همه گوروتین‌ها به safe point رسیدن، برنامه وارد حالت STW می‌شه:

* هیچ کدی (حتی گوروتین‌ها) اجرا نمی‌شن
4. GC با خیال راحت تحلیل حافظه (mark and sweep یا mark and compact) انجام می‌ده.
5. بعد از اتمام کار GC، گوروتین‌ها ادامه‌ی اجرای خودشون رو از سر می‌گیرن.

---

🕐 STW در Go چقدر طول می‌کشه؟

در نسخه‌های جدید Go (مثلاً Go 1.18 به بعد):

* STW بسیار کوتاهه (در حد microsecond)
* Go از تکنیک‌های پیشرفته مثل concurrent GC استفاده می‌کنه تا اکثر مراحل GC هم‌زمان با اجرای برنامه انجام بشن
* فقط بخش‌هایی مثل شروع و پایان GC نیاز به STW دارن

---

🎯 چرا STW ممکنه مشکل‌ساز بشه؟

اگر STW طولانی بشه:

* زمان پاسخ‌دهی (latency) سیستم زیاد می‌شه
* در اپلیکیشن‌های real-time یا interactive مثل گیم یا APIهای حساس، این تاخیر ممکنه قابل‌تحمل نباشه
* در برنامه‌های بزرگ با حافظه زیاد، ممکنه pauseها محسوس بشن
Forwarded from Gopher Academy
برای دیدن نمودار و لاگ‌های واقعی اجرای GC در برنامه Go (و بررسی دقیق زمان‌های STW)، می‌تونید از ابزارهای داخلی خود Go استفاده کنید..

🔧 مرحله 1: فعال‌سازی لاگ GC در Go

برای گرفتن لاگ دقیق GC، برنامه‌ات رو با تنظیم متغیر GODEBUG اجرا کن:

GODEBUG=gctrace=1 ./your_program


یا اگه داخل کد می‌خوای فعال کنی:

import "runtime/debug"

func main() {
debug.SetGCPercent(100) // یا مقدار دلخواه
// بقیه کدها
}


---

📜 نمونه لاگ واقعی GC در Go:

مثال خروجی لاگ با GODEBUG=gctrace=1:

gc 1 @0.004s 8%: 0.48+1.5+0.015 ms clock, 1.4+0.72/1.8/0+0.045 ms cpu, 4->4->2 MB, 5 MB goal, 4 P


🧩 تحلیل این لاگ:

| gc 1 | شمارنده اجرای GC (این بار اولیه) |

| @0.004s | زمان اجرای GC (۴ میلی‌ثانیه بعد از شروع برنامه) |

| 8% | درصد زمانی که GC نسبت به زمان اجرای برنامه گرفته |

| 0.48+1.5+0.015 ms clock | ۳ فاز GC به ترتیب: STW شروع + Marking (concurrent) + STW پایان |

| 1.4+0.72/1.8/0+0.045 ms cpu | مصرف CPU در مراحل مختلف |

| 4->4->2 MB | حجم heap قبل، بعد از marking، بعد از sweep |

| 5 MB goal | هدف بعدی برای heap |

| 4 P | تعداد پردازنده‌های منطقی (GOMAXPROCS) |

---

📊 مرحله 2: گرفتن نمودار GC (با pprof)

1. اضافه کردن HTTP profiling:

import _ "net/http/pprof"
import "net/http"

go func() {
http.ListenAndServe("localhost:6060", nil)
}()


2. اجرای برنامه و گرفتن پروفایل GC:

در ترمینال جدید:

go tool pprof https://localhost:6060/debug/pprof/heap


یا برای لاگ GC دقیق‌تر:

go tool pprof -http=:8080 https://localhost:6060/debug/pprof/goroutine


سپس داخل مرورگر: https://localhost:8080
می‌تونی نمودارهای flamegraph، timeline و heap را ببینی.

---

خلاصه

| GODEBUG=gctrace=1 | لاگ دقیق از اجرای GC و زمان STW |
| runtime/pprof + net/http/pprof | ساختن پروفایل‌های گرافیکی |
| go tool pprof | بررسی گرافیکی یا CLI لاگ‌ها و ساخت flamegraph |
| debug.SetGCPercent | تنظیم حساسیت GC |
Forwarded from Curious Geek ⚡️
این آخرین پستم برای جمع‌بندی در خصوص پروژه این پروژه هستش.

در ایران دسترسی قطع کردن ارتباط داخل با خارج (اینترنت ملی) و خارج با داخل بطور مجزا وجود داره.
در زمانی که سازمان های بزرگ مورد نفوذ سایبری قرار بگیرن با این سامانه میشه موضوع رو تا حد خوبی مهار کرد.

وجود این بک‌دور در چنین شرایطی زمینه ساز این موارد میشه:
1- از زیرساخت آی‌پی هزاران کاربر در کسری از ثانیه با آیپی مهاجم یکی میشه و شناسایی رو به شدت دشوار می‌سازه.
2- با استفاده از این آسیب پذیری میشه دسترسی کامل سرور میزبان رو گرفت و حملات رو از روی سرور های داخلی هک شده انجام داد.

با این فرض که با تغییر ورژن ردیس بک‌دور بسته بشه، باز هم این پروژه با توجه به اینکه کانفیگ های تانل شده رو جدا می‌کنه و روی سرور ایران اجرا میشه، باعث مشکل اول میشه.
این موضوع دو گزینه بیش باقی نمی‌گذاره:
1- برباد دادن میلیارد ها دلار از سرمایه مردم
2- خاموشی کامل (قطع اینترنت داخلی و خارجی)

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

در این مقطع این پروژه باعث آزادی اینترنت و رفع فیلترینگ نیست، بلکه چاره ای جز قطع کامل آن نمی‌گذاره.
🆔 @Hiradsajde
Iran Iran
Mohammad Nouri
ایران ایران 🩸
محمد نوری

از قطعه اصلی لذت ببرید

وین راه بی‌نهایت...
@VinRaheBinahayat
#مطلب

The Part of PostgreSQL We Hate the Most
https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html

قسمت‌هایی از پستگرس که ازشون متنفریم! این روزا پستگرس تبدیل شده به یکی از محبوب‌ترین دیتابیس‌های رابطه‌ای و روز به روز هم داره به محبویتش اضافه میشه اما این بدین معنی نیست که پستگرس مشکلی نداره :)
داخل پستگرس یه مفهومی داریم به اسم MVCC که کمک می‌کنه تراکنش‌های مختلف به صورت همزمان داخل پایگاه داده اجرا بشن بدون اینکه روی داده‌های هم‌دیگه اثر بذارن و isolation رو نقض کنن.
این مطلب به صورت عمیق به توضیح MVCC توی دیتابیس‌ها علی‌الخصوص پستگرس می‌پردازه و مشکلات روشی که پسترگس رفته رو بیان میکنه. اینکه توی پسترگس نیاز به VACCUM دوره‌ای داریم یا مشکل Table bloatیا اینکه آپدیت کردن یک ستون از یه ردیف باعث میشه کل داده‌های ردیف کپی بشن به همین مفهوم مربوطه.

این مطلب دید خیلی خوبی به internals پستگرس میده و به کسایی که دوست دارن توی پستگرس و دیتابیس‌ها عمیق بشن توصیه میکنم

✴️ @software_inside - مهندسی‌نرم‌افزار
Forwarded from 🎄 یک برنامه نویس تنبل (  MΞ)
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 تلگرام ۱۷ میلیون گروه و کانال رو در سال ۲۰۲۵ مسدود کرد!

@TheRaymondDev