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
This media is not supported in your browser
VIEW IN TELEGRAM
من تو هر اسپرینت : لطفا به من تسک سنگین بدید، چالش میخوام و‌ حاضرم ده روز نخوابم 💪💎

همچنان من وسط اسپرینت :


#️⃣ #fun #programming

🚀 @coolycode
😁1
ویکی دوستدار یادمان‌ها یک مسابقهٔ عکاسی با موضوع یادمان‌های ثبت‌شدهٔ ملی است. اولین دورهٔ این مسابقه در سال ۲۰۱۰ در کشور هلند برگزار شد و به دنبال آن در سال ۲۰۱۱ مسابقه به بسیاری از کشورهای اروپایی گسترش یافت. از سال ۲۰۱۲ این مسابقه در سطح جهانی برگزار می‌شود. هدف از این مسابقه گردهم‌آوردن عموم خواننده‌ها، کاربران ویکی‌پدیا، عکاسان و فرهنگ‌دوستان برای گرفتن عکس از یادمان‌های فرهنگی و بارگذاری آن در ویکی‌انبار برای استفاده در ویکی‌پدیا و بالا بردن دانش و آگاهی همگان است.
امسال ایران برای هشتمین بار به جمع کشورهای شرکت‌کننده در مسابقهٔ جهانی ویکی دوستدار یادمان‌ها می‌پیوندد. شما هم اگر به عکاسی از یادمان‌های تاریخی و فرهنگی ایران علاقمندید و می‌خواهید تصویر آن‌ها را از طریق دانش‌نامهٔ ویکی‌پدیا در دسترس دیگران قرار دهید می‌توانید در این رقابت شرکت کنید. این مسابقه تا روز ۱۰ آبان ادامه خواهد داشت.

اطلاعات بیشتر را از اینجا دنبال کنید:
https://w.wiki/_s2KA
Forwarded from 
زندگی همیشه بیشتر از اونی که قبلاً فکر می‌کردی، تو چنته داشته.

#note
@amiria703_channel
از اون میمای حق :))))

از ماستادون برداشتم

#Meme
@SohrabContents
Forwarded from Sadra Codes
همین الان یه موشک از رو سرمون رد شد.
Forwarded from Gopher Academy
در زبان برنامه‌نویسی Go، دو مفهوم Expressions (عبارات) و Statements (دستورات) نقش مهمی در ساختار کد دارند. هر کدام کاربرد و رفتار خاص خود را دارند. در ادامه این دو مفهوم و انواع آن‌ها را با مثال توضیح می‌دهیم.

### 1. Expressions (عبارات)

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

انواع رایج عبارات:

#### - Literal Expressions (عبارات صریح)
این‌ها مقادیر ثابت و از پیش تعریف شده هستند، مثل اعداد، رشته‌ها و بولین‌ها.

مثال:
42        // عدد صحیح
3.14 // عدد اعشاری
"hello" // رشته
true // مقدار بولی


#### - Arithmetic Expressions (عبارات ریاضی)
این نوع عبارات شامل عملیات‌های ریاضی مثل جمع، تفریق، ضرب و تقسیم می‌شود.

مثال:
3 + 5          // نتیجه: 8
10 - 2 // نتیجه: 8
7 * 2 // نتیجه: 14
9 / 3 // نتیجه: 3


#### - Comparison Expressions (عبارات مقایسه‌ای)
این عبارات برای مقایسه مقادیر استفاده می‌شوند و نتیجه آن‌ها همیشه یک مقدار بولی (true یا false) است.

مثال:
5 > 3          // نتیجه: true
10 == 10 // نتیجه: true
7 != 2 // نتیجه: true


#### - Logical Expressions (عبارات منطقی)
این نوع عبارات شامل عملیات‌های منطقی مثل AND، OR و NOT است.

مثال:
true && false  // نتیجه: false
true || false // نتیجه: true
!true // نتیجه: false


#### - Function Call Expressions (عبارات فراخوانی تابع)
فراخوانی توابع یک نوع عبارت است که خروجی آن بر اساس اجرای تابع تعیین می‌شود.

