Code‌ Agha
195 subscribers
343 photos
20 videos
21 files
280 links
Here we are talking about computer science and the development of software and algorithms and..

Boost: https://t.me/boost/codeaghajcs
Coffie: https://www.coffeebede.com/codeagha
Github : https://github.com/AmirMahdyJebreily
Email : amirmahdyjdx@gmail.com
Download Telegram
📄 برنامه نویسی تابعی در تایپ اسکریپت | Functional Programming in TypeScript

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

🔗 Functional Programming in TypeScript

#آموزشی #مهم
@codeaghajcs
👍1
🐳 خب من دیشب برای اولین بار تو عمرم Go رو به wasm کامپایل کردم و نتیجه این شد! پروژه خاصی نیست ولی سریعه، حتی با اینکه من از یه کتابخونه Third-party جاوا اسکریپتی قدیمیِ کُند، در حالت غیر async دارم استفاده میکنم، بازم سریعه.
(اسمش MathJax هست و برای نمایش اون عبارت ریاضی با یه پرامپت ساده LaTeX هست.)
میتونید دمو رو ببینید.

🔗 https://github.com/AmirMahdyJebreily/WasmDegreeToRadians?tab=readme-ov-file


- البته این موضوع که wasn کلا سریعه یه بحث دیگست. باید یه بار تست کنم بینم go توی wasm سریع تره یا c یا fortran یا یه چیز دیگه مثل سی‌شارپ مثلا!

@codeaghajcs
👍3💯1
The iconic Windows XP 'Bliss' desktop wallpaper shown above in 2001 and below in more recent years. location: Sonoma, California, USA
4👍1💔1
📄 ۵ دلیل برای شروع استفاده از کامند لاین لینوکس | 5 Reasons to Start Using the Linux Command Line

- ترمینال، چیزیه که از خیلیم، وقتی که هنوز رابط کاربری گرافیکی ها وجود نداشتن (اصطلاحا GUI ها)، وجود داشته و شما میبینید که حتی توی ۲۰۲۴ که ما صفحه لمسی و کلی رابط کاربری گرافیکی قشنگ داریم، گوگل پلن داره یه ترمینال برای اندروید بده بیرون 🤝. ترمینال اهمیت، سرعت و توانایی کنترل بالایی داره.

🔗 5 Reasons to Start Using the Linux Command Line

#مقاله
@codeaghajcs
👍1
📄 ۱۰ نکته مهم کلین کد | Top 10 Clean Code Rules 🎨🚀

- مقاله بشدت خوبیه برای نوشتن کد تمیز، اگر وقت خوندن کلی کتاب رو ندارین، این کمک بزرگیه. (اصلا جایگزین خوبی نیست فقط کمک بزرگیه!)

🔗 Top 10 Clean Code Rules 🎨🚀

#مقاله

@codeaghajcs
👍2
📄 ۷ پروژه بینایی رایانه برای همه سطوح | 7 Computer Vision Projects for All Levels

- حتما ببینید این مقاله رو، من توضیح بیشتری نمیدم!

🔗 7 Computer Vision Projects for All Levels

#مقاله #مهم
@codeaghajcs
👍1
📄 توسعه تست محور، یک راهنمای جامع | Test-Driven Development: A Comprehensive Guide

- توسعه تست محور، مبناش بر این اساسه که شما قبل از نوشتن کد اصلی، تست اون کد رو بنویسی. مثلا اگر میخوای یه لایبرری بسازی برای تبدیل تایم‌استمپ به زمان و تاریخ آدمیزادی خودمون، اول باید تستشو بنویسی :
public class TimeStampConverterTest
{
[Fact]
public void TestConvert()
{
var got = Converter.Convert(1);
var want = new DateTime(1970,1,1);
Assert.Equal(want, got);
}
}

- حالا که تستشو نوشتی میای و fake آمادش میکنی تا تستت ران بشه و خطا نده:
public static class Converter
{
public static DateTime Convert(long tmstmp){
return new DateTime(1970,1,1)
}
}

- حالا که تستات ران شدن میای و کد رو کامل میکنی 👍

