Forwarded from نوشتههای ترمینالی
خیلی وقتا برای ما پیش میاد که تو یه برنچی کار میکنیم که میخوایم با main/master مرجش کنیم ولی کس دیگهای اول مرج میکنه برنچشو و ما conflict میخوریم.
حالا وقتی میخوایم کانفلیکتها رو حل کنیم میتونیم برنچ main رو با برنچ خودمون merge کنیم یا برنچ خودمون رو rebase کنیم به main جدید.
اینکه کدومش خوبه کدومش نه، جوابش بستگی دارهس!
تو تیمهایی که جونیور زیاد دارن توصیه میشه مرج کنید و تموم. اینطوری تاریخچه پیچیدهتری دارید (چون چرا یهو main تو یه برنچ مرج شده) ولی مجیک خاصی اتفاق نمیافته.
از طرفی rebase باعث میشه که یه تاریخچه شبیهسازی شده و جدید به وجود بیاد که توش کامیتهای برنچ جدید شما انگار بعد از آخرین کامیت main به وجود اومدن! برای کسی که بعدا نگاه کنه فهمش راحت تره ولی نکته اینه که چنین چیزی اصلا وجود نداشته و ممکنه مشکل لاجیکی تو کد ایجاد کنه.
تو این ویدیو این بحث رو خیلی خوب در قالب یه مکالمه توضیح دادن. توصیه میکنم ببینید.
https://www.youtube.com/watch?v=7gEbHsHXdn0
حالا وقتی میخوایم کانفلیکتها رو حل کنیم میتونیم برنچ main رو با برنچ خودمون merge کنیم یا برنچ خودمون رو rebase کنیم به main جدید.
اینکه کدومش خوبه کدومش نه، جوابش بستگی دارهس!
تو تیمهایی که جونیور زیاد دارن توصیه میشه مرج کنید و تموم. اینطوری تاریخچه پیچیدهتری دارید (چون چرا یهو main تو یه برنچ مرج شده) ولی مجیک خاصی اتفاق نمیافته.
از طرفی rebase باعث میشه که یه تاریخچه شبیهسازی شده و جدید به وجود بیاد که توش کامیتهای برنچ جدید شما انگار بعد از آخرین کامیت main به وجود اومدن! برای کسی که بعدا نگاه کنه فهمش راحت تره ولی نکته اینه که چنین چیزی اصلا وجود نداشته و ممکنه مشکل لاجیکی تو کد ایجاد کنه.
تو این ویدیو این بحث رو خیلی خوب در قالب یه مکالمه توضیح دادن. توصیه میکنم ببینید.
https://www.youtube.com/watch?v=7gEbHsHXdn0
YouTube
You only Git Merge?!? feat Theo : DevHour #1
Theo is a former twitch (5 years) and now currently runs ping.gg where he codes amazing software for streamers. We debate the pros and cons of git rebase vs git merge
### Finding Theo
https://twitter.com/t3dotgg
https://twitch.tv/Theo
https://www.youtu…
### Finding Theo
https://twitter.com/t3dotgg
https://twitch.tv/Theo
https://www.youtu…
Forwarded from Ninja Learn | نینجا لرن
⭕️ در URIها از زیرخط (_) استفاده نکنید
برنامههای نمایش متن (مثل مرورگرها، ویرایشگرها و غیره) معمولاً برای نشان دادن اینکه URIها قابل کلیک هستند، زیر آنها خط میکشند. بسته به فونت استفادهشده در برنامه، کاراکتر زیرخط (_) ممکنه که بهصورت جزئی یا کامل زیر این خط زیرین مخفی بشه. برای جلوگیری از این سردرگمی، به جای زیرخط از خط تیره (-) استفاده کنید.
این کار باعث میشه URIها بهتر دیده بشن و مشکلی در خواندن یا کلیک کردن روی اونها پیش نیاد.
⭕️ از حروف کوچک در مسیرهای URI استفاده کنید
تا حد امکان در مسیرهای URI از حروف کوچک استفاده کنید، چون حروف بزرگ ممکنه گاهی اوقات مشکلاتی ایجاد کنن. بر اساس استاندارد RFC 3986، URI ها به غیر از بخشهای مربوط به scheme و host نسبت به حروف بزرگ و کوچک حساس هستند.
مثال:
در اینجا URI اول و دوم از نظر استاندارد یکسان هستن، اما URI سوم با اونها فرق داره، که ممکنه باعث سردرگمی و مشکلات غیرضروری بشه. به همین دلیل بهتره از حروف کوچک استفاده کنید تا از این مشکلات جلوگیری بشه.
⭕️ پسوندهای فایل نباید در URIها قرار بگیرند
در وب، کاراکتر نقطه (.) معمولاً برای جدا کردن نام فایل و پسوند اون در URIها استفاده میشه. اما یک REST API نباید پسوندهای مصنوعی فایل رو توی URIها بذاره تا فرمت محتوای پیام رو نشون بده. به جای این کار، باید از نوع رسانه (media type) که از طریق هدر Content-Type منتقل میشه، برای تعیین نحوه پردازش محتوای پیام استفاده بشه.
مثال:
به جای استفاده از پسوند فایلها برای تعیین فرمت، بهتره که کلاینتهای REST API از مکانیزم انتخاب فرمت ارائهشده توسط HTTP، یعنی هدر Accept در درخواستها، استفاده کنن.
@ninja_leanr_ir
برنامههای نمایش متن (مثل مرورگرها، ویرایشگرها و غیره) معمولاً برای نشان دادن اینکه URIها قابل کلیک هستند، زیر آنها خط میکشند. بسته به فونت استفادهشده در برنامه، کاراکتر زیرخط (_) ممکنه که بهصورت جزئی یا کامل زیر این خط زیرین مخفی بشه. برای جلوگیری از این سردرگمی، به جای زیرخط از خط تیره (-) استفاده کنید.
این کار باعث میشه URIها بهتر دیده بشن و مشکلی در خواندن یا کلیک کردن روی اونها پیش نیاد.
⭕️ از حروف کوچک در مسیرهای URI استفاده کنید
تا حد امکان در مسیرهای URI از حروف کوچک استفاده کنید، چون حروف بزرگ ممکنه گاهی اوقات مشکلاتی ایجاد کنن. بر اساس استاندارد RFC 3986، URI ها به غیر از بخشهای مربوط به scheme و host نسبت به حروف بزرگ و کوچک حساس هستند.
مثال:
http://api.example.restapi.org/my-folder/my-doc
HTTP://API.EXAMPLE.RESTAPI.ORG/my-folder/my-doc
http://api.example.restapi.org/My-Folder/my-doc
در اینجا URI اول و دوم از نظر استاندارد یکسان هستن، اما URI سوم با اونها فرق داره، که ممکنه باعث سردرگمی و مشکلات غیرضروری بشه. به همین دلیل بهتره از حروف کوچک استفاده کنید تا از این مشکلات جلوگیری بشه.
⭕️ پسوندهای فایل نباید در URIها قرار بگیرند
در وب، کاراکتر نقطه (.) معمولاً برای جدا کردن نام فایل و پسوند اون در URIها استفاده میشه. اما یک REST API نباید پسوندهای مصنوعی فایل رو توی URIها بذاره تا فرمت محتوای پیام رو نشون بده. به جای این کار، باید از نوع رسانه (media type) که از طریق هدر Content-Type منتقل میشه، برای تعیین نحوه پردازش محتوای پیام استفاده بشه.
مثال:
نادرست: http://api.college.restapi.org/students/3248234/trannoscripts/2005/fall.json
درست: http://api.college.restapi.org/students/3248234/trannoscripts/2005/fall
به جای استفاده از پسوند فایلها برای تعیین فرمت، بهتره که کلاینتهای REST API از مکانیزم انتخاب فرمت ارائهشده توسط HTTP، یعنی هدر Accept در درخواستها، استفاده کنن.
@ninja_leanr_ir
Forwarded from IRCF | اینترنت آزاد برای همه
بعد از مدتها فرصتشد تا ابزار دریافت کانفیگ رایگان رو بروزرسانی کنم. کانفیگهای ارائه شده به تفکیک لوکیشن و پروتکل، از یهسری کانال تلگرامی توسط پروژه HiN-VPN جمعآوری میشن و بهصورت لینک ساب در اختیارتون قرار میگیرن.
👉 ircfspace.github.io/tconfig
👉 ircfspace.github.io/location
🔍 ircf.space
@ircfspace
👉 ircfspace.github.io/tconfig
👉 ircfspace.github.io/location
🔍 ircf.space
@ircfspace
Forwarded from DevTwitter | توییت برنامه نویسی
من همیشه موقع دیباگ کردن و اجرای llm هام خیلی اوقات ریکوئستهام تکراری ان و نتایجشون هم یکیه برا همین یک ابزار رو برای cache کردن همه اون ریکوئستها درست کردم
این ابزارچون به صورت یه پراکسی ساخته شده پس نیازی به تغییری در کدتون ندارید
لینک گیتهاب:
https://github.com/MSNP1381/cache-cool
@DevTwitter | <Nemat/>
این ابزارچون به صورت یه پراکسی ساخته شده پس نیازی به تغییری در کدتون ندارید
لینک گیتهاب:
https://github.com/MSNP1381/cache-cool
@DevTwitter | <Nemat/>
Forwarded from Go Casts 🚀
یکی از زیبایی های گولنگ اینترفیس هست، چیزی که فلسفه composition over inheritance رو به زیبایی هر چه تمام تر در گولنگ امکانپذیر کرده
ولی نحوه استفاده از اینترفیس با زبان های دیگه متفاوته
این مقاله توضیحاتی در این مورد داده
https://eli.thegreenplace.net/2023/the-power-of-single-method-interfaces-in-go/
اینم یه مقاله زیرخاکی از russ cox در مورد اینترفیس
Go Data Structures: Interfaces
Posted on Tuesday, December 1, 2009
https://research.swtch.com/interfaces
@gocasts
#golang #interface
ولی نحوه استفاده از اینترفیس با زبان های دیگه متفاوته
این مقاله توضیحاتی در این مورد داده
https://eli.thegreenplace.net/2023/the-power-of-single-method-interfaces-in-go/
اینم یه مقاله زیرخاکی از russ cox در مورد اینترفیس
Go Data Structures: Interfaces
Posted on Tuesday, December 1, 2009
https://research.swtch.com/interfaces
@gocasts
#golang #interface
Forwarded from Bardia Play
Media is too big
VIEW IN TELEGRAM
روی لینوکس بازی کنیم یا ویندوز؟
تو این ویدیو درباره مزایا و معایب بازی روی لینوکس صحبت میکنیم و بررسی میکنیم که آیا بعد از این همه مدت تلاش جامعه آزاد و توسعهدهندههای لینوکس و همینطور ولو (استیم) در کنارشون، آیا لینوکس به آمادگی لازم رسیده که گیمرها همه سوییچ کنن بهش؟ یا هنوز زوده و باید صبر کنیم؟
لینک ویدیو در یوتیوب:
https://youtu.be/9I4tccWg04U
@Bardia_Play
تو این ویدیو درباره مزایا و معایب بازی روی لینوکس صحبت میکنیم و بررسی میکنیم که آیا بعد از این همه مدت تلاش جامعه آزاد و توسعهدهندههای لینوکس و همینطور ولو (استیم) در کنارشون، آیا لینوکس به آمادگی لازم رسیده که گیمرها همه سوییچ کنن بهش؟ یا هنوز زوده و باید صبر کنیم؟
لینک ویدیو در یوتیوب:
https://youtu.be/9I4tccWg04U
@Bardia_Play
Forwarded from Python BackendHub (Mani)
چیزی که میگم ممکنه راحت بنظر برسه
یا شاید هم تابلو.
ولی تا وقتی که ویدیو رو نبینید متوجه نمیشید دقیقا این طرز فکر چیه. خیلیم سخته که بخوام تو ۲۰۰ کلمه خلاصش کنم.
تو این اسکرین شات شما محاسبات بسیار ساده ای رو میبینید (که ممکنه بنظرتون خیلی سخت و پیچیده باشه ولی نیست) که داره حساب میکنه این کدش چقدر mathematic آپریشن انجام داده. و طبق سی پی یویی که داره چقدر میتونه کدش سریع بشه. مینیموم ترین سرعت رو کاغذ چیه؟ و چه تفاوتی با عمل داره.
این ویدیو به شما فقط مواردی که بهتون گفتم یاد نمیده, بهتون سخت افزار یاد میده, بهتون دانش کارکرد CPU و رم یاد میده, بهتون یک دید با زاویه کاملا متفاوتی میده که احتمالا نداشتین. (شخصا که نداشتم)
خلاصه ببینید ضرر نمیکنید 😁 ارزش ۲ ساعت رو واقعا داره.
@PyBackendHub
یا شاید هم تابلو.
ولی تا وقتی که ویدیو رو نبینید متوجه نمیشید دقیقا این طرز فکر چیه. خیلیم سخته که بخوام تو ۲۰۰ کلمه خلاصش کنم.
تو این اسکرین شات شما محاسبات بسیار ساده ای رو میبینید (که ممکنه بنظرتون خیلی سخت و پیچیده باشه ولی نیست) که داره حساب میکنه این کدش چقدر mathematic آپریشن انجام داده. و طبق سی پی یویی که داره چقدر میتونه کدش سریع بشه. مینیموم ترین سرعت رو کاغذ چیه؟ و چه تفاوتی با عمل داره.
این ویدیو به شما فقط مواردی که بهتون گفتم یاد نمیده, بهتون سخت افزار یاد میده, بهتون دانش کارکرد CPU و رم یاد میده, بهتون یک دید با زاویه کاملا متفاوتی میده که احتمالا نداشتین. (شخصا که نداشتم)
خلاصه ببینید ضرر نمیکنید 😁 ارزش ۲ ساعت رو واقعا داره.
@PyBackendHub
Forwarded from Curious Geek ⚡️
ELK (Elasticsearch , Logstash , Kibana) & EFK (Elasticsearch , Fluentd , Kibana) Stack
این استک برای پیاده سازی observation - logging کاربرد دارد.
Elasticsearch (Search Engine)
این noSQL DBMS اوپن سورس برای ساخت موتور جستجو بهینه شده
LogStash , Fluentd (Data Processing Pipeline)
برای جمع آوری لاگ ها ، ایونت ها و... از بکند های متفاوت مورد استفاده قرار میگیرند
Kibana (Data Visualization):
برای ساخت داشبورد از روی لاگ های جمع آوری شده کاربرد داره. این پروژه صرفا از Elasticsearch پشتیبانی میکنه. اما Grafana از انواع دیتابیس ها پشتیبانی میکنه.
🗣️ @Hiradsajde
این استک برای پیاده سازی observation - logging کاربرد دارد.
Elasticsearch (Search Engine)
این noSQL DBMS اوپن سورس برای ساخت موتور جستجو بهینه شده
LogStash , Fluentd (Data Processing Pipeline)
برای جمع آوری لاگ ها ، ایونت ها و... از بکند های متفاوت مورد استفاده قرار میگیرند
Kibana (Data Visualization):
برای ساخت داشبورد از روی لاگ های جمع آوری شده کاربرد داره. این پروژه صرفا از Elasticsearch پشتیبانی میکنه. اما Grafana از انواع دیتابیس ها پشتیبانی میکنه.
Please open Telegram to view this post
VIEW IN TELEGRAM
Elastic
Elasticsearch: The Official Distributed Search & Analytics Engine | Elastic
Elasticsearch is the leading distributed, RESTful, open source search and analytics engine designed for speed, horizontal scalability, reliability, and easy management. Get started for free.
Forwarded from Curious Geek ⚡️
Pull based monitoring system
دیتا از http endpoint های مشخص دریافت میشه
Push based monitoring system
دیتا از Queue هایی مثل Kafka یا RabbitMQ دریافت میشه
در ELK ، EFK و Prometheus هر دو مدل Push / Pull based قابل پیاده سازی است.
🗣️ @Hiradsajde
دیتا از http endpoint های مشخص دریافت میشه
Push based monitoring system
دیتا از Queue هایی مثل Kafka یا RabbitMQ دریافت میشه
در ELK ، EFK و Prometheus هر دو مدل Push / Pull based قابل پیاده سازی است.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 پس از اعمال تحریم های غرب و خروج رسمی تولیدکنندگان آمریکایی، اروپایی، ژاپنی و کره ای، روسیه عملا به کشوری با "خودروهای فرسوده خارجی" تبدیل شد.
#خبر
@TheRaymondDev
#خبر
@TheRaymondDev
❤1
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 وقتی چتباتها دربرابر توتفرنگی شکست میخورند
اخیراً کاربران اینترنت متوجه شدند که چتباتها اعم از ChatGPT و Claude بهطرز عجیبی نمیتوانند تعداد حروف R را در کلمههایی مثل Strawberry یا Raspberry بهدرستی تشخیص دهند. برای مثال، ChatGPT مبتنیبر مدل GPT-4o ابتدا گفت فقط دو حرف R در Strawberry وجود دارد. بار دیگر که گفت سه و وقتی با پرامپت «پاسخ اشتباه» کاربر روبهرو شد، بلافاصله جوابش را به همان دو R تغییر داد. حتی مدل زبانی Claude هم بهاشتباه حروف R را ابتدا دو و بعد فقط یک R حساب کرد.
ناتوانی مدلهای زبانی بزرگ در درک دقیق حروف و هجاها، نشاندهندهی یک حقیقت بزرگتر است که اغلب فراموش میکنیم: این سیستمها مانند انسان قدرت تفکر ندارند؛ زیرا آنها انسان نیستند.
#خبر
@TheRaymondDev
اخیراً کاربران اینترنت متوجه شدند که چتباتها اعم از ChatGPT و Claude بهطرز عجیبی نمیتوانند تعداد حروف R را در کلمههایی مثل Strawberry یا Raspberry بهدرستی تشخیص دهند. برای مثال، ChatGPT مبتنیبر مدل GPT-4o ابتدا گفت فقط دو حرف R در Strawberry وجود دارد. بار دیگر که گفت سه و وقتی با پرامپت «پاسخ اشتباه» کاربر روبهرو شد، بلافاصله جوابش را به همان دو R تغییر داد. حتی مدل زبانی Claude هم بهاشتباه حروف R را ابتدا دو و بعد فقط یک R حساب کرد.
ناتوانی مدلهای زبانی بزرگ در درک دقیق حروف و هجاها، نشاندهندهی یک حقیقت بزرگتر است که اغلب فراموش میکنیم: این سیستمها مانند انسان قدرت تفکر ندارند؛ زیرا آنها انسان نیستند.
#خبر
@TheRaymondDev
X (formerly Twitter)
Rob DenBleyker (@RobDenBleyker) on X
oh
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 بنابر گزارشی از روزنامهی ژاپنی نیککی، تراشههای ساخت چین، حدود سه سال از تراشههای تولیدشده توسط TSMC تایوان، عقبتر هستند.
پیشرفت چشمگیر در صنعت ساخت تراشهی چین در حالی رخ داده است که ایالات متحده با تحریمهای مختلف، بهدنبال تأثیرگذاری بر صنعت نیمههادی در چین است؛ اما شرکتهایی مانند SMIC (شرکت بینالمللی تولید نیمههادی) با بهبود طراحی و فرایندهای تولید تراشهها، توانستهاند فاصلهی خود را با رقبای جهانی کاهش دهند.
#خبر
@TheRaymondDev
پیشرفت چشمگیر در صنعت ساخت تراشهی چین در حالی رخ داده است که ایالات متحده با تحریمهای مختلف، بهدنبال تأثیرگذاری بر صنعت نیمههادی در چین است؛ اما شرکتهایی مانند SMIC (شرکت بینالمللی تولید نیمههادی) با بهبود طراحی و فرایندهای تولید تراشهها، توانستهاند فاصلهی خود را با رقبای جهانی کاهش دهند.
#خبر
@TheRaymondDev
Nikkei Asia
China's chip capabilities just 3 years behind TSMC, teardown shows
Analysis reveals limited impact of U.S. tech curbs on consumer products
Forwarded from Golden Code (@lix)
بیشتره کاربرا عادت دارن از یک پسورد برای همه حسابهاشون استفاده کنن. حالا اگه یک سایت هک بشه، باقیه اکانت هاشونم به خطر میفته.
در لاراول یک قانونی هست به نام "uncompromised" که کمک میکنه از ایجاد پسورد هایی که قبلاً در سایتهای دیگه لو رفتن جلوگیری بشه که باعث میشه رمز ایمنتری ایجاد بشه.
حالا چجوری این کارو میکنه؟
یه سرویس هست با نام HIBP که پسورد های لورفته در دیتابیسش هست.
این uncompromised نقش رابط بین laravel و سرویسHIBP رو داره و تهش متوجه میشه پسورد ایمنه یا نه و حالا اگه ایمن نباشه هم ولیدیشن به خطا میخوره.
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین👇🏾)
https://x.com/OussamaMater/status/1829613512168976836?s=19
در لاراول یک قانونی هست به نام "uncompromised" که کمک میکنه از ایجاد پسورد هایی که قبلاً در سایتهای دیگه لو رفتن جلوگیری بشه که باعث میشه رمز ایمنتری ایجاد بشه.
حالا چجوری این کارو میکنه؟
یه سرویس هست با نام HIBP که پسورد های لورفته در دیتابیسش هست.
این uncompromised نقش رابط بین laravel و سرویسHIBP رو داره و تهش متوجه میشه پسورد ایمنه یا نه و حالا اگه ایمن نباشه هم ولیدیشن به خطا میخوره.
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین👇🏾)
https://x.com/OussamaMater/status/1829613512168976836?s=19
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip 💡: Safer Passwords for Users
Users tend to use the same password for all websites, which puts them in danger if their password has been leaked. You can make sure that the user inputs an uncompromised password using the "uncompromised" rule 🚀…
Users tend to use the same password for all websites, which puts them in danger if their password has been leaked. You can make sure that the user inputs an uncompromised password using the "uncompromised" rule 🚀…
❤1🔥1
Forwarded from TorhamDev | تورهام 😳
Victory lies ahead! Death to all who oppose us!
- blood elf NPC
Forwarded from محتوای آزاد سهراب
چون به عرشا قول داده بودم که درمورد نحوه کارکرد ویرایشگرهای متنی بنویسم، اون رو امشب مینویسم که اگه بعداً به هر نحوی نشد بدقول نشده باشم.
ویرایشگرهای متنی ابزارهایی هستن که هر روز با اون ها سروکار داریم از vim بگیر تا vscode و .....
حالا توی این پست میخوایم توضیح بدیم که چطوری کار میکنن.
اصولاً ویرایشگرهای متنی در هنگام استفاده ۶ کار رو انجام میدن که باهم مرور میکنیم.
۱. ورود دادهها و پردازش اولیه
وقتی کاربر متنی رو مینویسه، این متن ابتدا به عنوان مجموعهای از کاراکترها در حافظه رم سیستم ذخیره میشن. هر کاراکتر به یک کد باینری (مثلاً در استاندارد ASCII یا Unicode) تبدیل میشه و این دادهها در یک ساختار دادهای مانند آرایه یا لیست پیوندی ذخیره میشن. این ساختار داده توسط ویرایشگر متنی مدیریت میشن تا کاربر بتونه متنش رو ویرایش کنه.
۲. بافر و مدیریت تغییرات
همونطور که کاربر تغییراتی در متن ایجاد میکنه (مانند اضافه کردن یا حذف کردن کاراکترها)، این تغییرات در یک بافر موقت اعمال میشن. این بافر معمولاً در حافظه رم سیستم نگهداری میشه و امکان برگشت به تغییرات قبلی یا «Undo» کردن آنها رو فراهم میکنه. بافر نقش حیاتی در مدیریت تغییرات مداوم متن دارد تا زمانی که تصمیم به ذخیرهسازی نهایی گرفته بشه.
۳. فرآیند ذخیرهسازی
وقتی کاربر تصمیم میگیره که متن رو ذخیره کند، چندین مرحله کلیدی طی میشه:
- انتخاب فرمت فایل: بسته به نرمافزار و انتخاب کاربر، ویرایشگر متنی فرمت فایل رو مشخص میکنه (مانند .txt، .docx، .odt یا هر فرمت دیگهای). هر فرمت فایل ممکنه که ساختار دادهای خاصی برای ذخیرهسازی متن داشته باشه.
- سریالسازی (Serialization): متن و اطلاعات مرتبط با آن به یک رشته بایت تبدیل میشن. این رشته بایت میتواند شامل کاراکترها، اطلاعات قالببندی، متادیتا و حتی دادههای اضافی باشه که برای بازیابی صحیح فایل لازم هستن. سریالسازی فرآیندی است که در آن دادههای پیچیده به فرمتی سادهتر برای ذخیرهسازی تبدیل میشن.
- نوشتن بر روی دیسک: پس از سریالسازی، دادهها به سیستم فایل سیستمعامل ارسال میشن. سیستم فایل دادهها رو در سکتورهای فیزیکی دیسک سخت یا SSD مینویسه. در این مرحله، سیستمعامل ممکن است بافرهای اضافی رو برای بهینهسازی فرآیند ذخیرهسازی استفاده کنه، اما در نهایت دادهها در مکان فیزیکی مشخصی روی دیسک ذخیره میشن.
۴. اعتبارسنجی و تایید
پس از اینکه دادهها به دیسک نوشته شدن، ویرایشگر متنی معمولاً یک بررسی اضافی انجام میده تا مطمئن بشه که فرآیند ذخیرهسازی با موفقیت انجام شده یا نه. این کار ممکنه شامل خوندن مجدد بخشهایی از فایل برای تطابق با دادههای اصلی بشه.
۵. بستن فایل و آزادسازی منابع
بعد از اینکه ذخیرهسازی کامل شد و صحت آن تأیید شد، ویرایشگر متنی فایل رو «میبندد». این به معنی این است که هر ارتباط باز با سیستم فایل بسته میشه و منابعی که برای عملیات ذخیرهسازی استفاده شده بودن، آزاد میشن. از این نقطه به بعد، دادهها به صورت دائمی در دیسک سخت ذخیره شدن و در صورت نیاز، قابل بازیابی هستند.
۶. تغییر وضعیت در نرمافزار
ویرایشگر متنی همچنین وضعیت داخلی خودش رو بهروزرسانی میکنه. برای مثال، ممکنه نشون بده که تمام تغییرات ذخیره شدن و دیگه نیازی به ذخیرهسازی مجدد نیست تا زمانی که تغییرات جدیدی ایجاد بشن. این تغییر وضعیت معمولاً از طریق رابط کاربری نرمافزار به کاربر اطلاع داده میشه.
امیدوارم توضیحات کافی رو داده باشم، هرچند خلاصه. اگر سوالی بود یا ایرادی توی متن دیدید میتونید توی کامنتها بهم بگید.
شب خوبی رو داشته باشید.
@SohrabContents
ویرایشگرهای متنی ابزارهایی هستن که هر روز با اون ها سروکار داریم از vim بگیر تا vscode و .....
حالا توی این پست میخوایم توضیح بدیم که چطوری کار میکنن.
اصولاً ویرایشگرهای متنی در هنگام استفاده ۶ کار رو انجام میدن که باهم مرور میکنیم.
۱. ورود دادهها و پردازش اولیه
وقتی کاربر متنی رو مینویسه، این متن ابتدا به عنوان مجموعهای از کاراکترها در حافظه رم سیستم ذخیره میشن. هر کاراکتر به یک کد باینری (مثلاً در استاندارد ASCII یا Unicode) تبدیل میشه و این دادهها در یک ساختار دادهای مانند آرایه یا لیست پیوندی ذخیره میشن. این ساختار داده توسط ویرایشگر متنی مدیریت میشن تا کاربر بتونه متنش رو ویرایش کنه.
۲. بافر و مدیریت تغییرات
همونطور که کاربر تغییراتی در متن ایجاد میکنه (مانند اضافه کردن یا حذف کردن کاراکترها)، این تغییرات در یک بافر موقت اعمال میشن. این بافر معمولاً در حافظه رم سیستم نگهداری میشه و امکان برگشت به تغییرات قبلی یا «Undo» کردن آنها رو فراهم میکنه. بافر نقش حیاتی در مدیریت تغییرات مداوم متن دارد تا زمانی که تصمیم به ذخیرهسازی نهایی گرفته بشه.
۳. فرآیند ذخیرهسازی
وقتی کاربر تصمیم میگیره که متن رو ذخیره کند، چندین مرحله کلیدی طی میشه:
- انتخاب فرمت فایل: بسته به نرمافزار و انتخاب کاربر، ویرایشگر متنی فرمت فایل رو مشخص میکنه (مانند .txt، .docx، .odt یا هر فرمت دیگهای). هر فرمت فایل ممکنه که ساختار دادهای خاصی برای ذخیرهسازی متن داشته باشه.
- سریالسازی (Serialization): متن و اطلاعات مرتبط با آن به یک رشته بایت تبدیل میشن. این رشته بایت میتواند شامل کاراکترها، اطلاعات قالببندی، متادیتا و حتی دادههای اضافی باشه که برای بازیابی صحیح فایل لازم هستن. سریالسازی فرآیندی است که در آن دادههای پیچیده به فرمتی سادهتر برای ذخیرهسازی تبدیل میشن.
- نوشتن بر روی دیسک: پس از سریالسازی، دادهها به سیستم فایل سیستمعامل ارسال میشن. سیستم فایل دادهها رو در سکتورهای فیزیکی دیسک سخت یا SSD مینویسه. در این مرحله، سیستمعامل ممکن است بافرهای اضافی رو برای بهینهسازی فرآیند ذخیرهسازی استفاده کنه، اما در نهایت دادهها در مکان فیزیکی مشخصی روی دیسک ذخیره میشن.
۴. اعتبارسنجی و تایید
پس از اینکه دادهها به دیسک نوشته شدن، ویرایشگر متنی معمولاً یک بررسی اضافی انجام میده تا مطمئن بشه که فرآیند ذخیرهسازی با موفقیت انجام شده یا نه. این کار ممکنه شامل خوندن مجدد بخشهایی از فایل برای تطابق با دادههای اصلی بشه.
۵. بستن فایل و آزادسازی منابع
بعد از اینکه ذخیرهسازی کامل شد و صحت آن تأیید شد، ویرایشگر متنی فایل رو «میبندد». این به معنی این است که هر ارتباط باز با سیستم فایل بسته میشه و منابعی که برای عملیات ذخیرهسازی استفاده شده بودن، آزاد میشن. از این نقطه به بعد، دادهها به صورت دائمی در دیسک سخت ذخیره شدن و در صورت نیاز، قابل بازیابی هستند.
۶. تغییر وضعیت در نرمافزار
ویرایشگر متنی همچنین وضعیت داخلی خودش رو بهروزرسانی میکنه. برای مثال، ممکنه نشون بده که تمام تغییرات ذخیره شدن و دیگه نیازی به ذخیرهسازی مجدد نیست تا زمانی که تغییرات جدیدی ایجاد بشن. این تغییر وضعیت معمولاً از طریق رابط کاربری نرمافزار به کاربر اطلاع داده میشه.
امیدوارم توضیحات کافی رو داده باشم، هرچند خلاصه. اگر سوالی بود یا ایرادی توی متن دیدید میتونید توی کامنتها بهم بگید.
شب خوبی رو داشته باشید.
@SohrabContents
Telegram
PhiloLearn
🔵 فیلو یعنی مشتاق و لرن یعنی یادگیری
📘 در نتیجه فیلولرن یعنی مشتاق یادگیری 📘
https://www.youtube.com/@PhiloLearn
donate:
https://www.coffeete.ir/PhiloLearn
📘 در نتیجه فیلولرن یعنی مشتاق یادگیری 📘
https://www.youtube.com/@PhiloLearn
donate:
https://www.coffeete.ir/PhiloLearn
Forwarded from Linuxor ?
یک بار برای همیشه فرق Emulator و Simulator رو یاد بگیر
ایمولیتور "دقیقا" اون سیستم رو شبیه سازی میکنه مثل VirtualBox یا شبیه سازی بازی های کنسول.
اما سیمولیتور "تقریبی" اون سیستم رو شبیه سازی میکنه، مثلا شبیه ساز های مدار الکتریکی، یا شبیه ساز پرواز هواپیما
توی شبیه ساز VirtualBox شما دقیقا دارید یه سیستم عامل رو شبیه سازی میکنید یعنی اگه یه عملی توی شبیه ساز انجام بدید دقیقا توی واقعیت هم همون عمل انجام میشه. اما توی شبیه ساز مدار الکتریکی به صورت ریاضی این عمل انجام میشه و تا حد ممکن توی واقعیت هم همین رفتار رو داره ولی ممکنه رفتارش متفاوت باشه.
🐧 @Linuxor
ایمولیتور "دقیقا" اون سیستم رو شبیه سازی میکنه مثل VirtualBox یا شبیه سازی بازی های کنسول.
اما سیمولیتور "تقریبی" اون سیستم رو شبیه سازی میکنه، مثلا شبیه ساز های مدار الکتریکی، یا شبیه ساز پرواز هواپیما
توی شبیه ساز VirtualBox شما دقیقا دارید یه سیستم عامل رو شبیه سازی میکنید یعنی اگه یه عملی توی شبیه ساز انجام بدید دقیقا توی واقعیت هم همون عمل انجام میشه. اما توی شبیه ساز مدار الکتریکی به صورت ریاضی این عمل انجام میشه و تا حد ممکن توی واقعیت هم همین رفتار رو داره ولی ممکنه رفتارش متفاوت باشه.
🐧 @Linuxor
Forwarded from Anony Notes
یکی از رفقا یه بات زده که به نظرم جالب بود
یه شماره کارت براش ارسال میکنی
+ اطلاعات صاحب کارت
+ شماره حساب
+ شماره شبا
+ نام بانک
کارت مورد نظر رو برات ارسال میکنه
ID: @IRCardbot
یه شماره کارت براش ارسال میکنی
+ اطلاعات صاحب کارت
+ شماره حساب
+ شماره شبا
+ نام بانک
کارت مورد نظر رو برات ارسال میکنه
و حتی میتونید اگر کارتی رو به عنوان کلاهبرداری سراغ دارید، ریپورتش کنید
و بعد از چندین ریپورت، از کاربرها اثبات خواسته میشه و در صورت تایید، توی بات اون کارت کلاهبرداری اعلام میشه
ID: @IRCardbot
Forwarded from محتوای آزاد سهراب
مشیا سوال خوبی پرسید توی کامنتها:
خب این مورد داخل سیستمعاملهای مختلف فرق میکنه، از ابزار هایی استفاده میشه که تغییرات فایلسیستم رو به گوش ادیتور برسونن.
برای مثال در گنو/لینوکس inotify هستش که میاد و اگر تغییری در فایل ایجاد بشه رو به ادیتور میگه مثلاً اگر یک فایلی رو داخل kate داشته باشید، از فایل سیستم حذفش کنید بهتون میگه فایل فلان حذف شد میخوای بازگردانی کنی یا ببندمش؟
در ویندوز از API سیستمی به نام ReadDirectoryChangesW و در مکاواس از Kqueue و FSEvents استفاده میشه.
@SohrabContents
تغییرات خارج از ادیتور رو چطور مونیتور میکنه بدون اینکه مرتب فایل رو باز کنه و بخونه، ایونتی روی سیستم عامل هست که فعال میشه ؟
خب این مورد داخل سیستمعاملهای مختلف فرق میکنه، از ابزار هایی استفاده میشه که تغییرات فایلسیستم رو به گوش ادیتور برسونن.
برای مثال در گنو/لینوکس inotify هستش که میاد و اگر تغییری در فایل ایجاد بشه رو به ادیتور میگه مثلاً اگر یک فایلی رو داخل kate داشته باشید، از فایل سیستم حذفش کنید بهتون میگه فایل فلان حذف شد میخوای بازگردانی کنی یا ببندمش؟
در ویندوز از API سیستمی به نام ReadDirectoryChangesW و در مکاواس از Kqueue و FSEvents استفاده میشه.
@SohrabContents
Forwarded from Sadra Codes
What they see: ah.. inspiring. 🥹
What we see:
git branch
git commit
git merge
What we see:
git branch
git commit
git merge
Forwarded from ⚝