Latofat Bobojonova
Otabek - SWE
Speaker: Latofat Bobojonova
Topic: Life at Google
Duration: 55 minutes
Topic: Life at Google
Duration: 55 minutes
👍10😎3
Database normalization
Database implement qilishdan oldin juda puxta va uzoq fikr qilishni tavsiya qilaman. Chunki har bir o'zgartirish yoki yangi qo'shimchalar kiritish sizga qimmatga tushishi, ba'zan esa katta muammolar ham keltirishi mumkin. Xuddi shunday muammolarni keltirib chiquvchi omillardan biri bu ne-normal database xisoblanadi.
Database normalization - ma'lumotlarni tartibli va izchil tarzda orginize qilish uchun ma'lumotlar bazasini dizaynlash tamoyili. Keling misollar bilan ko'rib chiqamiz.
1NF - First Normal Form
Birinchi normal formada ma'lumotlar atomic va unique bo'lishi kerak bo'ladi va uzunroq qilganda ushbu prinsiplarga amal qilishi kerak:
- hech bir cell bittadan ko'p ma'lumot saqlamasligi kerak (atomicity)
- identifikatsiya qilish uchun primary key bo'lishi kerak
- duplicate row yoki column bo'lmasligi kerak
...
Tasavvur qiling, foydalanuvchini "Address"ini saqlamoqchisiz. Siz nazarda tutgan "Address" = "Toshkent shahar, Mirobod tumani, Amir Temur ko'chasi, 56 uy" ammo yuqorida aytilganidek atomicity bo'yicha bunday ma'lumot saqlash yaxshi emas. Siz buning o'rniga manzillarni saqlash uchun alohida table yaratasiz va saqlangan ma'lumotni user tabledagi user_id ga foreign key sifatda aloqasini ta'minlaysiz, tamam )
2NF - Second Normal Form
Birinchi normal forma asosan uniqueness va atomicity ga e'tibor qaratsa, Ikkinchi normal forma redundancy and data dependency ni ta'minlashga ximzt qiladi:
- 1NF ni saqlab qolgan holatda ishlashi kerak
- Barcha non-key attributelar faqat primary-keyga dependen bo'lishi kerak.
...
Tasavvur qiling, kutubxona uchun database qildingiz. Sizga keladigan ma'lumotlar asosan kitoblar va avtorlar haqida bo'ladi. Ya'ni bitta avtor ko'p kitob yozishi yoki bitta kitob ko'p avtorlar tomonidan yozilgan bo'lishi mumkin. 2NF da huddi shu muammoni 1NF dan kelib chiqib hal qilasiz. Ya'ni books va authors degan tablelar yaratasiz. har bir kitob uchun book_id bo'lsa, avtor uchun author_id bo'ladi. Bu degani ManyToMany relationshipni endi juda osonroq yo'l bilan yecha olasiz degani. book tableda avtor haqida ma'lumotlarni author tablega, author tableda book haqida ma'lumotlarni olish uchun book tablega foreign key qilasiz holos, tamam.
Post juda cho'zilib ketmasligi uchun qolganlarini o'zingizga sovg'a qilaman, oling va meni eslab yuring (so'kinmasdan)🎁.
@otabekswe
Database implement qilishdan oldin juda puxta va uzoq fikr qilishni tavsiya qilaman. Chunki har bir o'zgartirish yoki yangi qo'shimchalar kiritish sizga qimmatga tushishi, ba'zan esa katta muammolar ham keltirishi mumkin. Xuddi shunday muammolarni keltirib chiquvchi omillardan biri bu ne-normal database xisoblanadi.
Database normalization - ma'lumotlarni tartibli va izchil tarzda orginize qilish uchun ma'lumotlar bazasini dizaynlash tamoyili. Keling misollar bilan ko'rib chiqamiz.
1NF - First Normal Form
Birinchi normal formada ma'lumotlar atomic va unique bo'lishi kerak bo'ladi va uzunroq qilganda ushbu prinsiplarga amal qilishi kerak:
- hech bir cell bittadan ko'p ma'lumot saqlamasligi kerak (atomicity)
- identifikatsiya qilish uchun primary key bo'lishi kerak
- duplicate row yoki column bo'lmasligi kerak
...
Tasavvur qiling, foydalanuvchini "Address"ini saqlamoqchisiz. Siz nazarda tutgan "Address" = "Toshkent shahar, Mirobod tumani, Amir Temur ko'chasi, 56 uy" ammo yuqorida aytilganidek atomicity bo'yicha bunday ma'lumot saqlash yaxshi emas. Siz buning o'rniga manzillarni saqlash uchun alohida table yaratasiz va saqlangan ma'lumotni user tabledagi user_id ga foreign key sifatda aloqasini ta'minlaysiz, tamam )
2NF - Second Normal Form
Birinchi normal forma asosan uniqueness va atomicity ga e'tibor qaratsa, Ikkinchi normal forma redundancy and data dependency ni ta'minlashga ximzt qiladi:
- 1NF ni saqlab qolgan holatda ishlashi kerak
- Barcha non-key attributelar faqat primary-keyga dependen bo'lishi kerak.
...
Tasavvur qiling, kutubxona uchun database qildingiz. Sizga keladigan ma'lumotlar asosan kitoblar va avtorlar haqida bo'ladi. Ya'ni bitta avtor ko'p kitob yozishi yoki bitta kitob ko'p avtorlar tomonidan yozilgan bo'lishi mumkin. 2NF da huddi shu muammoni 1NF dan kelib chiqib hal qilasiz. Ya'ni books va authors degan tablelar yaratasiz. har bir kitob uchun book_id bo'lsa, avtor uchun author_id bo'ladi. Bu degani ManyToMany relationshipni endi juda osonroq yo'l bilan yecha olasiz degani. book tableda avtor haqida ma'lumotlarni author tablega, author tableda book haqida ma'lumotlarni olish uchun book tablega foreign key qilasiz holos, tamam.
Post juda cho'zilib ketmasligi uchun qolganlarini o'zingizga sovg'a qilaman, oling va meni eslab yuring (so'kinmasdan)🎁.
@otabekswe
👍13🍾1
Oltinga teng loyihalar
Ilm olishni hamma eplaydi. Ammo olingan ilm orqali muammolar yechishni hamma ham eplay olmaydi.
Loyiha qilish menga kompaniya bera olmaydigan tajribalarni bergan. Ayniqsa yangi til va texnologiyani tez o'rganib ketishimga sababchi bo'lgan.
Misol uchun:
gylo - Ushbu loyiha menga Cloudflare bilan interviewni olib bergan loyiha xisoblanadi
Menda bunday qiziq loyihalar ko'p afsuski ular private, rasmiyatchilikda aylanay 😉
Tez orada ba'zilarini public qilish niyatidaman. Ammo hozircha dsalgo.uz ustida ishlayabman )
@otabekswe
Ilm olishni hamma eplaydi. Ammo olingan ilm orqali muammolar yechishni hamma ham eplay olmaydi.
Loyiha qilish menga kompaniya bera olmaydigan tajribalarni bergan. Ayniqsa yangi til va texnologiyani tez o'rganib ketishimga sababchi bo'lgan.
Misol uchun:
gylo - Ushbu loyiha menga Cloudflare bilan interviewni olib bergan loyiha xisoblanadi
Menda bunday qiziq loyihalar ko'p afsuski ular private, rasmiyatchilikda aylanay 😉
Tez orada ba'zilarini public qilish niyatidaman. Ammo hozircha dsalgo.uz ustida ishlayabman )
@otabekswe
🔥17👍7🏆1
S.O.L.I.D
Agar umringizda OO code yozib ko'rgan bo'lsangiz demak siz albatta ushbu paradigm haqida eshitgansiz. Balkim tushunchalar unchalik ham zo'r bo'lmagandir ammo keling bugun shu haqida gaplashamiz (kamchiliklarini esa kelasi epizodda yozaman).
Single Responsibilaty
Open-Closed
Misol uchun
Liskov Substitution
Ho'p nimalar bo'layabdi deyishga shoshilmang, qisqacha aytganda Kofechini o'g'li ham kofe tayyorlashni bilishi kerak. Agar "hey dadang ishga kelmabdi menga kofe qilib ber" deyishsa "mana suv iching kofe qilishni bilmayman" demasdan kofe qilib berishi kerak o'sha o'g'il degan ma'noni bildiradi. Ya'ni child class objecti, parent class objecti qila olgan ishlarni qila olishi kerak demoqchi. Menimcha bunga qandaydir chuqur misol keltirish shart emas deb o'ylayman, shu yetar )
Interface Segregation
Misol uchun
Dependency Inversion
High-level class: ishni bajaruvchi.
Low-level class: ishni bajaruvchi qurol
Abstraction: Shu ikkisini bog'lovchi o'rtakash (connector)
Misol uchun Televizorni olaylik. Televizorni pulti o'zida yoki ichki mehanizmga bog'lanmasligi kerak. Agar shunday bo'lsa televizordagi o'sha qism buzilsa ham usta chaqirasiz, boshqa qism buzilsa ham usta chaqirasiz. Uning o'rniga esa pultni alohida masaofaviy boshqaruvga o'tkazishingiz mumkin bo'ladi. Pultni batareyasi o'chsa televizorni emas pultni ochasiz. Pult buzilsa televizorni emas pultni tuzatasiz . Xullas abstraction bu yerda ikkisini bog'lovchi tizmda aylanay )
Yuqoridagi tushunchalar to'liq yoritilmagan va ushbu yo'llar bilan yoritilishidan maqsad oson tushunish uchun va umumiy tushunchalar berildi. Keyingi sonlarda har biriga alohida, pros-and-cons qilib to'xtalib o'tishga harakat qilamiz.
@otabekswe
Agar umringizda OO code yozib ko'rgan bo'lsangiz demak siz albatta ushbu paradigm haqida eshitgansiz. Balkim tushunchalar unchalik ham zo'r bo'lmagandir ammo keling bugun shu haqida gaplashamiz (kamchiliklarini esa kelasi epizodda yozaman).
Single Responsibilaty
Har bir class faqat bitta ma'suliyatli ishni bajarishi kerak!
Open degan class yaratdingiz, unga nimani ochishni qizig'i yo'q DB connection och desangiz uni ham qilaveradi, fileni "w" modeda och desangiz uni ham qilaveradi umumman farqi yo'q. Ammo bu noto'g'ri yechim chunki bitta classni vazifalari qancha ko'paysa shuncha ko'p buggy bo'lish ehtimoli ham ko'payadi. Uning o'rniga esa OpenDBConnection, OpenFile va OpenFolder degan classlar yaratish tavsiya qilinadi. Open-Closed
Classlar kengayish uchun ochiq, ammo modifikatsiya (o'zgarish) uchun yopiq bo'lishlari kerak
Misol uchun
OpenFolder classini olaylik. Shu classga faylni ham open qilish imkoniyatini berish mumkin ammo, classdagi imkoniyatlarni o'chirmagan yoki o'zgartirmagan xolda. Misol uchun. O'sha folder ichidagi fayllarni ochish uchun alohida method (open_file(filename: str, mode: str)) yozib chiqishingiz va simplicity maqsadida OpenFile classidan foydalanishingiz mumkin. Bu orqali esa qo'shimcha logika yozmaysiz shunchaki tepada aytilganidek yagona maqsadli klasslardan birini ishlatgan bo'lasiz :)Liskov Substitution
Agar B class A classidan inheritance olgan bo'lsa, B class objecti A class objectini o'rnini bosa olishi kerak hech qanday o'zgarishlarsiz.
Ho'p nimalar bo'layabdi deyishga shoshilmang, qisqacha aytganda Kofechini o'g'li ham kofe tayyorlashni bilishi kerak. Agar "hey dadang ishga kelmabdi menga kofe qilib ber" deyishsa "mana suv iching kofe qilishni bilmayman" demasdan kofe qilib berishi kerak o'sha o'g'il degan ma'noni bildiradi. Ya'ni child class objecti, parent class objecti qila olgan ishlarni qila olishi kerak demoqchi. Menimcha bunga qandaydir chuqur misol keltirish shart emas deb o'ylayman, shu yetar )
Interface Segregation
Mijozlarga kerakmas bo'lgan narsalarni, ular ishlatishiga majburlamaslik kerak
Misol uchun
OpenFile classiga databasega ulanish kerak emas. Va uni bunga majbur qilishga doir ishlarni uni ichida bajarish shunchaki useless. Ya'ni class faqat o'z vazifasiga tegishli ishlarni bajarishi kerak. Yana ham aniqroq aytsak static methodlar ham eval degani aylanay 😉Dependency Inversion
High-level modullar yoki classlar low-level modul yoki classlarga bog'liq bo'lmasligi kerak. Buning o'rniga ular abstractionga bog'liq bo'lishi kerak
High-level class: ishni bajaruvchi.
Low-level class: ishni bajaruvchi qurol
Abstraction: Shu ikkisini bog'lovchi o'rtakash (connector)
Misol uchun Televizorni olaylik. Televizorni pulti o'zida yoki ichki mehanizmga bog'lanmasligi kerak. Agar shunday bo'lsa televizordagi o'sha qism buzilsa ham usta chaqirasiz, boshqa qism buzilsa ham usta chaqirasiz. Uning o'rniga esa pultni alohida masaofaviy boshqaruvga o'tkazishingiz mumkin bo'ladi. Pultni batareyasi o'chsa televizorni emas pultni ochasiz. Pult buzilsa televizorni emas pultni tuzatasiz . Xullas abstraction bu yerda ikkisini bog'lovchi tizmda aylanay )
Yuqoridagi tushunchalar to'liq yoritilmagan va ushbu yo'llar bilan yoritilishidan maqsad oson tushunish uchun va umumiy tushunchalar berildi. Keyingi sonlarda har biriga alohida, pros-and-cons qilib to'xtalib o'tishga harakat qilamiz.
@otabekswe
👍14🔥2
Kamchilik nimada?
Bir tanishim bilan project qilish bo'yicha suxbat qilib ba'zi fikrlarni muhokama qildik. Hozir ishga topshiruvchilarni fail bo'lishini asosiy sababi ular qilayotgan yoki qilishni istagan projectlarda ekan.
Kimni qarasa E-Commerce, VideoStream ishlarni qilishadi. Vaxolangki bunda projectlarga misollar internetda qalashib yotibdi va eng qiziq tomoni shundaki soxani chala o'rganib olib, kodlarni ko'chirib, tutorialga ergashib qilgan ishini githubga "kerilib" yuklab qo'yishadida "mana shunday ishlar qilganman" deyishadi.
Kompaniyalarda ko'p shunday projectlar qilinishi to'g'ri ammo bu degani siz ham shunday ish qilishiz kerak degani emas. Loyihalar qachon ko'zga tashlanadi qachonki biror ishni nargisidan (loyihadan) yaxshiroq qila olsa. Yoki ko'pchilik qilmaydigan ishlarni qilishda misol uchun DB yaratib ko'rish, tool yaratish generic ishlatish uchun.
Loyiha yasang, faqat o'zingiz uchun emas barcha uchun xizmat qiluvchi loyiha yasang. Bor loyihani qayta yasang, ammo sizniki qaysidir jihatlama yaxshiroq bo'lsin narigisidan.
@otabekswe
Bir tanishim bilan project qilish bo'yicha suxbat qilib ba'zi fikrlarni muhokama qildik. Hozir ishga topshiruvchilarni fail bo'lishini asosiy sababi ular qilayotgan yoki qilishni istagan projectlarda ekan.
Kimni qarasa E-Commerce, VideoStream ishlarni qilishadi. Vaxolangki bunda projectlarga misollar internetda qalashib yotibdi va eng qiziq tomoni shundaki soxani chala o'rganib olib, kodlarni ko'chirib, tutorialga ergashib qilgan ishini githubga "kerilib" yuklab qo'yishadida "mana shunday ishlar qilganman" deyishadi.
Kompaniyalarda ko'p shunday projectlar qilinishi to'g'ri ammo bu degani siz ham shunday ish qilishiz kerak degani emas. Loyihalar qachon ko'zga tashlanadi qachonki biror ishni nargisidan (loyihadan) yaxshiroq qila olsa. Yoki ko'pchilik qilmaydigan ishlarni qilishda misol uchun DB yaratib ko'rish, tool yaratish generic ishlatish uchun.
Loyiha yasang, faqat o'zingiz uchun emas barcha uchun xizmat qiluvchi loyiha yasang. Bor loyihani qayta yasang, ammo sizniki qaysidir jihatlama yaxshiroq bo'lsin narigisidan.
@otabekswe
👍20💯3🤝1
Forwarded from Otabek Nurmuhammad
Davis Steve: Falcon 1 raketasi uchun aktuator kerak!
Elon Musk: Necha pul ekan bozorda?
Davis Steve: 120 000$
Elon Musk: Garajning qulfi kabi sodda matox bu, bor o'zing yasa. Tannarxi 5 000$ dan oshmasin!
⏰ 9 oydan so'ng:
Davis Steve: Aktuator yasadim va narxi 3 900$ ga tushdi
.
.
2004 - yil Ilon Mask va SpaceX injeneri Stiv Davis o'rtasidagi suxbat ekan.
Ilon Mask boshqalar oddiy qabul qilib ketgan narsalarni ham so'roqga tutib ko'p texnologiyalarni 0 dan yaratishga sababchi bo'lgan ekan.
@otabeknurmatov_1
Elon Musk: Necha pul ekan bozorda?
Davis Steve: 120 000$
Elon Musk: Garajning qulfi kabi sodda matox bu, bor o'zing yasa. Tannarxi 5 000$ dan oshmasin!
⏰ 9 oydan so'ng:
Davis Steve: Aktuator yasadim va narxi 3 900$ ga tushdi
.
.
2004 - yil Ilon Mask va SpaceX injeneri Stiv Davis o'rtasidagi suxbat ekan.
Ilon Mask boshqalar oddiy qabul qilib ketgan narsalarni ham so'roqga tutib ko'p texnologiyalarni 0 dan yaratishga sababchi bo'lgan ekan.
@otabeknurmatov_1
🔥27👍5🍾2
#TechTalks 2-soni efirda!
Applied Labs kompaniyasida Software Engineer bo'lib ishlagan, Backend va Data Engineering sohasiga aloqador ko'plab foydali postlar yozgan mexmon - Bobosher Musurmonov bilan o'zgacha suxbat.
Ushbu suhbat ochiq, samimiy va boshqalaridan qiziq bo'ladi, ishonavering. Sizga qiziq bo'lgan savollarni esa izohlarda qoldiring.
Vaqt: 21:00 (Toshkent vaqti bilan)
Sana: 26-Noyabr
Mavzu: Trip to Database internals
@otabekswe
Applied Labs kompaniyasida Software Engineer bo'lib ishlagan, Backend va Data Engineering sohasiga aloqador ko'plab foydali postlar yozgan mexmon - Bobosher Musurmonov bilan o'zgacha suxbat.
Ushbu suhbat ochiq, samimiy va boshqalaridan qiziq bo'ladi, ishonavering. Sizga qiziq bo'lgan savollarni esa izohlarda qoldiring.
Vaqt: 21:00 (Toshkent vaqti bilan)
Sana: 26-Noyabr
Mavzu: Trip to Database internals
@otabekswe
🔥26👍3
Otabek’s I/O
#TechTalks 2-soni efirda! Applied Labs kompaniyasida Software Engineer bo'lib ishlagan, Backend va Data Engineering sohasiga aloqador ko'plab foydali postlar yozgan mexmon - Bobosher Musurmonov bilan o'zgacha suxbat. Ushbu suhbat ochiq, samimiy va boshqalaridan…
Audio
#TechTalks 2-soni
Eslatib o'tmoqchiman, ushbu podcastda xatoliklar bo'lgan bo'lishi mumkin.
deganlaridek podcast yoki talk qilishda yangimiz, aybga buyurmaysiz deb umid qilaman.
Ushbu podcastda asosan Database Internals mavzusida boshlang'ich tushunchalar haqida gap ketgan. Umid qilaman kelasi sonlarda yana ham chuqurroq va yaxshiroq qilishga harakat qilamiz.
Mehmon: Bobosher Musurmonov
Keyingi sonida nima haqida va kimni taklif qilishimizni istaysiz, izohlarda yozing.
@otabekswe
Eslatib o'tmoqchiman, ushbu podcastda xatoliklar bo'lgan bo'lishi mumkin.
Nothing is perfect
deganlaridek podcast yoki talk qilishda yangimiz, aybga buyurmaysiz deb umid qilaman.
Ushbu podcastda asosan Database Internals mavzusida boshlang'ich tushunchalar haqida gap ketgan. Umid qilaman kelasi sonlarda yana ham chuqurroq va yaxshiroq qilishga harakat qilamiz.
Mehmon: Bobosher Musurmonov
Keyingi sonida nima haqida va kimni taklif qilishimizni istaysiz, izohlarda yozing.
@otabekswe
👍11🔥5
Advent of Code
Dasturchilar uchun bunday real muammolarni beruvchi saytlar juda kam. Ularni yechish ham juda ko'plab tajribalar berishiga ishonchim 1000% komil.
Bu yil (kech bo'lsa ham) men ham o'z leaderboardimni yaratishga qaror qildim va 1-3 o'rin soxib(a)lari bilan toshkentda osh ustida chiroyli suxbat qilishga qaror qildim (faqat leader board 100 tadan oshishi kerak aylanay 😉).
Bizni adventurega qo'shiling, garchi masala yechishga usta bo'lmasangiz ham.
deganlaridek boshlang va qo'rqmang, albatta bu sizga yana ko'p ishonch beradi.
Leaderboard
Code:
@otabekswe
Dasturchilar uchun bunday real muammolarni beruvchi saytlar juda kam. Ularni yechish ham juda ko'plab tajribalar berishiga ishonchim 1000% komil.
Bu yil (kech bo'lsa ham) men ham o'z leaderboardimni yaratishga qaror qildim va 1-3 o'rin soxib(a)lari bilan toshkentda osh ustida chiroyli suxbat qilishga qaror qildim (faqat leader board 100 tadan oshishi kerak aylanay 😉).
Bizni adventurega qo'shiling, garchi masala yechishga usta bo'lmasangiz ham.
Nothing is perfect
deganlaridek boshlang va qo'rqmang, albatta bu sizga yana ko'p ishonch beradi.
Leaderboard
Code:
3270299-dd476778@otabekswe
👍22
Cursor (database)
Barchamiz dastur yasayotganda yoki biror dasturlash tili bilan database connection qilganmiz. O'sha yerda yokida pagination qilishda cursor so'ziga duch kelganmiz, xo'sh cursor o'zi nima?
Cursor - result set ustida iteration yoki DML operatsiyalarini bajaruvchi mechanism desak bo'ladi. DML bu Data Manipulation Language ya'ni siz qachonki
Cursor orqali bir vaqtni o'zida result setni manipulatsiya qilishingiz mumkin. Ammo cursor bir vaqtda faqat bitta rowga reference bo'la olishini unutmang. Film download qilish uchun sizga X GB xotira va Y minut sabr talab qiladi va keyin uni miriqib tomosha qilishigizga Z minut ketadi, biz buni big result setga o'xshatamiz. Agar siz uni o'rniga streaming servicedan foydalanib kino ko'rmoqchi bo'lsangiz, real timeda mazza qilib ko'rishingiz mumkin (internet yaxshi bo'lsa kifoya), va biz buni cursor ishlatishga o'xshatamiz.
Big resultset - butun operatsiyalar bajarilmagunicha sizga natijani bermaydi. Agar tasavvur qiling natija juda katta bo'lsa ko'p vaqt va ko'p memory talab qiladi. Har qanday query serverga jo'natiladi, uni server parse qiladi, execute qiladi va resultset ni olib yana sizga network orqali jo'natadi. Cursor esa bu yerda sizga row by row ish qilish imkoniyatini beradi. Ya'ni siz barchasini bittada olish o'rniga qatorma-qator qabul qilasiz.
Xazillar litsenziyalangan : )
@otabekswe
Barchamiz dastur yasayotganda yoki biror dasturlash tili bilan database connection qilganmiz. O'sha yerda yokida pagination qilishda cursor so'ziga duch kelganmiz, xo'sh cursor o'zi nima?
Cursor - result set ustida iteration yoki DML operatsiyalarini bajaruvchi mechanism desak bo'ladi. DML bu Data Manipulation Language ya'ni siz qachonki
INSERT, DELETE yoki SELECT kabi operatsiyalarni bajarishni sitasangiz uni DMLga jo'natasiz. DML esa uni parse (tahlil) qilib siz istayotgan operatsiyani bajaradi, high level abstraction. MySQLda directly cursor yaratib bo'lmaydi ya'ni funksiyani tashqarisida. Ammo PostgreSQLda buni imkoniyati bor, (Postgres zo'r MySQL yomon 😉️️️️️️).
Cursor orqali bir vaqtni o'zida result setni manipulatsiya qilishingiz mumkin. Ammo cursor bir vaqtda faqat bitta rowga reference bo'la olishini unutmang. Film download qilish uchun sizga X GB xotira va Y minut sabr talab qiladi va keyin uni miriqib tomosha qilishigizga Z minut ketadi, biz buni big result setga o'xshatamiz. Agar siz uni o'rniga streaming servicedan foydalanib kino ko'rmoqchi bo'lsangiz, real timeda mazza qilib ko'rishingiz mumkin (internet yaxshi bo'lsa kifoya), va biz buni cursor ishlatishga o'xshatamiz.
Big resultset - butun operatsiyalar bajarilmagunicha sizga natijani bermaydi. Agar tasavvur qiling natija juda katta bo'lsa ko'p vaqt va ko'p memory talab qiladi. Har qanday query serverga jo'natiladi, uni server parse qiladi, execute qiladi va resultset ni olib yana sizga network orqali jo'natadi. Cursor esa bu yerda sizga row by row ish qilish imkoniyatini beradi. Ya'ni siz barchasini bittada olish o'rniga qatorma-qator qabul qilasiz.
Conclusion
: Cursor saves your time and memory
Xazillar litsenziyalangan : )
@otabekswe
🔥15👍5😁1
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
🔥15
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
👍20👎3🔥3❤1
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
🔥23👍9😁4🏆2
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!
TCP connectionlarni yaxshiroq tushunish uchun post, amaliyotlarga boy. Nafaqat o'qiysiz balkim bajarib ham ko'rasiz.
Postni 2-qismida TCP three-way handshake jarayonini to'liq tahlil qilamiz va amaliyot ham.
Real time terminal chat ham quramiz 😎
Post so’ngidagi siz qiladigan xulosa yagona:
Postni o'qish
@otabekswe
TCP connectionlarni yaxshiroq tushunish uchun post, amaliyotlarga boy. Nafaqat o'qiysiz balkim bajarib ham ko'rasiz.
Postni 2-qismida TCP three-way handshake jarayonini to'liq tahlil qilamiz va amaliyot ham.
Real time terminal chat ham quramiz 😎
Post so’ngidagi siz qiladigan xulosa yagona:
Connection ochish qimmatligini endi tushundim.
Postni o'qish
@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
🎉7 5 3🔥2
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
😁13 7 3🔥2
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
👍12⚡1🔥1