Data Representation Formats
Ma'lumotlar network orqali bir joydan ikkinchisiga ko'chib o'taveradi. Ammo ularni qandaydir formatda clientga ko'rsatish kerak bo'ladi. Bir paytlar bitlarni encode qilib represent qilish muammo edi hozir esa XML va JSON kabi formatlar mavjud. Hop bu postda aynan shu ikki type haqida gaplashamiz.
XML
Agarda GraphQL orqali biror backend dastur, HTML orqali biror vector rasm qilib ko'rgan bo'lsangiz bu formatni juda yaxshi bilasiz. Siz bilgan SOAP (servicelar o'rtasida aloqa almashish protokoli), RSS, HTML5, SVG va boshqalar technologylarnini misol qilishimiz mumkin. Ularning barchasi XML formatidan foydalanadi. Balkim bilarsiz balkim yo'q
JSON
REST desa hayolingizga birinchi bo'lib json datalarni almashishi kelishi tabiiy. AJAX xisobiga mashxurlikga erishgan, hamda hozirda deyarli barcha loyihalarda aynan ishlatilishini sababi ham shu deb tahmin qilaman.
JSON zo'r XML yomon emas ular nimaligi haqida tushunishingiz kerak. XML juda kuchli va ba'zan JSONdan ham yaxshi ko'rsatkichlar ko'rsata oladi ayniqsa validationlar bilan. JSONda esa bunday featurelar mavjud emas. Ammo JSON readable va more flexible bo'lgan bir paytda XML complex va less flexible xisoblanadi. Ya'ni ikkisida ham pros-conslar mavjud.
Bizda boshqa formatlar ham bor misol uchun YAML (Yet another markup language), TOML va h.k.z. Agar bu postdan ma'no topa olmasangiz o'zim aytib o'taman, bu sizga kelasi postlar nima haqidaligi haqida xabar bermoqda.
Kelasi postlar nima haqidaligini topdingizmi?
@otabekswe
Ma'lumotlar network orqali bir joydan ikkinchisiga ko'chib o'taveradi. Ammo ularni qandaydir formatda clientga ko'rsatish kerak bo'ladi. Bir paytlar bitlarni encode qilib represent qilish muammo edi hozir esa XML va JSON kabi formatlar mavjud. Hop bu postda aynan shu ikki type haqida gaplashamiz.
XML
Agarda GraphQL orqali biror backend dastur, HTML orqali biror vector rasm qilib ko'rgan bo'lsangiz bu formatni juda yaxshi bilasiz. Siz bilgan SOAP (servicelar o'rtasida aloqa almashish protokoli), RSS, HTML5, SVG va boshqalar technologylarnini misol qilishimiz mumkin. Ularning barchasi XML formatidan foydalanadi. Balkim bilarsiz balkim yo'q
docx
degan bu microsoft documentation (word) ham xattoki document in xml format degan ma'noda docx ishlatadi. Ya'ni ma'lumotlarni webda ham xatoliklarsiz ishlashini ta'minlash uchun.JSON
REST desa hayolingizga birinchi bo'lib json datalarni almashishi kelishi tabiiy. AJAX xisobiga mashxurlikga erishgan, hamda hozirda deyarli barcha loyihalarda aynan ishlatilishini sababi ham shu deb tahmin qilaman.
JSON zo'r XML yomon emas ular nimaligi haqida tushunishingiz kerak. XML juda kuchli va ba'zan JSONdan ham yaxshi ko'rsatkichlar ko'rsata oladi ayniqsa validationlar bilan. JSONda esa bunday featurelar mavjud emas. Ammo JSON readable va more flexible bo'lgan bir paytda XML complex va less flexible xisoblanadi. Ya'ni ikkisida ham pros-conslar mavjud.
Bizda boshqa formatlar ham bor misol uchun YAML (Yet another markup language), TOML va h.k.z. Agar bu postdan ma'no topa olmasangiz o'zim aytib o'taman, bu sizga kelasi postlar nima haqidaligi haqida xabar bermoqda.
@otabekswe
Functional Programming
Sodda va oddiy tilda ajoyib blog post yozdim. Bu sizga aniq nimadir o'rgata olishiga ishonaman.
Ushbu postda siz:
- Lambda Calculus bilan tanishasiz
- Ajoyib bir misolga yechim topasiz
- Bilimlaringizni amaliyotda sinay oladigan bo'lasiz.
Postni o'qish
@otabekswe
Sodda va oddiy tilda ajoyib blog post yozdim. Bu sizga aniq nimadir o'rgata olishiga ishonaman.
Ushbu postda siz:
- Lambda Calculus bilan tanishasiz
- Ajoyib bir misolga yechim topasiz
- Bilimlaringizni amaliyotda sinay oladigan bo'lasiz.
Postni o'qish
@otabekswe
Yaxshi bilish muhim
O'zingiz ishlatadigan "tool"larni yaxshi bilish juda ko'plab foyda olib keladi. Ko'plab loyihalar yaratishimda yoki muammolar yechishimda bu bilimlarim juda azq otgan. Masalan gylo.io (tez-kunda) ni yaratishda SSHdan boshlaganman. Birinchi ta'surot "WOW, I built it!" deganim esimda. Hozir Goda yozayabman.
Doim OSni yaxshi tushunishga harakat qiling resurslarni qadrlay boshlaysiz. O’rganayotgan dasturlash tilingizni yaxshi o’rganing, so’zdagi yoki go’yadagi loyihalarni bemalol qura olasiz va frameworklarda qiynalmaysiz. Networking o’rganing ko’plab muammolar ba’zan backend yoki frontendda emas balkim networkda ham yuz berishi mumkin. Database yaxshi o’rganing, ma’lumotlarni samarali va kamchiqim saqlashga harakat qilasiz.
O’rganishni o’rganing, shunda yutasiz!
LinkedIndagi so’ngi postimni o’qing tunneling qilishni o’rganasiz 😎
@otabekswe
O'zingiz ishlatadigan "tool"larni yaxshi bilish juda ko'plab foyda olib keladi. Ko'plab loyihalar yaratishimda yoki muammolar yechishimda bu bilimlarim juda azq otgan. Masalan gylo.io (tez-kunda) ni yaratishda SSHdan boshlaganman. Birinchi ta'surot "WOW, I built it!" deganim esimda. Hozir Goda yozayabman.
Doim OSni yaxshi tushunishga harakat qiling resurslarni qadrlay boshlaysiz. O’rganayotgan dasturlash tilingizni yaxshi o’rganing, so’zdagi yoki go’yadagi loyihalarni bemalol qura olasiz va frameworklarda qiynalmaysiz. Networking o’rganing ko’plab muammolar ba’zan backend yoki frontendda emas balkim networkda ham yuz berishi mumkin. Database yaxshi o’rganing, ma’lumotlarni samarali va kamchiqim saqlashga harakat qilasiz.
O’rganishni o’rganing, shunda yutasiz!
@otabekswe
SystemD yoxud System Daemon
Dasturlashga endi kirib, birinchi loyihamni ahost.uz ga joylaganimni eslayman. O'sha payt python dasturlarimni qanday internetda 24/7 ishlab turishini ta'minlash haqida o'ylardim. Terminalga kirib python falonchi.py deyishim bilan dastur ishlar ammo terminalni yopishim yoki browserdan chiqishim bilan dastur o'chib qolardi. Birdan nohup buyrug'iga ko'zim tushdi va u haqida o'rganishni boshladim.
Keyinchalik Linux o'rganayotib systemd tushunchasiga ko'zim tushdi. systemd bu tizim sozlamalari va servicelarni ishga tushuruvchi tizim ekan. U har bir topshiriqlarni unitlarga bo'lib chiqar ekan. Va eng asosiysi virtual mashina boot (yonish) ketma-ketligida systemd har bir unit (service fayl)larni uyg'otib chiqar ekan. Bu ham mayli o'chib qolsa restart qilishni ham buyrusa bo'lar ekan. Menga juda yoqdi va bu haqida o'rganishni boshladim va muammoga yechim topdim.
Agar dasturlaringizni serverga deploy qilishda muammolaringiz bo'lsa yoki bilmayotgan bo'lsangiz mana bilib oldingiz )
@otabekswe
Dasturlashga endi kirib, birinchi loyihamni ahost.uz ga joylaganimni eslayman. O'sha payt python dasturlarimni qanday internetda 24/7 ishlab turishini ta'minlash haqida o'ylardim. Terminalga kirib python falonchi.py deyishim bilan dastur ishlar ammo terminalni yopishim yoki browserdan chiqishim bilan dastur o'chib qolardi. Birdan nohup buyrug'iga ko'zim tushdi va u haqida o'rganishni boshladim.
nohup
linux operatsion tizimidagi buyruq bo'lib shell yoki terminaldan chiqib ketgan taqdiringizgda ham process ishlab turishini ta'minlaydi (har bir dastur bitta processda run bo'ladi va uni ko'rish uchun htop
, top
yoki ps aux
buyruqlarini terminalga yozish kifoya qiladi). nohup odatda SIGHUP (signal Hang UP) signalini qabul qilishdan qochishga yordam beradi. Ammo bu juda yomon yechim edi. Chunki har safar dastur o'chib qolsa yoki tizim reboot (qayta yonsa) bo'lsa uni qo'lda yana ishga tushirishni talab qilardi.Keyinchalik Linux o'rganayotib systemd tushunchasiga ko'zim tushdi. systemd bu tizim sozlamalari va servicelarni ishga tushuruvchi tizim ekan. U har bir topshiriqlarni unitlarga bo'lib chiqar ekan. Va eng asosiysi virtual mashina boot (yonish) ketma-ketligida systemd har bir unit (service fayl)larni uyg'otib chiqar ekan. Bu ham mayli o'chib qolsa restart qilishni ham buyrusa bo'lar ekan. Menga juda yoqdi va bu haqida o'rganishni boshladim va muammoga yechim topdim.
Agar dasturlaringizni serverga deploy qilishda muammolaringiz bo'lsa yoki bilmayotgan bo'lsangiz mana bilib oldingiz )
@otabekswe
TCP Handshake yoxud qo'l tashlang BRAT 2-qism
Ushbu qismda siz,
- Paketlar almashinuvini kuzatish
- Server va Client o'rtasidagi suxbat
- Paketlar xajmi
- Nima uchun connection ochish qimmatligi
va mengakofe olib berishingiz mumkinligini o'rganasiz.
Postni o'qish
@otabekswe
Ushbu qismda siz,
- Paketlar almashinuvini kuzatish
- Server va Client o'rtasidagi suxbat
- Paketlar xajmi
- Nima uchun connection ochish qimmatligi
va menga
Postni o'qish
@otabekswe
Keyingi qadam nima?
So'ngi 2-yil ichida eng ko'p beriladigan savolga o'z fikrimni yozdim.
Bu hammasi emas,
- qanday loyihalar yaratish kerakligini,
- 42.uz serverini yoqib yuborganimni,
- loyiha yaratishni qayerdan va nimadan boshlashni,
- networking qilish foydalarini o'rganasiz.
Postni o'qish
@otabekswe
So'ngi 2-yil ichida eng ko'p beriladigan savolga o'z fikrimni yozdim.
Bu hammasi emas,
- qanday loyihalar yaratish kerakligini,
- 42.uz serverini yoqib yuborganimni,
- loyiha yaratishni qayerdan va nimadan boshlashni,
- networking qilish foydalarini o'rganasiz.
Postni o'qish
@otabekswe
SQL Execution order
Postni yaxshilab qaytadan yozib chiqdim.
Esingizdan chiqgan bo'lsa takrorlab oling...
Postni o'qish
@otabekswe
Postni yaxshilab qaytadan yozib chiqdim.
Esingizdan chiqgan bo'lsa takrorlab oling...
Postni o'qish
@otabekswe
How authentication works
Internet asosan HTTP(S) protokolida muloqot qiladi. Ammo bu protokol stateless (ya'ni state - xolatlarni saqlab bormaydi degani). Endi tasavvur qiling, agar internet stateless bo'lsa unda u bizni authentication qilgan xolatdamizmi yo'qmi qanday biladi?
Tizimlar foydalanuvchilarni ikki xil ko'radi, authenticated user va unauthenticated user. Authenticated userlar tizimga login/sing in qilib kirgani uchun va tizimda bu foydalanuvchi haqida ba'zi ma'lumotlar borligi uchun uni taniydi.
Unauthenticated userlar esa tizimga login/sign in qilmasdan kirgan foydalanuvchilar bo'lib tizimda bu foydalanuvchi haqida hech qanday ma'lumot yo'q va unga ba'zi ishlarni qilishni cheklashi ham mumkin (chunki u be-ga-na, ha beganada hay).
Postni o'qish
@otabekswe
Internet asosan HTTP(S) protokolida muloqot qiladi. Ammo bu protokol stateless (ya'ni state - xolatlarni saqlab bormaydi degani). Endi tasavvur qiling, agar internet stateless bo'lsa unda u bizni authentication qilgan xolatdamizmi yo'qmi qanday biladi?
Tizimlar foydalanuvchilarni ikki xil ko'radi, authenticated user va unauthenticated user. Authenticated userlar tizimga login/sing in qilib kirgani uchun va tizimda bu foydalanuvchi haqida ba'zi ma'lumotlar borligi uchun uni taniydi.
Unauthenticated userlar esa tizimga login/sign in qilmasdan kirgan foydalanuvchilar bo'lib tizimda bu foydalanuvchi haqida hech qanday ma'lumot yo'q va unga ba'zi ishlarni qilishni cheklashi ham mumkin (chunki u be-ga-na, ha beganada hay).
Postni o'qish
@otabekswe
Double Booking Problem
Booking.com, Airbnb, Calendly va 42Mentors bularni barchasi bir toifadagi ishni bajaradi ya'ni siz uchun
• Uchrashuvlarni
• Ovqat, turar joy va boshqa turdagi narsalarni
band qila oladi. Ularda eng kam va shu o'rinda uchrashi mumkin bo'lgan eng yomon muammo bu double booking problem xisoblanadi.
Tasavvur qiling siz yaratgan tizimga ikki inson bir vaqtda kirishdi. Ikkisiga ham aynan 18-Aprel 20:00 vaqti yoqdi va buyurtma qilish tugmachasiga bosdi. Agar siz bunga qarshi chora ko'rmagan bo'lsangiz tizim ikkisiga ham muvaffaqiyatli buyurtma qildingiz deya javob qaytaradi. Ammo bu juda yomon 😢
Barcha misollar JS va PostgreSQL bilan keltirilgan!
Postni o'qish
@otabekswe
Booking.com, Airbnb, Calendly va 42Mentors bularni barchasi bir toifadagi ishni bajaradi ya'ni siz uchun
• Uchrashuvlarni
• Ovqat, turar joy va boshqa turdagi narsalarni
band qila oladi. Ularda eng kam va shu o'rinda uchrashi mumkin bo'lgan eng yomon muammo bu double booking problem xisoblanadi.
Tasavvur qiling siz yaratgan tizimga ikki inson bir vaqtda kirishdi. Ikkisiga ham aynan 18-Aprel 20:00 vaqti yoqdi va buyurtma qilish tugmachasiga bosdi. Agar siz bunga qarshi chora ko'rmagan bo'lsangiz tizim ikkisiga ham muvaffaqiyatli buyurtma qildingiz deya javob qaytaradi. Ammo bu juda yomon 😢
Postni o'qish
@otabekswe
#Experience
Sizga bir sir ochaman. Yaxshi va yomon dasturchi o'rtasidagi farq quyidagicha deb bilaman:
Yomon dasturchi:
1. Kod yozadi
2. Bug fix qiladi
3. Va yaxshilashni o'ylab ko'radi
Yaxshi dasturchi:
1. Loyihani dizaynini tuzadi va boshqalar bilan discuss qiladi
2. Kod yozib ishga tushiradi
3. Muhtojlik sezilganda yaxshilaydi
Kod yozish hech qachon 1-qadam bo'la olmaydi. Bo'ldimi, demak dastur emas muammo yaratibsiz degani!
@otabekswe
Sizga bir sir ochaman. Yaxshi va yomon dasturchi o'rtasidagi farq quyidagicha deb bilaman:
Yomon dasturchi:
1. Kod yozadi
2. Bug fix qiladi
3. Va yaxshilashni o'ylab ko'radi
Yaxshi dasturchi:
1. Loyihani dizaynini tuzadi va boshqalar bilan discuss qiladi
2. Kod yozib ishga tushiradi
3. Muhtojlik sezilganda yaxshilaydi
Kod yozish hech qachon 1-qadam bo'la olmaydi. Bo'ldimi, demak dastur emas muammo yaratibsiz degani!
@otabekswe
Signals
Linux operatsion tizimida signallar bor. Ba'zan ularni bilib, ba'zan bilmay ishlatasiz.
UNIX-like tizim ishlatsangiz terminalingizni oching va
PID, TTY, TIME, CMD kabi columnlar beradi. CMD - dastur, PID esa process ID degani. Istalgan PID raqamni tanlang. Endi esa uni to'xtatishni istasangiz,
Signal qismiga uni nima qilishni kiritasiz, misol uchun to'xtat demoqchi bo'lsangiz -3, yoki -9.
Har bir signalni o'z ma'nosi bor. Ba'zan dasturni to'xtatib qo'yishingiz ham mumkin. Va keyinroq kelgan joyidan davom ettirishni aytishingiz ham mumkin. Endi dasturlardan chiqish uchun X buttonni emas balkim terminal orqali
Bu haqda albatta keyinroq to'liq post yoziladi, hozircha shunisini o'qib turing!
P.S: Process tejash, resurs tejashdir!
@otabekswe
Linux operatsion tizimida signallar bor. Ba'zan ularni bilib, ba'zan bilmay ishlatasiz.
Ctrl + D
ni bosib terminal dasturdan chiqasiz. Ctrl + C
ni bosib dasturni interrupt qilasiz. Keling ajoyib qisqa masterpost bilan tushnib olamiz.UNIX-like tizim ishlatsangiz terminalingizni oching va
ps
buyrug'ini yuboring. U sizga hozir ishlab turgan processlar ro'yxatini beradi. Oddiyroq qilib aytsak, qachon kompyuteringizda dastur ishga tushirganingizda har bir dastur har xil process (ishchi)da ishlaydi. PID, TTY, TIME, CMD kabi columnlar beradi. CMD - dastur, PID esa process ID degani. Istalgan PID raqamni tanlang. Endi esa uni to'xtatishni istasangiz,
kill
buyrug'idan foydalanasiz. Masalan mana bunday:
kill -SIGNAL PID
Signal qismiga uni nima qilishni kiritasiz, misol uchun to'xtat demoqchi bo'lsangiz -3, yoki -9.
kill -9 13488
Har bir signalni o'z ma'nosi bor. Ba'zan dasturni to'xtatib qo'yishingiz ham mumkin. Va keyinroq kelgan joyidan davom ettirishni aytishingiz ham mumkin. Endi dasturlardan chiqish uchun X buttonni emas balkim terminal orqali
kill
buyrug'ini ishlatsangiz va o'zingizni hacker dek tutsangiz bo'ladi. Bu haqda albatta keyinroq to'liq post yoziladi, hozircha shunisini o'qib turing!
P.S: Process tejash, resurs tejashdir!
@otabekswe
Big Tech - Coding Interview
Barchani orzusiga aylanishga ulgurgan MAANG kompaniyalaridagi og'riqli jarayon haqida yozishga qaror qildim. Undan oldin esa turli xil shunday kompaniyalarda ishlaydigan do'stlarim bilan ko'p suxbat qildim va ushbu postda tayyorlanish, leetcode, yaxshi yechimlar, tushukunlik va boshqa kerakli ishlarni yozib o'tishga harakat qilaman.
Postni o'qish
@otabekswe
Barchani orzusiga aylanishga ulgurgan MAANG kompaniyalaridagi og'riqli jarayon haqida yozishga qaror qildim. Undan oldin esa turli xil shunday kompaniyalarda ishlaydigan do'stlarim bilan ko'p suxbat qildim va ushbu postda tayyorlanish, leetcode, yaxshi yechimlar, tushukunlik va boshqa kerakli ishlarni yozib o'tishga harakat qilaman.
Postni o'qish
@otabekswe
#SystemDesign
Justin Bieber post qo’ygan kuni Instagram serverlari dumalab qolardi. (Celebrity problem)
Instagram 2015 yillarda endi rivojlanib tanilayotgan paytlari edi. Millionlab foydalanivchilarni ma’lumotlari SQL databaseda saqlangan. Ammo nega bitta odamni posti serverni qiynab qo’ygan?
Instagram like’lar sonini sanash uchun quyidagiga o’xshash query ishlatishgan:
Celebrity’larda like’lar soni ko’p bo’lgani uchun uni xisoblash serverga og’irlik qilardi va buzulardi, cache qilishsa ham.
Uni oldini olish uchun Instagram jamoasi database denormalization qilib chiqishadi. Ya’ni likelar sonini doim xisoblash o’rniga, ushbu ma’lumotni alohida tablega saqlab borishadi va real-time update qilishni to’xtatishadi (eventual consistency).
Bu postdan maqsad: dastur yasadingizmi uni foydalanuvchilarga bering. Ular sizni o’rganishga va o’sishga majburlashadi.
@otabekswe
Justin Bieber post qo’ygan kuni Instagram serverlari dumalab qolardi. (Celebrity problem)
Instagram 2015 yillarda endi rivojlanib tanilayotgan paytlari edi. Millionlab foydalanivchilarni ma’lumotlari SQL databaseda saqlangan. Ammo nega bitta odamni posti serverni qiynab qo’ygan?
Instagram like’lar sonini sanash uchun quyidagiga o’xshash query ishlatishgan:
SELECT count(*)
FROM db
WHERE postId in user.likedPost
Celebrity’larda like’lar soni ko’p bo’lgani uchun uni xisoblash serverga og’irlik qilardi va buzulardi, cache qilishsa ham.
Uni oldini olish uchun Instagram jamoasi database denormalization qilib chiqishadi. Ya’ni likelar sonini doim xisoblash o’rniga, ushbu ma’lumotni alohida tablega saqlab borishadi va real-time update qilishni to’xtatishadi (eventual consistency).
Bu postdan maqsad: dastur yasadingizmi uni foydalanuvchilarga bering. Ular sizni o’rganishga va o’sishga majburlashadi.
@otabekswe
Math is Everywhere
Ushbu maqolada siz:
- Matematikani Algoritmlardagi o'rni
- Matematika bilan Leetcode masalalarini O(1) time da ishlash
- Maktabda sizga o'rgatilmagan sirlar
- Fourier transform formulasi orqali ovozlar bilan ishlash
...haqida yoritib o'tdim. Ketkazgan vaqtingizga achinmasligingiz uchun amaliyotlar va isbotlar qo'shdim.
Postni o'qish
@otabekswe
Ushbu maqolada siz:
- Matematikani Algoritmlardagi o'rni
- Matematika bilan Leetcode masalalarini O(1) time da ishlash
- Maktabda sizga o'rgatilmagan sirlar
- Fourier transform formulasi orqali ovozlar bilan ishlash
...haqida yoritib o'tdim. Ketkazgan vaqtingizga achinmasligingiz uchun amaliyotlar va isbotlar qo'shdim.
Postni o'qish
@otabekswe