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
#به_سوی_گا

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

@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
Forwarded from Geek Alerts
Pavel Durov
📰 My previous post may have seemed to announce a major shift in how Telegram works. But in reality, little has changed.
«پااُل دورُو» تو پست جدید تلگرام میگه پست قبلی که فرستادم همه فکر کردن قراره تغییراتی اساسی داخل تلگرام اتفاق بیفته ولی هیچ چیزی عوض نمیشه.
از سال ۲۰۱۸ تلگرام طبق قوانین حریم‌خصوصی تلفن و آی‌پی مجرمان رو در اختیار مقامات قانونی کشورها قراره میده، البته این درخواست باید به صورت قانونی از راه ارتباطی درست به دستمون برسه.
میگه ربات @transparency ما دقیقا همین رو نشون می‌ده. این ربات تعداد درخواست‌های پردازش شده برای اطلاعات کاربران رو نشون می‌ده.
مثلا تو برزیل در سه‌ماهه اول ۲۰۲۴ به ۷۵ درخواست قانون و تو سه‌ماهه دوم به ۶۳ درخواست جواب داده شده، میگه بزرگترین چالش‌هارو تو هند داریم که تو ۳ ماهه اول ۲۰۲۴ تعداد ۲۴۶۱ درخواست برای تحویل شماره و آی‌پی مجرمان رو داشتن.
در نهایت میگه تلگرام ساخته شده برای محافظت از فعالان و مردم عادی در برابر دولت‌های فاسد و ما اجازه نمیدیم مجرم‌ها با سواستفاده از تلگرام از عدالت فرار کنن.
@geekalerts
مانجاروی نابود ناپذیر با قابلیت فروپاشی داخلی رو به صورت بتا عرضه کردن.

https://forum.manjaro.org/t/manjaro-immutable-out-now-for-community-testing/166364/

البته حواستون باشه :)) برپایه arkane linux هستش، اگه یک تجربه استیبل تر میخواین همون arkane رو استفاده کنید.


روی لگسی بوت نمیشه و فقط uefi

@SohrabContents
Forwarded from Geek Alerts
Forwarded from Geek Alerts
فیلترها و پس‌زمینه که احتمالا توی اسکایپ و گوگل میت قبلا دیدید قراره به صورت یک ویژگی به واتساپ اضافه بشه.
به کمک اینا مثلا وقتی نمیخواید کسی فضای اتاق یا پشت سرتون رو ببینه یک پس زمینه اضافه کنید، یا روی تصویر فیلتر بذارید.
این آپدیت شامل ۱۰ فیلتر و ۱۰ پس‌زمینه میشه ، فیلترها شامل گزینه‌های سیاه‌سفید، تلوزیون قدیمی، و افکت‌های هنری هستن.
پس زمینه‌ها هم شامل، دفتر، کافه، ساحل، غروب آفتاب و چند مورد دیگه میشن.
جدا از فیلتر و پس زمینه واتساپ گزینه‌های بهبود چهره و نور کم رو هم معرفی میکنه (احتمالا برای کسایی که خجالتی هستن)
احتمالا این ویژگی‌ها تا هفته‌های آینده برای تمام کاربران واتساپ فعال میشه.
macrumors
@geekalerts
Forwarded from Go Casts 🚀
سلام بچه ها، یه بازارچه جالب دیدم که سرویس های مختلف هوش مصنوعی رو در قالب api ارائه میده، ایرانی هم هست، اگه محصولی که توسعه میدید با هوش مصنوعی سر و کار داره احتمالا به کارتون بیاد و دردسرهای توسعه اولیه رو کاهش میده براتون، دوست داشتید سر بزنید به این لینک

https://isahab.ir/market?utm_source=linkedin&utm_medium=hosseinnazari&utm_campaign=shahrivar403&utm_id=firstcamp

@gocasts
دستور پزشکیان برای رسیدگی به فروش فیلترشکن‌ها؛ خبری از رفع فیلتر نیست

‏اولین جلسه شورای‌عالی فضای مجازی در دولت چهاردهم عصر دیروز به ریاست «مسعود پزشکیان» برگزار شد. پیش‌بینی می‌شد با توجه به وعده‌های رئیس‌جمهور و وزیر ارتباطات برای حل مشکل فیلترینگ، در این جلسه به مسئله رفع فیلتر پرداخته شود. بااین‌حال، بر اساس گزارش پایگاه اطلاع‌رسانی دولت، در این جلسه به‌جای پرداخته‌شدن به مسئله رفع فیلتر، بر «تهیه گزارش از وضع موجود» و «مقابله با فروش فیلترشکن» تأکید شده است.

او در بخشی از سخنان خود به موضوع «فروش فیلترشکن توسط عده‌ای سودجو» پرداخته و گفته است: «اینکه برخی با فیلترشکن‌فروشی پول‌های میلیاردی کسب می‌کنند برای کشورمان خوب نیست.» رئیس‌جمهور دستور داده «این مسئله حتما به شکل دقیق و جدی مورد رسیدگی قرار گرفته و تصمیم مقتضی در این مورد و به‌طور کلی زمینه‌های رواج چنین کسب‌وکاری اتخاذ شود.» / دیجیاتو

🔍 ircf.space
@ircfspace
Forwarded from Gopher Academy
🔵 عنوان مقاله
Prep: Compile-Time Function Evaluation for Go

🟢 خلاصه مقاله:
مقاله‌ای که بررسی شده به موضوع استفاده از "prep.Comptime" می‌پردازد، که این امکان را فراهم می‌کند تا توابع در زمان ساخت ارزیابی شده و به نتایج محاسبه شده آنها تبدیل شوند. این کار مشابه ویژگی "comptime" در زبان برنامه‌نویسی Zig است، با این تفاوت که به گفته مقاله، کاملاً متفاوت است. نویسنده این ایده را "جسارت آمیز" توصیف می‌کند اما نمی‌توان انکار کرد که ایده‌ای جالب است. با این حال، محدودیت‌هایی وجود دارد و "toolexec" به منظور پشتیبانی از بازنویسی متن منبع به صورت دلخواه طراحی نشده است. این موضوع نشان‌دهنده این است که گرچه فناوری‌های نوین می‌توانند راه‌های جدیدی برای بهینه‌سازی و افزایش کارایی فراهم آورند، اما هنوز محدودیت‌ها و چالش‌هایی را به همراه دارند که نیاز به بررسی و توسعه بیشتر دارند.

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


👑 @gopher_academy
چرا PHP نسبت به بقیه زبان‌ها کندتر است و راهکار چیست؟ - قسمت اول

پی اچ پی در مقایسه با زبان‌هایی مثل GO کندتر است. دلیلش این است که هر درخواست PHP یک فرآیند جدید را شروع می‌کند. این فرآیند باید از ابتدا تجزیه و اجرا شود و سپس خاموش شود. یعنی هر پروسه به طور کامل بسته شده و از حافظه خارج می‌شود.

این یعنی PHP نمی‌تواند چیزی از پردازش‌های قبلی را در حافظه نگه دارد و باید برای هر درخواست جدید از صفر شروع کند. نتیجه این کار، در تعداد درخواست‌های بالا، عملکرد کندتر و مصرف بیشتر منابع سرور است. این روش را "Request-Response" می‌نامند.

اما راهکار برای وردپرس و PHP چی بود؟

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

@DevTwitter | <Farhad Safari/>