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

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
🔔قطعی شد🔔

🐍یادگیری عمیق با پایتون

🔥DEEP LEARNING by PYTHON

16 ساعت؛ 2.5 میلیون تومان
🗓جمعه ها از 28 دی
🎙توضیحات مدرس دوره 👉کلیک
🎥وبینار رایگان👉کلیک
✍️لینک ثبت نام👉کلیک

📌مشاوره و ثبت نام:
🙍‍♂️@ParsPajouhaanCEE
📞021-88322992(105)

🌐 وبسایت 📱 کانال تلگرام 📱 اینستاگرام
وقتی تو مرورگر google.com رو تایپ میکنی چه اتفاقی میوفته

@DevTwitter
Forwarded from Gopher Academy
🤝Mohammad AbdorrahmaniMohammad Abdorrahmani


اگه شما هم با Golang کد می‌زنید، خبر خوب اینه که ورژن 1.24 قراره تو فوریه 2025 منتشر بشه و کلی بهبود خفن آورده که کارمون رو هم سریع‌تر می‌کنه، هم راحت‌تر.


هایلایت‌های این نسخه:
1️⃣ سوئیچ به SwissTable تو کامپایلر:
گولنگ با این تغییر، مدیریت مپ‌ها رو خیلی بهینه‌تر کرده! رم کمتر مصرف می‌شه و عملیات خوندن/نوشتن سریع‌تر شده.


2️⃣ آپدیت استاندارد لایبرری:
دو پکیج جدید داریم:
os.Root برای راحت‌تر کردن کارهای مربوط به دایرکتوری‌ها.
weak برای هندل کردن weak pointers که خیلی وقتا به درد می‌خوره.


یه قابلیت جدید برای alias کردن sliceها که به خصوص با افزایش استفاده از جنریک‌ها خیلی کاربردیه.


3️⃣ بهبود ابزارها (Tooling):
یه قابلیت خفن به اسم متا-پترن اضافه شده که نصب ابزارهایی مثل mockgen رو راحت‌تر از همیشه می‌کنه.


خروجی JSON برای go test: تحلیل تست‌ها دیگه یه لذت شده!
GOAUTH: حالا می‌تونید راحت‌تر به ریپوزیتوری‌های پرایوت مثل GitHub وصل بشید.


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه 1.24 زبان برنامه‌نویسی Go (Golang)، ویژگی جدیدی به نام SwissTable به عنوان بخشی از بهبودهای مربوط به map (نوع داده‌ای دیکشنری یا associative array در Go) معرفی شد. این ویژگی بهینه‌سازی‌هایی در عملکرد و کارایی map ارائه می‌دهد. در زیر به بررسی این ویژگی و مزایای آن می‌پردازیم:

---

### ۱. SwissTable چیست؟
- SwissTable یک ساختار داده‌ای جدید برای پیاده‌سازی map در Go است که از الگوریتم‌ها و تکنیک‌های بهینه‌شده برای بهبود عملکرد استفاده می‌کند.
- این ساختار داده‌ای بر اساس جدول هش (hash table) کار می‌کند، اما با بهینه‌سازی‌هایی که باعث افزایش سرعت و کاهش مصرف حافظه می‌شود.

---

### ۲. مزایای SwissTable:
- سرعت بیشتر: SwissTable با استفاده از تکنیک‌های بهینه‌سازی مانند SIMD (Single Instruction, Multiple Data) و cache-friendly data structures**، سرعت عملیات‌های درج، حذف و جستجو در `map` را افزایش می‌دهد.
- **مصرف حافظه کمتر
: این ساختار داده‌ای از حافظه بهینه‌تری استفاده می‌کند و باعث کاهش مصرف حافظه در مقایسه با پیاده‌سازی‌های قدیمی‌تر map می‌شود.
- مقیاس‌پذیری بهتر: SwissTable برای کار با مجموعه‌های داده‌ای بزرگ و کوچک به‌طور همزمان بهینه‌سازی شده است.

---

### ۳. تغییرات در Go 1.24:
- در Go 1.24، تیم توسعه‌دهندگان Go تصمیم گرفتند از SwissTable به عنوان پیاده‌سازی پیش‌فرض برای map استفاده کنند.
- این تغییر به‌طور خودکار برای همه کاربران Go اعمال می‌شود و نیازی به تغییر کد یا تنظیمات خاصی ندارد.

---

