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 🎄 یک برنامه نویس تنبل (  MΞ)
🔶 ابزار Extension.js

با این پروژه میتونید یه افزونه بنویسید و توی همه مرورگرها اجرا کنید!
قبل ازین پروژه نوشتن افزونه‌ها دردسر خودشو داشت نمیتونستی افزونه کروم توی فایرفاکس بالا بیاری و بالعکس
در حالی که کدها یکی بودن فقط api هر مرورگر فرق داشت
از همه مهمتر که تایپ اسکریپت هم ساپورت میکنه و در ابتدا خودش یه ساختار خوبی از پروژه ایجاد میکنه دیگه نیازی به کانفیگ خاصی نیست خودش راحت بیلد میگیره 😍

https://github.com/extension-js/extension.js

#معرفی

@TheRaymondDev
یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژه‌ام می‌نوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.

اما چندتا نکته (بر خلاف دنیای پایتون) :

۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب می‌کنند پس app رو جایگزین کردم

۲- از cargo-chef استفاده کردم به ۲ دلیل :
۲-۱: توی کد بالا من compile انجام نمیدادم و فقط پکیج‌هارو دانلود میکردم؛ قصدم این بود توی استپ بعدی سراغش برم ولی خب توی بعضی شرایط خاص دردسرش زیاد میشه که الان فرصتش رو نداشتم.
۲-۲: توی همون شرایط و crate های خاص (که اتفاقا یکی از دوستان توی پروژه‌اش بهم نشون داد) باعث میشه قابلیت cache رو از دست بدید؛ دلیل اصلیش رو نمی‌دونم.

۳- بجای استفاده از اداکر ایمیج‌های معرفی شده توسط پروژه cargo-chef از همون rust:1.82.0 استفاده کردم و فقط یک استیج بیشتر ساختم که دستورات زیر رو داشته باشه :
RUN apt update && apt install lld clang -y && cargo install cargo-chef