مثال:
fmt.Println("Hello")  // فراخوانی تابع که مقداری از نوع int برمی‌گرداند (تعداد بایت‌های چاپ شده)
len("Go") // فراخوانی تابع که طول رشته را برمی‌گرداند


#### - Type Conversion Expressions (عبارات تبدیل نوع)
برای تغییر نوع داده‌ها از یک نوع به نوع دیگر استفاده می‌شوند.

مثال:
float64(5)   // تبدیل عدد صحیح 5 به نوع float64
int(3.14) // تبدیل عدد اعشاری 3.14 به نوع int (خروجی: 3)


### 2. Statements (دستورات)

Statements یا دستورات قطعه‌های کدی هستند که عملی را انجام می‌دهند، اما ممکن است مقداری برنگردانند. آن‌ها معمولاً از عبارات تشکیل می‌شوند و کد را در مسیر منطقی جلو می‌برند.

انواع رایج دستورات:

#### - Declaration Statements (دستورات اعلان)
این دستورات برای تعریف متغیرها، توابع، یا ساختارها استفاده می‌شوند.

مثال:
var x int       // اعلان متغیر x از نوع int
y := 42 // اعلان و مقداردهی اولیه متغیر y


#### - Assignment Statements (دستورات انتساب)
این نوع دستورات برای اختصاص یک مقدار به یک متغیر استفاده می‌شود.

مثال:
x = 10          // مقدار 10 به متغیر x اختصاص داده شده
z := x + 5 // مقدار عبارت x + 5 به z اختصاص داده شده


#### - Control Flow Statements (دستورات کنترل جریان)
این دستورات مسیر اجرای کد را بر اساس شرایط یا تکرار تغییر می‌دهند.

- if Statement (دستور شرطی):
if x > 10 {
fmt.Println("x بزرگتر از 10 است")
} else {
fmt.Println("x کوچکتر یا مساوی 10 است")
}


- for Statement (حلقه تکرار):
for i := 0; i < 5; i++ {
fmt.Println(i)
}


- switch Statement (دستور انتخاب):
switch x {
case 1:
fmt.Println("x برابر 1 است")
case 2:
fmt.Println("x برابر 2 است")
default:
fmt.Println("x عددی دیگر است")
}


#### - Function Call Statements (دستورات فراخوانی تابع)
این نوع دستورات برای اجرای توابع استفاده می‌شوند.

مثال:
fmt.Println("Hello, World!")  // فراخوانی تابع که در اینجا فقط عمل چاپ را انجام می‌دهد


#### - Return Statement (دستور بازگشت)
در توابع برای بازگرداندن مقدار به کار می‌رود.

مثال:
func add(a int, b int) int {
return a + b // بازگرداندن حاصل جمع a و b
}


#### - Block Statements (بلوک‌های کد)
یک بلوک کد که ممکن است شامل چندین دستور باشد. بلوک‌ها با {} تعریف می‌شوند.

مثال:
{
x := 10
fmt.Println(x)
}


### جمع‌بندی

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

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

👑 @gopher_academy
Forwarded from 
خوبید؟

#موقت
وسط این همه جنگ و اینا، دولینگو ول نمی‌کنه:))))

میگه امروز المانی یاد نگرفتی

#موقت
@SohrabContents
Forwarded from 
چیزایی که به نظرم الآن به فکرشون باشید بهتره:
منفی یک: بنزین نزنید.
صفر: بازندهٔ اصلی جنگ‌ها، مردم غیرنظامی هستن.
یک: اخبار رو به طور مستقیم به افراد دارای مشکلات قلبی-عروقی و همچنین افراد دارای مشکلات روحی اعلام نکنید.
دو: تلگرام جای خوبی برای خوندن اخبار نیست. کلاه تحلیل‌گریتون رو به روی سر بذارید و از جاهای مختلف تا حدودی معتبر موافق و مخالف اخبار رو پیگیری کنید.
سه: ترجیحاً اخبار رو نخونید و خودتون رو موقّتاً با کاری، سرگرم کنید. حتّیٰ اگه وضعیت روحی مناسبی دارید، خوندن جزءبه‌جزء اخبار، ضربهٔ روحی-روانی بدی می‌تونه وارد کنه.
چهار: مواظب خودتون باشید. ❤️