### ۴. تأثیر SwissTable بر برنامه‌های Go:
- برنامه‌های موجود: برنامه‌هایی که از map استفاده می‌کنند، به‌طور خودکار از مزایای SwissTable بهره‌مند می‌شوند. این بهبودها شامل افزایش سرعت و کاهش مصرف حافظه است.
- برنامه‌های جدید: توسعه‌دهندگان می‌توانند از map با اطمینان بیشتری استفاده کنند، زیرا عملکرد آن به‌طور قابل توجهی بهبود یافته است.

---

### ۵. مقایسه با پیاده‌سازی قدیمی `map`:
- پیاده‌سازی قدیمی: در نسخه‌های قبلی Go، map با استفاده از یک ساختار داده‌ای مبتنی بر hash table پیاده‌سازی می‌شد که عملکرد خوبی داشت، اما برای برخی موارد خاص (مانند مجموعه‌های داده‌ای بزرگ) بهینه‌سازی نشده بود.
- SwissTable: این ساختار داده‌ای جدید با استفاده از تکنیک‌های پیشرفته‌تر، عملکرد map را در همه موارد بهبود می‌بخشد.

---

### ۶. مثال استفاده از `map` در Go:
در Go، map به صورت زیر استفاده می‌شود:

package main

import "fmt"

func main() {
// ایجاد یک map
m := make(map[string]int)

// درج داده در map
m["apple"] = 5
m["banana"] = 3

// خواندن داده از map
fmt.Println("تعداد سیب‌ها:", m["apple"])

// حذف داده از map
delete(m, "banana")

// بررسی وجود کلید در map
if value, exists := m["banana"]; exists {
fmt.Println("تعداد موزها:", value)
} else {
fmt.Println("موز وجود ندارد.")
}
}


با استفاده از SwissTable، این عملیات‌ها (درج، حذف، و جستجو) سریع‌تر و با مصرف حافظه کم‌تری انجام می‌شوند.

---

### ۷. نتیجه‌گیری:
- SwissTable یک بهبود بزرگ در پیاده‌سازی map در Go است که در نسخه 1.24 معرفی شد.
- این ویژگی باعث افزایش سرعت، کاهش مصرف حافظه، و بهبود مقیاس‌پذیری map می‌شود.
- توسعه‌دهندگان Go می‌توانند بدون نیاز به تغییر کد، از مزایای این بهبودها بهره‌مند شوند.

اگر از Go استفاده می‌کنید، به‌روزرسانی به نسخه 1.24 یا بالاتر را در نظر بگیرید تا از این بهبودهای عملکردی بهره‌مند شوید.


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
بررسی دو مفهوم stateful و stateless توی طراحی سیستم ها بخصوص توی وب و api ها

این روش ها هرکدوم مزایا و معایب خودشونو دارن که من چند تاشو میگم

1- دارای حالت (stateful) : توی یک سیستم دارای حالت ، سرور میاد و اطلاعاتی که مربوط به وضعیت کاربر میشن رو ذخیره میکنه داخل session ؛ برای مثال وقتی وارد یک سایت فروشگاهی میشیم اطلاعاتی مثله (سبد خرید ، احراز هویت و ...) به دست سرور توی session ما ذخیره میشن.

از مزایای این روش اینه که مناسبه برای سیستم هایی که نیاز به پیگیری وضعیت کاربر دارن مثل (بازی ها ، چت ها ، سبد خرید و ....)

معایبش هم اینه که باید منابع بیشتری مصرف کنید و مقیاس پذیری سخت تری داره


2- بی حالت (stateless) : توی این مدل سیستم ها هیچ اطلاعاتی از درخواست های قبلی کاربر ذخیره نمیشن توی session. و هر درخواست مستقل از درخواست قبلی ارسال میشه و همه ی اطلاعات مورد نیاز باید توی همون درخواست دریافت بشه.


مزایای این روش سرعت بیشتری که داره هست چون نیاز ندارید به session دسترسی داشته باشید و مقیاس پذیری بالایی داره

معایب هم می تونیم به مدیریت پیچیده ای که ممکنه برای حفظ وضعیت کاربر ها ایجاد بشه اشاره کنیم و همینطور به ارسال اطلاعات تکراری و اضافی در هر درخواست اشاره کنیم.

@DevTwitter | <Ali/>
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، به‌روزرسانی‌هایی در استاندارد لایبرری (Standard Library) انجام شده است که شامل اضافه شدن پکیج‌های جدید و بهبود پکیج‌های موجود می‌شود. در اینجا به دو پکیج جدید که اشاره کردید، یعنی `os.Root` و `weak`**، می‌پردازیم:

---

