This media is not supported in your browser
VIEW IN TELEGRAM
نمونه کاری که میکنه.
Forwarded from Byteforge / بایــت فورج 🛸
NTP چیست؟ (Network Time Protocol)
NTP یک پروتکل شبکه س که برای هماهنگ نگهداشتن ساعت سیستمها در شبکه استفاده میشود. با استفاده از NTP، همه دستگاهها (سرورها، لپتاپها، روتـرها و ...) میتونن ساعت دقیقی داشته باشن.
این اصلا اهمیتی داره؟
NTP چطور کار میکند؟
Stratum در NTP یعنی چه؟
چطور از NTP استفاده کنیم؟
در لینوکس برای فعالسازی
برای دیدن وضعیت پروسه
اگر از chrony استفاده میکنی (که نسبت به ntp سبکتر و امنتره)
در ویندوز :
یا از طریق CMD:
سرورهای NTP رایگان و قابل استفاده :
نکات امنیتی درباره NTP
کاربردهای پیشرفته NTP
NTP یک پروتکل شبکه س که برای هماهنگ نگهداشتن ساعت سیستمها در شبکه استفاده میشود. با استفاده از NTP، همه دستگاهها (سرورها، لپتاپها، روتـرها و ...) میتونن ساعت دقیقی داشته باشن.
این اصلا اهمیتی داره؟
ساعت دقیق در کامپیوترها فقط برای نمایش زمان نیست. خیلی از سیستمها وابسته به زمان درست هستند.
در امنیت و رمزنگاری، اگر ساعت سیستم اشتباه باشه، گواهیها از کار میفته .
در سرورها و شبکهها، هماهنگی بین سیستمها وابسته به زمان دقیقه.
در بانکها و صرافیها، زمان ثبت تراکنشها باید کاملاً دقیق باشه.
در لاگها و مانیتورینگ، برای تحلیل درست مشکلات، زمان مهمه.
NTP چطور کار میکند؟
کامپیوتر شما به یک سرور NTP متصل میشه.
سرور زمان دقیق (بر اساس UTC) را به سیستم شما میفرسته.
سیستم شما مدت زمان رفتوبرگشت پیام (تأخیر شبکه) را در نظر میگیرد.
سپس ساعت خودشو تنظیم میکنه.
این فرآیند مرتب تکرار میشه تا همیشه ساعت سیستم بهروز باشه .
Stratum در NTP یعنی چه؟
NTP از یک سیستم لایهای استفاده میکنه به نام Stratum
Stratum 0: منابع دقیق اولیه زمان مثل ساعت اتمی یا GPS
Stratum 1: سرورهایی که مستقیماً به Stratum 0 متصله
Stratum 2: از سرورهای stratum 1 زمان میگیرن
و همینطور تا Stratum 15
هرچه Stratum کمتر باشه، منبع دقیقتره . معمولاً سیستمهای معمولی به سرورهای Stratum 2 یا 3 متصل میشن .
چطور از NTP استفاده کنیم؟
در لینوکس برای فعالسازی
sudo timedatectl set-ntp true
برای دیدن وضعیت پروسه
timedatectl status
اگر از chrony استفاده میکنی (که نسبت به ntp سبکتر و امنتره)
sudo systemctl enable chronyd
sudo systemctl start chronyd
در ویندوز :
به کنترل پنل برو، بخش Date and Time، و تب Internet Time رو باز کن.
سرور NTP رو مشخص کن مثل: time.windows.com
یا از طریق CMD:
w32tm /resync
سرورهای NTP رایگان و قابل استفاده :
pool.ntp.org: معروفترین سرور توزیعشده NTP
ntp.ubuntu.com: مخصوص کاربران اوبونتو
نکات امنیتی درباره NTP
نسخههای جدیدتر NTP امکان احراز هویت دارند (با کلید هششده)
گاهی از سرورهای NTP برای حملات DDoS استفاده میشود
برای امنیت بیشتر، استفاده از chrony به جای ntpd پیشنهاد میشود
دسترسی سیستم به پورتهای UDP 123 باید باز باشد
کاربردهای پیشرفته NTP
در دیتاسنترها برای هماهنگ نگهداشتن زمان بین هزاران سرور
در برنامههای تحلیلی یا سیستمهای مانیتورینگ
در سیستمهای توزیعشده مثل Kafka، Hadoop یا Kubernetes
در شبکههای مالی و رمزنگاری برای زمان دقیق تراکنشها
در اینترنت اشیا و دستگاههایی که log میگیرند یا عملیات زمانبندیشده دارند
#ntp
#byteforge
@byteforge_chan 🛸
🔥3
Byteforge / بایــت فورج 🛸
NTP چیست؟ (Network Time Protocol) NTP یک پروتکل شبکه س که برای هماهنگ نگهداشتن ساعت سیستمها در شبکه استفاده میشود. با استفاده از NTP، همه دستگاهها (سرورها، لپتاپها، روتـرها و ...) میتونن ساعت دقیقی داشته باشن. این اصلا اهمیتی داره؟ ساعت دقیق در کامپیوترها…
یه نکته هم من اضافه کنم. اینکه chrony پکیج خوبیه و امکانات خوبی میده. ولی اگه نیاز داشتین که ntp ست کنید، خود systemD یه پکیج داره به اسم systemd-timesyncd
که دیفالت خیلی از os ها دارن، همون رو میشه فعال کرد و راحت NTP داشت.
یه چیز دیگه هم اینکه خود پکیج NTP هنوز توی ریپازیتوری های دبیان هست ولی منسوخ شده.
که دیفالت خیلی از os ها دارن، همون رو میشه فعال کرد و راحت NTP داشت.
یه چیز دیگه هم اینکه خود پکیج NTP هنوز توی ریپازیتوری های دبیان هست ولی منسوخ شده.
👍3❤1
متاسفانه اینقدر که از github actions استفاده کردم، اکانتم محدود شده و نمیتونه دیگه اکشنها رو ران کنه :(
گیتهاب خسیسه.
گیتهاب خسیسه.
💔4❤2💩1
من فایل pdf رو که با google chrome باز میکنم قابلیت اینکه بتونم از اکستنشن گوگل ترنسلیت استفاده کنم رو نداره
سر همین این سایت رو پیدا کردم. pdf رو باز میکنه و نیاز به اپلود هم نیست.
سر همین این سایت رو پیدا کردم. pdf رو باز میکنه و نیاز به اپلود هم نیست.
pdfviewer.softgateon.net
PDF Viewer Online
PDF Online Viewer, Reader is a free online tool that allows you to view PDF, DOC, XLS, PPT files directly in your web browser. PDF Viewer Online reads files without uploading the file to any servers. It does not save or share the file you select. It only…
❤4
اوضاع اینترنت داره خراب میشه.
از سگارو پرسدم گفت ریورس تانل خوب میتونه جواب بده.
اگه میتونید، بیایید همکاری کنیم یه چیزی بسازیم باهم.
pv: @m_shabane
از سگارو پرسدم گفت ریورس تانل خوب میتونه جواب بده.
اگه میتونید، بیایید همکاری کنیم یه چیزی بسازیم باهم.
pv: @m_shabane
Bit Orbit 🪐
میتونید،
خیلی کلی: ریورس تانل به سروری که از فردوسی کلاد خریدم کار نکرد. چون از خارج نمیشه بهش وصل شد اصلا :/ واقعا؟!!
ولی تونل مستقیم از ایران به اون کار کرد، اما روی اینترنت ایرانسل کلا به سرور ایران(فردوسی کلاد) نمیشه وصل شد،
چرا رفتم سرغ فردوسی کلاد؟ چون PAYG بود و من از قبل داخلش یه میزان پولی داشتم.
بنظرتون ریورس پراکسی روی سرور های دیگهای ممکنه کار کنه؟
یا مثلا از CDN اروان چی؟
ولی تونل مستقیم از ایران به اون کار کرد، اما روی اینترنت ایرانسل کلا به سرور ایران(فردوسی کلاد) نمیشه وصل شد،
چرا رفتم سرغ فردوسی کلاد؟ چون PAYG بود و من از قبل داخلش یه میزان پولی داشتم.
بنظرتون ریورس پراکسی روی سرور های دیگهای ممکنه کار کنه؟
یا مثلا از CDN اروان چی؟
Bit Orbit 🪐
خیلی کلی: ریورس تانل به سروری که از فردوسی کلاد خریدم کار نکرد. چون از خارج نمیشه بهش وصل شد اصلا :/ واقعا؟!! ولی تونل مستقیم از ایران به اون کار کرد، اما روی اینترنت ایرانسل کلا به سرور ایران(فردوسی کلاد) نمیشه وصل شد، چرا رفتم سرغ فردوسی کلاد؟ چون PAYG…
خب تا اینجا باید بگم که CDN آروان هم اصلا کار نکرد.
ترکیب vless, vmess + CDN + WS
ترکیب vless, vmess + CDN + WS
Forwarded from Woland's Linux Journal (Woland)
دسترسی به تمام برنامهها بدون vpn
با استفاده از Beeper، تمام چتهاتون رو یکجا داشته باشید.
بیپر از ماتریکس استفاده میکنه و بدون نیاز به vpn تمام چتهای شما رو اعم از تلگرام، واتساپ، توییتر، اینستاگرام، دیسکورد و ... توی خودش جمع میکنه.
ثبتنام رایگان و فقط با یک ایمیل انجام میشه.
بعد از اتصال برنامهها میتونین از طریق بیپر و بدون ویپیان تمام کانالها و چتهاتون رو ببینید و پیام بفرستید.
دانلود:
Android | iOS | macOS | Windows | Linux
لینک سایت:
beeper.com | matrix.org
#معرفی
با استفاده از Beeper، تمام چتهاتون رو یکجا داشته باشید.
بیپر از ماتریکس استفاده میکنه و بدون نیاز به vpn تمام چتهای شما رو اعم از تلگرام، واتساپ، توییتر، اینستاگرام، دیسکورد و ... توی خودش جمع میکنه.
ثبتنام رایگان و فقط با یک ایمیل انجام میشه.
بعد از اتصال برنامهها میتونین از طریق بیپر و بدون ویپیان تمام کانالها و چتهاتون رو ببینید و پیام بفرستید.
دانلود:
Android | iOS | macOS | Windows | Linux
لینک سایت:
beeper.com | matrix.org
#معرفی
👍2
من سروری که برای خودم خریدم متاسفانه از یک شرکت روسی مجبور به خرید شدم برای همین دسترسی به chatGPT و خیلی از ابزای های دیگه اصلا نداشتم. حتی با توجه به اینکه خود سرور باید توی کشور امریکا میبود!
برای همین اسکریپتی هست که چیزی به اسم وارپ فعال میکنه که برای کلادفلیر هست.
فعلا داره خوب جواب میده و باعث شده همه سرویس های اینطوری هم باز بشن برای من.
برای همین اسکریپتی هست که چیزی به اسم وارپ فعال میکنه که برای کلادفلیر هست.
فعلا داره خوب جواب میده و باعث شده همه سرویس های اینطوری هم باز بشن برای من.
GitHub
GitHub - yonggekkk/warp-yg: warp多功能一键脚本,支持warp-go与wgcf切换,无限生成warp配置文件,支持升级warp+、warp团队账户,查看VPS本地IP、netflix、chatgpt解锁状态
warp多功能一键脚本,支持warp-go与wgcf切换,无限生成warp配置文件,支持升级warp+、warp团队账户,查看VPS本地IP、netflix、chatgpt解锁状态 - yonggekkk/warp-yg
❤2🤔1
این مدت خواستم از روش icmp tunnelling بگم، اما هر 12 ساعت یکبار سرور من با این روش متاسفانه IPاش بلاک شد و اصلا استیبل نبود.
اما خیلی کلی: متصل بود و سرعت خوبی هم داشت.
اما خیلی کلی: متصل بود و سرعت خوبی هم داشت.
🔥3👍1
دوست دارم یه سایت بنویسم
برای تایمی که آدمها نیاز به خرید یک دورهای(هر محتوای دیجیتالی) دارند
بعد داخل اون قسمت کاربران دروه رو اضافه کنند و هرکسی وارد سایت که شد دورهای که دوست داره بخره رو به لیستش اد کنه،
اینطوری وقتی کسی دورهای نیاز داره هزینه بین کاربرانش تقسیم میشه.
من خواستم یک دورهی راست بخرم که مدرسش آرین اقبال بود، چند قسمتش رو به واسطهی یکی دیدم، واقعا بینظیر بود،
چون فقط سینتکس راست رو آموزش نمیداد، RFC باز میکرد و کامل توضیح میداد که مثلا چطوری یک متغیر عدد float نگهداری میکنه!
اگه بنظرتون شما هم به این دوره علاقه داشتین به منم خبر بدین باهم بگیریم.
ادرس دوره: https://anisa.co.ir/courses/software-development-courses/rust-course.html
برای تایمی که آدمها نیاز به خرید یک دورهای(هر محتوای دیجیتالی) دارند
بعد داخل اون قسمت کاربران دروه رو اضافه کنند و هرکسی وارد سایت که شد دورهای که دوست داره بخره رو به لیستش اد کنه،
اینطوری وقتی کسی دورهای نیاز داره هزینه بین کاربرانش تقسیم میشه.
من خواستم یک دورهی راست بخرم که مدرسش آرین اقبال بود، چند قسمتش رو به واسطهی یکی دیدم، واقعا بینظیر بود،
چون فقط سینتکس راست رو آموزش نمیداد، RFC باز میکرد و کامل توضیح میداد که مثلا چطوری یک متغیر عدد float نگهداری میکنه!
اگه بنظرتون شما هم به این دوره علاقه داشتین به منم خبر بدین باهم بگیریم.
ادرس دوره: https://anisa.co.ir/courses/software-development-courses/rust-course.html
❤1
این چند روز رو دارم ماتریکس ران میکنم، برای مواقعی که کلا از اینترنت قطع شدیم و کلا شبکه داخلی داشتیم
مجبور نباشیم بریم داخل پیامرسان های داخلی،
تا الان فقط بخش پیام رسانی رو تونستم بدون مشکل ران کنم.
اما یکی از قابلیت های خوبی که داره میشه باهاش تماس صوتی/تصویری گروهی بدون webRTC third party داشت!
که این قسمت رو هنوز درگیرش هستم،
یک سایت پیدا کردم که دامنهی ماتریکس شما رو میگیره و تست میکنه و هرجایی که ایراد داشته باشه رو بهتون میگه.
https://federationtester.matrix.org/
وقتی کارم تکمیل شد، روندش رو بلاگ میکنم :)
مجبور نباشیم بریم داخل پیامرسان های داخلی،
تا الان فقط بخش پیام رسانی رو تونستم بدون مشکل ران کنم.
اما یکی از قابلیت های خوبی که داره میشه باهاش تماس صوتی/تصویری گروهی بدون webRTC third party داشت!
که این قسمت رو هنوز درگیرش هستم،
یک سایت پیدا کردم که دامنهی ماتریکس شما رو میگیره و تست میکنه و هرجایی که ایراد داشته باشه رو بهتون میگه.
https://federationtester.matrix.org/
وقتی کارم تکمیل شد، روندش رو بلاگ میکنم :)
🔥6❤1👍1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
یه فایل داریم توی مسیر
فایدهش برای تایمیه که کلی سرور رو باید مدیریت کنی و حفظ کردن ایپی و یورز های سرورها خیلی اذیت کنندهس.
از طرفی بازم یه ابزاری هست به اسم sshs که این رو هم راحتتر میکنه و یه TUI بر اساس اون کانفیگ برات میسازه.
ساختار فایل هم به این شکل هست که شما یک اسم برای کانکشنتون ست میکنید و بعد یوزنیم، آدرس و اگه پورت سرور ssh رو تغییر داده باشین، باید پورت رو هم مشخص کنید. برای مثال:
قبلا از asbru-cm استفاده میکردم. GUI داشت و قابلیتهای سادهای داشت. ولی یک روز که آرچ رو اپدیت کردم دیگه تصمیم گرفت که دیگه بالا نیاد و به لایبراری ارور بخوره.
~/.ssh/configفایدهش برای تایمیه که کلی سرور رو باید مدیریت کنی و حفظ کردن ایپی و یورز های سرورها خیلی اذیت کنندهس.
از طرفی بازم یه ابزاری هست به اسم sshs که این رو هم راحتتر میکنه و یه TUI بر اساس اون کانفیگ برات میسازه.
ساختار فایل هم به این شکل هست که شما یک اسم برای کانکشنتون ست میکنید و بعد یوزنیم، آدرس و اگه پورت سرور ssh رو تغییر داده باشین، باید پورت رو هم مشخص کنید. برای مثال:
Host production/rabbitmq
HostName 192.168.1.3
User root
Host development/rabbitmq
HostName 10.10.0.2
User arya
قبلا از asbru-cm استفاده میکردم. GUI داشت و قابلیتهای سادهای داشت. ولی یک روز که آرچ رو اپدیت کردم دیگه تصمیم گرفت که دیگه بالا نیاد و به لایبراری ارور بخوره.
❤2
https://github.com/mcuadros/ofelia
این ایمیج خیلی جالبیه.
کارش اینه که مثلا شما نیاز دارین تا توی یک تایم خاصی یک کانتینر داکر اجرا بشه و روی اون یک کامند اجرا بشه و بعد exit بشه.
سینتکسش هم سادهست.
این ایمیج خیلی جالبیه.
کارش اینه که مثلا شما نیاز دارین تا توی یک تایم خاصی یک کانتینر داکر اجرا بشه و روی اون یک کامند اجرا بشه و بعد exit بشه.
سینتکسش هم سادهست.
[job-run "job-executed-on-new-container"]
schedule = @hourly
image = ubuntu:latest
command = touch /tmp/example
GitHub
GitHub - mcuadros/ofelia: A docker job scheduler (aka. crontab for docker)
A docker job scheduler (aka. crontab for docker). Contribute to mcuadros/ofelia development by creating an account on GitHub.
❤2
قطعا nexus رو میشناسین، دقیقا ساخته شده برای وضعیت ایران(اما با هدف دیگهای)
وقتی اینترنت قطع میشه و هیچ چیزی رو نمیتونید بیلد کنید چون تمامی لایبراریهایی که استفاده کردین از سرورهای اصلی npm, pypi میاد، اینجاست که یک Repository manager بکارتون میاد.
روش کارش اینطوریه که مثلا شما توی داکر تنظیم میکنید که تمامی ایمیج ها از nexus داخلی خودتون پول بشه، و با اینکار نکسوز هر ایمج رو برای شما کش میکنه و دفعه بعد از اینترنت دانلود نمیکنه.
اما حالا فرض کنید که نیاز دارین تا ایمیجها و لایبراریهای خوتون رو هم داخل یک ریپازیتوری لوکال داشته باشین، خب این امکان رو نکسوس بهتون میده.
اما یک ایرادی داره، اونم اینکه ما نیاز داریم تا وقتی میگیم مثلا ایمیجی که خودمون ساختیم رو بگیر، نکسوس ایمیج رو از ریپازتوری که تنظیم کردیم بگیره، خب اینم مشکلی نداره.
پس مشکل کجاست؟
اینکه حتما باید یک url مجزا برای pull و push رو داخل کلاینتها مشخص کنیم(تا جایی که من میدونم و سرچ کردم)چون push داخلی هست اما pull اول باید از اینترنت بیاد.
برای اینم نکسوس یه راه حل داده که نیاز نباشه دو ریپازیتوری مختلف رو تعریف کنیم، اینکه از ویژنگی group استفاده کنیم
با این ویژگی نکسوس اول سعی میکنه pull/push رو به ریموت ریپازیتوری اولی بزنه، بعد که fail شد میره سراغ دومی که همون self host خودمون روی نکسوس هست.
اما این قابلیت پولیه و یا کرک نیاز داره :(
من از این دو مورد تا جایی که یک ابزار مناسب و open source باشه دوری میکنم.
ابزار جایگزین برای nexus که همه این ویژگیها رو رایگان داره میشه pulpManager
اینکه با زبان با زبان java نوشته نشده هم شاید یه فیچر باشه :)))
وقتی اینترنت قطع میشه و هیچ چیزی رو نمیتونید بیلد کنید چون تمامی لایبراریهایی که استفاده کردین از سرورهای اصلی npm, pypi میاد، اینجاست که یک Repository manager بکارتون میاد.
روش کارش اینطوریه که مثلا شما توی داکر تنظیم میکنید که تمامی ایمیج ها از nexus داخلی خودتون پول بشه، و با اینکار نکسوز هر ایمج رو برای شما کش میکنه و دفعه بعد از اینترنت دانلود نمیکنه.
اما حالا فرض کنید که نیاز دارین تا ایمیجها و لایبراریهای خوتون رو هم داخل یک ریپازیتوری لوکال داشته باشین، خب این امکان رو نکسوس بهتون میده.
اما یک ایرادی داره، اونم اینکه ما نیاز داریم تا وقتی میگیم مثلا ایمیجی که خودمون ساختیم رو بگیر، نکسوس ایمیج رو از ریپازتوری که تنظیم کردیم بگیره، خب اینم مشکلی نداره.
پس مشکل کجاست؟
اینکه حتما باید یک url مجزا برای pull و push رو داخل کلاینتها مشخص کنیم(تا جایی که من میدونم و سرچ کردم)چون push داخلی هست اما pull اول باید از اینترنت بیاد.
برای اینم نکسوس یه راه حل داده که نیاز نباشه دو ریپازیتوری مختلف رو تعریف کنیم، اینکه از ویژنگی group استفاده کنیم
با این ویژگی نکسوس اول سعی میکنه pull/push رو به ریموت ریپازیتوری اولی بزنه، بعد که fail شد میره سراغ دومی که همون self host خودمون روی نکسوس هست.
اما این قابلیت پولیه و یا کرک نیاز داره :(
من از این دو مورد تا جایی که یک ابزار مناسب و open source باشه دوری میکنم.
ابزار جایگزین برای nexus که همه این ویژگیها رو رایگان داره میشه pulpManager
اینکه با زبان با زبان java نوشته نشده هم شاید یه فیچر باشه :)))
🤔2
فرض کنید وقتی یکی به سرورتون ssh کرد، بجای اینکه shell بگیره،
هر برنامهای که شما از قبل تنظیم کرده باشین اجرا بشه.
مثلا یک متن رندوم بهش نشون بده.
اینکار با تنظیم ForceCommand داخل ssh_config انجام میشه.
مثلا تست کنید روی سرور من, cmatrix اجرا میشه :)
NOTE: من این تست رو بر میدارم، صرفا جنبه فان داشت اما الان بنظرم دیگه ممکنه خطری باشه، گرچه تنظیمات امنیتی رو سعی کردم رعایت کنم.
هر برنامهای که شما از قبل تنظیم کرده باشین اجرا بشه.
مثلا یک متن رندوم بهش نشون بده.
اینکار با تنظیم ForceCommand داخل ssh_config انجام میشه.
#/etc/ssh/ssh_config
Match User guest
ForceCommand /home/guest/random_number.sh
مثلا تست کنید روی سرور من, cmatrix اجرا میشه :)
NOTE: من این تست رو بر میدارم، صرفا جنبه فان داشت اما الان بنظرم دیگه ممکنه خطری باشه، گرچه تنظیمات امنیتی رو سعی کردم رعایت کنم.
ssh random@random.wiregeek.ir
👍4🔥1
این مقاله/پست درباره 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 به ازای هر کاراکتری یک کد داره، که بهش میگن code point، یونیکد طوری ساخته شده که حتی اگه در آیندههم کاراکتری و یا زبانی اختراع بشه، با 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 به ازای هر کاراکتری یک کد داره، که بهش میگن code point، یونیکد طوری ساخته شده که حتی اگه در آیندههم کاراکتری و یا زبانی اختراع بشه، با 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…
❤7🔥2