#موقت
#به_سوی_گا

از اینترنت فقط یه خاطره مونده

@DevTwitter
💎 معرفی کتابخانه Tailwind Variants 💎

کتابخانه Tailwind Variants یک ابزار جانبی برای Tailwind CSS هستش که به شما کمک می‌کنه تا مدیریت کلاس‌های CSSای به شکل ساده تری انجام بشه و از شلوغی کد شما‌ جلوگیری میکنه 💥

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


توی پست های بعدی به بررسی قابلیت های این کتابخانه جذاب میپردازیم

🌐 داکیومنت tailwind variants

#️⃣ #tailwind #tailwind_variants

🚀 @coolycode
در ادامه برای هر کدام از ویژگی‌هایی که ذکر کردم، مثالی آورده‌ام:

### ۱. تعریف حالت‌های مختلف (Variants):
فرض کنید می‌خواهید دکمه‌ای با حالت‌های رنگ مختلف ایجاد کنید، مثلاً یک دکمه primary و یک دکمه secondary. با Tailwind Variants می‌توانید به راحتی این حالات را تعریف کنید.

import { tv } from 'tailwind-variants';

const button = tv({
base: 'font-medium text-white rounded-full active:opacity-80',
variants: {
color: {
primary: 'bg-blue-500 hover:bg-blue-700',
secondary: 'bg-purple-500 hover:bg-purple-700',
},
},
});

<button className={button({ color: 'primary' })}>Primary Button</button>
<button className={button({ color: 'secondary' })}>Secondary Button</button>

نتیجه:
دکمه اول آبی است و وقتی روی آن hover می‌شود تیره‌تر می‌شود. دکمه دوم بنفش است و با hover بنفش تیره می‌شود.

### ۲. حالت‌های ترکیبی (Compound Variants):
حالت‌های ترکیبی برای وقتی که می‌خواهید حالت‌های مختلف به صورت شرطی بر اساس یکدیگر تعریف شوند، کاربرد دارند. مثلاً اگر بخواهید دکمه‌ای در حالت غیرفعال و با رنگ خاص نشان داده شود.

const button = tv({
base: 'font-semibold text-white text-sm py-1 px-4 rounded-full active:opacity-80',
variants: {
color: {
primary: 'bg-blue-500 hover:bg-blue-700',
success: 'bg-green-500 hover:bg-green-700',
},
disabled: {
true: 'opacity-50 bg-gray-500 pointer-events-none',
},
},
compoundVariants: [
{
color: 'success',
disabled: true,
class: 'bg-green-100 text-green-700',
},
],
});

<button className={button({ color: 'success', disabled: true })}>Disabled Success Button</button>

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

### ۳. استفاده از حالت‌های ریسپانسیو (Responsive Variants):
اگر می‌خواهید دکمه‌هایتان در سایزهای مختلف صفحه نمایش حالت‌های متفاوتی داشته باشند، می‌توانید حالت‌های ریسپانسیو را تعریف کنید.

const button = tv(
{
base: 'font-semibold text-white py-1 px-3 rounded-full active:opacity-80',
variants: {
color: {
primary: 'bg-blue-500 hover:bg-blue-700',
secondary: 'bg-purple-500 hover:bg-purple-700',
},
},
},
{
responsiveVariants: ['xs', 'sm', 'md'],
}
);

<button
className={button({
color: {
initial: 'primary',
xs: 'secondary',
sm: 'primary',
md: 'secondary',
},
})}
>
Responsive Button
</button>

نتیجه:
دکمه در حالت اولیه به رنگ آبی است، اما در سایزهای مختلف صفحه نمایش، رنگ آن تغییر می‌کند؛ برای صفحه‌های کوچک‌تر (xs)، بنفش و برای بزرگ‌ترها آبی و سپس دوباره بنفش می‌شود.

### ۴. استفاده از حالت پیش‌فرض (Default Variants):
در این مثال، به صورت پیش‌فرض دکمه با سایز متوسط و رنگ primary تعریف شده است، اما می‌توانید با پارامترهای ورودی این حالت را تغییر دهید.