۴- وقتی sqlx رو توی پروژه دارم؛ توی استیج runtime حتما باید sqlx migrate runtime رو اجرا کنم. (برایحجم کمتر این مورد رو با migrate macro اجرا کردم.

۵- خیلی بهتره موقع استفاده از cargo build —release توی استیج builder باید از فلگ:
—bin <appname>
استفاده کنم


نهایتا شد این :
FROM rust:1.82.0 AS chef
WORKDIR /app
RUN apt update && apt install lld clang -y && cargo install cargo-chef

FROM chef as planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json

FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ENV SQLX_OFFLINE true
RUN cargo build --release --bin XYZ

FROM debian:bookworm-slim AS runtime
WORKDIR /app
RUN apt update -y \
&& apt install -y --no-install-recommends openssl ca-certificates \
&& apt autoremove -y \
&& apt clean -y \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/XYZ XYZ
COPY .env .env
ENTRYPOINT [ "./XYZ" ]
Forwarded from Gopher Academy
🔵 عنوان مقاله
Product for Engineers: A Newsletter Helping Flex Your Product Muscle

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

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


👑 @gopher_academy
ابزار دریافت کانفیگ رایگان به تفکیک پروتکل/لوکیشن بروزرسانی شده و علاوه‌بر اضافه‌شدن یه‌سری پروتکل جدید، میتونین کانفیگ‌هارو بر اساس IPv4/IPv6 دریافت کنین. این‌ابزار درحال‌حاضر به یک ریپازیتوری جدید متصل شده که اگر از استفاده‌کنندگان قدیمی هستین، لازمه مجدد لینک ساب رو اسکن کنید.

👉 ircfspace.github.io/tconfig
👉 ircfspace.github.io/location

🔍 ircf.space/tools
@ircfspace‏⁧
Forwarded from Mr Python | مستر پایتون (حسین)
📌سرفصل دروس دوره تست نفوذ وایرلس با پایتون

1️⃣ بخش اول : مفاهیم شبکه (رایگان)
۱
- شرح مدل OSI
۲ - پروتکل ARP
۳ - پروتکل اینترنت (IP)
۴ - پروتکل ICMP
۵ - کارگاه لایه شبکه
۶ - پروتکل UDP
۷ - پروتکل TCP
۸ - کارگاه لایه انتقال
۹ - پروتکل HTTP , HTTPS
۱۰ - کارگاه HTTP , HTTPS
۱۱ - پروتکل DNS
۱۲ - کارگاه DNS
۱۳ - پروتکل Telnet و SSH
۱۴ - کارگاه Telnet و SSH
۱۵ - پروتکل های انتقال فایل
۱۶ - کارگاه انتقال فایل

2️⃣ بخش دوم : مبانی Wi-Fi
۱ - مفهوم موج
۲ - استاندارد 802.11 و نسخه های آن
۳ - توپولوژی های وایرلس
۴ - فریم های 802.11 و ساختار آن ها
۵ - بررسی Mode های مختلف کارت های شبکه وایرلس
۶ - اسکن فعال و غیر فعال محیط
۷ - شنود بسته های 802.11 در وایرشارک
۸ - پروتکل امنیتی WEP
۹ - پروتکل امنیتی WPA
۱۰ - قابلیت WPS


3️⃣ بخش سوم : آموزش Scapy
۱ - آموزش نصب Scapy
۲ - ساخت بسته های شبکه در Scapy
۳ - ارسال و شنود بسته در Scapy
۴ - ساخت ابزار های Ping و Traceroute در Scapy
۵ - فریم های 802.11 در Scapy

4️⃣ بخش چهارم : تست نفوذ و ابزارنویسی
۱ - اسکن محیط با airodump-ng
۲ - ساخت اسکنر وای فای در پایتون
۳ - تشخیص SSID های مخفی در محیط
۴ - تشخیص دستگاه های موجود در محیط
۵ - دور زدن مک فیلترینگ
۶ - اجرای حمله Deauthentication با aireplay-ng
۷ - نوشتن اسکریپت Deauthentication در پایتون
۸ - چگونگی هک پسوورد WEP
۹ - هک پسوورد WEP با aircrack-ng
۱۰ - چگونگی کرک WPA بخش ۱
۱۱ - چگونگی کرک WPA بخش ۲
۱۲ - کرک WPA با استفاده از aircrack-ng
۱۳ - نوشتن اسکریپت شنود WPA Handshake در محیط
۱۴ - نوشتن کرکر WPA
۱۵ - نقاط دسترسی سرکش (Rogue AP)
۱۶ - سوییچ به محیط کالی لینوکس
۱۷ - انجام سناریو WPA AP-LESS Cracking
۱۸ - معرفی wifiphisher , wifipumpkin3
۱۹ - رمزگشایی بسته های محیط با airdecap-ng
۲۰ - نوشتن اسکریپت استخراج رمز وای فای های ذخیره شده

🆔 : @MrPythonBlog | BOOST
Forwarded from جادی | Jadi
langlang.webm
2.2 MB
قطعه جدیدی از شوپن

چند وقت قبل رابینسون مک‌کلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشه‌اش اسم شوپن نوشته بود توجه‌اش رو جلب کرد.

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

حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.

#هنر
Forwarded from Syntax | سینتکس (Daimon)
Forwarded from Syntax | سینتکس (Daimon)
Forwarded from Syntax | سینتکس (Daimon)
این آقا خیلی تو لینکدین فارسی سروصدا به پا کرده و تو کتابخونه tensorflow کانتریبیوت کرده.
چند روز پیش تو یه کانال دیگم اشاره کرده بودن اما اینبار تو لینکدین خودمم پستشو دیدم.
هزارو خورده ای ری اکشن با کلی کامنت

اما قسمت دارک ماجرا زمانیه که محتویات کانتریبیوتش رو میبینیم که کلا یدونه کلمه از کامنت رو تغییر داده

واقعا لینکدین خیلی عجیبه

#fun

@Syntax_fa
Forwarded from جادی | Jadi
This media is not supported in your browser
VIEW IN TELEGRAM
قطعه جدیدی از شوپن

چند وقت قبل رابینسون مک‌کلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشه‌اش اسم شوپن نوشته بود توجه‌اش رو جلب کرد.

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

حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.

#هنر

پ.ن. ظاهرا به خاطر فرمت در گوشی‌ها درست پخش نمی‌شد؛ دوباره گذاشتم
Forwarded from Linuxor ?
در نهایت هرچیزی بسازین مردم عادی اونو با front و ظاهرش قضاوتش میکنن؛

این ریپو کلی کامپوننت UI رایگان رو جمع آوری کرده و میتونید توی Web App هاتون استفاده کنید :

https://github.com/karthikmudunuri/eldoraui


🐧 @Linuxor
Forwarded from Go Casts 🚀
آپدیت تیمسازی + فیدبک یکی از دوستان نسبت به دوره

این هفته ها با بچه های تیمسازی ۳ بیشتر مشغول solution design و آماده کردن code structure برای پروژه ای هستیم که یه پلتفرم برای رستوران و کافه ها باشه، و سعی کردیم با جدا کردن domain های بیزینسی یه سری microservice رو توسعه بدیم.

هر چند که به شخصه دغدغه ای بابت monolith یا microservice بودن ندارم و دلایلم رو در دوره روی کد گفتم که چرا این سوال اون قدرها هم سوال مهمی نیست، هر چند که microserivce بودن overheadهای خودشو داره.

تخفیف پاییز «دوره +‌تیمسازی» در آبان ماه هم پابرجاست

دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.iss.one/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts
خواهشا ردیس را به عنوان Primary Database استفاده نکنید!
یکی از جذاب‌ترین ریفکتور هایی که در اکالا انجام دادم، به ریلیز کردن ۴۰ گیگابایت رم ردیس برای استفاده در سبد خرید و سفارش‌ها مربوط میشه. در این فرآیند، موفق شدم تنها از ۴۰۰ مگابایت رم استفاده کنم!
در شروع کار، به این فکر می‌کردم که چگونه می‌توانم ۴۰ گیگابایت رم را آزاد کنم. اولین راه‌حلی که به ذهنم رسید، فشرده‌سازی داده‌ها بود. اما هیچ کامپرسوری نمی‌توانست به اندازه کافی این حجم داده را فشرده کند، و هزینه‌ی Decompress کردن آن بخاطر لود بالای سیستم، بسیار بالا بود.

هر کلید ما حاوی حدود ۱-۲ کیلوبایت JSON بود و مجبور بودیم که هر محصول را بدون TTL در Redis نگه داریم، زیرا Round Trip ما به Redis در لحظه به حدود ۳۰K می‌رسید و Redis ۴۰ گیگابایتی را مصرف می‌کرد. هیچ اپلیکیشنی نمی‌توانست این حجم Request را با منابع پایین و زمان پاسخ‌دهی ۱۰ میلی‌ثانیه انجام دهد!
در ادامه، وقتی وارد فضای حل مسئله شدم:

پاک‌سازی داده‌های اضافی: اولین قدم ما حذف کلی داده‌های غیرضروری بود که هر کلید را به حدوداً ۵۰۰ بایت تبدیل کرد.

استفاده از Protobuf: به این فکر کردم که چرا از JSON استفاده کنیم؟ با استفاده از deserializer و serializer قدرتمندی مثل Protobuf، می‌توانستیم حجم داده‌ها را به طور چشمگیری کاهش دهیم. با تبدیل داده‌ها به باینری و ذخیره آن، حجم هر کلید به حدود ۳۰۰ بایت کاهش یافت، که به معنای کاهش ۸۰ درصدی مصرف رم بود. با این حال، کیفیت و سرعت بالا در اکالا برای ما بسیار مهم بود.

شکستن کلیدها: کلیدها را به دو بخش تقسیم کردم:
اطلاعات محصول (شامل نام، بارکد، آدرس عکس و...) در یک کلید با حجم تقریباً ۲۰۰ بایت.
موجودی هر محصول در فروشگاه‌ها در کلیدی دیگر با حجم حدود ۱۰۰ بایت.
در روش قبلی، اگر یک میلیون کالا داشتیم، مصرف حدود ۲۸۶ مگابایت بود. اما در روش جدید، فرض کنیم از یک میلیون تا 2000 محصول داریم و برای یک میلیون کالا موجودی در استور های مختلف، حدود ۹۵ مگابایت مصرف می‌شد!

کش کردن محصولات: همچنین، کالاهای اضافه‌شده به سبد خرید مشتریان را به مدت ۴ روز کش کردم. به جای استفاده از Redis به عنوان Primary Database و بدون TTL، هرگاه داده‌ای نداشتیم، از منبع اصلی اطلاعات را می‌گرفتیم و دوباره به مدت ۴ روز کش می‌کردیم. اگر کاربری همان کالا را دوباره به سبد خرید اضافه می‌کرد، TTL آن به صورت Sliding افزایش می‌یافت.

در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!

@DevTwitter | <Hassan Arab borzo/>
Forwarded from Code Module | کد ماژول (𔓙)
درود ماژولیتیای گل💙

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

در صورت داشتن هر گونه سوال، انتقاد و ... میتونید توی گروهمون جوین باشید👇🏻

@CodeModuleGap
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰خبری از گنوم جدید:

نسخه جدید محیط دسکتاپ GNOME 48 "بنگالورو" قرار است در تاریخ ۱۹ مارس ۲۰۲۵ منتشر شود. این نسخه شامل برنامه زمان‌بندی انتشار است که تاریخ انتشار آن تعیین شده است. در اینجا می‌توانید ببینید چه چیزهایی از این نسخه انتظار می‌رود!

🔹برنامه زمان‌بندی انتشار گنوم 48

- گنوم 48 Alpha ژانویه ۲۰۲۵
- گنوم 48 Beta – فوریه ۲۰۲۵
- نامزد انتشار – ۱ مارس ۲۰۲۵
- انتشار نهایی – ۱۹ مارس ۲۰۲۵

🔹یک ویژگی که می‌دانم در GNOME 48 وجود خواهد داشت، یک برنامه نمایشگر تصاویر Loupe بهبود یافته است که ویژگی‌های هیجان‌انگیزی مانند کنترل‌های زوم را شامل می‌شود. این ویژگی‌ها اجازه می‌دهد کاربران درصد زوم خاصی را وارد کنند،
یک بارگذار برای فرمت‌های تصویر RAW و ویژگی‌های اولیه ویرایش تصویر مانند برش تصاویر خواهد داشت.

توسعه‌دهندگان GNOME قصد دارند به‌روزرسانی‌های بیشتری برای آخرین نسخه GNOME 47 منتشر کنند که نسخه بعدی آن GNOME 47.2 خواهد بود و برای اواخر نوامبر یا اوایل دسامبر ۲۰۲۴ برنامه‌ریزی شده است.


نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
@linuxtnt

حمایت از کانال-donate
https://zarinp.al/learninghive.ir
Forwarded from 🎄 یک برنامه نویس تنبل (The Lazy 🌱 Raymond)
🔶 لینوس توروالدز : هوش مصنوعی ۹۰ درصد تبلیغات و ۱۰ درصد واقعیت است

هرچند هوش مصنوعی قابلیت تغییر جهان را دارد، در‌حال‌حاضر به‌دلیل تمرکز بیش‌از‌حد بر تبلیغات، نمی‌توان به‌طور کامل به آن اعتماد کرد. وی به این نکته نیز اشاره کرد که بسیاری از کاربردهای فعلی هوش مصنوعی، مانند تولید محتوا با ChatGPT، بیشتر جنبه نمایشی دارند.

https://www.youtube.com/watch?v=s4wlrxFf2lM

#AI
@TheRaymondDev
Forwarded from Galaxy Ai (♪ Ayhan)
Password Generator in Bash

From time to time, you need to change your passwords. Everyone knows that a good password should include uppercase and lowercase Latin letters, numbers, and special characters. Additionally, they should not be too short. Coming up with new passwords each time is becoming increasingly difficult, especially if you use different passwords for different services. You can use programs like pwgen or the generator built into KeepassX for this purpose. Alternatively, you can write a simple password generator in Bash.

Characters Used
We will use the following characters: Uppercase and lowercase letters of the Latin alphabet (A-Z and a-z), numbers (0-9), and the symbols "!@#$%^*()?/|~]{}-+_=<>.,". This combination ensures maximum security.

Password Length
The password length will be 16 characters. If you need a shorter password, you can specify a smaller length in the script or add a command-line option.

Bash Password Generator Script
The first thing we need is a variable containing all the characters we will use. We also need a variable for the password length and a variable to store the password itself.



bash
SYMBOLS=""
for symbol in {A..Z} {a..z} {0..9}; do SYMBOLS=$SYMBOLS$symbol; done
SYMBOLS=$SYMBOLS'!@#$%&*()?/[]{}-+_=<>.,'
# The string with all characters has been created.
# Now we need to loop with the number of iterations equal to the password length
# and randomly select one character to add to the password string.
PWD_LENGTH=16 # password length
PASSWORD="" # variable for storing the password
RANDOM=256 # initialize random number generator
for i in seq 1 $PWD_LENGTH
do
PASSWORD=$PASSWORD${SYMBOLS:$(expr $RANDOM % ${#SYMBOLS}):1}
done
echo $PASSWORD

That's it. This is the entire script. With it, we can generate a password that meets all common security requirements. The only remaining problem is remembering it.
Forwarded from Gopher Academy
🔵 عنوان مقاله
Go Gets High-Resolution Timers on Windows

🟢 خلاصه مقاله:
در این مقاله به بررسی پشتیبانی افزوده شده برای تایمرهای با وضوح بالا در نسخه 1.23 زبان برنامه‌نویسی Go بر روی سیستم‌عامل ویندوز پرداخته شده است. در نسخه‌های پیشین، وضوح تایمرها در حدود 15.6 میلی‌ثانیه بود، اما با به‌روزرسانی‌های جدید، این وضوح به تقریباً 0.5 میلی‌ثانیه افزایش یافته است. این بهبود قابل توجه، امکان دقت بیشتری را در زمان‌بندی عملیات و به خصوص در برنامه‌هایی که نیازمند پردازش زمانی دقیق هستند، فراهم می‌کند. این تغییر می‌تواند تاثیرات مهمی در بهبود عملکرد کلی برنامه‌های نوشته شده به زبان Go داشته باشد، به ویژه در محیط‌هایی که پاسخگویی سریع الزامی است.

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


👑 @gopher_academy
بعد از تجربه چندین پروژه در طراحی پنل و سایت اصلی، چه به صورت فردی و چه در قالب کارهای گروهی، اکنون در فریمورک Vue.js همراه با فریم ورک لارول پیش می‌برم . در این مسیر، با Vuex به عنوان ابزار مدیریت وضعیت اصلی Vue 2 و Vue 3 کار کرده‌ام. اما با توجه به اینکه در Vue 3، ابزار Pinia به عنوان ابزار رسمی و توصیه‌شده برای مدیریت وضعیت معرفی شده،
,ولی بازم vuex در ویو ۳ کاربرد داره ولی خب ... تصمیم گرفتم به تدریج از Vuex جدا شم و به Pinia مهاجرت کنم. اما چرا؟؟

در Vue.js روش‌های مختلفی برای مدیریت وضعیت (State Management) وجود دارد که انتخاب هر روش به نیاز و پیچیدگی پروژه بستگی دارد. در زیر، برخی از ابزارها و روش‌های پرکاربرد برای مدیریت وضعیت در Vue را بررسی می‌کنیم:

استفاده از props و events
این روش ابتدایی‌ترین روش مدیریت وضعیت است. از props برای ارسال داده از کامپوننت والد به فرزندان و از events برای انتقال داده‌ها به سمت بالا استفاده می‌شود. این روش در پروژه‌های کوچک و ساده مؤثر است اما برای پروژه‌های بزرگ کافی نیست.

استفاده از provide و inject
provide و inject به اشتراک‌گذاری وضعیت بین کامپوننت‌ها بدون نیاز به props کمک می‌کنند. این روش در شرایطی که چندین کامپوننت نیاز به داده مشترک دارند مناسب است اما در پروژه‌های بزرگ محدودیت دارد.


ابزار Pinia، ابزار رسمی و توصیه‌شده برای Vue 3، با API ساده و روانی که دارد، تجربه توسعه‌دهنده را بهبود داده و از ویژگی‌های Vue 3 مانند Composition API و سیستم واکنش‌پذیری پیشرفته بهره می‌برد. این ابزار جایگزین Vuex در Vue 3 شده و برای پروژه‌های بزرگ گزینه‌ای بهینه است.

ابزار Vuex ابزار اصلی مدیریت وضعیت در Vue 2 است و ساختاری متمرکز برای مدیریت داده‌ها ارائه می‌دهد. Vuex از state، mutations، actions و getters برای مدیریت وضعیت استفاده می‌کند. با وجود امکان استفاده از Vuex در Vue 3، تیم Vue اکنون Pinia را به عنوان جایگزین رسمی برای Vue 3 معرفی کرده است.

استفاده از Composition API و reactive
در Vue 3، Composition API و reactive به توسعه‌دهندگان امکان می‌دهند که وضعیت‌های محلی را با سادگی بیشتری مدیریت کنند. این روش برای پروژه‌های متوسط و کوچک کارآمد است.

کتابخانه‌های خارجی (مانند Redux یا Zustand)
برخی از پروژه‌های پیچیده نیاز به ابزارهای دیگری مانند Redux دارند، هرچند این کتابخانه‌ها مخصوص Vue نیستند و بیشتر در پروژه‌های چندپلتفرمی کاربرد دارند.

تجربه ای داشتم این بود که اگر بخواین با nuxt مخصوصا ورژن ۳ کارکنید pinia بهترین هست این جمله من دلیل نمیشه vuex بد باشه نه منظوم این نیست :)
منظورم این که راحتر دیپلوی میشه در ناکست ۳ و همین ...

@DevTwitter | <amirreza raadi/>
Forwarded from Linuxor ?
مدل های زبانی بزرگ، چطوری زبان انسان رو درک میکنن و بهش پاسخ میدن؟

توی این مقاله با فرض اینکه شما فقط ضرب و تقسیم بلدید آقای Rohit بهتون میگه چطوری LLM ها کار میکنن، البته کوتاه نیست و خوندنش حدود یک ساعت زمان میبره ولی خیلی رَون توضیح داده:


https://towardsdatascience.com/understanding-llms-from-scratch-using-middle-school-math-e602d27ec876


🐧 @Linuxor
Forwarded from Gopher Academy
✍️Farshad AkbariFarshad Akbari



💡 آشنایی با کتابخانه sync در Go و کاربردهای آن برای مدیریت همزمانی

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

1️⃣ Mutex (قفل متقابل)

Mutex برای جلوگیری از دسترسی همزمان گوروتین‌ها به یک منبع مشترک استفاده می‌شود. مثلا اگر چند گوروتین بخواهند به طور همزمان یک متغیر را تغییر دهند، با استفاده از Mutex می‌توانیم قفل دسترسی به این منبع را به یک گوروتین محدود کنیم.

2️⃣ WaitGroup (انتظار برای پایان گوروتین‌ها)

وقتی چند گوروتین همزمان اجرا می‌شوند و می‌خواهیم تا پایان کار همه‌ی آن‌ها صبر کنیم، WaitGroup کاربرد دارد. این ابزار به ما اجازه می‌دهد که منتظر بمانیم تا همه گوروتین‌ها کارشان را تمام کنند.

3️⃣ Once (اجرا فقط یک‌بار)

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


🔍 جمع‌بندی

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

👑 @gopher_academy