Programming ∀
1.36K subscribers
216 photos
4 videos
1 file
135 links
Ushbu kanalda dasturlashga aloqador turli expriementlarim, g'oyalarim, hulosalarimni ulashaman.
Download Telegram
System design haqida gap ketganda qiziq narsa bor.

Ko'pchilik turli yechimlarni ko'rib buni train qilish kerak deb o'ylaydi. Masalan bitta narsa qanday ishlashini o'rganish, tushunish uncha qiyin emasdek ko'rinadi. Juda ko'p holda muammoni katta qismini infrastructure levelda hal etiladi.

Masalan:

Transactional processing system - misolida olsak, bizga kerak bo'ladigan narsa qanaqadir event sourcing uchun muhit. Eventlarni saqlash va process qilishga yechimlar. Aytaylik kafka + kql da consistency qilsak event handlerlarni esa kafka + app levelda qivoramiz. Masalan consumer groups bilan concurrent handlerlar qilishimiz mumkin. Endi manashuni kengaytirish kerak bo'lsa shunchaki saga pattern kabi yechimlar qilamiz, aytaylik har bir servisda o'zini eventlarini process qiladigan yoki eventlarni ochrestrate qiladigan yechimlar qilishimiz mumkin. Agar 2ta servis birxil data saqalasa shunchaki transactional outbox kabi narsa kerak.

Yani bu keysda technical narsalar ancha kam asosiy masala domain aspectlarda bo'ladi. Aytilgan narsalarni katta qismiga infratuzulma darajasidagi yechimlar yetarli. Masalan appingizda load ko'paysa kubernetesga tiqib autoscaling setup qilasiz tamam. Kafkani ham tog'ri setup qilsangiz juda ko'p holda sizni muammoni cover qiladigan yechimlar tayyor bo'ladi.

Shunga ko'p gapiraman internetda aytilgan system design degan narsalar sizga vaybdan boshqa hechvaqo bermaydi. Realityda muammoni katta qismi operational levelda hal bo'ladi. Enterpraysda esa sizni technical skilldan ko'ra non technical skill usunroq. Yani senior bo'lishingiz uchun biror dasturlash tilini yaxshi bilganingizdan ko'ra ko'proq odamlar bilan gaplasha olishingiz muhimroq. Chunki agar raxbar yoki manageringizni so'kib qo'ysangiz biroz noqulay bo'ladi 😃

Real engineering problems sal boshqacharoq bo'ladi. U yerda doyim ham million foydalanuvchi uchun ishlaydigan crud yozmaysiz. Juda ham sodda aytganda shunchaki davomli fuckery qilasiz, davomli itariladi miyyangiz. Sababi doyim ham tayyor yechimlar bo'lmaydi yoki tayyori sizga mos kemaydi. Tayyorini modify qilishingiz kuchaytirishingiz kerak bo'ladi. Bushqa tomondan esa sizni kimdir perfomance tomondan itaradi kimdir esa abstraction tomondan. Ko'proq code yozish kerak bo'ladi biror technical scopeda yaxshi background qilish kerak bo'ladi. Hullas ishingiz kechirmaydi skill issuelarni. Doyim ham yaxshi gapirib qutilib ketolmaysiz, sizga comfort bo'lmagan odamlar bo'lishi mumkin atrofingizda.

Juda sodda aytsak enterpraysda siz mexanizmni bir qismi bo'lishingiz kerak, shunda trik qolasiz. Agar raxbarga yoqmasangiz chopilasiz.

Rostmana muxandis bo'lsangiz avtoritet bo'lishingiz kerak shunda trik qolasiz. Agar sal kalla qo'ysangiz avtoritet minus bo'ladi va davom etaversangiz uje chopilasiz.
❤1
API testlar yozgani yana bir qiziq narsa topib oldim. Bu yerda turli request related automationlar va testlar yozish mumkin. Sodda dialekt va nisbatan qulay user expirence.

Hurl: https://hurl.dev/

Ammo manashu mavzuda boshqa muammolar ko'ryabman.

Code alohida
test alohida
benchmark alohida
nu bazida doc alohida

Deyarli hamma ekotizimda manashu masalalarda end to end solutionlar yo'q. Lekin o'ylab qarasa bularni eplash mumkin.

Maslan manda uje tayyor api code bor juda ko'p holda maximum swagger generate qilib bera olaman. Ammo qani edi man birdan swagger generate qilolsam, test cover qilolsam.

Apilar doyim ham bitta stepli bo'lmaydi masalan A->B dan kegin C or D ko'rinishida ketmaketlik asosida bo'lishi mumkin bazida esa concurrency tog'ri ishlaganini ham test qilish kerak bo'ladi. Bular o'ziga yarasha nuansli masalalar. Bazi narsalar esa async ishlaydi, buni ham avtomatlashtirish qiyin chunki aniqroq constant tiime qo'ya olmaysiz.

