Forwarded from Meitix (Null)
Meitix
توی دنیای لینوکسی به مفهوم کانتینر از قدیما میگفتن jail :) حالا سوالی که پیش میاد اگه داکر vm نیست پس چجوری پراسس هارو مدیریت میکنه؟ جواب کوتاه اینه که نمیکنه :) توی سیستم عامل های لینوکسی ما یه processی هست که اول از همه با pid 1 اجرا میشه, به اسم systemd…
مثلا اگه tini نباشه ما نمیتونیم graceful shutdown داشته باشیم چون child processها اصن sigkill بهشون نمیرسه
Forwarded from Meitix (Null)
Meitix
مثلا اگه tini نباشه ما نمیتونیم graceful shutdown داشته باشیم چون child processها اصن sigkill بهشون نمیرسه
البته میگن اگه چندتا برنامه توی کانتینر داریم باید از supervisord استفاده کنیم. تا restart policy بتونیم داشته باشیم. ولی خب داشتن چندتا برنامه توی یک داکر بر خلاف اصول داکر هستش
مگر اینکه با سیستم legacyی چیزی در حال کار باشیم
مگر اینکه با سیستم legacyی چیزی در حال کار باشیم
Forwarded from Meitix (Null)
بر همگان واضح هست که داکر چیزی به غیر از استفاده مفاهیم لینوکسی نیست. مفاهیمی که به کار برده:
🔸️ UTS namespace -> filesystem access and structure
🔸️ IPC namespace -> process communication over shared memory
🔸️NET namespace -> network access and structure
🔸️ USR namespace -> usernames and identifier
🔸️ chroot syscall -> control the location of filesystem root
🔸️cgroup -> resource protection
🔸️ CAP drop -> OS feature restriction
🔸️security modules
🔸️ UTS namespace -> filesystem access and structure
🔸️ IPC namespace -> process communication over shared memory
🔸️NET namespace -> network access and structure
🔸️ USR namespace -> usernames and identifier
🔸️ chroot syscall -> control the location of filesystem root
🔸️cgroup -> resource protection
🔸️ CAP drop -> OS feature restriction
🔸️security modules
Forwarded from DevTwitter | توییت برنامه نویسی
من یه پروژه دارم که یادگیری هامو اونجا به فارسی داکیومنت میکنم و ممکنه چیزی برای یاد دادن به بقیه داشته باشه
پروژه:
https://github.com/meiti-x/my-notes
داک ها:
https://meiti-x.github.io/my-notes/docs/intro
@DevTwitter | <Null/>
پروژه:
https://github.com/meiti-x/my-notes
داک ها:
https://meiti-x.github.io/my-notes/docs/intro
@DevTwitter | <Null/>
Forwarded from Meitix (Null)
Meitix
بر همگان واضح هست که داکر چیزی به غیر از استفاده مفاهیم لینوکسی نیست. مفاهیمی که به کار برده: 🔸️ UTS namespace -> filesystem access and structure 🔸️ IPC namespace -> process communication over shared memory 🔸️NET namespace -> network access and structure…
UTS Namespace
یه قابلیت ساده تو لینوکس که به هر کانتینر یه اسم مستقل(hostname) میده. مثل اینه که هر کانتینر یه کامپیوتر جداست با اسم خودش.
اول اینکه هر کانتینر میتونه اسم خودش رو انتخاب کنه. مثلاً میتونی یه کانتینر رو service-abas" صدا بزنی و یه دونه دیگه رو "service-asghar".
دوم اینکه بعضی برنامهها، مخصوصا اونایی که با شبکه کار میکنن، به این اسم نیاز دارن تا درست کار کنن. مثلا وقتی میخوای به کانتینر دیتابیس وصل بشی یا برای service discovery ها
سوم اینکه از نظر امنیتی خیلی مهمه. چون کانتینرها نمیتونن اسم اصلی سیستم رو ببینن یا تغییر بدن. اینطوری اگه یه کانتینر هک هم بشه، نمیتونه تو سیستم اصلی خرابکاری کنه
این قابلیت مثل اینه که به هر کانتینر یه کارت شناسایی بدی که فقط مال خودشه. بقیه نه میتونن کارت رو ببینن، نه میتونن تغییرش بدن
داکر از همین hostname ها برای dns اش استفاده میکنه
یه قابلیت ساده تو لینوکس که به هر کانتینر یه اسم مستقل(hostname) میده. مثل اینه که هر کانتینر یه کامپیوتر جداست با اسم خودش.
اول اینکه هر کانتینر میتونه اسم خودش رو انتخاب کنه. مثلاً میتونی یه کانتینر رو service-abas" صدا بزنی و یه دونه دیگه رو "service-asghar".
دوم اینکه بعضی برنامهها، مخصوصا اونایی که با شبکه کار میکنن، به این اسم نیاز دارن تا درست کار کنن. مثلا وقتی میخوای به کانتینر دیتابیس وصل بشی یا برای service discovery ها
سوم اینکه از نظر امنیتی خیلی مهمه. چون کانتینرها نمیتونن اسم اصلی سیستم رو ببینن یا تغییر بدن. اینطوری اگه یه کانتینر هک هم بشه، نمیتونه تو سیستم اصلی خرابکاری کنه
این قابلیت مثل اینه که به هر کانتینر یه کارت شناسایی بدی که فقط مال خودشه. بقیه نه میتونن کارت رو ببینن، نه میتونن تغییرش بدن
داکر از همین hostname ها برای dns اش استفاده میکنه
Forwarded from Meitix (Null)
Meitix
UTS Namespace یه قابلیت ساده تو لینوکس که به هر کانتینر یه اسم مستقل(hostname) میده. مثل اینه که هر کانتینر یه کامپیوتر جداست با اسم خودش. اول اینکه هر کانتینر میتونه اسم خودش رو انتخاب کنه. مثلاً میتونی یه کانتینر رو service-abas" صدا بزنی و یه دونه دیگه…
حالا uts مخفف unix time sharing هستش که هیچ ربطی نداره اصن😂😂
ولی قصیه اش اینه قدیما یه سیستم بین چندین کاربر به صورت همزمان اشتراک گذاشته میشد و هر کاربر فکر میکرد کل سیستم رو داره، اما در واقع CPU زمان رو بین همه تقسیم میکرد
دیگه از همون فلسفه استفاده کردن و اسمشو به یادگار همون گذاشتن 😅
ولی قصیه اش اینه قدیما یه سیستم بین چندین کاربر به صورت همزمان اشتراک گذاشته میشد و هر کاربر فکر میکرد کل سیستم رو داره، اما در واقع CPU زمان رو بین همه تقسیم میکرد
دیگه از همون فلسفه استفاده کردن و اسمشو به یادگار همون گذاشتن 😅
Forwarded from Meitix (Null)
علت اینکه میگن کدهای اسینک غیر قابل پیش بینیه و دیباگش سخته اینه که ۱۰ سال داره کار میکنه و شما یه تسک محاسبات سنگین مثل پردازش اکسل میزنید و اون کد قدیمیه خراب میشه به علت مسائل تایمینگی که در پس و پیش اضاف میشه و حالا شما باید ۱۰ سال کد رو مرور کنید که بفهمید مشکل از کجاست
Forwarded from Meitix (Null)
Wikipedia
BREACH
security exploit on HTTPS
Forwarded from Meitix (Null)
لینوکس تنها سیستم عامل دونیا😅
واقعا چیز جالبیه علتش اینه که core
شده مثلا خیلی چیزا که توی برنامه نویسی داریم از اونجا میاد.
مثلا pipe, jail(isolation), regex،makefile و کلی چیزا و شاید پترنای دیگه
پسر cron jobs برای ۱۹۷۰ه😂
همینجاست که لینوکس رو از یه سیستمعامل ساده جدا میکنه و تبدیلش میکنه به یه مکتب فکری
واقعا چیز جالبیه علتش اینه که core
شده مثلا خیلی چیزا که توی برنامه نویسی داریم از اونجا میاد.
مثلا pipe, jail(isolation), regex،makefile و کلی چیزا و شاید پترنای دیگه
پسر cron jobs برای ۱۹۷۰ه😂
همینجاست که لینوکس رو از یه سیستمعامل ساده جدا میکنه و تبدیلش میکنه به یه مکتب فکری
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
اگر به عنوان فرانت اند دولوپر هنوز توی پیاده سازی کردن ui ها مشکل دارید و فکر میکنید css در مواقعی خیلی براتون پیچیده میشه. حتی وقتی پیچیدگی ظاهری خاصی وجود نداره.
پیشنهاد میکنم طرز فکر box model رو تقویت کنید توی خودتون.
نگاهی که همه چیز رو با باکس هایی از بزرگ به کوچیک تقسیم بندی میکنیم تا ریز ترین جزئیات رو با بهترین کیفیت پیاده سازی کنیم.
موضوعی که امروز با یکی از رفقایی که تازه با html css شروع کرده حدودا یک ساعت توی گوگل میت بررسی کردیم و خفن ترین نتیجه رو گرفتیم. حقیقتا من که خیلی کیف کردم از اینکه تونستمدر این حد مسئله رو برای کسی که تازه شروع کرده ساده کنم (با حفظ تمام جزئیات در عین سادگی).😁
پیشنهاد میکنم طرز فکر box model رو تقویت کنید توی خودتون.
نگاهی که همه چیز رو با باکس هایی از بزرگ به کوچیک تقسیم بندی میکنیم تا ریز ترین جزئیات رو با بهترین کیفیت پیاده سازی کنیم.
موضوعی که امروز با یکی از رفقایی که تازه با html css شروع کرده حدودا یک ساعت توی گوگل میت بررسی کردیم و خفن ترین نتیجه رو گرفتیم. حقیقتا من که خیلی کیف کردم از اینکه تونستم
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
توی این ویس خودمونی اما پر از نکتههای ناب، برای اونایی صحبت کردم که واقعاً دارن تلاش میکنن و میخوان به جای نتیجههای نصفهنیمه، واقعاً استخدام باکیفیت و درستحسابی رو تجربه کنن. اگر دولوپر باانگیزهای هستی که شاید تجربه زیادی نداشته باشی ولی میخوای شانس استخدامت رو چند برابر کنی، این ویس دقیقا برای توئه — با راهحلهایی که از دل تجربه و شناخت واقعی بازار کار اومده.
حتی اگر این ویس رو گوش میدید، تبریک میگم، شما جزو اون چند درصد دولوپری هستید که نتیجه میگیرن. چون خیلیا حتی به خودشون زحمت نمیدن این ویس رو گوش بدن و دور از انتظار هم نیست 😉
Forwarded from Ditty | دیتی
🔺اکمااسکریپت ۲۰۲۵ و متدهای جدید Set
- توی جدیدترین آپدیت اکمااسکریپت (۲۰۲۵) متدهای جدید و کاربردی به مجموعه Set اضافه شده
- توی جدیدترین پست دیتی اونها رو بررسی میکنیم:
ditty.ir/589
#javascript
- توی جدیدترین آپدیت اکمااسکریپت (۲۰۲۵) متدهای جدید و کاربردی به مجموعه Set اضافه شده
- توی جدیدترین پست دیتی اونها رو بررسی میکنیم:
ditty.ir/589
#javascript
Forwarded from Ditty | دیتی
🔺آزادسازی قانونی جاوااسکریپت
- شاید جالب باشه که بدونیم مالکیت کلمهٔ «جاوااسکریپت» در اختیار شرکت اوراکل هست. این در حالیه که این شرکت نه جاوااسکریپت رو ساخته و نه تلاشی برای توسعهٔ اون انجام داده
- بهتازگی گروهی از افراد معروف حوزهٔ برنامهنویسی (از جمله خالق جاوااسکریپت، خالق نودجیاس، خالق npm و ۲۱هزار نفر دیگه) از طریق قانون درخواستی برای لغو مالکیت واژه «جاوااسکریپت» توسط اوراکل رو ارائه دادن
- دلیل این اقدام اینه که جاوااسکریپت اسم یک زبان برنامهنویسی عام هست که توسط میلیونها شخص و شرکت داره استفاده میشه. همچنین طبق قوانین امریکا اگه شرکتی از یک اسم برند طی مدت ۳ سال استفادهای نکنه، اون اسم میتونه به صورت قانونی از مالکیت شرکت بیرون بیاد
- اوراکل چکار کرد؟ اوراکل برای اینکه به دادگاه ثابت کنه که داره از کلمهٔ جاوااسکریپت استفادهٔ تجاری میکنه زیاد خودش رو به زحمت نینداخت. رفت از وبسایت رسمی نودجیاس یک اسکرینشات مرموزانه گرفت و به دادگاه ارائه داد و گفت «من دارم استفاده تجاری میکنم. لطفاً برند من رو تمدید کنید!»
- این کار باعث عصبانیت بیشتر رایان دال (مالک نودجیاس) شد. تا جایی که شکایتی رو در این مورد هم ثبت کرد (که البته شکایت برای این قسمت به جایی نرسید)
- اما موضوع آزادسازی و عامیت بخشیدن به کلمه «جاوااسکریپت» هنوز در حال بررسی هست و شرکت اوراکل تا تاریخ ۷ آگوست ۲۰۲۵ میبایست در این مورد اظهار نظر کنه
- این اتفاق چرا مهمه؟ توی دنیایی که کپیرایت اهمیت داره، استفاده کردن از نام جاوااسکریپت ممکنه تبعات قانونی برای افراد و سازمانها داشته باشه و برای همین افراد و سازمانها سعی میکنن با ریسک کمتری از این واژه استفاده کنن. مثلاً استفاده از JS Conf بجای JavaScript Conf
- صفحه رسمی با این درخواست:
https://javascript.tm
#javascript
- شاید جالب باشه که بدونیم مالکیت کلمهٔ «جاوااسکریپت» در اختیار شرکت اوراکل هست. این در حالیه که این شرکت نه جاوااسکریپت رو ساخته و نه تلاشی برای توسعهٔ اون انجام داده
- بهتازگی گروهی از افراد معروف حوزهٔ برنامهنویسی (از جمله خالق جاوااسکریپت، خالق نودجیاس، خالق npm و ۲۱هزار نفر دیگه) از طریق قانون درخواستی برای لغو مالکیت واژه «جاوااسکریپت» توسط اوراکل رو ارائه دادن
- دلیل این اقدام اینه که جاوااسکریپت اسم یک زبان برنامهنویسی عام هست که توسط میلیونها شخص و شرکت داره استفاده میشه. همچنین طبق قوانین امریکا اگه شرکتی از یک اسم برند طی مدت ۳ سال استفادهای نکنه، اون اسم میتونه به صورت قانونی از مالکیت شرکت بیرون بیاد
- اوراکل چکار کرد؟ اوراکل برای اینکه به دادگاه ثابت کنه که داره از کلمهٔ جاوااسکریپت استفادهٔ تجاری میکنه زیاد خودش رو به زحمت نینداخت. رفت از وبسایت رسمی نودجیاس یک اسکرینشات مرموزانه گرفت و به دادگاه ارائه داد و گفت «من دارم استفاده تجاری میکنم. لطفاً برند من رو تمدید کنید!»
- این کار باعث عصبانیت بیشتر رایان دال (مالک نودجیاس) شد. تا جایی که شکایتی رو در این مورد هم ثبت کرد (که البته شکایت برای این قسمت به جایی نرسید)
- اما موضوع آزادسازی و عامیت بخشیدن به کلمه «جاوااسکریپت» هنوز در حال بررسی هست و شرکت اوراکل تا تاریخ ۷ آگوست ۲۰۲۵ میبایست در این مورد اظهار نظر کنه
- این اتفاق چرا مهمه؟ توی دنیایی که کپیرایت اهمیت داره، استفاده کردن از نام جاوااسکریپت ممکنه تبعات قانونی برای افراد و سازمانها داشته باشه و برای همین افراد و سازمانها سعی میکنن با ریسک کمتری از این واژه استفاده کنن. مثلاً استفاده از JS Conf بجای JavaScript Conf
- صفحه رسمی با این درخواست:
https://javascript.tm
#javascript
JavaScript™
We need your help to continue our fight over Oracle's claim to the JavaScript trademark. Here's where we are now and what you can do to help.
Forwarded from Mulan (Saghar Mulan)
🔖 The Napkin Project
شخصی که این پروژه رو راهاندازی کرده Evan Chen که داور المپیاد جهانی ریاضیه دکتراش رو در نظریه اعداد از دانشگاه MIT گرفته. خودشم وقتی دبیرستانی بوده توی IMO مدال طلا میگیره. یه کتاب هم توی المپیاد در زمینه هندسه اقلیدسی نوشته. حالا این پروژهی Napkin رو برای دانشآموزان دبیرستانی راه انداخته که یکم با ریاضیات پیشرفتهتر در اون مقطع آشنا بشن. مثل جبر مجرد، توپولوژی، نظریه رستهها. به قول خودش سعی کرده یه light approach برای این مباحث باشه. پیشنهاد میکنم که حتما مقدمهی کتاب رو بخونید. بخشی از مقدمه:
"it is not the purpose of this book to train you to solve exercises or write proofs. I just want to show you some interesting math. I place a strong emphasis over explaining why a theorem should be true rather than writing down its proof. This is a recurrent theme of this book:
Natural explanations supersede proofs."
پ.ن: به نظرم حرکت خوبیه، دکتر ایرد هم بهمون گفته بود که یه سری کشورها در دبیرستان خیلی زودتر از دانشگاه با مفاهیم در جبر و دروس دیگه آشنا میشن.
شخصی که این پروژه رو راهاندازی کرده Evan Chen که داور المپیاد جهانی ریاضیه دکتراش رو در نظریه اعداد از دانشگاه MIT گرفته. خودشم وقتی دبیرستانی بوده توی IMO مدال طلا میگیره. یه کتاب هم توی المپیاد در زمینه هندسه اقلیدسی نوشته. حالا این پروژهی Napkin رو برای دانشآموزان دبیرستانی راه انداخته که یکم با ریاضیات پیشرفتهتر در اون مقطع آشنا بشن. مثل جبر مجرد، توپولوژی، نظریه رستهها. به قول خودش سعی کرده یه light approach برای این مباحث باشه. پیشنهاد میکنم که حتما مقدمهی کتاب رو بخونید. بخشی از مقدمه:
"it is not the purpose of this book to train you to solve exercises or write proofs. I just want to show you some interesting math. I place a strong emphasis over explaining why a theorem should be true rather than writing down its proof. This is a recurrent theme of this book:
Natural explanations supersede proofs."
پ.ن: به نظرم حرکت خوبیه، دکتر ایرد هم بهمون گفته بود که یه سری کشورها در دبیرستان خیلی زودتر از دانشگاه با مفاهیم در جبر و دروس دیگه آشنا میشن.
Forwarded from a pessimistic researcher (Kc)
سمِ شب
در semantics زبانهای برنامهنویسی finite data types ها رو مثل List و Tree و این صحبتا رو در قالب یک Initial Algebra نمایش میدن.
حالا امشب قراره شما گوش جان بسپاری به سخنان kc تا برات این سم خالص که nobody gives a fuck about رو عین قند ساده و خوشمزه توضیح بده.
بیاید اول ببینیم خود Algebra چیه. ببینید Algebra یک تاپل یا یک دوتایی هست مثل <x,y> که x یک مجموعه است و y یک عملیات روی اون مجموعه. با یک مثال اگر بخوام براتون بگم، x یک مجموعهای از تمام رشتههای متناهیه ( یعنی طول رشته محدوده مثل رشته aaa که طولش ۳ هستش وگرنه عناصر خود مجموعه نامتناهیه) که با استفاده از الفبای A ساخته میشه. یعنی خود الفبا هم یه مجموعه است. مثلا اگر الفبا باشه A={a} اون وقت مجموعهی رشتههای متناهی روی این الفبا میشه {a, aa, aaa, aaaa, ...} اصطلاحا به مجموعه x میگن carrier set. اینم به زبون ساده از من بپذیرید که مجموعهی تمام رشتههای متناهی ممکن که میشه بر اساس یک الفبا مثل A ساخت رو به شکل A* نمایش میدیم و به نوعی x رو همون A* در نظر میگیریم. حالا بیاید بر اساس مجموعه A* یه algebra تعریف کنیم. عملیات concatenation رو در نظر بگیرید که که میشه باهاش دو رشته رو بهم متصل کرد. مثلا اگر یک رشته داشته باشیم مثل aba و یک رشته داشته باشیم bcb اونوقت ادغام این دو رشته میشه ababcb.
جبرمون بر اساس A* و این اپراتور میشه :
<A*, \eta : ( 1 + ( A x A*)) -> A*>
همونطور که میبینید اپراتور eta یک تابع است که میاد یک مجموعهی تک عضوه یا همون singletone مثل {*} (یه چیز dummy که صرفا بتونیم باهاش empty word رو تعریف کنیم) رو مپ میکنه به یک رشتهی خالی با epsilon نمایش میدنش و ما توی جبرمون این مجموعه رو با 1 نمایش دادیم.
علاوه بر این، این تابع میاد و یک دوتایی مثل <a,w> که a عضو A هستش و w عضو A* هستش رو مپ میکنه به a.w که اینم عضو A* هستش.
خب اما حالا این شد مفهوم Algebra. باید بیایم تعریف کنیم که Initial Algebra چیه و نشون بدیم که چرا finite data type ها initial algebra هستند.
وقتی میگیم که A* یک initial Algebra هستش یعنی اولا : که کوچکترین algebra در نوع خودش هست یعنی کوچکترین مجموعهای هستش که نسبت به اوپراتوری که روش تعریف میکنیم بسته هست. منظور از بسته بودن یعنی حاصل انجام اون اوپراتور روی هر دو عضوی از مجموعه A* به ما میدهد یک عضوی از مجموعه A*. دوما : به ازای هر Algebra مثل B که روی همون اوپراتور تعریف شده یک homomorphism یکتا وجود داره که ساختار رو حفظ میکنه یا به عبارت دیگه :
h : A* -> B
خب حالا وقتشه که اون سوال احمقانه رو بپرسیم که homomorphism یکتا چیه؟ خب اول باید بگم که خودتو آماده کن یکم category theory یاد بگیری :)
زمانی که ما دو تا algebra داریم به شکل (A, a) و (B,b) که A همون Carrier set ما هستش و a هم همون اوپراتور یا ساختار جبر یا به قول احمقای حوزه کتگوری morphism که فرمالی تعریفش میشه :
a : F(A) -> A
یک homomorphism مثل h وجود داره که :
h : A ->B
به شرطی که :
h∘a = b∘F(h)
پس در حقیقت homomorphism یک تابع هستش که باید شرط فوق رو ارضا کنه.
خب حالا که فهمیدیم initial algebra چیه بریم و List رو توی زبانهای برنامهنویسی در قالب یک Initial lagebra نمایش بدیم :
List(A) فرض کنید تایپ لیست ما اینه
اوپراتورش اینطوری تعریف میشه :
nil : 1 -> List(A) لیست تهی
cons : A x List(A) -> List (A) اضافه کردن یک المنت به لیست
که ترکیب شون میشه :
[nil,cons]:1+ (A×List(A)) ->List(A).
در نتیجه میتونیم بگیم که List(A) یک initial algebra هستش برای فانکتور :
F(X) = 1 +( A x X)
یعنی هر تابعی که با توصیف عملیاتهای nil و cons تعریف بشه رو میشه به شکل یکتا به یک homomorphism تعمیم داد.
توی functional programming شما این کار رو با foldr میکنید :)
خلاصه جونم براتون بگه که از خیر تعریف least fix-point و induction روی intial algebra هم عبور میکنیم
در semantics زبانهای برنامهنویسی finite data types ها رو مثل List و Tree و این صحبتا رو در قالب یک Initial Algebra نمایش میدن.
حالا امشب قراره شما گوش جان بسپاری به سخنان kc تا برات این سم خالص که nobody gives a fuck about رو عین قند ساده و خوشمزه توضیح بده.
بیاید اول ببینیم خود Algebra چیه. ببینید Algebra یک تاپل یا یک دوتایی هست مثل <x,y> که x یک مجموعه است و y یک عملیات روی اون مجموعه. با یک مثال اگر بخوام براتون بگم، x یک مجموعهای از تمام رشتههای متناهیه ( یعنی طول رشته محدوده مثل رشته aaa که طولش ۳ هستش وگرنه عناصر خود مجموعه نامتناهیه) که با استفاده از الفبای A ساخته میشه. یعنی خود الفبا هم یه مجموعه است. مثلا اگر الفبا باشه A={a} اون وقت مجموعهی رشتههای متناهی روی این الفبا میشه {a, aa, aaa, aaaa, ...} اصطلاحا به مجموعه x میگن carrier set. اینم به زبون ساده از من بپذیرید که مجموعهی تمام رشتههای متناهی ممکن که میشه بر اساس یک الفبا مثل A ساخت رو به شکل A* نمایش میدیم و به نوعی x رو همون A* در نظر میگیریم. حالا بیاید بر اساس مجموعه A* یه algebra تعریف کنیم. عملیات concatenation رو در نظر بگیرید که که میشه باهاش دو رشته رو بهم متصل کرد. مثلا اگر یک رشته داشته باشیم مثل aba و یک رشته داشته باشیم bcb اونوقت ادغام این دو رشته میشه ababcb.
جبرمون بر اساس A* و این اپراتور میشه :
<A*, \eta : ( 1 + ( A x A*)) -> A*>
همونطور که میبینید اپراتور eta یک تابع است که میاد یک مجموعهی تک عضوه یا همون singletone مثل {*} (یه چیز dummy که صرفا بتونیم باهاش empty word رو تعریف کنیم) رو مپ میکنه به یک رشتهی خالی با epsilon نمایش میدنش و ما توی جبرمون این مجموعه رو با 1 نمایش دادیم.
علاوه بر این، این تابع میاد و یک دوتایی مثل <a,w> که a عضو A هستش و w عضو A* هستش رو مپ میکنه به a.w که اینم عضو A* هستش.
خب اما حالا این شد مفهوم Algebra. باید بیایم تعریف کنیم که Initial Algebra چیه و نشون بدیم که چرا finite data type ها initial algebra هستند.
وقتی میگیم که A* یک initial Algebra هستش یعنی اولا : که کوچکترین algebra در نوع خودش هست یعنی کوچکترین مجموعهای هستش که نسبت به اوپراتوری که روش تعریف میکنیم بسته هست. منظور از بسته بودن یعنی حاصل انجام اون اوپراتور روی هر دو عضوی از مجموعه A* به ما میدهد یک عضوی از مجموعه A*. دوما : به ازای هر Algebra مثل B که روی همون اوپراتور تعریف شده یک homomorphism یکتا وجود داره که ساختار رو حفظ میکنه یا به عبارت دیگه :
h : A* -> B
خب حالا وقتشه که اون سوال احمقانه رو بپرسیم که homomorphism یکتا چیه؟ خب اول باید بگم که خودتو آماده کن یکم category theory یاد بگیری :)
زمانی که ما دو تا algebra داریم به شکل (A, a) و (B,b) که A همون Carrier set ما هستش و a هم همون اوپراتور یا ساختار جبر یا به قول احمقای حوزه کتگوری morphism که فرمالی تعریفش میشه :
a : F(A) -> A
یک homomorphism مثل h وجود داره که :
h : A ->B
به شرطی که :
h∘a = b∘F(h)
پس در حقیقت homomorphism یک تابع هستش که باید شرط فوق رو ارضا کنه.
خب حالا که فهمیدیم initial algebra چیه بریم و List رو توی زبانهای برنامهنویسی در قالب یک Initial lagebra نمایش بدیم :
List(A) فرض کنید تایپ لیست ما اینه
اوپراتورش اینطوری تعریف میشه :
nil : 1 -> List(A) لیست تهی
cons : A x List(A) -> List (A) اضافه کردن یک المنت به لیست
که ترکیب شون میشه :
[nil,cons]:1+ (A×List(A)) ->List(A).
در نتیجه میتونیم بگیم که List(A) یک initial algebra هستش برای فانکتور :
F(X) = 1 +( A x X)
یعنی هر تابعی که با توصیف عملیاتهای nil و cons تعریف بشه رو میشه به شکل یکتا به یک homomorphism تعمیم داد.
توی functional programming شما این کار رو با foldr میکنید :)
خلاصه جونم براتون بگه که از خیر تعریف least fix-point و induction روی intial algebra هم عبور میکنیم
Forwarded from a pessimistic researcher (Kc)
a pessimistic researcher
سمِ شب در semantics زبانهای برنامهنویسی finite data types ها رو مثل List و Tree و این صحبتا رو در قالب یک Initial Algebra نمایش میدن. حالا امشب قراره شما گوش جان بسپاری به سخنان kc تا برات این سم خالص که nobody gives a fuck about رو عین قند ساده و خوشمزه…
1-s2.0-S0304397500000566-main.pdf
449.9 KB
با در نظر داشتن این بکگراند شما رو دعوت میکنم تا این مقالهی زیبا از آقای Jan Rutten بخونید.
Forwarded from Linuxor ?
ایلان ماسک یه توییت زده و گفته گراک 4 حتی از Cursor هم توی کد زدن بهتر عمل میکنه و به قدری تاکید داره که توییتش رو پین کرده !
البته گراک 4 هنوز رایگان نیست ولی ممکنه بعدا رایگان بشه؛ بعضی کاربرا که تستش کردن نتیجه خوبی گرفتن و خبر از درک فوق العاده بالای گراک 4 از اجسام سه بعدی دادن این میتونه یه جهشی توی بازی سازی و صنعت ویدیویی باشه.
@Linuxor
البته گراک 4 هنوز رایگان نیست ولی ممکنه بعدا رایگان بشه؛ بعضی کاربرا که تستش کردن نتیجه خوبی گرفتن و خبر از درک فوق العاده بالای گراک 4 از اجسام سه بعدی دادن این میتونه یه جهشی توی بازی سازی و صنعت ویدیویی باشه.
@Linuxor
Forwarded from Laravel News
Custom Object Casting in Laravel Models https://laravel-news.com/cast-attributes
Laravel News
Custom Object Casting in Laravel Models - Laravel News
Laravel's custom object casting transforms database attributes into value objects through the CastsAttributes interface. Build sophisticated data handling with rich domain objects while maintaining simple database storage patterns.