### ۱. **پکیج `os.Root`
:
این پکیج جدید برای ساده‌سازی کارهای مربوط به مدیریت دایرکتوری‌ها و مسیرهای فایل‌سیستمی معرفی شده است.

#### ویژگی‌های کلیدی:
- دسترسی آسان به دایرکتوری‌های ریشه: این پکیج توابعی را فراهم می‌کند که دسترسی به دایرکتوری‌های ریشه (مانند / در لینوکس یا C:\ در ویندوز) را ساده‌تر می‌کند.
- مدیریت مسیرها: توابعی برای کار با مسیرهای نسبی و مطلق، تغییر دایرکتوری جاری، و بررسی وجود فایل یا دایرکتوری ارائه می‌دهد.
- سازگاری با سیستم‌عامل‌های مختلف: این پکیج به‌طور خودکار با تفاوت‌های بین سیستم‌عامل‌ها (مانند لینوکس، ویندوز، و macOS) سازگار است.

#### مثال استفاده:
package main

import (
"fmt"
"os"
)

func main() {
// دریافت دایرکتوری ریشه
root := os.Root()
fmt.Println("دایرکتوری ریشه:", root)

// تغییر دایرکتوری جاری به دایرکتوری ریشه
err := os.Chdir(root)
if err != nil {
fmt.Println("خطا در تغییر دایرکتوری:", err)
return
}

// لیست فایل‌ها و دایرکتوری‌ها در دایرکتوری ریشه
files, err := os.ReadDir(".")
if err != nil {
fmt.Println("خطا در خواندن دایرکتوری:", err)
return
}

for _, file := range files {
fmt.Println(file.Name())
}
}


---

### ۲. پکیج `weak`:
این پکیج جدید برای مدیریت weak pointers (اشاره‌گرهای ضعیف) معرفی شده است. weak pointers به توسعه‌دهندگان اجازه می‌دهند تا به یک شیء اشاره کنند بدون اینکه مانع از جمع‌آوری آن توسط Garbage Collector (GC) شوند.

#### ویژگی‌های کلیدی:
- مدیریت حافظه هوشمند: weak pointers به توسعه‌دهندگان کمک می‌کنند تا از memory leaks جلوگیری کنند، زیرا این اشاره‌گرها مانع از جمع‌آوری شیء توسط GC نمی‌شوند.
- استفاده در ساختارهای داده پیچیده: این پکیج برای مواردی مانند کش‌ها (caches)**، **لیست‌های وابسته**، و سایر ساختارهای داده‌ای که نیاز به مدیریت حافظه دقیق دارند، مفید است.
- **سازگاری با Garbage Collector
: weak pointers به‌طور کامل با GC Go سازگار هستند و هیچ تأثیر منفی بر عملکرد آن ندارند.

#### مثال استفاده:
package main

import (
"fmt"
"runtime"
"weak"
)

func main() {
// ایجاد یک شیء
obj := "این یک شیء است"

// ایجاد یک weak pointer به شیء
wp := weak.New(&obj)

// بررسی وجود شیء
if val, ok := wp.Get(); ok {
fmt.Println("شیء وجود دارد:", *val)
} else {
fmt.Println("شیء جمع‌آوری شده است.")
}

// حذف اشاره‌گر به شیء
obj = ""
runtime.GC() // اجرای Garbage Collector

// بررسی دوباره وجود شیء
if val, ok := wp.Get(); ok {
fmt.Println("شیء هنوز وجود دارد:", *val)
} else {
fmt.Println("شیء جمع‌آوری شده است.")
}
}


---

### ۳. مزایای این پکیج‌ها:
- `os.Root`:
- ساده‌سازی کار با دایرکتوری‌ها و مسیرها.
- کاهش نیاز به کدنویسی دستی برای مدیریت مسیرها.
- سازگاری با سیستم‌عامل‌های مختلف.

- `weak`:
- جلوگیری از memory leaks با استفاده از weak pointers.
- مدیریت هوشمند حافظه در ساختارهای داده پیچیده.
- بهبود عملکرد برنامه‌هایی که نیاز به مدیریت دقیق حافظه دارند.

---

### ۴. نتیجه‌گیری:
- `os.Root` و `weak` دو پکیج جدید و مفید در استاندارد لایبرری Go هستند که به توسعه‌دهندگان کمک می‌کنند تا کدهای بهینه‌تر و قابل‌حفظ‌تری بنویسند.
- اگر از Go استفاده می‌کنید، به‌روزرسانی به نسخه‌های جدید را در نظر بگیرید تا از این بهبودها و قابلیت‌های جدید بهره‌مند شوید.