Ammo servant bilan bunga potensial yechimlar qilsa bo'ladi. Masalan 10 yillar oldin servant-js kabi narsalar chiqib bo'lgan bu orqali apidan biratola js api callar generate qilishgan, bu haqida yozgan edim. Manashu g'oyani kengaytirish kerak, apidan avtomatik tarzda testlar va unga mos loading request ham generate qilib ko'rish kerak. O'ylaymanki tez orada manashu mavzuga ham yetib boraman ozgina zerikarli ammo juda qiziq mavzu.
🔥1
Endi tushlarimga kirsa kerak bu video.

from 3.2Tbps to 102.4Tbps bla

bunaqa networkda
bilmayman qancha nix kesh server qo'ysak bo'ladi
bilmayman qancha mayner run qilsa bo'ladi

https://www.youtube.com/watch?v=yFSDB1BatrQ
😁1
juda ko'p providerlarda juda qo'pol xatolik bor.

Masalan sizdan yoki sizga qandaydir identificatorlar beradi. Aytaylik responseda qanaqadir id field bor va u numberic.

Ammo manashu numberic qismi juda juda opasniy, buni izohlash kerak. Turli tillarda integer boundaries farqli bo'lishi mumkin. Masalan rustda i32, i64 vaxakazo. Huddi shunaqa narsa Haskell, Java, C/C++ da ham bor. Agar o'sha id identificator qanday tipda type boundary ekani aniqroq aytilmasa bazida integer owerflow bo'ladi.

Ha bla manda integer overflow bo'ldi sababi manga kelgan id 64 bitli ekan 😏 Bunday narsalarni docga yozmasa ham primerno yaxshiroq izohlash kerak identifikator aynan qanaqa ekanini shunda clientda ozgina bo'lsada shans qoladi. Hullas qo'li yelkasida miyyasi kallasida bo'lish xozir qiyin anotamik darajada mutatsiya bo'lyabti programmerlar ham.

Yok ko'tni qisib UUID ishlatish kerak
🔥3
Documentda shunchaki qanaqadir random raqam bergan yaramaslar😏
😁3
Programming ∀
Documentda shunchaki qanaqadir random raqam bergan yaramaslar😏
200 but validation error

And I have exeption:

Left (DecodeFailure "Error in $: ... failed, key \"status\" not found")


Atayin empty request yuborib ko'rgan edim lekin bu daunlar validation errorni ham 200 status bilan qaytarar ekan.
🤣4
Endi bunaqa darajada api design qilgan dasturchilar bo'lganidan kegin, rostdan ham unaqalarga kurslar kerak, qanaqadir ustoz kerak IQ sal balandroq. Kimdir majburlab o'qitmasa yoki bo'lmasam aytmasa vapshe. Bunaqa molxona infratuzulma qilib tashlaydiganlar ko'paysa bizni yurtda dasturchilar qomaydi 🥲

Ha bla endi tushunyabman muammoni. Muammo infosiganlarda emas asil muammo stupid rate baland juda juda ekanida...
❤4😭2
Youtube juda ham rasvo bo'lib ketgan, juda juda og'ir.

3-400mbs network bilan ham bazida videolar sekin ochadi.

Internet o'zida load ko'payib ketgan manimcha chunki qachon qarasam muammo server tomonda bo'lyabti. Bazida dns issue bazida yana boshqa muammolar.
🤪6🗿1
Bir chatda rasizm, tabaqalanish mavzusidagi suxbatni ko'rib qoldim. Umuman olganda etiborimni torgan narsa irqiy aralash madaniy tabaqalanish haqida edi. Yani faqat ranglar emas intelektual saloxiyat deymizmi taxminan shunaqaroq. Kegin qiziq hulosaga keldim.

Blya dunyo g'alati ishlaydida. Rasizm haqida gap ketsa kimnidir qora oq deyish mumkin emas.

Red/Black/White haskers :) deb ranglashadi.

Yana ham prikoli oqlari yaxshilikga xizmat qiladi deyishadi blya nega yashilari emas ?

Shunchaki o'ylab ko'rsak biz bilgan haqiqatlarda juda ko'p exeptionlar chiqadi, lekin bular huddi etiborga arzimasdek. Fikrimcha shunchaki mindsetimizdagi exeptionlar bizni yeb bitirsa kerak AI ishimizni olib qo'ygunicha.

Siz qanaqa rangda bo'lsangiz ham manfatlar to'qnashuvida o'z manfatlaringizni ustun qo'yasiz, agar qo'ya olmasangiz demak hali ulg'aymabsiz. Oq ekaningiz sababi balki qoralikga kompitensiya yoki dux yetmas ? Qora ekaningizga sabab boshqalar shunday deganidir ? Sababi qoralash ularning manfati uchun foydali.