- توسعه تست محور اینطوریه و کلی مزایا و معایب داره که میتونید کاملشو تو این مقاله که اونم با #سی_شارپ کار کرده ببینید. اگر تازه کار هستین بازم تست نوشتن رو باید یاد بگیرین:

🔗 Test-Driven Development: A Comprehensive Guide

#مقاله #مهم
@codeaghajcs
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🐳 یه کار باحال با سینتکس جاوا اسکریپت

- یه چیزی داریم که تو بیشتر زبون های تابع‌گرا بهش پرداخته میشه و اون هم Clouser یا بَستار هست. وقتی اتفاق میوفته که شما یه تابع رو توی scope مشخصی تعریف میکنی و حالا اون تابعی که داری تعریف میکنی، به تمام متغیرای اون scope دسترسی داره (توی ویدیو میگم چرا براشون جالبه این اتفاق).

- با این Clouser ها میشه یه کار باحال کرد:
function sum(n){

// Clouser 👇
return function(m){
if(m == null){
return n
}
return sum(n + m)
}
}

- توی ویدیو بهتر توضیح میدم که چی می‌شه ولی تهش میتونید همینقدر جالب ازش استفاده کنید:
sum(5)(4)(-3)(45)(34)()

- و جواب کل این جمع ما میشه 85 !

- حتما ویدیو رو ببینین و اگر میخواید درمورد Clouser ها بیشتر بدونید این مقاله رو بخونید:
🔗 MDN / Web / JavaScript / Closures

#آموزشی #فان

@codeaghajcs
👍41
🐳 کار های باحالا با iota در زبان Go

- من تو گپ پینک اورکا گفتم iota توی زبان گو کاربرد های بزرگ تری بجز صرفا مثل بقیه زبون ها enum ساختن داره و این و یه سری پست بعدی در این مورد هستن.

- یکی از چیزایی که همیشه توی go دوست دارم اینه که نمیاد ساختار های دست‌وپا گیر بقیه زبون ها رو بهت قالب کنه. میزاره خلاق باشی. مثلا اگر شما بخوای توی چیزی مثل سی‌شارپ enum داشته باشی، محدود خواهی بود :

enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}


- شما اینجا محدودی به یه تایپ و اگر هم عدد بدی عدد شما قبوله و اگر عدد ندی خودش یکی یکی اضافه میکنه و شما کنترل بیشتری نداری (فرض بر اینه که نیاز بیشتری نداری)
- ولی در go شما همچین ساختاری نداری، بجاش فقط یه کلمه کلیدی داری به نام iota که یه سری کار انجام میده و با اون کار ها، میتونی خودت برای خودت همچین ساختاری رو اوکی کنی و حتی خلاقیت خودتم قاطیش کنی :
const(
None = 1 << iota
Unknown
ConnectionLost
)

- کد های بالا یکم عجیبن (چرا باید شیفت بیتی استفاده کنم ؟)
- در واقع هیچ دلیلی نداشت فقط چون دلم میخواست هر بار به توان 2 برسن عددای بیشتر از یک، شیفت بیتی دادم (چون دلم خواسته و گو هم دستمو تو این کار ها باز گذاشته)

- یا مثلا یه نمونه که این واقعا کاربردیه. شما میتونی اینطوری به یه سری عدد ثابت که از فرمول های ثابت بدست میان رو داشته باشی، مثل کیبی‌بایت :
const (
_ = 1 << (10 * iota) // دلم این مقدارو نخواست
KB // 1024
MB // 1048576
)

- این مثال معروفیه، چند جا دیدمش و قبلشم مشابهشو پیاده کردم پس نمیشه گفت کپیه (ولی مثال بعدی کپیه 🙃)


- نمونه های بالا، یکم از سر خالی شدن حرصم روی ساختار های دست‌وپا گیر بود، ولی یه مثال کاربردی ببینیم که از اینجا ورش داشتم :

const (
read = 1 << iota // 0001 = 1
write // 0010 = 2
remove // 0100 = 4
admin = read | write | remove // 7
)


شما میبینید که تهش، admin میشه Or شده همه مقادیر بانری قبلی، یعنی یه جورایی داریم طی یه قائده ای کد های enum خودمون رو بر اساس مقدار های دیگه میچینیم.