const button = tv({
base: 'font-semibold text-white py-1 px-3 rounded-full active:opacity-80',
variants: {
color: {
primary: 'bg-blue-500 hover:bg-blue-700',
secondary: 'bg-purple-500 hover:bg-purple-700',
},
size: {
sm: 'py-1 px-3 text-xs',
md: 'py-1.5 px-4 text-sm',
lg: 'py-2 px-6 text-md',
},
},
defaultVariants: {
size: 'md',
color: 'primary',
},
});

<button className={button({ size: 'sm', color: 'secondary' })}>Small Secondary Button</button>

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

### ۵. Override کردن کلاس‌ها (Overriding Classes):
گاهی اوقات نیاز دارید که کلاس‌های تعریف‌شده را در لحظه تغییر دهید. با استفاده از خاصیت class می‌توانید به راحتی این کار را انجام دهید.

const button = tv({
base: 'font-semibold text-white py-1 px-3 rounded-full active:opacity-80',
variants: {
color: {
primary: 'bg-blue-500 hover:bg-blue-700',
secondary: 'bg-purple-500 hover:bg-purple-700',
},
},
});

<button className={button({ color: 'primary', class: 'bg-red-500 hover:bg-red-700' })}>
Red Button
</button>
نتیجه:
با اینکه دکمه primary به رنگ آبی است، می‌توانید با کلاس override شده، رنگ آن را به قرمز تغییر دهید.

---

این مثال‌ها به شما نشان می‌دهد که چگونه با استفاده از Tailwind Variants می‌توانید کد CSS تمیزتر و منعطف‌تری بنویسید. همچنین امکان مدیریت آسان‌تر حالت‌های مختلف برای المان‌ها و ترکیب آن‌ها به صورت ریسپانسیو وجود دارد【12†source】【13†source】【14†source】【15†source】【16†source】.
دهه نودی تو کوچه خلوت ... 🙂

پست جدید همین الان آپلود شد، هیچی نمیگم برید ببینید :)))😂

🌐 مشاهده پست

#️⃣ #NEWPost #instagram

🚀 @coolycode
بیاید گپمون حرف بزنیم یکم
عه راستی ما برنامه نویسا درون گراییم، گپ نمیزنیم...
Forwarded from Linuxor ?
آیا جنگ بشه وقت گذاشتن چند ساله برای یادگیری لینوکس ارزش داره؟ (طنز)


یه جعبه رو در نظر بگیرین که توش پر توپ سبز و قرمز به تعداد برابره.
و شما شانسی یه توپ برمیدارین اگه سبز بود خوشبخت میشین و قرمز بدبخت

حالا قبل از اینکه بردارین من میام و میخوام سرنوشتتون رو عوض کنم، 10 تا توپ قرمز از جعبه بر میدارم و میندازم دور، پس شما هر توپی شانسی از جعبه بر دارین به احتمال بیشتری سبزه و شانستون برای خوشبختی بیشتره.

دفه بعدی 1000 تا از یه رنگ بر میدارم و میندازم دور ولی بهتون رنگش رو نمیگم.
میدونین چه اتفاقی میفته؟ بازم شما احتمال خوشبختیتون با بدبختیتون برابره؛ جنگ هم دقیقا مثل همین 1000 تا توپه رنگش معلوم نیست.


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


🐧 @Linuxor
Forwarded from Gopher Academy
🔵 عنوان مقاله
anthropic-claude-golang-sdk: Go Library for Anthropic's Claude API

🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی و توضیح چگونگی ارسال پیام‌های ساختاریافته و مدیریت پاسخ‌ها از مدل‌های هوش مصنوعی مکالمه‌ای Anthropic در برنامه‌های نوشته شده با زبان برنامه‌نویسی Go می‌پردازد. نویسنده، روش‌هایی را بیان می‌کند که توسط توسعه‌دهندگان می‌توانند به کار گرفته شوند تا اینترفیس‌های کاربردی مبتنی بر گفتگو را با استفاده از مدل‌های Anthropic ایجاد کنند. این شامل توضیحاتی درباره‌ی نحوه‌ی ارتباط بین Go و AI Anthropic، استفاده از API‌ها، و راه‌های برخورد با داده‌های ورودی و خروجی است. هدف از آموزه‌ها در این مقاله، فراهم کردن ابزارها و دانش لازم برای ایجاد برنامه‌های پاسخگو و هوشمند است که می‌تواند در بازارها و برنامه‌های کاربردی مختلف مورد استفاده قرار گیرد. از دیدگاه فنی، مقاله نکات عملی و چالش‌های برنامه‌نویسی مربوط به انتقال و دریافت داده بین سیستم‌های Anthropic و برنامه‌های Go را مورد بررسی قرار می‌دهد.

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


👑 @gopher_academy
Forwarded from Gopher Academy
🤔🤔توی لاین 55 از فایل response.go این توضیح برام جالب بود
🔵 https://go.dev/src/net/http/response.go

// The response body is streamed on demand as the Body field
// is read.

🟢معنای این جمله چیه؟
این جمله به نحوه‌ی مدیریت و پردازش بدنه‌ی پاسخ (Response Body) در درخواست‌های HTTP در Go اشاره دارد. به طور خاص، توضیح می‌دهد که **بدنه‌ی پاسخ به صورت (streamed) و بر اساس نیاز (on demand) خوانده می‌شود، یعنی فقط زمانی که به آن دسترسی پیدا می‌کنید، داده‌ها از بدنه‌ی پاسخ خوانده می‌شوند.

🔴توضیح دقیق‌تر:
در Go، زمانی که یک درخواست HTTP ارسال می‌کنید، بسته به کتابخانه‌ای که استفاده می‌کنید (مانند net/http)، پاسخ دریافتی شامل یک فیلد به نام Body است. این فیلد از نوع io.ReadCloser است که امکان خواندن داده‌ها را به صورت جریان (stream) فراهم می‌کند.

❇️چرا از Streaming استفاده می‌شود؟

🔻صرفه‌جویی در حافظه:

اگر پاسخ HTTP شامل داده‌های بزرگی باشد (مثلاً فایل‌های بزرگ، ویدیوها، یا جریان‌های داده‌ای)، بارگذاری تمام داده‌ها در حافظه به صورت همزمان می‌تواند باعث افزایش مصرف حافظه و کاهش کارایی برنامه شود.
با استفاده از streaming، فقط بخش‌های مورد نیاز داده‌ها به حافظه منتقل می‌شوند، که این امر باعث بهینه‌سازی مصرف منابع می‌شود.

🔻پردازش همزمان:

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



👑 @gopher_academy
💎 عملیات‌های IO Bound و CPU Bound در جنگو 💎

امروز می‌خوایم درباره عملیات‌های IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشن‌های جنگو تاثیر میذاره.

حالا IO Bound چیه؟ 🤔
عملیات‌های IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج داده‌ها میشه. مثلاً وقتی داریم با دیتابیس، فایل‌ها یا شبکه کار می‌کنیم. این نوع عملیات معمولاً منتظر میمونن تا داده‌ها از دیسک یا شبکه بیاد.

مثال‌هایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت داده‌ها از API
- بارگذاری فایل‌ها

حالا CPU Bound چیه؟ 🧠
عملیات‌های CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا می‌کنه.

مثال‌هایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتم‌های پیچیده

تفاوت‌های اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج داده‌ها هستن و زمان زیادی رو صرف این کار می‌کنن.

- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف می‌کنن.

2⃣ تکنیک‌های بهینه‌سازی:
- برای عملیات‌های IO Bound می‌تونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.

- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.

چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
می‌تونی از async و await استفاده کنی تا درخواست‌ها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.

- برای CPU Bound:
می‌تونی از ماژول concurrent.futures و ProcessPoolExecutor استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.

جمع‌بندی 🎯
درک تفاوت‌های بین IO Bound و CPU Bound می‌تونه بهت کمک کنه تا اپلیکیشن‌های جنگو رو بهتر بهینه‌سازی کنی. اگه عملیات‌های IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.

امید وارم مفید بوده باشه :)

#iobound #cpubound #python #django


@ninja_learn_ir