این پکیج‌ها به‌طور خاص برای برنامه‌هایی که نیاز به مدیریت حافظه دقیق یا کار با فایل‌سیستم دارند، بسیار مفید هستند.


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، قابلیت جدیدی برای alias کردن sliceها معرفی شده است که به توسعه‌دهندگان اجازه می‌دهد تا به راحتی از sliceها با نام‌های جدید استفاده کنند. این قابلیت به خصوص با افزایش استفاده از جنریک‌ها (Generics) در Go بسیار مفید است، زیرا باعث بهبود خوانایی و کاهش تکرار کد می‌شود.

---

### ۱. alias کردن sliceها چیست؟
- alias کردن به معنی تعریف یک نام جدید برای یک نوع داده موجود است. این کار به توسعه‌دهندگان اجازه می‌دهد تا از نام‌های کوتاه‌تر یا توصیفی‌تر برای انواع داده‌ای پیچیده استفاده کنند.
- در Go، این قابلیت به‌طور خاص برای sliceها بسیار مفید است، زیرا sliceها یکی از پرکاربردترین انواع داده‌ای در Go هستند.

---

### ۲. چرا alias کردن sliceها مهم است؟
- بهبود خوانایی کد: با استفاده از aliasها، می‌توانید از نام‌های توصیفی‌تر برای sliceها استفاده کنید که باعث خوانایی بیشتر کد می‌شود.
- کاهش تکرار کد: اگر از sliceها با انواع داده‌ای پیچیده استفاده می‌کنید، alias کردن باعث کاهش تکرار کد و ساده‌تر شدن آن می‌شود.
- سازگاری با جنریک‌ها: با معرفی جنریک‌ها در Go، alias کردن sliceها به توسعه‌دهندگان اجازه می‌دهد تا از جنریک‌ها به‌طور موثرتری استفاده کنند.

---

### ۳. نحوه alias کردن sliceها:
در Go، می‌توانید از کلمه کلیدی `type` برای تعریف alias استفاده کنید. در اینجا چند مثال آورده شده است:

#### مثال ۱: alias کردن یک slice ساده
package main

import "fmt"

// تعریف یک alias برای slice از اعداد صحیح
type IntSlice = []int

func main() {
var numbers IntSlice = []int{1, 2, 3, 4, 5}
fmt.Println(numbers) // خروجی: [1 2 3 4 5]
}


#### مثال ۲: alias کردن یک slice با جنریک‌ها
package main

import "fmt"

// تعریف یک alias برای slice از هر نوع داده‌ای با استفاده از جنریک‌ها
type GenericSlice[T any] = []T

func main() {
var numbers GenericSlice[int] = []int{1, 2, 3, 4, 5}
fmt.Println(numbers) // خروجی: [1 2 3 4 5]

var names GenericSlice[string] = []string{"Alice", "Bob", "Charlie"}
fmt.Println(names) // خروجی: [Alice Bob Charlie]
}


#### مثال ۳: alias کردن sliceهای پیچیده
package main

import "fmt"

// تعریف یک alias برای slice از sliceهای اعداد صحیح
type IntSliceSlice = [][]int