- حالا بیاین از خواص دیگر go استفاده کنیم، بیاید یه تایپ تعریف کنیم برای ارور های Http و ببینیم چقدر راحت میشه این ها رو با ترکیب قابلیت های go توی برنامه آورد :
type HttpErr int  

const ClientErrs = 400

func (e *HttpErr) PrntErr() string {
// ارور مناسب رو چاپ کن
}

const (
BadRequest HttpErr = ClientErrs + iota
Unauthorized
PaymentRequired
Forbidden
NotFound
)

- حالا برای استفاده از این ارور ها توی برنامه، کافیه همچین کاری کنی :
log(BadRequest.PrntErr())

- این همه قابلیت، در کنار هم هیچکدوم اون Class های سنتی دات نت و جاوا و پایتون و... نیستن ولی معادل اونها عمل میکنن و به شما اجازه میدن خلاقیتتونو بکار بگیرید. یکی از دوستای من یه جمله گفت در مورد Go اونم این بود که شما با سی‌شارپ و پایتون و جاوا و... نمیتونی ادای Go رو در بیاری ولی با Go میتونی ادای همشونو در بیاری (عملا میشه ساختار ارثبری کلاس ها رو چه با prototype چه بدون اون پیاده سازی کرد با خود Go)
- با سی و راست هم میشه ادای بقیه رو در آورد (جهت جلو گیری از سوء برداشت)

پ.ن : اگر شیفت های بیتی این مثال ها رو متوجه نشدین، این پست همین کانال رو ببینین.

#آموزشی #مهم
@codeaghajcs
12👍1
Forwarded from Woland's Linux Journal (Woland)
💠جایزه‌ی بنیاد نرم‌افزار آزاد اروپا💠

جایزه‌ی بنیاد نرم‌افزار آزاد اروپا به برم مولنار خالق ویم اهدا شد.

این جایزه که به‌صورت پس از مرگ (posthumously) به او اهدا شده، گرامی‌داشت زحمات ۳۲ ساله‌ی او در خلق بهترین و کامل‌ترین ویرایشگر متن و کمک به بهینه‌سازی مدل‌های ویرایش متنی و پرداخت ایده‌های نوین در این زمینه است.

#vim
#ویم
#خبر
2👍2
This media is not supported in your browser
VIEW IN TELEGRAM
~> آراسته

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

اگه توزیع بر پایه آرچ دارید هم می‌تونید با AUR پکیج araste-git رو به سادگی نصب کنید.

#معرفی #لینوکس #فان
~> @PinkOrca 🩷
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
📄 پلی‌فیل هایی که بیشتر توی مصاحبه ها پرسیدن میشن در جاوا اسکریپت | Most Asked Polyfills in JavaScript Interviews

- پلی‌فیل به قطعه کد هایی میگن که کار های جاوا اسکریپت های جدید رو توی مرورگر های قدیمی انجام میدن و یه جورایی مثل پُل هستن بیین دنیای بعد از Es6 و قبل اون. نمونش همین foreach هست که وسط مقاله بهش پرداخته شده :
Array.prototype.myForEach = function(callback) {
for (let i = 0; i < this.length; i++) {
callback(this[i], i, this);
}
};

const arrData = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arrData.myForEach((element) => {
console.log(element);
});

- در js های قدیمی، foreach توی پروتوتایپ آرایه ها وجود نداشته (اطلاعات بیشتر در این پست) و مجبور بودن اینطوری اضافه کنن و این میشه که خیلی جا ها این رو توی مصاحبه ها بپرسن که ببینن اینی که داره foreach استفاده میکنه، میدونه چطوری ساخته میشه یا نه!

- پیشنهاد میکنم حتی اگر نمیخواید جایی برید مصاحبه، باز هم یه نگاهی به این مقاله خیلی قشنگ بندازین :

🔗 Most Asked Polyfills in JavaScript Interviews

#مقاله #آموزشی #مهم
@codeaghajcs
1👍1
📄 نگاهی نزدیک به تفاوت راه‌حل های اینتل و AMD برای چسبوندن سی‌پی‌یو ها به هم | A closer look at Intel and AMD's different approaches to gluing together CPUs

