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 Yasha
نتیجه رو کامنت کنید
Hmm.......

Spoiler!

@SohrabContents
Forwarded from Yasha
اگه براتون کار نکرد دوباره /start کنید
Forwarded from Yasha
اینجا دیگه از ایردراپ چیزی نمی‌ذارم.
شب یه ویدیو می‌گیرم برای اینکه توکن رو بتونید با موبایل پیدا کنید، بیاین اینور:
@ScriptAirdr0p
Forwarded from CleverDevs (Mammad)
خلبان شو طراحی‌ سخت افزارم کنارش ادامه بده :

#fun
@CleverDevs - @CleverDevsGp
Forwarded from $ Bits of Nyx (Mohammad Falahi)
خواستم بگم زندم!

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

هیچکس مونده مشارکت شما نیست.

این رو هم سر جریاناتی که امروز توی Persian CC Books رخ داد می‌نویسم.

پروژه‌های آزاد، آزادن هیچکس توش حقوق نمی‌گیره که بعدش بیاد برای کارنکردنش به تو جواب پس بده کسی که خودت میدونی.
تگ نمی‌ذارم چون جزو محتوای آموزشی کانال نیست، حذفش هم نمی‌کنم.
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>