Gopher Academy
3.8K subscribers
923 photos
40 videos
280 files
2.08K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
Fibratus: Windows Kernel Exploration and Observability Tool

🟢 خلاصه مقاله:
فایبراتوس یک ابزار کاوش و Observability برای کرنل Windows است که اکنون بر «تشخیص، محافظت و شکار ترفندهای مهاجم» تمرکز دارد. این ابزار رویدادهای سیستمی مانند file I/O و درخواست‌های شبکه را جمع‌آوری می‌کند و با اسکن حافظه، تصویری دقیق از رفتار برنامه‌ها ارائه می‌دهد. چنین دیدی به تیم‌های امنیتی کمک می‌کند الگوهای مشکوک را شناسایی کنند، هشدارهای مهم را اولویت بدهند و در شکار تهدیدها و رسیدگی به رخدادها سریع‌تر عمل کنند. فایبراتوس همچنین برای توسعه‌دهندگان و تیم‌های IT که به درک عمیق‌تر از رفتار برنامه‌ها روی Windows نیاز دارند مفید است و از طریق مخزن GitHub در دسترس است.

#Fibratus #Windows #Kernel #Observability #ThreatHunting #Security #MemoryScanning

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


👑 @gopher_academy
1
Forwarded from AI Labdon
کلاد سونت ۴.۵ اومد با عنوان بهترین مدل کدنویسی در جهان.
رکوردهاش هم توی بنچمارک‌ها جالبه، بیشتر جاها عملکرد بالاتر از Opus 4.1.
اکستنشن Claude for Chrome هم برای کسایی که توی لیست انتظار بودن در دسترس قرار گرفت.
یه ویژگی ساخت فایل هم به چت‌بات اضافه شده و میتونه براتون اسلاید و داک بسازه.
واکنش‌ها خوب بوده و میگن بیشترین جهش عملکرد رو از زمان معرفی Sonnet 3.6 داشته.

این مدل میتونه بیشتر از ۳۰ ساعت به صورت خودکار روی پروژه‌های چند مرحله‌ای کار کنه. برای Opus 4 عددش ۷ ساعت هست، این نیاز نظارت رو کم میکنه و رسما بیش از ۱ روز میتونه خودکار فعالیت خودش‌رو ادامه بده.

<Soroush Ahmadi/>
👍3🔥211
Forwarded from Software Engineer Labdon
چرا از جاوا و پایتون برای نرم افزارهای سیستم های هوافضا نمیشه استفاده کرد؟
1-قطعیت (Determinism):
در زبان هایی مثل جاوا و پایتون به خاطر وجود garbage collection و مبتنی بر JVM بودن اجرای برنامه دقیقا قابل پیش بینی نیست. ممکنه برنامه یه لحظه به خاطر garbage collector متوقف بشه یا pause کنه. تو نرم افزارهای real time همچین چیزی قابل قبول نیست.
به عبارت دیگه یه حلقه توی جاوا یه بار ممکنه یک میلی ثانیه طول بکشه اما دفعه بعد 5 میلی ثانیه طول بکشه دلیل این امر اینه که JIT و gc معلوم نیست کی عمل می کنن و حافظه رو پس می گیرن. پایتون هم به همین دلیل که gc داره عملکردش این شکلیه.
2-زمانبندی سخت گیرانه(Hard real-time constraints): نرم افزارهای هوافضا باید مشخص، کوتاه و قطعی واکنش نشان دهند اما جاوا و پایتون همچین تضمینی نمی دهند.
3-ایمنی و استانداردها :
صنعت هوافضا از استانداردهایی مثل DO-178C پیروی می‌کند. Ada و C ابزارها و کتابخانه‌های تأییدشده‌ای برای این استاندارد دارند اما برای جاوا و پایتون چنین پشتیبانی و تأیید رسمی بسیار محدود یا تقریباً وجود ندارد.
4-کارایی (Performance & Footprint):
پایتون کنده چون مفسریه جاوا هم به خاطر JVM و مدیریت حافظه سربار زیادی داره که خب توی سیستم های هوافضا که سرعت مهمه و منابع سخت افزاری محدودی داریم نمیشه یه برنامه کند و برنامه ای که کلی منابع میخواد رو اجرا کنیم.
در نهایت باید بگم که زبان هایی که باهاشون نرم افزارهای سیستم های هوافضا، نظامی و حساس رو میسازن Ada-Spark ada - C  و جدیدا Rust هستند.

<Mohsen Shojaei Yeganeh/>

👇👇👇👇👇👇👇
@software_Labdon
👍4🍾1
🔵 عنوان مقاله
Go Allocations Explorer Extension for VSCode