- در طراحی سی‌پی‌یو ها، برای کوچیک کردن ترانزیستور ها محدودیت وجود داره و از یه حدی کوچیک تر نمیشن (میرن وارد اندازه های کوانتومی میشن و از قطر الکترونا کوچیک تر میشن و اونجاست که انگار بجای یه مدار، گاوداری الکترونی زدی!). توی همچین شرایطی، هسته بیشتر برای سی‌پی‌یو ها، یعنی سیلیکون بیشتر (چون Core ها کوچیک تر نمیشن تا سیلیکون کمتری لازم داشته باشن).

- شرکت های بزرگی مثل Intel و AMD با استراتژی های متفاوتی تصمیم گرفتن و واقعیت این استراتژیا اینه که این شرکتا صرفا دارن سی‌پی‌یو به هم میچسبونن.

🔗 A closer look at Intel and AMD's different approaches to gluing together CPUs

#مقاله
@codeaghajcs
1👍21
This media is not supported in your browser
VIEW IN TELEGRAM
🐳 ایشون با کلی گنده گویی و تحقیر ۵ تا سوال برنامه نویسی (منظور اصطلاح کم کاربرد در حوزه کامپیوتر هست!) رو طوری پرسیدن که آدم خیال برش میداره خود ایشون عمری مجاهدت خالصانه در راه علوم کامپیوتر کردن و حالا تفضل فرمودن و ما محقران بارگاهشون رو مستفیض عنایات عالمانه کردن!
ما توی پست بعد با هم به همه سوال های بشدت مخوف و حرفه ای ایشون میپردازیم !

@codeaghajcs
1👍2🤝1
🐳 سوال مخوف اول رو پرسیدن لیسکو چیه !
- لیسکو سومین اصل SOLID هست و میگه که اگر کلاس B از کلاس A ارث‌بری کرده باشه، شما باید جا هایی از برنامه بتونید این دوتا رو با هم جایگزین کنید طوری که برنامه خراب نشه!
- کاربرد این حرکت هم مشخصه دیگه، از استاندارد های کد تمیز تا برنامه نویسی پویا و...
- نکتش اینه که SOLID برای برنامه نویسی های شئ‌گرا بیشتر مطرحه و الان برنامه‌نویسی که با Erlang یا Go کار میکنه اصلا با این چیزا سر و کار نداره 🙃 (اونجا Dock Typing دارن که یه جورایی پدر این تفکرات لیسکو محسوب میشه، گرچه اون ها از سطح متوسط رد نشدن بقول حاجاقا)

🐳 بعد سوال مخوف و حیرت‌آور دوم رو پرسیدن که حافظه هیپ و استک چیه؟
- جواب بشدت ساده این سوال بظاهر سخت، اینجاست که استک به تخصیص حافظه ای میگن که برای کامپایلر حدود حدودش مشخصه و لازم نیست فکر کنه چقدر، خودش میدونه چقدر و هیپ به تخصیص حافظه ای میگن که برای کامپایلر مشخص نیست!
- توی دنیایی که پایتون صدر کامیونیکیشن های گیت‌هابه، این چیزا مثل قصه های لاوکرفت برای برنامه نویسا میمونه (وحشت کیهانی 😱)
- خدایی الان این بدیهی نیست؟ این انتهای نتیجه گیریش همون ماجرای معروف value type و رفرنس تایپه. فقط تاحالا به این اسم نشنیدن خیلیا

🐳 بعد پرسیدن سمافور چیه ؟ (خدایی این چه مضخرفیه دیگه!)
- سمافور میشه اون متغیری که به حافظه مشترک بین چند تا ترد دسترسی داره و هر ترد موقع کار، میاد جلوی بقیه رو میگیره تا از این استفاده نکنن و...
- والا این همه توسعه دهنده اومدن وبلاگ و داکیومنت گو رو نوشتن ما یه جا هم این اسم مضخرف پیرمردی رو برای این اتفاق ندیدیم!
- بعد جالبیش اینجاست که سازنده های گو اومدن یه چیزی درست کردن به نام channel که ما مجبور نشیم از این مدیریت حافظه های اینطوری استفاده کنیم بعد ایشون میاد با یه غروری میپرسه سمافور چیه انگار دیشب تو غار بهش وحی شده و تو چه میدانی سمافور چیست؟!