Masala shundaki birnecha tomonlar degan narsa mavjud emas, qarorlar manfatlar uchun qilinadi, istasangiz bugunga ega chiqing yoki sabr qilib ertaga ega bo'ling. Bu shunchaki tradeoff. Muhimi miyyangizda expetionlar kam bo'lsin fikrimcha shu yetadi.
❤3🤔1
Juda ham qiziq video.

Har bir maruza qilgan odamlar aynan qandaydir mavzularda katta backgroundga egalar va Turing award egalari. Turing award bilamizki computer science olamidagi Nobel mukofoti.

Videoning qiziq tomoni ushbu tarix va xozir. Bu yerda aytilgan gaplarning juda ko'p qismi xozirda amaliyotda mavjud.

Qisqa hulosam.
Asosiy masala: Biz qandaydir tizim qurishimiz kerak.

Masalaga birqancha point of viewlardan qarashimiz mumkin. Praktik injeneriya asosida mavjud uslublarni optimizatsiya qilamiz yoki alternativ yechimlarni kashf qilamiz. Matematik & Informatik nazariyalar asosida tizimni modellashtiramiz. Qilinyotgan ishga qarab maqsadga erishish uchun resurslar sarfini optimizatsiya qilish kerak.

Agar reallikga qarasak rostdan ham huddi shunday. Masalan odatiy hayotdagi crud applar uchun qandaydir proof yozib o'tirmaysiz. Chunki vazifa oson shunchaki bazi narsalarni tog'ri qilsangiz yetarli. Lekin tizim complex bo'la boshlasa turli optimizatsiyalar uchun talab oshib boradi. Xozirda complex tizimlarga qarar ekanmiz hardwaredan tortib sofwaregacha optimizatsiya qilingan maxsus tizimlar qalashib yotibti. Masalan hamma bilgan LLMlarga qarasak, LLMlar ishga tushadigan serverlarni generic deyish qiyin ular uje ASIC(Application-specific integrated circuit) da ishlaydi yani oddiy GPU, CPU emas masalan TPU, NPU vaxakazolar. LLM sofware ichiga qarsangiz u yerda juda ham ko'p muxandislik g'oyalaridan tortib nazariy narsalarning tadbiq qilinganigacha ko'rishingiz mumkin. Shu jumladan faqat Matematik, Informatik emas balki boshqa sohalardagi g'oya, tushunchalar ham tadbiq qilingan.

Biror tizim qurish haqida gap ketganda bizda quyidagi optionlar bo'ladi.

1. Butun tizimni qanday ishlashini tushunadigan darajadagi ma'lumotlar miyyamizga sig'masligi mumkin. Bunaqa payitda kerakli odamlar bilan collab qilamiz.
2. Butun tizim qanday ishlashi haqida juda sayoz ma'lumotlarga ega bo'lishimiz mumkin lekin bilamiz deb o'ylaymiz.

https://youtu.be/dsMKJKTOte0?si=wD3SpNTIGEB_veMg
✍1
Forwarded from Programming Deadlock
Linux syscall tables: Every Linux syscall table in one place, grouped by architecture: system calls for 27 architectures with their numbers, arguments and registers, from Linux 3.3 to 7.3
https://syscall.sh/
🔥1
So'ngi payitlarda juda ko'p retro computing forumlarda aylanib yuribman. O'zim uchun nafaqat qiziq insonlar balki juda ko'p g'oya va fikrlar olyabman.

Masalan Sun ultra 5 computer haqidagi qiziq video

https://www.youtube.com/watch?v=cGsD-PUzzwc

Retrocomputing qiziq ekani sababi nostalgiya emas balki aslida juda ko'p juda qiziq kashfiyot va texnalogiyalar turli sabablarga ko'ra tashlab yuborilgan va bularni o'rganib eng kamida ilhomlanish mumkin. Ko'p kompyuter foydalanuvchilari xatto juda ham ko'p dasturchilar uchun ham o'zlari ishlatadigan qurilmalar blackbox bo'lib yotibti. Eksiroq modellar misolida esa o'rganish oson juda ko'p qurilmalar tuzilishini.

Unix juda ko'p innovatsiyalar qilgan.
Multi tasking, C dasturlash tili, hierarchical file system. Bizga yetib kelgan va juda ko'pchilik bilgan narsalardan.

Undan tashqari user expirence va dev env borasida ham eng birinchi turli experiment va implementatsiyalar unixda qilingan.

Shu o'rinda eslash kerkki bu g'oya va texnalogiyalar ustida ishlagan muxandis va professorlar Turing mukofotini olishgan.