func main() {
var matrix IntSliceSlice = [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
fmt.Println(matrix) // خروجی: [[1 2 3] [4 5 6] [7 8 9]]
}


---

### ۴. مزایای alias کردن sliceها:
- خوانایی بهتر: با استفاده از aliasها، می‌توانید از نام‌های توصیفی‌تر برای sliceها استفاده کنید که باعث خوانایی بیشتر کد می‌شود.
- کاهش تکرار کد: اگر از sliceها با انواع داده‌ای پیچیده استفاده می‌کنید، alias کردن باعث کاهش تکرار کد و ساده‌تر شدن آن می‌شود.
- سازگاری با جنریک‌ها: alias کردن sliceها به توسعه‌دهندگان اجازه می‌دهد تا از جنریک‌ها به‌طور موثرتری استفاده کنند.

---

### ۵. نتیجه‌گیری:
- alias کردن sliceها یک قابلیت جدید و مفید در Go است که به توسعه‌دهندگان اجازه می‌دهد تا کدهای خوانا‌تر و قابل‌حفظ‌تری بنویسند.
- این قابلیت به خصوص با افزایش استفاده از جنریک‌ها در Go بسیار مفید است، زیرا باعث بهبود خوانایی و کاهش تکرار کد می‌شود.

اگر از Go استفاده می‌کنید، به‌روزرسانی به نسخه‌های جدید را در نظر بگیرید تا از این بهبودها و قابلیت‌های جدید بهره‌مند شوید.


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، بهبودهای قابل توجهی در ابزارها (Tooling) انجام شده است. یکی از این بهبودها، معرفی قابلیت جدیدی به نام متا-پترن (Meta-Pattern) است که نصب و استفاده از ابزارهای جانبی مانند `mockgen` را بسیار ساده‌تر و کارآمدتر می‌کند. در اینجا به بررسی این قابلیت و مزایای آن می‌پردازیم:

---

### ۱. متا-پترن (Meta-Pattern) چیست؟
- متا-پترن یک قابلیت جدید در ابزارهای Go است که به توسعه‌دهندگان اجازه می‌دهد تا ابزارهای جانبی (مانند `mockgen`، `protoc`، و غیره) را به‌طور خودکار نصب و مدیریت کنند.
- این قابلیت با استفاده از فایل‌های پیکربندی (مانند `go.work` یا go.mod) کار می‌کند و نیاز به نصب دستی ابزارها را کاهش می‌دهد.

---

### ۲. مزایای متا-پترن:
- ساده‌سازی نصب ابزارها: با استفاده از متا-پترن، می‌توانید ابزارهای مورد نیاز پروژه خود را به‌طور خودکار نصب کنید.
- مدیریت وابستگی‌ها: این قابلیت به شما کمک می‌کند تا وابستگی‌های ابزارها را به‌طور موثرتری مدیریت کنید.
- یکپارچه‌سازی با ابزارهای موجود: متا-پترن با ابزارهای موجود Go (مانند go generate و go mod) به‌طور کامل یکپارچه شده است.

---

### ۳. نحوه استفاده از متا-پترن:
برای استفاده از متا-پترن، می‌توانید از فایل‌های پیکربندی مانند go.work یا go.mod استفاده کنید. در اینجا یک مثال آورده شده است:

#### مثال ۱: استفاده از متا-پترن در go.mod
module example.com/myproject

go 1.20

require (
github.com/golang/mock v1.6.0
)

// تعریف ابزارهای مورد نیاز
toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
}


#### مثال ۲: استفاده از متا-پترن در go.work
go 1.20

use (
.
./submodule
)

// تعریف ابزارهای مورد نیاز
toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
protoc = "google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.0"
}


---

### ۴. نصب خودکار ابزارها:
با استفاده از متا-پترن، می‌توانید ابزارهای مورد نیاز خود را به‌طور خودکار نصب کنید. برای این کار، کافی است دستور زیر را اجرا کنید:

go install toolchain


این دستور به‌طور خودکار ابزارهای تعریف شده در go.mod یا go.work را نصب می‌کند.

---

### ۵. استفاده از ابزارها:
پس از نصب ابزارها، می‌توانید از آن‌ها در پروژه خود استفاده کنید. به عنوان مثال، برای استفاده از `mockgen`، کافی است دستور زیر را اجرا کنید:

go generate ./...


این دستور به‌طور خودکار فایل‌های mock را برای پروژه شما ایجاد می‌کند.

---

### ۶. مثال کامل:
در اینجا یک مثال کامل از استفاده از متا-پترن برای نصب و استفاده از `mockgen` آورده شده است:

#### فایل go.mod:
module example.com/myproject

go 1.20

require (
github.com/golang/mock v1.6.0
)

toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
}


#### فایل main.go:
package main

import (
"example.com/myproject/mocks"
"testing"
)

func TestSomething(t *testing.T) {
mock := mocks.NewMockMyInterface(t)
mock.On("MyMethod").Return(nil)

// تست خود را اینجا بنویسید
}


#### اجرای دستورات:
# نصب ابزارها
go install toolchain

# ایجاد فایل‌های mock
go generate ./...

# اجرای تست‌ها
go test ./...


---

### ۷. نتیجه‌گیری:
- متا-پترن یک قابلیت جدید و مفید در ابزارهای Go است که نصب و مدیریت ابزارهای جانبی را بسیار ساده‌تر می‌کند.
- این قابلیت به خصوص برای ابزارهایی مانند `mockgen`، `protoc`، و سایر ابزارهای تولید کد بسیار مفید است.
- اگر از Go استفاده می‌کنید، به‌روزرسانی به نسخه‌های جدید را در نظر بگیرید تا از این بهبودها و قابلیت‌های جدید بهره‌مند شوید.

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