🟢 خلاصه مقاله:
این افزونه با نام Go Allocations Explorer Extension برای VS Code به برنامه‌نویسان Go کمک می‌کند تا محل و میزان تخصیص حافظه را بر پایه بنچمارک‌های موجودشان مستقیماً داخل ویرایشگر ببینند. با اجرای go test -bench و استفاده از -benchmem، نتایج تخصیص‌ها جمع‌آوری و به فهرستی قابل پیمایش تبدیل می‌شود تا بتوانید به‌سرعت هات‌اسپات‌ها را یافته و از همان ورودی‌ها به کد مربوطه بپرید. امکان اجرا و تکرار بنچمارک‌ها، مشاهده و مقایسه سریع نتایج، و مرتب‌سازی/فیلتر کردن بر اساس پکیج، تست یا تابع فراهم است. راه‌اندازی ساده است، فقط نیاز به ابزار Go دارد و روی macOS، Linux و Windows کار می‌کند. خروجی‌ها در خود VS Code به شکل قابل فهم ارائه می‌شوند تا کاهش تخصیص‌ها، کم شدن فشار GC و بهبود تأخیر به‌صورت مستمر و در جریان کدنویسی انجام شود.

#Go #VSCode #Golang #Performance #Benchmarking #MemoryAllocations #Profiling #DeveloperTools

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


👑 @gopher_academy
2👍1
می‌خوام یک وب سایت خیلی خوب برای گولنگ بهتون معرفی کنم، https://awesome-go.com/
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید

<Abolfazl Alizadeh/>
33
🔵 عنوان مقاله
Building Conway’s Game of Life with raylib-go

🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیاده‌سازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز می‌کند، شبکه‌ای دوبعدی از سلول‌ها می‌سازد و هر فریم سلول‌های زنده و مرده را به‌صورت مستطیل‌های رنگی رسم می‌کند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کم‌جمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا می‌شوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعامل‌ها شامل توقف/ادامه، گام‌به‌گام، تنظیم سرعت، پاک‌سازی یا تصادفی‌سازی صفحه و تغییر وضعیت سلول‌ها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه به‌روزرسانی مستقل از نرخ رندر زمان‌بندی می‌شود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux به‌خوبی اجرا می‌شود. کد نهایی ارائه شده و برای توسعه ایده‌هایی مانند کتابخانه الگوها، کنترل‌های بهتر زوم/پن، گرادیان‌رنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.

#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming

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


👑 @gopher_academy
1
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث می‌شه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفل‌گذاری درست کار نکنه.

چرا مشکل ساز است؟

وقتی یک mutex رو کپی می‌کنی، حالت داخلی اش (locked/unlocked) کپی نمی‌شه به درستی و هر کدوم مستقل عمل می‌کنن. این یعنی race condition و عدم هماهنگی بین goroutine ها.


1. همیشه از pointer receiver استفاده کن وقتی mutex داری:
func (c *Counter) method()


2. هرگز mutex رو به صورت value پاس نده:
func badFunc(mu sync.Mutex)


3. ا Go vet ابزار خوبیه که این مشکل رو پیدا می‌کنه:
  
   go vet ./...
  


4. اگه struct رو embed می‌کنی**، حواست باشه که اون رو کپی نکنی

5. **انواع Mutex ها همه این مشکل رو دارن
:
sync.Mutex,
sync.RWMutex,
sync.WaitGroup
,
sync.Cond


این یکی از رایج‌ترین اشتباهات تو Go هست، خصوصا برای کسایی که تازه شروع کردن!
2👍1
Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث می‌شه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفل‌گذاری درست کار نکنه. چرا مشکل ساز است؟ وقتی یک mutex رو کپی می‌کنی، حالت داخلی اش (locked/unlocked) کپی…
💙نمونه استفاده درست👇

package main

import (
"fmt"
"sync"
"time"
)

type Counter struct {
mu sync.Mutex
value int
}

func (c *Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}

func goodFunction(c *Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}

func main() {
counter := &Counter{}

var wg sync.WaitGroup

for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
counter.Increment()
}()
}

wg.Add(1)
go func() {
defer wg.Done()
goodFunction(counter)
}()

wg.Wait()
fmt.Printf("Final value: %d\n", counter.value)
}

type SafeMap struct {
mu sync.RWMutex
data map[string]int
}

func NewSafeMap() *SafeMap {
return &SafeMap{
data: make(map[string]int),
}
}

func (sm *SafeMap) Set(key string, value int) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.data[key] = value
}

func (sm *SafeMap) Get(key string) (int, bool) {
sm.mu.RLock()
defer sm.mu.RUnlock()
val, ok := sm.data[key]
return val, ok
}
🏆1
Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث می‌شه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفل‌گذاری درست کار نکنه. چرا مشکل ساز است؟ وقتی یک mutex رو کپی می‌کنی، حالت داخلی اش (locked/unlocked) کپی…
❤️نمونه اشتباه
package main

import (
"fmt"
"sync"
"time"
)

type Counter struct {
mu sync.Mutex
value int
}

func (c Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func badFunction(c Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}

func main() {
counter := Counter{}

for i := 0; i < 5; i++ {
go counter.Increment()
}

go badFunction(counter)

time.Sleep(time.Second)
fmt.Printf("Final value: %d\n", counter.value)
}
1
Forwarded from VIP
🚀 به دنیای توسعه و تکنولوژی خوش اومدی!

اگر به موضوعات زیر علاقه‌مندی:

🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصت‌های شغلی ریموت (خارجی و داخلی)

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

📌 از این لینک همه چنل‌هامونو یه‌جا ببین و جوین شو:

👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
3
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀

با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙

https://t.iss.one/boost/gopher_academy
1