Programming ∀
Открыть в Telegram
Ushbu kanalda IT va Dasturlashga aloqador mavzularda subyektiv fikrlarimni bayon qilaman.
Больше1 217
Подписчики
Нет данных24 часа
-87 дней
-3530 день
Архив постов
1 217
Xozir qilayotgan parserimda vectorlarga kelgandim va vector libni update qilib qo'yishibti 9.12ga. Parsing tugadi endi evanulationi qilaman kechga.
1 217
Shukrullo aka bilan 2017-18 yillar tanishgan edim. O'sha davrlarda oddiygina linux foydalanuvchisi sifatida Linux uzbek communitysiga azo bo'lganman. Barcha savollarimizga erinmasdan va og'rinmasdan javob berar edilar. Esimda birinchi marotaba serverlarga ishim tushganida aka erinmasdan barch narsalarni sozlashimga yordamlashganlar. Social networkda xabarlashib turar edik. Oradan vaqt o'tib devops uz community rivojlantira boshlaganimizda ham katta xursandchilik bilan qarshi olib yordamlarini ayamaganlar.
Shukurullo aka quyidagi ishlari bilan yodimizda qoldilar.
- Linux bilan juda ko'plab hamkasblarimiz tanishib o'z muammolarini hal etishdi. Shu jumladan manga ham juda ko'p yordamlar berganlar.
- OSS ancha rivojlandi.
- DevOps rivojlandi va xozirda community members 1k dan oshib ketdi.
Hullas sohamizda hizmatlari katta bo'ldi, communitylarda ko'pchilikga ibrat bo'ldilar.
Aka bilan hayotda ko'rishib suhbatlashish nasib etmadi. Qadar ekan mayli, yosh bo'lishlariga qaramay uzbek communityda o'chmas iz qoldirgan fidoyilar sifatida yodimizda qoldilar ! Allah ularga rahim qilsin.
1 217
Repost from Dark Voyage
Brothas, a moment of silence for @vodiylik.
He was one of our kindest pal we had in our developer community. I truthfully respected Shukrullo regardless of clashes we had community wise. We have became very close last few months, he was starting to learn Rust and now… he’s not among us anymore.
Death is real people. We will never forget you @vodiylik brother, the impact you’ve done to us and our community and may allah grant you heaven. Rest in peace.
Stay safe people and drive slow, you need your family.
1 217
@vodiylik Aka linuxga qiziqtirgan va o'rganishimga sababchi insonlardan biri edilar. Communityga ham katta hissa qo'shgan insonlardan edilar.
Inna lillahi va inna ilayhi rojiun 😢
1 217
Biroz skill issueelarimni tog'irlasam bo'ldi shu bilan haskell vprede. Shunaqa eDSLlarni sevamanda.
1 217
Oldinlari linkedin va boshqa job platformlarda ish qidirish yoki shular yordamida ish mavzusida gaplashishga xarakat qilar edim. Lekin so'ngi 2 yilda linkedin va instagram farqi qolmadi. Bazi ish elonlari platformalarida ham filter qilish qiyinlashib ketdi.
Ho'sh, biroz ambitsiyali rejam bor. Ishni githubdan topaman. Umuman ishga doir networkin va boshqa narsalarni ham sekin sekin githubga ko'chiraman.
Nega bu reja ?
Juda ko'p pointlar bor, lekin eng muhimi bu filter, github page aniq gapiradi bir insoning backgroundi haqida linkedinlar esa soxta.
Work uchun 2ta narsa ishlatishga qaror qildim.
1. Twitter - Bu main social network, xozircha nima yozaman yoki yozmayman aniq reja yo'q. Ammo u yerda networking uchun juda zo'r engineerlar bor.
2. Github - Bunga aniq rejalar bor lekin ochiqlashni hohlamayman.
Social hayotdan birmuncha dam olishim ham tog'riroq degan fikrga kela boshlayabman bir chekkada tinch xotirjam o'z ishimni qilay va imkonim boricha ko'proq narsalar o'rganay.
1 217
Bizni infosiganlar va “biznesman”lar qancha IT haqida og’zini yumsa shuncha rivojlanamiz. Ularni vazifasi texnalogiyalardan soqqa qilish, lekin o’sha texnalogiyalarni biz ishlab chiqaramiz shunga haqqimizni olamiz qolgan detaillar muhim emas. Shu sababdan o’zidan O’zbekiston qahramonini yasamay hamma yerga tilini tiqavermaslik kerak.
1 217
Qani shunaqa elitistlarni topib bering 🙂
Nima uchun tarixdagi narsalardan hulosa olmasligimiz kerak. Hamma muhokama qiladigan ochiq kodli loyihalardan eng kattalaridan biri bo'lgan kernelda nima bo'ldi ? Rust bilan qanaqa drammalar bo'lyabti hurmatli hamkasblar ?
Driverlarni rustda yozamiz deb xarakat qilayotganlar shunda elitismi yoki Rustni bilmayman deyb rad etayotganlar paranoic ? Ho'sh
Bu yerda kernel mavzusi va uyerdagi odamlar atayin ko'tarilgan chunki buni hammamiz bilamiz va guvoh bo'lldik.
1 217
Nimaga deb o'ylaysiz mashxur kompaniyalar ham eski tillarni ishlatayabdi ? Yangilarini nega ishlatmayabdi ? Masalan bazi faang lar ham ham c++ ishlatishadi, bunga sabab loyiha katta bo'lib ketganimi yoki boshqa sababmi ?O'zi manashu muammoga javob tariqasida yozilgan edi post. Demak yaxshi yetkaza olmabman. Xo'sh yuqorida aytilgan gaplar va mani tajribamda aynan shunaqa qarorlar natijasidagi hulosalarni yozgan edim. Eng katta muammo manashu yani copy paste qilish. Tashkilotlar, shaxslarni chetga surib qarash kerak deb bilaman masalaga. Biz falon loyiha qilmoqchimiz - Nega piton ? Nega C++ ? Nega nodejs ? Tog'ri biz qaysinisini zor bilsak shunda qilishimiz yaxshiroq tanlov. Ha, ammo biz qilmoqchi bo'lgan narsalar uchun bu texnalogiyalar qanchalik mos kelishi alohida mavzu, lekin eng og'riqli masala esa huddi mani tajribamdagi kabi qandaydir tupiklarga kirib ketish. Business bizga kelib turli talablar qo'yadi, ammo biz ham software yozayotganda turli talablar qo'yamiz. Agar anashu talablarga muhit mos kelmasa nima qilish kerak ? Muhit aslida shu narsalar sababdan rivojlanadi lekin bular qanchalik optimal yoki bo'lmasa sifatli ? Nodejsda millionlab projectlar ishlaydi va ular ham yuqoridagi muammolarni o'zlari hal etishgan shu orqali o'sha platform issuelarni yopishgan o'zlari uchun lekin bularning hammasi ham ochiqlanmagan. Bu holatni shunday izohlayman. Biz 22 asr uchun dasturlar tuzishni boshlayabmiz. Ammo fundamentlarimiz zaif chunki 20-21 asrda qolib ketgan. Biz kelajakdagi qiyinchiliklarni yechish uchun o'tmishdagi xatolarni yana qilmoqchi bo'lyabmiz. Aniqroq aytsak trend shu tomonga qarab shakillanyabti. Agar kimlardir bunday masalalarni tanqid qilsa alohida sekta yoki elita deb qaralyabti. Agar muhitda fundamental jiddiy muammolar bo'lsa uni tog'irlash o'rniga konservativ yoki fanatizm bilan yondoshyabmiz masalaga.
1 217
Bizda texnalogik rivojlanishga qarshi eng muhim faktor bu o'rtacha daromat va yashashga resurslar. Bu ko'rsatkichlarimiz past bo'lgani sababdan qo'polroq aytganda kambag'allik tufayli bizda bunday masalalar rivojlanishi xozircha qiyin. Shu sababdan ham xozir infosiganlar yohud "ta'lim dargoh"lari ko'payib ketdi. Chunki insonlar ko'zida o'lcho'vlarida asosiy point bu daromat qilish !
Ana endi chetdan ivestorlar va kompaniyalar kela boshlaganidan kegin, yani insonlar qo'liga pul kira boshlaganidan kegin nimadirlar qilishyabti. Bu mavzularda ancha gaplashdik muhokama qildik, infosiganlar ham o'zlarini amallab oqlamoqchi bo'lishdi hullas rossa harakatlar qilishyabti haligacha. Ammo nimayam deymiz "Natural Selection" buyog'i shu tomonga qarab ketaveradi.
Oldinda hali yana ancha yo'l bor, masalan xitoy bilan xamkorlikda qurilayotgan termiryol bahona xitoyliklar ko'payadi. Ana kegin hammasi yanayam qiziqlashadi. Xitoyliklarning texnologik strategiyasi g'arb va ruslarnikidan ancha farq qiladi. Xitoylik default programmerlarga sodda tarif sifatida govnokoder desak bo'ladi. Dasturlashda ham ular kirib keladimi bilmayman xozircha.
1 217
Nodejs 18-20 versiyalarida yuqoridagi masalalarni anchasi hal etildi. Ammo shaxsan manda concurrency bilan juda ko'plab yechimlar qilish kerak bo'ldi. Bu yechimlar uchun community emas balki asosan o'zimni tajribamga tayandim. Sababi bunday mavzularga doir yechimlar juda kam edi, Temur akani resurslari bor edi bazida shular yordam bergan. Lekin load ko'paygani va perfomance juda muhim point bo'lgani tufayli juda ko'p parametrlar muhimlashib ketti. Masalan avability. Boshida oddiy kubernetes yoki dockerda hal qivormoqchi bo'lgan narsamda state bilan muammo bo'ldi. Uni hal etganimda esa perfomanceda juda negative yechim berdi. Kegin processlar bilan qildim, biroz yaxshilandiku ammo katta foyda bermadi, kegin threadlarga o'tkazdim va threadpool bilan hal etdim. Biroz qoniqarli natija berdi. Ammo bazida resurslar yetishmasligi threadlar esa lock bo'lib qolishi kabi boshqa muammolar chiqdi. Ammo bu etibor qilishga juda muhim muammo emasdi shu sabab yechim jiddiy o'zgarishlarga uchraamdi. Oradan vaqt o'tib shuni tushundim "DevOps tools aynan ko'plab dasturchilarni skill issuelarini yopish uchun"
Vaqt o'tib bir loyihaga qo'shildim, u yerda asosiy qiladigan ishim devopslik loyiha esa asosan nodejsda. Barcha infratuzulma kubernetesda bo'ldi docker containerlar bilan. Kerakli monitoring va boshqa yechimlarni ham tayin qildim. Oradan vaqt o'tib qiziq narsani kuzatdim, docker containerlarda negadir memory boshqaruvida issuelar bo'lyabti. Bazida birgina container load kam bo'lsa ham 4-5GB ramdan bo'shamayabti. Kegin bilsam aynan o'sha applarda memoryga katta ma'lumotlar yuklanyabti, ammo kube schedulerda ham shunchaki OSda tekshirsam ham memory managementda juda ko'p overheadlar b'lyabti. Nega ? Sababi containerlar bilmaydi chegarasi qanday bo'lishini. Dockerdagi memory overheadlar haqida alohida o'qishingiz mumkin. Bu narsani atayin cloud funksiyalar bilan ham tekshirgan edim ularda birmuncha boshqacharoq ishladi lekin loyiha cloudga o'tishga budjedi kam edi va arxitekturial ancha o'zgarishlar kerak bo'lgan. O'tgan yili esa manashu muammoni juda zo'r hal etishga mos bo'lgan yechim sifatida fiberlar bilan tanishdim va yaqinda huddi shunaqa mavzudagi muammoga fiberlar bilan yechim qildim. Juda oddiy misol, ko'pchilik containerlar bilan appni ko'plab instancelarda ko'taradi, ammo kegin statefull app qilishda muammolarga duch kelishadi.
Oradan ancha vaqt o'tib, nodejs persmissionlarni ham typescript supportni ham tog'irladi. Ammo ungacha bun, deno kabi alternativlarda bunday narsalar ancha oldindan bor edi. Expressjs o'rniga nestjs trend bo'ldi ungacha odamlar fayllarni qanaqa sturkturalash haqida baxslashib yuravergandi. Lekin bu narsalar ancha oldin javada bor edi. pnpm kabi paket managerlar paydo bo'ldi. Lekin nega ? nega oradan shuncha vaqt o'tib bu narsalar endi qilindi ?
Mani javobim asosiy masalalar raqobat bilan bog'liq. Eslayman biz ham qanaqadir file permissionlar uchun kutbxonalar qilganimizni. Eslayman openapi uchun o'zim testlardan api generatsiya qiladigan kutbxona yozganimni. Eslayman nodejs bor ediku ammo o'rganishga tayinli resurslar yo'qligini. Xozir bilmayman nodejs va community qayerga qarab ketyabti. Ammo bilamanki ekotizimdagi ko'plab boshqa fundamental muammolarni hali aytmadim. Ularni turli uslubda, ko'rinishda hal etib yopishga xarakat qildik va xozirgacha shunday. Lekin yuqorida takidlaganim kabi bularning hammasi qandaydir boilerplatelar yoki bo'lmasa kostillar bilan bo'lyabti. Bu esa o'z o'zidan yana boshqa muammolarni keltirib chiqaryabti. Manga yoqmaydigan yagona narsa shu biz yangi texnalogiyalarni juda eski g'oyalar va tajribalar bilan quryotganimiz. Yuqoridagi va undan ko'plab boshqa muammolar, ko'ngilsizliklarning hammasi aynan hammasi ishlayabtiku degan fikrlar bilan sodir bo'lgan. Muammolar qiyinchiligi xozir oshib boryabti eski yechimlar esa bularga mos kelyotgandak ko'rinadi ammo shu fundamentlarga taqayveradi.
1 217
Odatda turli texnalogiyalar yoki platformalar hate qilinganda turlicha ko'rinishda suxbatlar shakillanadi. Shu o'rinda man agar biror narsani hate qilsam nega ekani bazida ko'pchilik hamkasblarimizga tushunarsiz bo'ladi. Bu esa o'z o'zidan radikalism va evangilizm bilan izohlanadi.
Ho'sh manda eng ko'p tajriba nodejsda va shu ekotizim asosida backendni o'rgandim va shu muhitda professional koryerani boshladim. Endi sizlarga manashu ko'rganlarimni aytib bermoqchiman.
Man nodejsning 8 versiyasidan boshladim. Bir loyihamda aynan CPU intensive muammo bor edi. Xisoblashga doir. Manda bunday mavzulardan umuman tajriba yo'q va hechnima bilmayman. Juda ko'plab resurslardan qidirganman huddi shu narsaga yechimni C++da topgan edim. Hamma bilan kelishib manashu vazifani C++da qilib Nodejsga addon qilishga qaror qilganmiz. Bunday tanlovga eng asosiy sabab u payitlar tjribali nodejslar kamligi va boshqa communitylar tomonidan shunday tavsiya berilgani edi. Ammo addon yozish oson bo'lmagan, chunki u payitlar nodejsda FFI yaxshi emas edi. Lekin masalani hal etish shart nega sababi aynan xozirgi yechim talabga javob bermaydi. Hullas ushbu muammoni hal etishda nafaqat skill issuelar balki platform issuelarga ham juda ko'p duch kelganmiz, Oradan ko'p o'tmay nodejsda bu narsalar yaxshilandi ammo aynan o'sha payitda nodejs versiyasini yangilay olmaganimiz ham addon qilishga juda katta sabab bo'lgan edi.
Nodejs 12 threadlar chiqdi, aynan o'sha muammoni threadlar bilan qilib ko'rdik, natijalar esa qoniqarli bo'ldi va ohiri loyihani 12-versiyaga o'tkaza oldik, ammo ungacha bo'lgan vaqtda anchagina muammolarga duch kelgan edik. Kegin boshqa loyihada huddi shunga o'xshagan narsalarni child process bilan qilishganini ham ko'rdim. Ammo uyoqda anchagina uzoq processing edi shu sababdan uncha zarari yo'q edi.
Bilamizki nestjsdan oldin nodejs ekotizimida eng mashxur narsa bu expressjs bo'lgan aynan backend uchun. Community tajribasi va boshqa resurslar sababdan o'zim ishlagan loyihalarda juda ko'plab middlewarelar ishlatar edim. Foydalanishga qulay va oson. Oradan vaqtlar o'tib bizda chain componentlar ko'payib ketdi va debug juda ham qiyinlashib ketti. Chunki hamma joyda context mutatsiyaga uchrar edi. Afsuski community tajribasi ham bu borada deyarli yordam bermadi. Ekotizim va community bilan bog'liq undan yomonroq muammolar keginroq boshlandi yani bizdagi dependencylar bilan. Ko'p loyihalarda typeorm ishlatar edik, ammo keskin o'zgarishlar tufayli juda ko'p muammolar chiqib kelaverdi. To'g'ri bu yerda asosiy muammo mendagi skill issuelarda bo'lishi mumkin. Ammo communityda bu normal practice bo'lsa nima qilish kerak ?
Nodejs 16-versiyalardan biroz stabillashdi, ammo boshqa platformalardan ancha orqada qolayotgan edi, masalan permissionlar yo'qligi sababdan bizda ham turli issuelar bo'lgandi. Undan yomoni 14-16 versiyalargacha nodejs va typescriptni kelishtirish edi. Buning uchun juda ham ko'p uslublar bor ediku ammo hammasining o'ziga yarasha qiyinchiligi bor edi, yani doyim ham siz kutganday bo'lmaydi.
1 217
Haskell va FP bilan qilgan tajribalarim asosida tushunib yetgan narsam asosida bazi fikrlar shakillandi. Umuman olganda bazi narsalar o'rganishga halal bergan bo'lsa bazilari dunyo qarashimni ancha oshirdi. Bular sizda ham bo'ladi deyishdan yiroqman shunchaki o'zimda kuzatganlarim.
Tillar oilasi - FP ga kirib kelganimdan buyon turli oilaga mansub tillar bilan tanishdim va nimadirlar qilib kelyabman. Bu narsalar dasturlash tillariga va umuman dasturlashga bo'lgan qarashlarimni o'zgartirib yubordi.
Turlicha yondoshuv - Shu payitgacha man code yozganimda oldin logicni yozib kegin unga tiplar yozganman. Bazida biror logicni chiroyli dekompozitsiya qilish o'rniga tiplarni o'zgartirish osonroq edi. Buni ortidan abstraksiyani buzib qo'yish holatlari juda ko'p bo'lgan. Xozir esa asosiy focus tiplarga qaratilgan. Yani tiplar bilan o'qiyman va tiplar bilan tushunaman manashu narsaga ko'proq harakat qilyabman.
FP conceptlari donolar so'zi emas - Boshida monadlarga ham boshqasigayam woow bu yerda yana qanaqadir sirli narsalar bor degan ko'z bilan qarar edim. Xozir hammasiga tiplar bilan qarayman va sekin sekin tushib yetyabmanki nega oddiy stringlarni qo'shishda ham "++" emas balki "<>" semigroup ishlatilinganini. Yoki bo'lmasam nega buncha ko'p conceptlar borligini. Umuman olganda doyim ham tehoryga zadror bo'lish shart emas.
Sotsial masalalar - Umuman olganda boshida hayron qolgan edim, chunki juda ko'plab oliy nasab dasturchilar ham oddiy communitylarda o'tirishlari va ularni oddiy odamlardan ajratib bo'lmasligini ko'rib. Ha, hammaning o'ziga yarasha xarakteri, nafsi bor va hamma inson. Community va sotsial mavzularda FP tomonlardan o'rganadigan narsamiz ko'p va shu bilan birga aynan o'sha engineering culture saqlanib qolgan.
Rivojlanish - FP turli tomonlarga qarab rivojlangan va shunday bo'lib kelyabti ham. Xozirgi mashxur tillarning deyarli hammasida FPchilar hissasi katta. Bunga birinchi marotaba rust bilan tanishganimda guvoh bo'lgan edim. Kegin sekin sekin bildimki bizga mashxur tillardagi bazi narsalarni ham aynan shu yo'nalishdagi olimlar qo'shishganini, generics, pattern matching, Option, Result types etc...
Shu o'rinda Vitaliy amaki yaqinda bo'lgan podcastdagi aytgan gaplarni ham eslab o'tish kerak. Iltimos podcasni ohirigacha ko'rmasdan quyidagi quotedan fikr shakillantirmang !
FP dasturlashdagi labaratoriya bo'lib ham xizmat qiladi!FP juda ko'p eshiklarni ochib berdi. Masalan qanday qilib dasturlash tillari qurish, compiler, interpreterlardan tortib qanday qilib dastur TZsini proof qilishgacha. Bundan tashqari yana ko'plab turli mavzularga olib kirdi parserlar, parallel va concurrent programming, async programming, error handling vaxakazolar. Yil boshida FP uchun matematika kerak, akademik bilim kerak deb yurgan edim. Ammo boshlaganimdan kegin hech qanday matematikaga va akademiyaga ishim tushgani yo'q. Bu shuni anglatadiki bunday gaplar shunchaki bahona yoki bo'lmasa qorquvdan boshqa narsa emas. Aslida indamay o'tirib boshlaganimda xozir yanayam ko'proq narsalarni bilgan bo'lardim, mayli qadar ekan hali hammasi oldinda )) Sciencega qarashlarim o'zgara boshladi - Boshida juda katta tayyorgarlik va tonnalab narsalar kerak deb yurgan edim. Aslida unday emas bir chekkadan boshlash kerak tamam. Matematika ham qiyin emas o'rganish uchun kuniga 10ta masala ishlash ham kerak emas. Mavzularni o'rganish va tushinish yetarli. Man boshida hamma narsa ideal bo'lishi kerak deb yurgan edim aslida inson qilgan hechnima ideal bo'lolmasligini amaliy isbotlarini ko'rdim. Borgan sari ko'p tillarni tushunish va o'rganish oson bo'lib borayotganini sezdim. Buning sababi esa turli tillar oilasidagi fundamental narsalar bilan bog'liq. Man bunday hissiyotni algorithmlarni o'rganib emas Haskellni o'rganib seza boshladim. Ammo yagona qilayotgan xatoyim bazida kam code yozyotganim, bu masalani imkon qadar tezroq tog'irlashim kerakligini tushunib yetyabman. PS: Ohiri tushungan narsam shuki perfectionism bor narsa ammo uning o'zi perfect emas 🙂
1 217
Vanixoyat odambashara setup boshlandi 🥲
Uninstalldan kegin /nix volume o'chmayotudi.
Hamma nix folderlarni bittalab tozalab chiqish kerak ekan.
1 217
O'ylaganimdan tez bo'ldi hamma narsa.
MacOs ham chakki emas ekan benchmark qilib o'tirmayman sababi linuxda qurilmalar umuman boshqacha.