https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، بهبودهای قابل توجهی در ابزارها و قابلیت‌های مرتبط با تست‌ها و احراز هویت (authentication) انجام شده است. در اینجا به دو بهبود مهم اشاره می‌کنیم:

---

### ۱. خروجی JSON برای `go test`:
یکی از بهبودهای مهم در ابزار تست Go، پشتیبانی از خروجی JSON برای نتایج تست‌ها است. این قابلیت تحلیل و گزارش‌گیری از تست‌ها را بسیار ساده‌تر و لذت‌بخش‌تر می‌کند.

#### ویژگی‌های کلیدی:
- خروجی ساختارمند: نتایج تست‌ها به صورت JSON ارائه می‌شوند که باعث می‌شود تحلیل و پردازش آن‌ها به‌طور خودکار ساده‌تر شود.
- سازگاری با ابزارهای گزارش‌گیری: خروجی JSON با ابزارهای گزارش‌گیری و تحلیل تست (مانند CI/CD pipelines) به‌طور کامل سازگار است.
- جزئیات بیشتر: خروجی JSON شامل اطلاعات دقیق‌تری مانند زمان اجرای هر تست، وضعیت (pass/fail)، و پیام‌های خطا است.

#### نحوه استفاده:
برای دریافت خروجی JSON از go test`، می‌توانید از فلگ -json` استفاده کنید:

go test -json ./...


#### مثال خروجی JSON:
{
"Time": "2023-10-01T12:34:56Z",
"Action": "run",
"Package": "example.com/myproject",
"Test": "TestSomething",
"Output": "=== RUN TestSomething\n"
}
{
"Time": "2023-10-01T12:34:57Z",
"Action": "pass",
"Package": "example.com/myproject",
"Test": "TestSomething",
"Elapsed": 0.12
}


#### مزایا:
- تحلیل خودکار: می‌توانید از ابزارهای تحلیل JSON (مانند jq) برای پردازش نتایج تست‌ها استفاده کنید.
- یکپارچه‌سازی با CI/CD: خروجی JSON به راحتی با سیستم‌های CI/CD (مانند GitHub Actions, GitLab CI, Jenkins) یکپارچه می‌شود.
- گزارش‌گیری پیشرفته: می‌توانید گزارش‌های دقیق‌تری از تست‌ها ایجاد کنید و آن‌ها را در داشبوردهای مختلف نمایش دهید.

---

### ۲. GOAUTH: احراز هویت آسان‌تر برای ریپوزیتوری‌های خصوصی:
قابلیت جدید GOAUTH به توسعه‌دهندگان اجازه می‌دهد تا به راحتی به ریپوزیتوری‌های خصوصی (مانند GitHub Private Repositories) متصل شوند. این قابلیت فرآیند احراز هویت را ساده‌تر و امن‌تر می‌کند.

#### ویژگی‌های کلیدی:
- پشتیبانی از چندین ارائه‌دهنده: GOAUTH از ارائه‌دهندگان مختلفی مانند GitHub, GitLab, Bitbucket و غیره پشتیبانی می‌کند.
- مدیریت توکن‌ها: می‌توانید توکن‌های دسترسی (access tokens) را به‌طور امن مدیریت کنید.
- سازگاری با `go get` و `go mod`: GOAUTH به‌طور کامل با ابزارهای مدیریت وابستگی Go (مانند go get و go mod) یکپارچه شده است.

#### نحوه استفاده:
برای استفاده از GOAUTH، کافی است توکن دسترسی خود را در فایل پیکربندی Go قرار دهید. به عنوان مثال:

# تنظیم توکن دسترسی برای GitHub
export GOPRIVATE=github.com/myorg/*
export GOAUTH_TOKEN=ghp_your_github_token_here


#### مثال استفاده با go get:
go get github.com/myorg/private-repo


#### مزایا:
- امنیت بهتر: توکن‌های دسترسی به‌طور امن مدیریت می‌شوند و نیازی به ذخیره آن‌ها در کد نیست.
- ساده‌سازی فرآیند: دیگر نیازی به تنظیمات دستی برای احراز هویت نیست.
- پشتیبانی از چندین ارائه‌دهنده: می‌توانید از GOAUTH برای اتصال به ریپوزیتوری‌های خصوصی در GitHub, GitLab, Bitbucket و غیره استفاده کنید.

---

### ۳. نتیجه‌گیری:
- خروجی JSON برای `go test` تحلیل و گزارش‌گیری از تست‌ها را بسیار ساده‌تر و لذت‌بخش‌تر می‌کند.
- GOAUTH فرآیند احراز هویت برای ریپوزیتوری‌های خصوصی را ساده‌تر و امن‌تر می‌کند.

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


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from LinAcademy (Pakrohk)
روز مرد رو به تمام پسرای و مردای LinAcademy و نرم افزار آزاد دوست تبریک میگم ❤️ از طرف ادمین های لین آکادمی با عشق.

@LinAcademy
#پست_موقف
توی کانال همیشه سعی میکنم اطلاعات دقیق و تست شده منتشر کنم
🚨در مورد پست اخر اطلاعاتی به دست من رسید که نشون میده
⚠️اطلاعات دقیق نبوده و ممکنه است اشتباه باشه

💠علت شک به صحت اطلاعات :
داشتن درایور ویندوزی و حافظه در این سیستم ها روی خود تبدیل ها چیز غیر معمولی نیست
این که سورس این درایور ها منتشر نشود هم غیر معمول نیست
رفتار های نرم افزار دلیلی بر بدافزار بودن نیست این که یک نرم افزار بی کیفیت و بد بنویسی نمیشه گفت بد افزار
وجود false positives در اسکنر ها عادی است دلیل نمیشه
اعتبار منبع اصلی به دلایل فنی زیر سوال رفت

✳️ تا برسی های بیشتر پست آرشیو و از دسترس عمومی خارج شد
Forwarded from Linuxor ?
پهنای باند (Bandwidth) یعنی چه حجمی از داده "می‌تونه" رد شه، ولی گذردهی (Throughput) یعنی واقعاً "چقدر" رد می‌شه. مثل اینه که یه لوله بزرگ آب داشته باشی (پهنای باند)، اما به خاطر فشار کم یا نشتی، فقط یه بخشی از آب برسه (گذردهی).


@Linuxor
Forwarded from 🎄 یک برنامه نویس تنبل (The Lazy 🌱 Raymond)
روز مرد مبارک 🥂🎉❤️

@TheRaymondDev
Forwarded from Python Hints
می‌خوام راجب این صحبت کنم (از پروفایل خودم).

من پیغمبر مخالفت با اهمیت تعداد کامیت بودم و هستم؛ حداقل ۳-۴ ساله دارم این حرف رو میزنم و دلیلش رو هم گفتم (اینکه چندتا گیت‌هاب خودم به اینو اون دادم و ...)

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

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

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

۲- اینا همش ادا بازیه و ...

حماقت محض
هست این حرف؛ اگر به اینجا رسیدی که این حرف رو زدی (شما تا حالا کسی رو دیدی عکس این کاشی‌کاری رو توی رزومه‌اش بذاره ؟)
هیچ شرکت و یا شخص با سوادی رو نمی‌شناسم که حتی ۱ درصد این موزاییک براش مهم باشه (مگر بچه‌هایی که روش نقاشی می‌کشند. اونم کل کل برنامه نویسی هست البته)

و چیزهای از این دست.
در نهایت اینکه؛ من خودم بیشتر کامیت‌های گیت‌هابم برای کارهای شخصی (اسکریپت؛ ایده؛ داکیومنت؛ کانفیگ و حتی تمرین هست)

از این 2176 تا کامیت شاید 700-800 تاش برای شرکت‌هایی هست که روی گیت‌هاب هستند؛ باقیش کارهای خودمه؛ و حتی اگر یک روز تا ۱۰ شب هم سرکار باشم هرطور شده باید تا آخر شب ۲-۳ تا مطلب کتابی که خوندم رو برای خودم تمرین کنم (این بدترین حالت هست).

ولی خیلی وقتا تیکه کدی زده شده توی شرکت که بنظرم راه خوبی نبوده و باگ میخوره؛ روی گیت‌هاب خودم یک سناریو مشابه براش درست می‌کنم و سعی می‌کنم اون مشکل رو حل کنم یا پروفایلینگ براش بگیرم و اپتیمایز کنم چون من خالق همه پروژه‌های شرکت‌ها نیستم و خیلی وقتا بیزینس بهم اجازه نمیده روش رو تغییر بدم.

خلاصه که وظیفه ما :
هشدار دادن راجب افراد سودجو بود؛ که نیروی HR به این کاشی کاری گیت‌هاب اهمیتی نده برای دعوت به مصاحبه.
اما این موج تخریب افراد تازه‌کار و با انگیزه بالا هم کاری بس کثیف‌تر هست که مطمئنم از جامعه توسعه دهنده شروع نشده.
مثال از خودم زدم برای حمایت از تمام دولوپرهای تازه‌کار و با انگیزه دمتون
گرم ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Syntax | سینتکس (Daimon)
می‌خوام راجب این صحبت کنم (از پروفایل خودم).

من پیغمبر مخالفت با اهمیت تعداد کامیت بودم و هستم؛ حداقل ۳-۴ ساله دارم این حرف رو میزنم و دلیلش رو هم گفتم (اینکه چندتا گیت‌هاب خودم به اینو اون دادم و ...)

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

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

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

۲- اینا همش ادا بازیه و ...

حماقت محض
هست این حرف؛ اگر به اینجا رسیدی که این حرف رو زدی (شما تا حالا کسی رو دیدی عکس این کاشی‌کاری رو توی رزومه‌اش بذاره ؟)
هیچ شرکت و یا شخص با سوادی رو نمی‌شناسم که حتی ۱ درصد این موزاییک براش مهم باشه (مگر بچه‌هایی که روش نقاشی می‌کشند. اونم کل کل برنامه نویسی هست البته)

و چیزهای از این دست.
در نهایت اینکه؛ من خودم بیشتر کامیت‌های گیت‌هابم برای کارهای شخصی (اسکریپت؛ ایده؛ داکیومنت؛ کانفیگ و حتی تمرین هست)

از این 2176 تا کامیت شاید 700-800 تاش برای شرکت‌هایی هست که روی گیت‌هاب هستند؛ باقیش کارهای خودمه؛ و حتی اگر یک روز تا ۱۰ شب هم سرکار باشم هرطور شده باید تا آخر شب ۲-۳ تا مطلب کتابی که خوندم رو برای خودم تمرین کنم (این بدترین حالت هست).

ولی خیلی وقتا تیکه کدی زده شده توی شرکت که بنظرم راه خوبی نبوده و باگ میخوره؛ روی گیت‌هاب خودم یک سناریو مشابه براش درست می‌کنم و سعی می‌کنم اون مشکل رو حل کنم یا پروفایلینگ براش بگیرم و اپتیمایز کنم چون من خالق همه پروژه‌های شرکت‌ها نیستم و خیلی وقتا بیزینس بهم اجازه نمیده روش رو تغییر بدم.

خلاصه که وظیفه ما :
هشدار دادن راجب افراد سودجو بود؛ که نیروی HR به این کاشی کاری گیت‌هاب اهمیتی نده برای دعوت به مصاحبه.
اما این موج تخریب افراد تازه‌کار و با انگیزه بالا هم کاری بس کثیف‌تر هست که مطمئنم از جامعه توسعه دهنده شروع نشده.
مثال از خودم زدم برای حمایت از تمام دولوپرهای تازه‌کار و با انگیزه دمتون
گرم ❤️
احتمالاً ساعت ۱۰:۰۰ صبح توی یوتوب یک لایو داشته باشیم و دستگاه xiaomi note 11 pro 5G (Veux) رو با کرنل داون‌استریم برای پست‌مارکت پورت کنیم‌.


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



@SohrabContents
Grokking_Relational_Database_Design-asbook.ir (3).pdf
29.6 MB
یکی از بچه ها توی گروه پرسید که چه منبعی برای Database design رو پیشنهاد میدی
منم کتاب Grokking Relational Database Design
رو پیشنهاد میدم که میتونید فایلشو رو دانلود کنید فقط یه نکته ای که هست این فایل کلا ۵ فصلشو داره از ۸ تا فصل(که همینم غیر رایگان خیلی سخت پیدا شد)
و میتونید اون سه تای دیگرو از این رپوی گیت هاب بخونید

#⃣ #book



🥷 CHANNEL | GROUP
Forwarded from Linuxor ?
گفتن Firewall نگفتن Wall پس زیادی روش حساب باز نکن.


@Linuxor
Forwarded from 🎄 یک برنامه نویس تنبل (  MΞ)
👆👆
https://territorial.io

توی بازی که معرفی کردیم یه مشکلی که بود کانکشن وبسوکتش بعضا قطع میشد و چون بصورت دیفالت reconnect نمیشه چیزی هم براش پیاده نکردن و در جای حساس یهو همه چی پر
واسه همین مجبور شدیم کار غیراخلاقی کنیم و بصورت گلوبال WebSocket رو override کردیم و قابلیت ریکانکت شدن رو بهش اضافه کردیم:

https://gist.github.com/maanimis/42dd254450a10f8f087ae8447d8c91ee

@TheRaymondDev