🐳 بعد ایشون مجدد پرسیدن توی تست نویسی یا توی TDD (وات د فاک؟!) AAA چیه؟
- اولا که تست نوشتن با TDD فرق داره، اونم توی این پست توضیح دادم (ویدیوی رامین رو ببینین 🤓)
- این هم که پرسیدن AAA چیه، درواقع مخفف Arange-Act-Assert هست که یه استراتژی بدیهیه توی یونیت تست نوشتن (نه تست‌نویسی و نه TDD) که میگه آقا بیا هر یونیت تست رو به سه بخش تقسیم کن، اول مقدمات تست رو به ترتیب بچین (Arrange)، بعد عملی که میخوای تست کنیو انجام بده (Act) و بعد هم ادعای درست بودن بکن (Assert) که یعنی ببین نتیجه درسته یا نه!
- خب هر آدمی بخواد یونیت تست بنویسه همین کارو میکنه دیگه. مثلا اگر از کلاس نمونه نسازی نمیتونی متد توش رو تست کنی که !

📄 به رسم کدآقا، مطالعه بیشتر در مقاله زیر

🔗 Unit Testing and the Arrange, Act and Assert (AAA) Pattern


🐳 آی او اسی هم که دیگه خیلی قدیمیه حاجی جان!
- یه دیزاین پترنه که میاد نیازمندی های هر کلاس رو کنترل میکنه (اسم دیگه همون Dependency Injection)

🐳 تمام موارد مثل مدل آخر، صرفا یه اسم با اختصار برای یه اتفاق ساده یا یه چیز بدیهی یا یه چیزی که همین الانم داریم باهاش کار میکنیمه. ایشون فقط این اصطلاح های کم کاربرد که دونستنش هیچ توفیقی نداره رو با بزرگ‌نمایی یه کاری میکنه که شما فکر کنین وای چه چیز مهمیه که نمیدونم واااای (روش مدائنی و مدحج)
- نتیجه این اتفاق میشه یادگرفتن برنامه نویسی با مدل مدرسه های دهه ۶۰
- اینکه من بدونم اسم فلان چیز چیه که منو برنامه‌نویس نمیکنه! هر چیزی که گفت اسم به ظاهر های خفن و غیر رایج برای بدیهیات بود!
- اینطوری شما رو خر میکنه که شما فکر کنی نمیدانی و او میدونه و خودش رو قانع کنه بله بله من خفنم (فقط خیلی اتفاقی بیل‌گیتس نشدم!)

🐳 کد آقا
@codeaghajcs
1👍3🔥1🏆1👨‍💻1
🐳 چرا وردپرس خوب نیست؟

#فان
@codeaghajcs
🤣3👎2👍1💩1
This media is not supported in your browser
VIEW IN TELEGRAM
🔔 تجربه تازه هوش‌مصنوعی با Paint و نوت‌پد در Windows Insiders منتشر می‌شود | New AI experiences for Paint and Notepad begin rolling out to Windows Insiders

- فقط قابلیت های Generative fill و Generative erase اضافه شدن به پینت که Generative fill یه بخشی از تصویر رو با هوش مصنوعی پُر می‌کنه ولی نیاز داره توی اکانت مایکروسافتتون لاگین کرده باشین و روی Copilot + Snapdragon Pc ها در دسترسه ولی Generative erase که یه بخشی از تصویر رو با هوش مصنوعی حذف میکنه برای همه کاربر های windows 11 در دسترسه

- بخش جذابش آپدیت هوش مصنوعی Notepad هست که قابلیت تنظیم tone (لحن) متن رو داره و من بشدت تعجب کردم!

ولی مایکروسافته دیگه، همیشه یه بامبولی درست میکنه. همین الان دل خوشی به این لاگین لاگین بازیاش ندارم...


- ایشالا در یه حرکت جهادی یه پلاگین برای Vim مینویسیم همه رو میاریم اونجا تا چشم مایکروسافت امپریالیست کافر در بیاد 💪

🔗 New AI experiences for Paint and Notepad begin rolling out to Windows Insiders

#خبر #ویندوز
@codeaghajcs
12🤣1