اگه به گوشتون نخورده، ردیس نسخه ۸ اومده. و تغییرات خیلی خوبی داشته.
هم از سمت فنی قابلیت های جدید (مثل کار با Json) هم بهبود پرفورمنسی و توانایی استفاده بهتر از تردهای بیشتر رو داره.
هم از سمت لایسنس، ماژول ها و چیزهای close source رو اوپن سورس کردن و همه رو مرج کردن در قالب لایسنس درست و حسابی منتشر کردن.
اگه کاربر ردیس هستین، بلاگ پست خودشون رو به نگاهی بندازید به نظرم.
https://redis.io/blog/redis-8-ga/
هم از سمت فنی قابلیت های جدید (مثل کار با Json) هم بهبود پرفورمنسی و توانایی استفاده بهتر از تردهای بیشتر رو داره.
هم از سمت لایسنس، ماژول ها و چیزهای close source رو اوپن سورس کردن و همه رو مرج کردن در قالب لایسنس درست و حسابی منتشر کردن.
اگه کاربر ردیس هستین، بلاگ پست خودشون رو به نگاهی بندازید به نظرم.
https://redis.io/blog/redis-8-ga/
Redis
Redis 8 is now GA, loaded with new features and more than 30 performance improvements | Redis
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.
❤17
Forwarded from TondTech (مسعود بیگی)
✅ دوستان خوب و عزیزم سلام، من و تیم خوبم در #رسمیو، مدتی رو سرمون خلوت خواهد بود و دوست داریم به شکل مشاوره یا همکاری در انجام پروژه های شما (به صورت صفر تا صد یا مشارکت در پیاده سازی بخشی از سرویس هاتون) همراه باشیم .
✅ ما توی تیممون به جز توسعه دهندگان .net و React ، پروداکت منیجر و دیزاینر هم داریم اگر لازم داشته باشید برای این پروژه ها.
✅ کد تمیز و قابل گسترش مینویسیم، با هم سر استانداردهای مستندسازی به تفاهم خواهیم رسید.
✅ بعد از پایان پروژه هم، پروژه رو به تیم تون تحویل میدیم و اگر نیاز به آموزشی باشه، در حد توان راهنمایی و آموزش نیروهاتون رو هم بر عهده خواهیم گرفت.
خیلی به من لطف خواهید کرد اگر این پست را در همه ی گروه های فنی و بیزنسی تان منتشر کنید.
متاسفانه فعلا فقط از طریق اکانت تلگرام @StartupNerd وشماره 09308282925 در خدمت شما و پاسخگو خواهم بود.
🫂 مجددا از شما خواهش میکنم این پست رو (در همه ی گروه های خودتون که فکر میکنید ممکنه کسی به توانایی ما نیاز داشته باشه) بازنشر کنید
✅ ما توی تیممون به جز توسعه دهندگان .net و React ، پروداکت منیجر و دیزاینر هم داریم اگر لازم داشته باشید برای این پروژه ها.
✅ کد تمیز و قابل گسترش مینویسیم، با هم سر استانداردهای مستندسازی به تفاهم خواهیم رسید.
✅ بعد از پایان پروژه هم، پروژه رو به تیم تون تحویل میدیم و اگر نیاز به آموزشی باشه، در حد توان راهنمایی و آموزش نیروهاتون رو هم بر عهده خواهیم گرفت.
خیلی به من لطف خواهید کرد اگر این پست را در همه ی گروه های فنی و بیزنسی تان منتشر کنید.
متاسفانه فعلا فقط از طریق اکانت تلگرام @StartupNerd وشماره 09308282925 در خدمت شما و پاسخگو خواهم بود.
🫂 مجددا از شما خواهش میکنم این پست رو (در همه ی گروه های خودتون که فکر میکنید ممکنه کسی به توانایی ما نیاز داشته باشه) بازنشر کنید
❤8💔6
کسب و کار اینترنتی یک لطیفهست.
خود top level domain به مشکل خورده. اونم وسط روز. :))))
https://www.zoomit.ir/tech-iran/443943-domain-downtime-irnic/
خود top level domain به مشکل خورده. اونم وسط روز. :))))
https://www.zoomit.ir/tech-iran/443943-domain-downtime-irnic/
زومیت
اختلال در دسترسی به سایت ایرانیک و برخی دامنههای ir. [بهروزرسانی ۲۴ تیر: ایرانیک دوباره در دسترس قرار گرفت]
اختلال گسترده در دامنههای ir. از صبح امروز، دسترسی کاربران به سایتهای ایرانی را با مشکل مواجه کرده است.
🤣16❤2👍1
در مورد اینسیدنت cloudflare روی ۱.۱.۱.۱
بلاگ پست جالبی نوشتن و خلاصه ایده ش اینه که به خاطر سیستم legacy کانفیگ اشتباه باعث خطا شد و ما دیگه سیستم مدرن(!) میاریم بالا و حل میشه همه چی.
https://news.ycombinator.com/item?id=44578490
چند تا نکته به نظرم میرسه:
۱. چقدر خوبه که تا حدی شفافیت دارن و براشون مهمه و هم عذرخواهی کردن و گفتن کاری میکنیم که دیگه تکرار نشه.
۲. این که یه مشکل رو به اشتباه یه مهندس تقلیل نمیدن برام قشنگه، چون آدما اشتباه میکنن و باید سامانه ها و روند ها جوری باشه که خطا رو نشون بده (مثال ساده میشه پایپالاین تست یا محیط تست جدا از پروداکشن)
۳. به نظر میاد که خطا رو محیط تست بوده ولی باعث خراب شدن پروداکشن شده. این یکی از بدترین اتفاق هاست. به چند دلیل از جمله این که تغییر تو محیط تست زیاده و قاعدتاً داکیومنت نمیشه و پیدا کردن ریشه مشکل ممکنه خیلی سخت بشه.
۴. این روحیه که همه چیزو بندازیم گردن سیستم قبلی و بگیم legacy بود رو دوست ندارم. یهو با این اینسیدنت متوجه شدید که legacy بوده و همه اشکالاتش در اومد؟ قاعدتا مشکل از این هم هست که وقت کافی به حل بدهی فنی هاش اختصاص پیدا نکرده در طی ماه ها و سال های اخیر.
۵. نکته ای که برام جالبه اینه که اینسیدنت ۲۰۲۱ meta هم که باعث شد کل زیرساختش از بیرون قابل دسترسی نباشه هم به خاطر یه کانفیگ اشتباه بود. شاید اون تمرکزی که برای قابل اطمینان کردن لایه های بالاتر داشتیم (زبان های type safe و انواع تست و canary release و ...) رو باید رو لایه های پایین تر هم داشته باشیم.
بلاگ پست جالبی نوشتن و خلاصه ایده ش اینه که به خاطر سیستم legacy کانفیگ اشتباه باعث خطا شد و ما دیگه سیستم مدرن(!) میاریم بالا و حل میشه همه چی.
https://news.ycombinator.com/item?id=44578490
چند تا نکته به نظرم میرسه:
۱. چقدر خوبه که تا حدی شفافیت دارن و براشون مهمه و هم عذرخواهی کردن و گفتن کاری میکنیم که دیگه تکرار نشه.
۲. این که یه مشکل رو به اشتباه یه مهندس تقلیل نمیدن برام قشنگه، چون آدما اشتباه میکنن و باید سامانه ها و روند ها جوری باشه که خطا رو نشون بده (مثال ساده میشه پایپالاین تست یا محیط تست جدا از پروداکشن)
۳. به نظر میاد که خطا رو محیط تست بوده ولی باعث خراب شدن پروداکشن شده. این یکی از بدترین اتفاق هاست. به چند دلیل از جمله این که تغییر تو محیط تست زیاده و قاعدتاً داکیومنت نمیشه و پیدا کردن ریشه مشکل ممکنه خیلی سخت بشه.
۴. این روحیه که همه چیزو بندازیم گردن سیستم قبلی و بگیم legacy بود رو دوست ندارم. یهو با این اینسیدنت متوجه شدید که legacy بوده و همه اشکالاتش در اومد؟ قاعدتا مشکل از این هم هست که وقت کافی به حل بدهی فنی هاش اختصاص پیدا نکرده در طی ماه ها و سال های اخیر.
۵. نکته ای که برام جالبه اینه که اینسیدنت ۲۰۲۱ meta هم که باعث شد کل زیرساختش از بیرون قابل دسترسی نباشه هم به خاطر یه کانفیگ اشتباه بود. شاید اون تمرکزی که برای قابل اطمینان کردن لایه های بالاتر داشتیم (زبان های type safe و انواع تست و canary release و ...) رو باید رو لایه های پایین تر هم داشته باشیم.
❤5👍1
باگ امنیتی روز صفر (zero day) کروم حل شده که دسترسی به سیستم رو به اتکر میده.
مرورگرهای chromium based خودتون رو آپدیت کنید زودتر.
https://thehackernews.com/2025/07/urgent-google-releases-critical-chrome.html
کلا همیشه ایده خوبیه که مرورگر ها رو بروز نگه دارید.
مرورگرهای chromium based خودتون رو آپدیت کنید زودتر.
https://thehackernews.com/2025/07/urgent-google-releases-critical-chrome.html
کلا همیشه ایده خوبیه که مرورگر ها رو بروز نگه دارید.
😱6👍4🔥1
راهنمای خوبی از شبکه از کوبرنتیز!
https://www.tkng.io/
https://www.tkng.io/
www.tkng.io
The Kubernetes Networking Guide
❤11
نتیجه نظرسنجی از هزاران برنامه نویس در مورد ابزار های مورد استفاده، شامل ابزارهایai مورد استفاده.
به نظرم گزارش جالبی شده یه نگاهی بکنید،
https://newsletter.pragmaticengineer.com/p/the-pragmatic-engineer-2025-survey?publication_id=458709&post_id=168396454&isFreemail=true&r=4eia8j&triedRedirect=true
به نظرم گزارش جالبی شده یه نگاهی بکنید،
https://newsletter.pragmaticengineer.com/p/the-pragmatic-engineer-2025-survey?publication_id=458709&post_id=168396454&isFreemail=true&r=4eia8j&triedRedirect=true
Pragmaticengineer
The Pragmatic Engineer 2025 Survey: What’s in your tech stack?
Which tools do software engineers use for backend development, frontend, infrastructure, AI tooling, and more, today? Reader survey, with feedback and analysis, based on 3,000+ responses
❤🔥6
تجربیاتی جالب در مورد نوشتن یک برنامه code formatter
چالش هایی داره که اصلا بهشون فکر نمیکردم هیچوقت موقع استفاده.
journal.stuffwithstuff.com/2015/09/08/the-hardest-program-ive-ever-written/
چالش هایی داره که اصلا بهشون فکر نمیکردم هیچوقت موقع استفاده.
journal.stuffwithstuff.com/2015/09/08/the-hardest-program-ive-ever-written/
👍6
یه تجربه جالب از پینترست بابت اهمیت دادن و دیباگ یه timeout نادر روی سرویس هاشون
https://medium.com/pinterest-engineering/debugging-the-one-in-a-million-failure-migrating-pinterests-search-infrastructure-to-kubernetes-bef9af9dabf4
https://medium.com/pinterest-engineering/debugging-the-one-in-a-million-failure-migrating-pinterests-search-infrastructure-to-kubernetes-bef9af9dabf4
Medium
Debugging the One-in-a-Million Failure: Migrating Pinterest’s Search Infrastructure to Kubernetes
Samson Hu, Shashank Tavildar, Eric Kalkanger, Hunter Gatewood
👍8💔1
یک سری راهنمایی خوب برای طراحی ساختار پروژه گولنگی
https://www.alexedwards.net/blog/11-tips-for-structuring-your-go-projects
https://www.alexedwards.net/blog/11-tips-for-structuring-your-go-projects
www.alexedwards.net
11 tips for structuring your Go projects - Alex Edwards
❤9
Forwarded from Go Casts 🚀
مقاله خیلی جذابیه. نکات بسیار ارزشمندی رو میگه. نکات مهمی رو در مورد استفاده از PostgreSQL میگه وقتی که شما همزمان Write-Heavy و Read-Heavy هستی.
مقاله ایده های جالب و متفاوتی رو ارائه میکنه:
داشتن جداولی با حداکثر ۱۰۰ هزار رکورد برای داشتن index scanهای سریع و جلوگیری از کاهش عملکرد PostgreSQL
استفاده از index-only scans و مکانیزمی شبیه loose index scan برای کم کردن io operations
داشتن استراتژی compaction و VACUUM Analyze برای جلوگیری از عملکرد read queries با بزرگ شدن جدول دیتابیس
استفاده از دستور COPY به جای Insert برای batch insertهای زیاد و سنگین
استفاده از golang string type به جای byte slice برای transfer داده که عملکرد تقریبا ۲ برابر بهتری داشته!
Lessons from scaling PostgreSQL queues to 100k events per second
https://www.rudderstack.com/blog/scaling-postgres-queue/
@gocasts
مقاله ایده های جالب و متفاوتی رو ارائه میکنه:
داشتن جداولی با حداکثر ۱۰۰ هزار رکورد برای داشتن index scanهای سریع و جلوگیری از کاهش عملکرد PostgreSQL
استفاده از index-only scans و مکانیزمی شبیه loose index scan برای کم کردن io operations
داشتن استراتژی compaction و VACUUM Analyze برای جلوگیری از عملکرد read queries با بزرگ شدن جدول دیتابیس
استفاده از دستور COPY به جای Insert برای batch insertهای زیاد و سنگین
استفاده از golang string type به جای byte slice برای transfer داده که عملکرد تقریبا ۲ برابر بهتری داشته!
Lessons from scaling PostgreSQL queues to 100k events per second
https://www.rudderstack.com/blog/scaling-postgres-queue/
@gocasts
❤6👍2🔥2
مثل این که کمتر از یک ماه دیگه، Bitnami قراره بلاهایی سر تیم ها و دولوپرها بیاره.
ماجرا از این قراره که از ۲۸ آگوست به بعد فقط به آخرین تگ هر چارت میتونیم دسترسی داشته باشیم (latest) و نسخه های استیبل و مشخص فقط از طریق برنامه جدیدشون که پولیه میشه استفاده کرد. (به اسم bitnamisecure)
لازم به تاکیده که استفاده از تگ latest برا پروداکشن مطلقا ایده خوبی نیست و هر روز ممکنه اتفاقات جدید بیفته. تو این مدت تگ های فعلی رو تو یه ریپوزیتوری به عنوان lagecy قرار دادن ولی نسخه های جدید وارد این نمیشه.
به عنوان دولوپر چیکار کنیم؟ تو محیط دولوپ که میتونیم از latest استفاده کنیم ولی تو محیط پروداکشن فعلا و برای نسخه های فعلی از docker.io/bitnamilegacy به جای docker.io/bitnami استفاده کنیم.
برا اپدیت به نسخه های جدید و در ادامه هم باید واقعا دید که چی میشه. جایگزینی میاد یا چی!
https://github.com/bitnami/charts/issues/35164
ماجرا از این قراره که از ۲۸ آگوست به بعد فقط به آخرین تگ هر چارت میتونیم دسترسی داشته باشیم (latest) و نسخه های استیبل و مشخص فقط از طریق برنامه جدیدشون که پولیه میشه استفاده کرد. (به اسم bitnamisecure)
لازم به تاکیده که استفاده از تگ latest برا پروداکشن مطلقا ایده خوبی نیست و هر روز ممکنه اتفاقات جدید بیفته. تو این مدت تگ های فعلی رو تو یه ریپوزیتوری به عنوان lagecy قرار دادن ولی نسخه های جدید وارد این نمیشه.
به عنوان دولوپر چیکار کنیم؟ تو محیط دولوپ که میتونیم از latest استفاده کنیم ولی تو محیط پروداکشن فعلا و برای نسخه های فعلی از docker.io/bitnamilegacy به جای docker.io/bitnami استفاده کنیم.
برا اپدیت به نسخه های جدید و در ادامه هم باید واقعا دید که چی میشه. جایگزینی میاد یا چی!
https://github.com/bitnami/charts/issues/35164
Docker
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
❤3😐3😱1
چرا abstraction اشتباه در کد، از کد تکراری بدتر است:
https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction
بلاگ پست قدیمیایه ولی به نظرم هنوز کاملا میتونه نمود داشته باشه، مخصوصا وقتی که کد به مرور تغییر میکنه و ما میخوایم لاجیک جدید رو به زور توی همون تابع یا کلاس یا اینترفیس قبلی بگنجونیم.
https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction
بلاگ پست قدیمیایه ولی به نظرم هنوز کاملا میتونه نمود داشته باشه، مخصوصا وقتی که کد به مرور تغییر میکنه و ما میخوایم لاجیک جدید رو به زور توی همون تابع یا کلاس یا اینترفیس قبلی بگنجونیم.
Sandi Metz
The Wrong Abstraction — Sandi Metz
I've been thinking about the consequences of the "wrong abstraction." My RailsConf 2014 "all the little things" talk included a section where I asserted: > duplication is far cheaper than the wrong abstraction And in the summary, I went on to advise: >
🔥7👌3
یکی از پترن های بد ولی رایج توی نصب نرمافزار اینه که اسکریپت نصب رو curl کنیم و مستقیم اجرا کنیم.
مشکلی که وجود داره اینه که ممکنه تنی اون اسکریپت هرچیزی وجود داشته باشه و ما اون رو اجرا میکنیم، گاهی حتی با sudo
مثال:
curl -sSL https://example.com/install.sh | bash
برای این که سمت این پترن نریم، راه خوب اینه که اول اسکریپت رو بگیریم و تو دیسک ذخیره کنیم و بعد با ادیتور یا pager محتواشو بررسی کنیم.
ابزار vet اومده این کارو ساده کرده. با گرفتن آدرس میاد و اسکریپت رو دانلود میکنه، محتواشو (یا diffشو به نسبت دفعه قبل) بهتون نشون میده و حتی با shell check براتون چک میکنه و اگه مشکلی نبود، با اوکی شما اجراش میکنه. یه مقدار هم منو یاد aur helper ها میندازه که باید اول بررسی کنید اسکریپت رو و بعد نصب اتفاق میوفته.
https://github.com/vet-run/vet
این ابزار کار خاصی نمیکنه که اگه نصب نکنید ممکن نیست، ولی دیدگاهی که داره، «ساده کردن عادت خوب»ـه که برا من جالب بود.
مشکلی که وجود داره اینه که ممکنه تنی اون اسکریپت هرچیزی وجود داشته باشه و ما اون رو اجرا میکنیم، گاهی حتی با sudo
مثال:
curl -sSL https://example.com/install.sh | bash
برای این که سمت این پترن نریم، راه خوب اینه که اول اسکریپت رو بگیریم و تو دیسک ذخیره کنیم و بعد با ادیتور یا pager محتواشو بررسی کنیم.
ابزار vet اومده این کارو ساده کرده. با گرفتن آدرس میاد و اسکریپت رو دانلود میکنه، محتواشو (یا diffشو به نسبت دفعه قبل) بهتون نشون میده و حتی با shell check براتون چک میکنه و اگه مشکلی نبود، با اوکی شما اجراش میکنه. یه مقدار هم منو یاد aur helper ها میندازه که باید اول بررسی کنید اسکریپت رو و بعد نصب اتفاق میوفته.
https://github.com/vet-run/vet
این ابزار کار خاصی نمیکنه که اگه نصب نکنید ممکن نیست، ولی دیدگاهی که داره، «ساده کردن عادت خوب»ـه که برا من جالب بود.
GitHub
GitHub - vet-run/vet: vet is a command-line tool that acts as a safety net for the risky curl | bash pattern. It lets you inspect…
vet is a command-line tool that acts as a safety net for the risky curl | bash pattern. It lets you inspect, diff against previous versions, and lint remote scripts before asking for your explicit ...
1❤18👍6👌3🔥1
لیفت یه برنامه تاکسی اینترنتیه و تو این مقاله توضیح میده که چطوری راننده ها و مسافرها رو بر اساس شرایط مختلف (مثلا مجاورت) به هم وصل میکنه. برای توضیحش از گراف و به شکل خاص از bipartite graph استفاده میکنه و به نظرم متن جالبی بود.
https://eng.lyft.com/solving-dispatch-in-a-ridesharing-problem-space-821d9606c3ff
https://eng.lyft.com/solving-dispatch-in-a-ridesharing-problem-space-821d9606c3ff
Medium
Solving Dispatch in a Ridesharing Problem Space
Imagine having to assemble a dynamic jigsaw puzzle with millions of new pieces every second. How would you approach such a problem…
👍20🔥4❤2😁1
یه ابزار جدیدی که پیدا کردم و دوستش دارم، proton authenticatorئه.
یه برنامه مدیریت کدهای two factor authenticationئه که برای سیستمعامل های مختلف (شامل لینوکس و اندروید) نسخه داره. با این که تازه معرفی شده من باگ خاصی ندیدم و خوب و مناسب و رایگان بین دستگاه ها کدها رو سینک میکنه. من قبلا برای گوشی از google authenticator استفاده میکردم که اگرچه اون سینک میکرد ولی راه خاصی نداشت که روی سیستم هم داشته باشمش. در نتیجه مجبور بودم کدش رو خروجی بگیرم و با یه چنین کامندی کد رو تولید میکردم. که طبیعتا قابلیت سینک هم نداشت.
از قابلیت های خوب دیگهی proton authenticator اینه که امکانات import export خیلی خوبی داره و میتونه از اکثر برنامه های دیگه ورودی بگیره و میتونید کدهاتون رو هم ازش export کنید و مثل microsoft authenticator به زور زندانی نمیکنه. =)
اگه براتون جالب بود از سایتشون میتونید لینک های نصبشو پیدا کنید:
https://proton.me/authenticator
یه برنامه مدیریت کدهای two factor authenticationئه که برای سیستمعامل های مختلف (شامل لینوکس و اندروید) نسخه داره. با این که تازه معرفی شده من باگ خاصی ندیدم و خوب و مناسب و رایگان بین دستگاه ها کدها رو سینک میکنه. من قبلا برای گوشی از google authenticator استفاده میکردم که اگرچه اون سینک میکرد ولی راه خاصی نداشت که روی سیستم هم داشته باشمش. در نتیجه مجبور بودم کدش رو خروجی بگیرم و با یه چنین کامندی کد رو تولید میکردم. که طبیعتا قابلیت سینک هم نداشت.
oathtool -b --totp '<my code>'
از قابلیت های خوب دیگهی proton authenticator اینه که امکانات import export خیلی خوبی داره و میتونه از اکثر برنامه های دیگه ورودی بگیره و میتونید کدهاتون رو هم ازش export کنید و مثل microsoft authenticator به زور زندانی نمیکنه. =)
اگه براتون جالب بود از سایتشون میتونید لینک های نصبشو پیدا کنید:
https://proton.me/authenticator
Proton
Proton Authenticator: Private, secure 2FA authenticator | Proton
Protect your accounts with Proton Authenticator, an end-to-end encrypted, open source, and ad-free two-factor authentication (2FA) app available across devices.
❤13👍4🔥1
چطور پرفورمنس postgresql رو ۴۲هزار برابر بدتر کنیم؟
همیشه تو مقاله ها به افزایش پرفورمنس میپردازیم ولی این مقاله اومده و با تنظیمات WAL و بافر و وکیم و ... پرفورمنس دیتابیس رو خیلی کم کرده!
برای من خیلی جنبه آموزشی داشت و با مفاهیم جدیدی از پستگرس آشنا شدم. امیدوارم برای شما هم همینطور باشه.
لینک مقاله اصلی:
https://byteofdev.com/posts/making-postgres-slow/
لینک ریاکت بهش در یوتوب:
https://www.youtube.com/watch?v=EeGCxH_0zx4
همیشه تو مقاله ها به افزایش پرفورمنس میپردازیم ولی این مقاله اومده و با تنظیمات WAL و بافر و وکیم و ... پرفورمنس دیتابیس رو خیلی کم کرده!
برای من خیلی جنبه آموزشی داشت و با مفاهیم جدیدی از پستگرس آشنا شدم. امیدوارم برای شما هم همینطور باشه.
لینک مقاله اصلی:
https://byteofdev.com/posts/making-postgres-slow/
لینک ریاکت بهش در یوتوب:
https://www.youtube.com/watch?v=EeGCxH_0zx4
ByteofDev
Making Postgres 42,000x slower because I am unemployed
As an respectable unemployed person must do, I tried to make Postgres as slow as possible
👍11❤2
Forwarded from Bit Orbit 🪐 (Arya)
این مقاله/پست درباره string خیلی جاله، من قبلا درباره فرق unicode با utf-8 خونده بودم، اما اینجا بیشتر درباره تاریخشون فهمیدم،
زمانی که ascii معرفی شد کلا برای حروف انگلیسی ساخته شده بود، و البته یکسری از کاراکترها و دستورات دیگه.
مثلا برای اسپیس کد 32 و مثلا برای حرف A از کد 65 داخلش استفاده میشد.
ولی کدهای قبل 32 چی؟ اونها برای دستورات استفاده میشه مثلا کد 7 برای صدای beep هست!
حالا تمامی این کاراکترها کلا توی 7 بیت قرار میگیرن و بیشتر نیاز ندارن.
مثلا اگه حرف z رو درنظر بگیریم، کد اسکیش میشه 122
و باینری 122 میشه
اما کامپیوتر ها با هشت بیت کار میکنند، پس پیاده سازی ascii که داخل کامپیوتر یک بیت اضافهای به ما میده!(آخرین بیت سمت چپ) پس از کد 128 تا 255 برای هیچکاری استفاده نمیشه داخل تیبل ascii
اینجاست که شرکتها و برنامه نویس ها تصمیم میگیرن اون بیت آخر رو برای کار های خودشون استفاده کنند.
همچنین هر زبانی مثلا یونانی از برای خودش یه کد پیج داشته
مثلا توی بعضی از سیستم عامل ها از کد 130 برای کاراکتر
اینم باید بگم که همه قبول کردن که تمامی کد های زیر 128 دست نخورده بمونه خوشبختانه.
اینکه کدهای بالای 128 نماینده چه کاراکتری باشه بستگی داره به اینکه از چه code page استفاده میکردن. مثلا code page 862 در اسرائیل استفاده میشده و 737 در یونان.
حالا سیستم عامل DOS از کلی کد پیج ساپورت میکرده، ولی همزمان نمیشده توی یک فایل تکست از دو زبان استفاده کنی.
حالا عجیبتر اینکه این سسیتم توی زبان هایی مثل چینی بدرد نمیخوره، چون خب از 'حرف' استفاده نمیکنند و کاراکترهاشون نماده و هزاران کاراکتر دارند،
پس توی 8 بیت جا نمیشن. خب اینا چیکار کردن؟ از چیزی به اسم DBCS استفاده کردن این یعنی double bytes character set
درواقع برای پیادهسازی زبان چیزی باید تعداد بایت ها رو دو برابر میکردن،
این خودش یه مشکلی داره، اینکه تایپ یک کاراکتر سادهست(حرکت رو به جلو) اما اگه بخای به عقب برگردی، این یه چالشه، چون نمیدونی کاراکتری که تایپ کردی یک بایتی بوده یا دو بایتی.
تا اینجا انچنان مشکلی نداشتیم، اما وقتی پای اینترنت به کامپیوترها باز شد، دیگه اینجا بود متنها توی سیستمهای مختلف به خوبی کار نمیکردند. و unicode اختراع شد.
به صورت خلاصه unicode به ازای هر کاراکتری یک کد داره، که بهش میگن character set، یونیکد طوری ساخته شده که حتی اگه در آیندههم کاراکتری و یا زبانی اختراع بشه، با unicode میشه یک کد منحصر بفرد بهش داد.
مثلا برای کاراکتر A از کد U0041 استفاده میشه،
و یا برای مثال U+0048 U+0065 U+006C U+006C U+006F. میشه Hello.
این کدها هگزا دسیمال هستند.
اوکی حالا سوال اینجاست که ما برای هرکاراکتری یک کد در نظر گرفتیم، اوکی خب چطوری روی هارد قراره ذخیرهش کنیم؟
در حالت اول و خب خیلی ساده میشه اکثر کد ها رو داخل 16 بیت دخیره کرد، اما دو مشکل وجود داره:
اول اینکه فضای بیشتری برای ذخیره میگیره،
دوم اینکه خب اینهمه تکست که از قبل نوشته شده، یکی باید همه اونها رو تبدیل کنه.
یا شاید یه بتونیم الگوریتم backward comaptible ایجاد کنیم.
اینجاست که جادوی utf-8 که یک encondig هست میاد وسط،
توی utf-8 از 0 تا 127 توی همون 8 بیت ذخیره میشه
و چیزی که به فضای بیشتری نیاز داره چی؟
وقتی کاراکتری بیشتر از 127 (یعنی نیاز به بیش از 7 بیت) نیاز داشته باشه، UTF-8 از چند بایت استفاده میکنه:
بایت اول یه "الگو" داره که نشون میده این کاراکتر چند بایتیه، و بایتهای بعدی با 10xxxxxx شروع میشن.
اینطوری کامپیوتر میفهمه این یه کاراکتر چندبایتیه و چطوری باید رمزگشاییش کنه.
زمانی که ascii معرفی شد کلا برای حروف انگلیسی ساخته شده بود، و البته یکسری از کاراکترها و دستورات دیگه.
مثلا برای اسپیس کد 32 و مثلا برای حرف A از کد 65 داخلش استفاده میشد.
ولی کدهای قبل 32 چی؟ اونها برای دستورات استفاده میشه مثلا کد 7 برای صدای beep هست!
حالا تمامی این کاراکترها کلا توی 7 بیت قرار میگیرن و بیشتر نیاز ندارن.
مثلا اگه حرف z رو درنظر بگیریم، کد اسکیش میشه 122
و باینری 122 میشه
1111010
و همینطور که میبینید، با فقط هفت بیت حروف انگلیسی، اعداد، سیمبلها و دستورات رو میتونم داشته باشیم،اما کامپیوتر ها با هشت بیت کار میکنند، پس پیاده سازی ascii که داخل کامپیوتر یک بیت اضافهای به ما میده!(آخرین بیت سمت چپ) پس از کد 128 تا 255 برای هیچکاری استفاده نمیشه داخل تیبل ascii
اینجاست که شرکتها و برنامه نویس ها تصمیم میگیرن اون بیت آخر رو برای کار های خودشون استفاده کنند.
همچنین هر زبانی مثلا یونانی از برای خودش یه کد پیج داشته
مثلا توی بعضی از سیستم عامل ها از کد 130 برای کاراکتر
é
استفاده میشده، و یه ورژن دیگهای از همون سیستم عامل(DOS) از این کد برای کاراکتر ג
استفاده میشده.اینم باید بگم که همه قبول کردن که تمامی کد های زیر 128 دست نخورده بمونه خوشبختانه.
اینکه کدهای بالای 128 نماینده چه کاراکتری باشه بستگی داره به اینکه از چه code page استفاده میکردن. مثلا code page 862 در اسرائیل استفاده میشده و 737 در یونان.
حالا سیستم عامل DOS از کلی کد پیج ساپورت میکرده، ولی همزمان نمیشده توی یک فایل تکست از دو زبان استفاده کنی.
حالا عجیبتر اینکه این سسیتم توی زبان هایی مثل چینی بدرد نمیخوره، چون خب از 'حرف' استفاده نمیکنند و کاراکترهاشون نماده و هزاران کاراکتر دارند،
پس توی 8 بیت جا نمیشن. خب اینا چیکار کردن؟ از چیزی به اسم DBCS استفاده کردن این یعنی double bytes character set
درواقع برای پیادهسازی زبان چیزی باید تعداد بایت ها رو دو برابر میکردن،
این خودش یه مشکلی داره، اینکه تایپ یک کاراکتر سادهست(حرکت رو به جلو) اما اگه بخای به عقب برگردی، این یه چالشه، چون نمیدونی کاراکتری که تایپ کردی یک بایتی بوده یا دو بایتی.
تا اینجا انچنان مشکلی نداشتیم، اما وقتی پای اینترنت به کامپیوترها باز شد، دیگه اینجا بود متنها توی سیستمهای مختلف به خوبی کار نمیکردند. و unicode اختراع شد.
به صورت خلاصه unicode به ازای هر کاراکتری یک کد داره، که بهش میگن character set، یونیکد طوری ساخته شده که حتی اگه در آیندههم کاراکتری و یا زبانی اختراع بشه، با unicode میشه یک کد منحصر بفرد بهش داد.
مثلا برای کاراکتر A از کد U0041 استفاده میشه،
و یا برای مثال U+0048 U+0065 U+006C U+006C U+006F. میشه Hello.
این کدها هگزا دسیمال هستند.
اوکی حالا سوال اینجاست که ما برای هرکاراکتری یک کد در نظر گرفتیم، اوکی خب چطوری روی هارد قراره ذخیرهش کنیم؟
در حالت اول و خب خیلی ساده میشه اکثر کد ها رو داخل 16 بیت دخیره کرد، اما دو مشکل وجود داره:
اول اینکه فضای بیشتری برای ذخیره میگیره،
دوم اینکه خب اینهمه تکست که از قبل نوشته شده، یکی باید همه اونها رو تبدیل کنه.
یا شاید یه بتونیم الگوریتم backward comaptible ایجاد کنیم.
اینجاست که جادوی utf-8 که یک encondig هست میاد وسط،
توی utf-8 از 0 تا 127 توی همون 8 بیت ذخیره میشه
و چیزی که به فضای بیشتری نیاز داره چی؟
وقتی کاراکتری بیشتر از 127 (یعنی نیاز به بیش از 7 بیت) نیاز داشته باشه، UTF-8 از چند بایت استفاده میکنه:
بایت اول یه "الگو" داره که نشون میده این کاراکتر چند بایتیه، و بایتهای بعدی با 10xxxxxx شروع میشن.
اینطوری کامپیوتر میفهمه این یه کاراکتر چندبایتیه و چطوری باید رمزگشاییش کنه.
Joel on Software
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
Ever wonder about that mysterious Content-Type tag? You know, the one you’re supposed to put in HTML and you never quite know what it should be? Did you ever get an email from your friends in…
👍18❤8🔥1
Forwarded from TechTube 𝕏 تک توب
تا حالا فکر کردین فقط یک ثانیه چقدر میتونه مهم باشه؟
شاید برای زندگی روزمره ما یک ثانیه هیچ فرقی ایجاد نکنه، اما توی دنیای فناوری، همین یک ثانیه میتونه میلیاردها تراکنش بانکی، مسیریابی GPS، یا حتی کل عملکرد اینترنت رو تحتتأثیر بذاره. اینجاست که «ثانیه کبیسه» یا Leap Second وارد داستان میشه؛ ثانیهای که هر چند سال یکبار به ساعت جهانی اضافه یا از اون کم میشه تا زمین و ساعت اتمی دوباره همگام بشن.
ثانیه کبیسه زمانی اتفاق میفته که اختلاف بین ساعت اتمی و زمان واقعی چرخش زمین به حدود ۰٫۹ ثانیه برسه. علت این اختلاف، تغییرات جزئی اما مداوم در سرعت چرخش زمینه. عواملی مثل جزر و مد اقیانوسها، حرکت هسته زمین، تغییرات اقلیمی و حتی زلزلهها باعث میشن زمین کمی کندتر یا سریعتر بچرخه. این تغییرات هرچند خیلی ناچیزن، اما در طول سالها جمع میشن و نیاز به اصلاح پیدا میکنن.
برای انسانها، این اصلاح سادهست. ولی برای کامپیوترها و شبکهها ماجرا پیچیدهتره. در لحظه اضافه شدن لیپسکند، ساعت UTC به جای رفتن از 23:59:59 به 00:00:00، یک لحظه به 23:59:60 میره. این زمان عجیب برای خیلی از نرمافزارها تعریف نشده و باعث میشه بعضی سیستمها هنگ کنن، بعضی تراکنشها با خطا مواجه بشن و حتی برخی پایگاههای داده قفل بشن. نمونههای واقعی این مشکل در گذشته باعث خاموشی چند دقیقهای سرویسهای بزرگ شده.
اینجا بود که گوگل «Leap Smear» رو مطرح کرد؛ ایده این بود که به جای اینکه یک ثانیه ناگهانی به زمان اضافه کنه، گوگل تصمیم گرفت این تغییر رو به صورت تدریجی و نرم پخش کنه. در Leap Smear، از چند ساعت قبل، هر ثانیه کمی طولانیتر میشه. این تغییر اونقدر کوچیکه که سیستمها متوجهش نمیشن، اما تا پایان بازه زمانی، یک ثانیه کامل به ساعت اضافه شده و زمان گوگل با زمان جهانی هماهنگ میشه، بدون اینکه جهش ناگهانی رخ بده.
برای مثال، اگر قرار باشه ثانیه کبیسه نیمهشب ۳۱ دسامبر اضافه بشه، گوگل از حدود ۱۰ ساعت قبل شروع میکنه هر ثانیه رو چند میلیثانیه کش بده. این تغییرات جمع میشن و در نهایت، ساعت گوگل دقیقاً با UTC یکی میشه. در سال ۲۰۱۶ که آخرین لیپسکند اضافه شد، سرویسهای زیادی در دنیا دچار مشکل شدن، اما جیمیل، یوتیوب و موتور جستجوی گوگل بدون کوچکترین اختلال کار کردن، چون Leap Smear از قبل فعال شده بود.
این روش باعث میشه هیچ لحظه «23:59:60» در سیستمهای گوگل وجود نداشته باشه، بنابراین نیازی به تغییر نرمافزارها یا پایگاههای داده نیست. همچنین در سیستمهای حساس به زمان مثل سرورهای تراکنشهای مالی یا دیتابیسهای توزیعشده، همه چیز بدون وقفه ادامه پیدا میکنه.
موفقیت Leap Smear باعث شد غولهای فناوری دیگه هم به سمت روشهای مشابه برن. حالا آمازون، فیسبوک و حتی بعضی مراکز داده مستقل هم به جای تغییر ناگهانی، زمان رو بهصورت تدریجی اصلاح میکنن.
طبق آخرین اعلام IERS، احتمال بعدی برای اضافه شدن ثانیه کبیسه در تاریخ ۳۰ ژوئن ۲۰۲۶ مطرح شده، اما با توجه به سرعت بالاتر چرخش زمین در سالهای اخیر، این اتفاق بعیده که رخ بده. همچنین IERS اعلام کرده در پایان دسامبر ۲۰۲۵ هیچ ثانیه کبیسهای اضافه نخواهد شد. با این حال، اگر در آینده این اصلاح زمانی لازم باشه، تاریخ دقیقش توسط همین مرکز اعلام میشه.
✏️ مطلبی از ممد
🔎 Leap Smear - Google Public NTP
📍 @TechTube
شاید برای زندگی روزمره ما یک ثانیه هیچ فرقی ایجاد نکنه، اما توی دنیای فناوری، همین یک ثانیه میتونه میلیاردها تراکنش بانکی، مسیریابی GPS، یا حتی کل عملکرد اینترنت رو تحتتأثیر بذاره. اینجاست که «ثانیه کبیسه» یا Leap Second وارد داستان میشه؛ ثانیهای که هر چند سال یکبار به ساعت جهانی اضافه یا از اون کم میشه تا زمین و ساعت اتمی دوباره همگام بشن.
ثانیه کبیسه زمانی اتفاق میفته که اختلاف بین ساعت اتمی و زمان واقعی چرخش زمین به حدود ۰٫۹ ثانیه برسه. علت این اختلاف، تغییرات جزئی اما مداوم در سرعت چرخش زمینه. عواملی مثل جزر و مد اقیانوسها، حرکت هسته زمین، تغییرات اقلیمی و حتی زلزلهها باعث میشن زمین کمی کندتر یا سریعتر بچرخه. این تغییرات هرچند خیلی ناچیزن، اما در طول سالها جمع میشن و نیاز به اصلاح پیدا میکنن.
برای انسانها، این اصلاح سادهست. ولی برای کامپیوترها و شبکهها ماجرا پیچیدهتره. در لحظه اضافه شدن لیپسکند، ساعت UTC به جای رفتن از 23:59:59 به 00:00:00، یک لحظه به 23:59:60 میره. این زمان عجیب برای خیلی از نرمافزارها تعریف نشده و باعث میشه بعضی سیستمها هنگ کنن، بعضی تراکنشها با خطا مواجه بشن و حتی برخی پایگاههای داده قفل بشن. نمونههای واقعی این مشکل در گذشته باعث خاموشی چند دقیقهای سرویسهای بزرگ شده.
اینجا بود که گوگل «Leap Smear» رو مطرح کرد؛ ایده این بود که به جای اینکه یک ثانیه ناگهانی به زمان اضافه کنه، گوگل تصمیم گرفت این تغییر رو به صورت تدریجی و نرم پخش کنه. در Leap Smear، از چند ساعت قبل، هر ثانیه کمی طولانیتر میشه. این تغییر اونقدر کوچیکه که سیستمها متوجهش نمیشن، اما تا پایان بازه زمانی، یک ثانیه کامل به ساعت اضافه شده و زمان گوگل با زمان جهانی هماهنگ میشه، بدون اینکه جهش ناگهانی رخ بده.
برای مثال، اگر قرار باشه ثانیه کبیسه نیمهشب ۳۱ دسامبر اضافه بشه، گوگل از حدود ۱۰ ساعت قبل شروع میکنه هر ثانیه رو چند میلیثانیه کش بده. این تغییرات جمع میشن و در نهایت، ساعت گوگل دقیقاً با UTC یکی میشه. در سال ۲۰۱۶ که آخرین لیپسکند اضافه شد، سرویسهای زیادی در دنیا دچار مشکل شدن، اما جیمیل، یوتیوب و موتور جستجوی گوگل بدون کوچکترین اختلال کار کردن، چون Leap Smear از قبل فعال شده بود.
این روش باعث میشه هیچ لحظه «23:59:60» در سیستمهای گوگل وجود نداشته باشه، بنابراین نیازی به تغییر نرمافزارها یا پایگاههای داده نیست. همچنین در سیستمهای حساس به زمان مثل سرورهای تراکنشهای مالی یا دیتابیسهای توزیعشده، همه چیز بدون وقفه ادامه پیدا میکنه.
موفقیت Leap Smear باعث شد غولهای فناوری دیگه هم به سمت روشهای مشابه برن. حالا آمازون، فیسبوک و حتی بعضی مراکز داده مستقل هم به جای تغییر ناگهانی، زمان رو بهصورت تدریجی اصلاح میکنن.
طبق آخرین اعلام IERS، احتمال بعدی برای اضافه شدن ثانیه کبیسه در تاریخ ۳۰ ژوئن ۲۰۲۶ مطرح شده، اما با توجه به سرعت بالاتر چرخش زمین در سالهای اخیر، این اتفاق بعیده که رخ بده. همچنین IERS اعلام کرده در پایان دسامبر ۲۰۲۵ هیچ ثانیه کبیسهای اضافه نخواهد شد. با این حال، اگر در آینده این اصلاح زمانی لازم باشه، تاریخ دقیقش توسط همین مرکز اعلام میشه.
🔎 Leap Smear - Google Public NTP
📍 @TechTube
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍2🔥1🆒1