🐳 ویکی لایسنس
- سایت جالبی بود گفتم بزارمش اینجا. اومده یه سری مقاله در مورد لایسنس های MIT و GPL و Mozila و Apache رو به اضافه Unlicence نوشته و خیلی خوب توضیح داده فرق هاشون چیه (توی این عکس هم میتونید ببینید فرق لایسنس ها توی چی هست). کلا چیز خوبیه !
🔗 ویکی لایسنس
#اوپن_سورس
@codeaghajcs
- سایت جالبی بود گفتم بزارمش اینجا. اومده یه سری مقاله در مورد لایسنس های MIT و GPL و Mozila و Apache رو به اضافه Unlicence نوشته و خیلی خوب توضیح داده فرق هاشون چیه (توی این عکس هم میتونید ببینید فرق لایسنس ها توی چی هست). کلا چیز خوبیه !
🔗 ویکی لایسنس
#اوپن_سورس
@codeaghajcs
👍1
🐳 ویژگیهای جدید CSS و Tailwind CSS 4
در سال ۲۰۲۴، CSS با ویژگیهای جدید و ابزارهای پیشرفتهتری ارائه شد که طراحی های وب رو خیلی دقیق تر و منعطف تر کرد. قول داده بودم که بررسیشون کنم و حالا که تیلویند 4 هم اومده، این ها رو در تیلویند 4 و ونیلا با هم بررسی میکنیم.
- کوئری کانتینر (Container Queries)
- ویژگی: امکان استایلدهی به عناصر بر اساس اندازۀ والد (container یا همان تگی که تگ فعلی داخل اون قرار داره) به جای اندازه کل صفحه، که طراحیهای واکنشپذیر را دقیقتر و پیچیدهتر میکند. این ویژگی به شما اجازه میده که استایلها رو بر اساس تغییرات اندازه یک کانتینر تغییر بدید، نه صرفاً اندازه کل صفحه. مثل همون تگ media query هست و دقیقا هم کاربردشون یکیه، فقط ایشون نسبت به والد کار میکنن نه بر اساس اندازه کل صفحه.
- مثال در Vanilla CSS:
- مثال در Tailwind 4:
در Tailwind 4 برای استفاده از کوئری کانتینر، از ویژگی
- CSS Nesting
- ویژگی: امکان نوشتن استایلها به صورت تو در تو برای سازماندهی بهتر کد. دیگه لازم نیست یک سلکتور جدا برای child هایی که میخوایم بنویسیم، بجاش میتونیم توی همون براکت های تگ والد، اسم تگ child رو بیاریم و یه براکت بزنیم و استایل بدیم
- مثال در Vanilla CSS:
- توی تیلویند خیلی فرقی نمیکنه چون از postcss استفاده میکنه میتونید خیلی راحت توی فایل های css از Nesting استفاده کنید.
- انتخابگر `:has()`
- ویژگی: انتخاب تگ والد، بر اساس وجود داشتن یا وجود نداشتن فرزند.
- مثال در Vanilla CSS:
- مثال در Tailwind 4: در حال حاضر، Tailwind مستقیماً از این ویژگی پشتیبانی نمیکنه ولی میتونید توی فایل های css ازش استفاده کنید. (واقعا باید ایده خلاقانه ای برای استفاده از has توی کلاس ها داشته باشن!)
- انیمیشنهای اسکرولمحور
- ویژگی: انیمیشنهایی که با اسکرول کاربر فعال میشوند. قبلا این ها رو با کتابخونهه ایی مثل scroll magic و... پیاده میکردیم.
- مثال در Vanilla CSS:
- مثال در Tailwind 4:
- بهبود متغیرهای CSS
- ویژگی: تعریف متغیرهای CSS با ویژگیهایی مانند نوع داده، مقدار اولیه و وراثت.
- مثال در Vanilla CSS:
- توی تیلویند هم خیلی فرق نمیکنه مثل همون has، اینم میتونید استفاده کنید
- سابگرید (Subgrid)
- ویژگی: ایجاد سابگرید در CSS Grid که با گرید اصلی همتراز میشود.
- مثال در Vanilla CSS:
- مثال در Tailwind 4: من چیزی توی مستندات Tailwind برای پشتیبانی از
🔗 مستندات تیلویند در مورد ویژگی های جدیدش که حتما بخونیدش
🔗 مقاله MDN در مورد Container Query
🔗 رویداد google io که درمورد آینده CSS و UI وب هست
#آموزشی #مهم
@codeaghajcs
در سال ۲۰۲۴، CSS با ویژگیهای جدید و ابزارهای پیشرفتهتری ارائه شد که طراحی های وب رو خیلی دقیق تر و منعطف تر کرد. قول داده بودم که بررسیشون کنم و حالا که تیلویند 4 هم اومده، این ها رو در تیلویند 4 و ونیلا با هم بررسی میکنیم.
- کوئری کانتینر (Container Queries)
- ویژگی: امکان استایلدهی به عناصر بر اساس اندازۀ والد (container یا همان تگی که تگ فعلی داخل اون قرار داره) به جای اندازه کل صفحه، که طراحیهای واکنشپذیر را دقیقتر و پیچیدهتر میکند. این ویژگی به شما اجازه میده که استایلها رو بر اساس تغییرات اندازه یک کانتینر تغییر بدید، نه صرفاً اندازه کل صفحه. مثل همون تگ media query هست و دقیقا هم کاربردشون یکیه، فقط ایشون نسبت به والد کار میکنن نه بر اساس اندازه کل صفحه.
- مثال در Vanilla CSS:
.container {
container-type: inline-size;
}
.child {
width: 100%;
}
@container (min-width: 600px) {
.child {
width: 50%;
}
}
- مثال در Tailwind 4:
در Tailwind 4 برای استفاده از کوئری کانتینر، از ویژگی
container
همراه با کلاسهای مناسب برای استایلدهی استفاده میکنید:<div class="@container">
<div class="flex flex-row @sm:@max-md:flex-col">
<!-- ... -->
</div>
</div>
- CSS Nesting
- ویژگی: امکان نوشتن استایلها به صورت تو در تو برای سازماندهی بهتر کد. دیگه لازم نیست یک سلکتور جدا برای child هایی که میخوایم بنویسیم، بجاش میتونیم توی همون براکت های تگ والد، اسم تگ child رو بیاریم و یه براکت بزنیم و استایل بدیم
- مثال در Vanilla CSS:
parent {
/* parent styles */
& child {
/* child of parent styles */
}
}
- توی تیلویند خیلی فرقی نمیکنه چون از postcss استفاده میکنه میتونید خیلی راحت توی فایل های css از Nesting استفاده کنید.
- انتخابگر `:has()`
- ویژگی: انتخاب تگ والد، بر اساس وجود داشتن یا وجود نداشتن فرزند.
- مثال در Vanilla CSS:
form:has(input:invalid) {
border-color: red;
}
- مثال در Tailwind 4: در حال حاضر، Tailwind مستقیماً از این ویژگی پشتیبانی نمیکنه ولی میتونید توی فایل های css ازش استفاده کنید. (واقعا باید ایده خلاقانه ای برای استفاده از has توی کلاس ها داشته باشن!)
- انیمیشنهای اسکرولمحور
- ویژگی: انیمیشنهایی که با اسکرول کاربر فعال میشوند. قبلا این ها رو با کتابخونهه ایی مثل scroll magic و... پیاده میکردیم.
- مثال در Vanilla CSS:
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.scroll-element {
animation: fadeIn 1s scroll-timeline(scroll);
}
- مثال در Tailwind 4:
<div class="animate-fadeIn scroll-timeline">
<!-- محتوا -->
</div>
- بهبود متغیرهای CSS
- ویژگی: تعریف متغیرهای CSS با ویژگیهایی مانند نوع داده، مقدار اولیه و وراثت.
- مثال در Vanilla CSS:
:root {
--main-color: #3498db;
}
.button {
background-color: var(--main-color);
}
- توی تیلویند هم خیلی فرق نمیکنه مثل همون has، اینم میتونید استفاده کنید
- سابگرید (Subgrid)
- ویژگی: ایجاد سابگرید در CSS Grid که با گرید اصلی همتراز میشود.
- مثال در Vanilla CSS:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.item {
display: subgrid;
grid-column: span 2;
}
- مثال در Tailwind 4: من چیزی توی مستندات Tailwind برای پشتیبانی از
subgrid
ندیدم.🔗 مستندات تیلویند در مورد ویژگی های جدیدش که حتما بخونیدش
🔗 مقاله MDN در مورد Container Query
🔗 رویداد google io که درمورد آینده CSS و UI وب هست
#آموزشی #مهم
@codeaghajcs
🔥2👍1
🐳 کتابخونه هایی برای کار کردن با زبان طبیعی انسان در زبان گو | Libraries for working with human languages.
- سایت Awsome Go کلی لیست از کلی کتابخونه برای کار های مختلف در Golang داره و این لیستش واقعا بدرد من خورد.
🔗 Natural Language Processing - Awesome Go
🔗 Awesome Go 👈 صفحه اولشو ببینین
#آموزشی
@codeaghajcs
- سایت Awsome Go کلی لیست از کلی کتابخونه برای کار های مختلف در Golang داره و این لیستش واقعا بدرد من خورد.
اگر میدونین که بدردتون میخوره، یگن بیشتر در مورد NLP مطلب بزارم. حقیقتش اخیرا خیلی دلم میخواد یه جهتی بدم به جریان یه سری پست آموزشی توی کانال (بجز لینک مقاله هایی که میزارم)
🔗 Natural Language Processing - Awesome Go
🔗 Awesome Go 👈 صفحه اولشو ببینین
#آموزشی
@codeaghajcs
👍1
🐳 کاربرد های Dock Typing در دنیای واقعی
- یکی از دوستان یه سوالی پرسید یه جایی و منم به این فکر افتادم که Dock Typing (مثل interface های زبان go) کجا ها توی پروژه های مختلف کمک آدم میکنه ؟
- ساده ترین مثالش، User و Admin User هست. شما چه Admin باشی چه یوزر معمولی باشی، میتونی توی یک گروه تلگرامی مثلا پیام بدی (اگر دسترسیتو نبنده کسی البته)
- حالا کافیه که وقتی میخواید توی گروه پیام بدید، تایپ پارامتر ورودی تابع رو از User بگیرید و مطمئین بشید که هرکس میاد، متد SendMessage رو داره !
- یکی از مثال هایی که رسید به ذهنم و یه جایی هم قبلا کار کردم باهاش، Load Balancer هستش. شما وقتی خیلی بزرگ میشید (مثل netflix و یوتیوب و فیلیمو و آپارات وP*rn Hub😄 که دارن ساعت ها ویدیو باکیفیت استریم میکنن) سرور های مختلفی برای کار های مختلف نیاز دارید (مثلا بکاپ و Cache) و همچنین اینکه باید بتونید ترافیک روی این سرورا بالانس کنید. همچنین توی مهندسی برق هم این اتفاق زیاد میوفتهو مثلا توی سیستم های کنترلی و پردازش سیگنال مثل رادار های پیچیده. (حتما رادار جت جنگنده نیست 😁)، Load Balancing بین پردازنده هایی که باید سیگنال ها رو تجذیه کنن اتفاق میوفته، همچنین توی مخابرات (ایرانسل و..) هم وقتی که سیستم خیلی بزرگ میشه، میان بین آنتن های یک منطقه توزیع بار (Load Blancing) انجام میدن که ترافیک بین ملت یکسان باشه!
- برای دیدن یک مثال عملی از این Load Balancing میتونید سورس پروژه X-Ray که به زبان go هم هست رو بخونید که میشه یه جورایی بنیان همین V2Ray هایی که داریم. یک سیستم خیلی جالب دارن که میان و node های شبکه سر راه پروکسی شما رو به دو دسته inbound و outbound تقسیم میکنن که هرکدوم کار های خودشون رو میکنن (نمیخوام وارد جزئیات شبکه ایش بشم) و خلاصه بگم که این یعنی باید درخواستا بین این outbound ها و inbound ها یه جور خاصی توزیع بشه! حتی برای مدیریت بار بین خود inbound ها و outbound ها هم باید یه چیزی باشه که مواظب باشه مثلا یک سرور inbound، بیشتر از بقیه روش فشار نیاد. این اینترفیس رو ببینید :
- یکم پیچیدست ساختارشون ولی اصلا مهم نیست برای ما، نکتش اینه که ممکن بوده چند جور Manager بخوان داشته باشن و مجبور میشن یه interface تعریف کنن که هر جا Manager بخوان مطمئن باشن اون چیزی که میاد، مثلا حتما متد
#آموزشی #مهم
@codeaghajcs
- یکی از دوستان یه سوالی پرسید یه جایی و منم به این فکر افتادم که Dock Typing (مثل interface های زبان go) کجا ها توی پروژه های مختلف کمک آدم میکنه ؟
- ساده ترین مثالش، User و Admin User هست. شما چه Admin باشی چه یوزر معمولی باشی، میتونی توی یک گروه تلگرامی مثلا پیام بدی (اگر دسترسیتو نبنده کسی البته)
type UserInGroup interface {
SendMessage(message string) bool
}
- حالا کافیه که وقتی میخواید توی گروه پیام بدید، تایپ پارامتر ورودی تابع رو از User بگیرید و مطمئین بشید که هرکس میاد، متد SendMessage رو داره !
- یکی از مثال هایی که رسید به ذهنم و یه جایی هم قبلا کار کردم باهاش، Load Balancer هستش. شما وقتی خیلی بزرگ میشید (مثل netflix و یوتیوب و فیلیمو و آپارات و
- برای دیدن یک مثال عملی از این Load Balancing میتونید سورس پروژه X-Ray که به زبان go هم هست رو بخونید که میشه یه جورایی بنیان همین V2Ray هایی که داریم. یک سیستم خیلی جالب دارن که میان و node های شبکه سر راه پروکسی شما رو به دو دسته inbound و outbound تقسیم میکنن که هرکدوم کار های خودشون رو میکنن (نمیخوام وارد جزئیات شبکه ایش بشم) و خلاصه بگم که این یعنی باید درخواستا بین این outbound ها و inbound ها یه جور خاصی توزیع بشه! حتی برای مدیریت بار بین خود inbound ها و outbound ها هم باید یه چیزی باشه که مواظب باشه مثلا یک سرور inbound، بیشتر از بقیه روش فشار نیاد. این اینترفیس رو ببینید :
type Manager interface {
features.Feature
// GetHandler returns an InboundHandler for the given tag.
GetHandler(ctx context.Context, tag string) (Handler, error)
// AddHandler adds the given handler into this Manager.
AddHandler(ctx context.Context, handler Handler) error
// RemoveHandler removes a handler from Manager.
RemoveHandler(ctx context.Context, tag string) error
}
- یکم پیچیدست ساختارشون ولی اصلا مهم نیست برای ما، نکتش اینه که ممکن بوده چند جور Manager بخوان داشته باشن و مجبور میشن یه interface تعریف کنن که هر جا Manager بخوان مطمئن باشن اون چیزی که میاد، مثلا حتما متد
AddHandler
رو داشته باشه. برای اینکه بیشتر بدونید به سورسشون یه نگاهی بندازید علی الخصوص این فایل که پیاده سازی مستقیم بالانسر هست.#آموزشی #مهم
@codeaghajcs
👍2
Forwarded from 🦞 Geek Engineers ([ Taha. Dostifam ])
Cyrus: A high-performance, statically-typed, manually memory-managed and procedural programming language empowered by GCCJIT. Made with Rust 🦀.
برای حمایت از ما میتونید توی گیت هاب ⭐️ بدید که خیلی به دیده شدنش توی explore گیت هاب کمک میکنه. همینطور اگر با دوستاتون شیر کنید خیلی خوشحال میشیم =) ❤️🤌🏿
Community:
@cyrus_lang
GitHub:
https://github.com/cyrus-lang/Cyrus-Lang
برای حمایت از ما میتونید توی گیت هاب ⭐️ بدید که خیلی به دیده شدنش توی explore گیت هاب کمک میکنه. همینطور اگر با دوستاتون شیر کنید خیلی خوشحال میشیم =) ❤️🤌🏿
Community:
@cyrus_lang
GitHub:
https://github.com/cyrus-lang/Cyrus-Lang
Code Agha
واقعا اسم پر مفهومی داره😂🤝 #فان
🐳 نرد فونت هم چیز خوبیه !
- اینا اومدن یه سری آیکون که روی تصویر میبینید رو وارد فونت های محبوب Monospace کردن (تعداشونو خودش زده بیش از 68) و این کمک میکنه ترمینال های باحال تری داشته باشید. کسایی که از چیزایی مثل NvChad استفاده میکنن بهشون نیاز دارن تا ایکون ها رو ببینن !
- برای استفاده از فونتاشون میتونید از Homebrew هم استفاده کنید یا از لینکی که پایین میزارم:
🔗 www.nerdfonts.com
🔗 دانلود فونتاشون
#لینوکس #فان
@codeaghajcs
- اینا اومدن یه سری آیکون که روی تصویر میبینید رو وارد فونت های محبوب Monospace کردن (تعداشونو خودش زده بیش از 68) و این کمک میکنه ترمینال های باحال تری داشته باشید. کسایی که از چیزایی مثل NvChad استفاده میکنن بهشون نیاز دارن تا ایکون ها رو ببینن !
کلا با ویم و پلاگیناش اینا زیادی کار کردن
- برای استفاده از فونتاشون میتونید از Homebrew هم استفاده کنید یا از لینکی که پایین میزارم:
brew install --cask font-<FONT NAME>-nerd-font
🔗 www.nerdfonts.com
🔗 دانلود فونتاشون
#لینوکس #فان
@codeaghajcs
1👍2🎉1
Forwarded from کانال اطلاعرسانی توزیع پارچ (Sohrab @sohrab:bsd.cafe)
ما تیم پارچ مفتخریم که به شما پورت پارچ لینوکس ریسکپنج (Parch Linux RISC-V) را معرفی کنیم. این پورت به طور خاص برای معماری ریسکپنج طراحی شده است و هدف آن ارائه یک محیط توسعه و تست کارآمد و پایدار برای علاقمندان و توسعهدهندگان است.
برای اطلاعات بیشتر و دستورالعملهای اجرایی، لطفاً به صفحه ویکی ما مراجعه کنید:
🔗 https://wiki.parchlinux.com/fa/parch-riscv
پ.ن: از اونجایی که این روش بر روی شبیهساز QEMU عمل میکنه بنابراین ممکن است عملکرد مطلوبی دریافت نکنید. همچنین به علت عدم وجود فریمبافر در کرنل ریسکپنج شبیهساز درحالت سریال کنسول و در پایانه (ترمینال) شما اجرا میشود.
@ParchLinux
برای اطلاعات بیشتر و دستورالعملهای اجرایی، لطفاً به صفحه ویکی ما مراجعه کنید:
🔗 https://wiki.parchlinux.com/fa/parch-riscv
پ.ن: از اونجایی که این روش بر روی شبیهساز QEMU عمل میکنه بنابراین ممکن است عملکرد مطلوبی دریافت نکنید. همچنین به علت عدم وجود فریمبافر در کرنل ریسکپنج شبیهساز درحالت سریال کنسول و در پایانه (ترمینال) شما اجرا میشود.
@ParchLinux
👍1
🐳 مهاجرت تدریجی Typescript به Go
- تیم TypeScript تصمیم گرفته که یه نسخه بومی (Native) از کامپایلرش بسازه و برای این کار، زبان Go رو انتخاب کرده. الان TypeScript کاملاً وابسته به Node.js و موتور V8 هست، که به این معنیه که برای اجرا حتماً به یه محیط جاوااسکریپتی نیاز داره. این وابستگی باعث میشه که سرعت اجرا، مصرف حافظه و ادغام با ابزارهای بومی محدود بشه. هدف این پورت بومی اینه که TypeScript بتونه بدون نیاز به محیط جاوااسکریپت روی پلتفرمهای مختلف، سریعتر و کارآمدتر اجرا بشه.
- برای رسیدن به این هدف، تیم TypeScript چند تا روش رو بررسی کرده. از پورتهای هیبریدی (ترکیب زبانهای بومی با جاوااسکریپت) تا بررسی کامپایلرهای جایگزین مثل swc، oxc و esbuild، اما در نهایت، تصمیم گرفتن که یه پورت کاملاً بومی با Go بسازن. دلایل این انتخاب هم چندتا نکته کلیدی بودن: سازگاری ساختاری با نسخه فعلی جاوااسکریپت، مدیریت حافظه بهینه و مشابه JS، و ابزارهای قوی و مدل همزمانی خوب Go که میتونه اجرای TypeScript رو خیلی سریعتر و سبکتر کنه. علاوه بر این، ادغام با محیطهای بومی و سیستمهای بدون جاوااسکریپت هم راحتتر میشه.
- اما این تصمیم توی کامیونیتی بیحرف و حدیث نبوده. بعضی از اعضای جامعه توسعهدهندگان از این انتخاب حمایت کردن، چون Go واقعاً یه زبان قوی و کارآمده و با این پروژه همخوانی داره. ولی یه سری هم نگرانیهایی داشتن. بعضیا میگفتن که منحنی یادگیری Go ممکنه برای بخشی از تیم و جامعه سخت باشه، یا اینکه شاید زبانهای دیگه مثل Rust یا Zig گزینههای بهتری باشن. اما در نهایت، تیم TypeScript معتقده که Go بهترین انتخاب برای این پروژهست و میتونه تجربه توسعه TypeScript رو در آینده سریعتر، سبکتر و پایدارتر کنه.
🔗 مقاله اصلی سایت مایکروسافت
🔗 ریپوزیتوری فعلی
🔗 چرا Go انتخاب شد؟
#خبر #مهم
@codeaghajcs
- تیم TypeScript تصمیم گرفته که یه نسخه بومی (Native) از کامپایلرش بسازه و برای این کار، زبان Go رو انتخاب کرده. الان TypeScript کاملاً وابسته به Node.js و موتور V8 هست، که به این معنیه که برای اجرا حتماً به یه محیط جاوااسکریپتی نیاز داره. این وابستگی باعث میشه که سرعت اجرا، مصرف حافظه و ادغام با ابزارهای بومی محدود بشه. هدف این پورت بومی اینه که TypeScript بتونه بدون نیاز به محیط جاوااسکریپت روی پلتفرمهای مختلف، سریعتر و کارآمدتر اجرا بشه.
- برای رسیدن به این هدف، تیم TypeScript چند تا روش رو بررسی کرده. از پورتهای هیبریدی (ترکیب زبانهای بومی با جاوااسکریپت) تا بررسی کامپایلرهای جایگزین مثل swc، oxc و esbuild، اما در نهایت، تصمیم گرفتن که یه پورت کاملاً بومی با Go بسازن. دلایل این انتخاب هم چندتا نکته کلیدی بودن: سازگاری ساختاری با نسخه فعلی جاوااسکریپت، مدیریت حافظه بهینه و مشابه JS، و ابزارهای قوی و مدل همزمانی خوب Go که میتونه اجرای TypeScript رو خیلی سریعتر و سبکتر کنه. علاوه بر این، ادغام با محیطهای بومی و سیستمهای بدون جاوااسکریپت هم راحتتر میشه.
- اما این تصمیم توی کامیونیتی بیحرف و حدیث نبوده. بعضی از اعضای جامعه توسعهدهندگان از این انتخاب حمایت کردن، چون Go واقعاً یه زبان قوی و کارآمده و با این پروژه همخوانی داره. ولی یه سری هم نگرانیهایی داشتن. بعضیا میگفتن که منحنی یادگیری Go ممکنه برای بخشی از تیم و جامعه سخت باشه، یا اینکه شاید زبانهای دیگه مثل Rust یا Zig گزینههای بهتری باشن. اما در نهایت، تیم TypeScript معتقده که Go بهترین انتخاب برای این پروژهست و میتونه تجربه توسعه TypeScript رو در آینده سریعتر، سبکتر و پایدارتر کنه.
🔗 مقاله اصلی سایت مایکروسافت
🔗 ریپوزیتوری فعلی
🔗 چرا Go انتخاب شد؟
#خبر #مهم
@codeaghajcs
👍1