Programming ∀
1.31K subscribers
142 photos
4 videos
1 file
102 links
Ushbu kanalda dasturlashga aloqador turli expriementlarim, g'oyalarim, hulosalarimni ulashaman.
Download Telegram
Bu safargi relizda bizni haskell code va errorlarni detect qiladigan app ham chiqadi. Ehhe o’ylagan sayin hursand bo’lyabman.

Yana ozgina qoldi birinchi relizgacha, yana ozgina qorayib ishlasak…
😁3
Kriptografiya haqiqiy job security ekan yaxshilab o’ylab qarasam. Ish topish qiyin topsangiz yoqotmaysiz.
Filesystemlar haqida hech o'ylab ko'rganmisiz masalan fs hierarchy.
/
/root
/home
/home/user

Algorithmchilar biladi bu narsa oddiy tree. Ammo sizga algorithmlar ham yordam berolmaydi bazi caselarda.

Masalan oddiy edge case bor. / ni parenti yo'q.

Ho'sh siz qilyotgan structure, algorithmlar qnachalik tog'ri ekanini qanday tekshirish mumkin ?

Testlar ?
Xop biz qilgan fs treedagi barcha caselarni cover qilib ko'ringchi.

Manda boshqa ideya bor, agar testlarni aqli yetmaydigan bo'lsa demak boshqa narsa qilish mumkin.

Specifications

Hullas ideya bunday biz oldin spesifikatsiya yozamiz. Yani tizimni invariantlari va cheklovlarini tariflaymiz va qandaydir tool yani aynan shu specni check qiladigan tool barcha holatlarni analiz qilib biz qilgan modeldagi muammolarni ko'rsatadi.

Masalan Alloy6

sig Dir extends FSObject {}
sig File extends FSObject {}

abstract sig FSObject {
parent: lone Dir
}

sig Root extends Dir {} {
no parent
}

fact NoCycle {
no d: Dir | d in d.^(~parent)
}


Endi buni tushunishga xarakat qilamiz. Undan oldin keling specni mantiqiy darajada o'ylab olaylik biz oddiy directory uchun model qilamiz.

1. FSObject - Bu file yoki directory bo'lishi mumkin xozir bizni holatda faqat directory. Ammo FS objectda rule bor. Ko'pi bilan bitta parent dir. Mantiqiy jixatdan bitta directoryda 2ta parent bo'lmaydiku ahir ))

2. Root - eng top leveldagi directory / Bu yerda yana rule yani uning parenti yo'q.

Mana bizda qandaydir objectlar va ularga nisbatan mantiqiy qoidalar paydo bo'ldi. Endi yana bir mantiqiy qismi qoldi. Ammo buni biz fakt deymiz. Bu qoida emas yani talab emas bu aniq fakt!

Fakt quyidagicha: Hech bir directory o'zining ajdodi bo'la olmaydi

Etibor qilgan bo'lsangiz biz mantiqga asoslangan spesifikatsiya yozdik. Alloy6 esa manashu specni o'zi tekshiradi va bizni mantiqdagi xatoliklarni ko'rsatishi mumkin.
🔥2
Programming ∀
Filesystemlar haqida hech o'ylab ko'rganmisiz masalan fs hierarchy. / /root /home /home/user Algorithmchilar biladi bu narsa oddiy tree. Ammo sizga algorithmlar ham yordam berolmaydi bazi caselarda. Masalan oddiy edge case bor. / ni parenti yo'q. Ho'sh…
Speclarni kattaroq masshtabda ko’rsatib bersam balki ko’pchilikga tushunarli bo’lar.

Bugun yaxshi ideya berishgan edi. Permission control engine haqida.

Yani kimga qanday permission bor shularni check qiladigan engine. Uyoqga rule yozasiz va rulelar bo’yicha check qilsa bo’ladi kimni nimaga accessi bor. Masalan amazon cedar degan tilni va bunaqa servisni qilgan: https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html

Manashuni minimal versiyasini o’ylayabman qandaydir DSL bilan.
🔥1
SQLite tomonidan db aynan qanday componentlardan tashkil topgani va qanday ishlashi haqida qisqacha yozilgan ekan. Kimgadir qiziq bo’lsa o’qishni va chuquroq kiromoqchi bo’lsa db engine bilan yozib ko’rishni tavsiya etaman.

Ancha oldin fs integrated Btree va MergeTree qilib ko’rgan edim. Keginchalik bu narsa juda katta foyda berdi yani systemd journal bilan ishlayotganimda. Ko’pchilik DB ishlatishni biladi ammo juda kam odam DBlar ichkarida qanday ishlashi haqida qiziqgan bo’lsa kerak. Qiziqgan bo’lsa ham shu classic WAL, Vacum yana birbalolar.

Hullas oshxonada pishirib ko’ring qiziqroq bo’ladi hayot.


https://sqlite.org/arch.html
🔥5👌3
Github shunchalik jonimga tegdiki aynan repolarni classify qilib mirror qilishni jiddiy o'ylay boshladim.

Ertalab ishlamagan edi, boshqa narsaga chalg'ib ketdim mayli deb. Xozir kompga o'tirsam yana shu axvol.

Kuniga eng kamida 10-15 requestlarim fail bo'ladi. Pull request emas page load yoki chala yokida osilib qoladi.
hmm, agar bu memory leak bo'lsa eng yaxshi habar
😁7
Bir qiziq steriotip bor.

Toshmat aytadi, X tilni o'rgansamikan qanday tavsiya berasiz ?

Ko'p beriladigan javob: Ko'p sakrama bittasini o'rgan!

Yaqingacha o'zim ham shunday javob berganman. Ammo fikrim o'zgara boshladi.

Masalan siz biror tilda qandaydir projectlar yoza olayabsizmi ? Uje production qilyabsizmi ?

Unda yangi tilni o'rganish makesense. Ammo birnecha nuaslarni hisobga olish kerak.

1. Maqsad. Shunchaki qiziq deyish doyim ham yaxshilikga olib bormaydi, biroz qiynalsangiz tashlab qo'yasiz. O'zimda ham shunday. Shu sababli aniqroq maqsad qo'yish kerak, masalan siz falon tilda aynan nimadir qanaqa qilinishini o'rganmoqchidirsiz. Aytaylik rustda error handling. Yoki boshqa tillarda Error handlingni o'rganyabsiz va rustdan boshladingiz.

2. Code yozish kerak. Hullas 40ta maqola o'qiysizmi video dars, conference ko'rasizmi foydasiz agar code yozmasangiz. Buning sababi siz code yozganda o'zingiz detailed design qilasiz. Shunda siz biror darslikda ko'rmaydigan holatlarga duch kelishingiz mumkin aytaylik Result<Result<T>> boshida match qilib yuraverarsiz, ammo savol paydo bo'lishi mumkin balki eng boshidan bunaqa narsaga olib kelmasmiz ? Hullas code yozish oqibatida tajriba ham olasiz va eng muhim qismi shu.

Kuzatuvchilar orasida qancha odam javada yozadi bilmayman. Ammo hamma ham manabu narsani bilmasligi aniq: https://t.me/programming_everyone/4186

Buning sababi esa comfort zone xisoblanadi. Siz falon tilda nima qanday qilinishini bilib olgansiz va siz uchun ananaviy uslubga aylanib qolgan. Endi bu uslubni o'zgartirishni istamaysiz.

3. Demak agar siz yangi til o'rganishni istasangiz eng muhim narsalardan biri bu sizni comfort zonedan tashqariga olib chiqish. Agar siz hamma joyda panic, va throw qilib tashlayotgan bo'lsangiz yangi til esa bunday qilishga bermasa siz xatoliklar bilan ishlashda yangicha qarashlarga ega bo'lasiz.

Yangi til o'rganib eski ish qilish - Masalan siz Javada backend yozasiz va Haskell o'rganyabsiz. Agar haskellda ham backend, crud yozaman desangiz unda biroz zerkib qolishingiz mumkin. Shu sababli boshqa muammoni hal etishga xarakat qilib ko'rish kerak. Masalan Haskellda sodda interpreter yozib ko'rarsiz.

Yangi til, yangi domain sizdagi dunyoqarashni va tajribani yanada oshiradi. Bu ham yana boshqa prismdan ko'rish imkonini beradi.

Hulosa: Hohish, motivation bo'lsa maqsadli xarakat yaxshi. Ammo bu narsaga hamma narsa kerak degan perespektivadan qarash kerak emas. Shunchaki qotib qolmaslik uchun harakat qilish ham yetarli bazida. Shunchaki etibor qilish kerak nimadir processdan qanday natija bo'lishiga. Agar maqsad process bo'lsa unda natija bo'lmaydi. Agar sizda natija yangi dasturlash tilini o'rganish bo'lsa bunga erishishingiz imkoni past deb o'ylayman. Agar sizda natija siz uchun yangi dasturlash tilida qandaydir dastur qurish bo'lsa unda buning foydasi bo'lishi mumkin.
🔥6
Misol uchun xozir Flix tilini o'rganyabman.

Maqsad nima ?

Maqsadim bu tilda production qilish emas. Asosiy sabab bu effect systemlar haqida o'rganish. Flix effect sistemalar tadbiq qilingan juda yaxshi tillardan biri xisoblanadi. Juda ko'p joyda effectlar bor lib ko'rinishida yoki til ichiga qo'shvorilgan. Flix misolida esa bu narsalar ancha osonlashtirilgan userga. Masalan effect capabilites bor bu narsa turli joylarda cheklovlar qilishga juda ham foydali. Undan tashqari monadlarni juda ham chiroyli moslashtriilgan Scala + Haskell bo'lib ko'rinadi ko'zimga. Yani scaladagi for comperhensions + haskells do notation. Bu narsa juda intuitiv syntaxga sabab.

Sodda aytganda effect sistemalarni sinab ko'rish, tushunish uchun yaxshi start point sifatida filix boshladim. Xozircha bazi oddiy primitiv samplelar yozdim endi sodda log rotation daemon qilyabman. Yani timestamp bo'yicha loglarni qarab chiqadi va eskilarini truncate qiladi.

Hullas maqsad effect sistemalar bilan yaqindan tanishuv, natija flixda log rotator. Bu narsa gitga chiqishiyam shartmas, bu narsaga notes ham kerakmas. Bu narsani aynan bugun yakunlashim ham shart emas. Shunchaki hammasi step by step ketaveradi. Manga Flix da fluend bo'lish ham qiziq emas.
Eng qiziq joyini aytaymi ?

Agar qachondir o'zim biror dasturlash tilini ishlab chiqsam va unga effect sistema qo'shishni istasam albatta flixdan biror g'oyani olaman.

Agar biror projectimda effect sistemalarga aloqador bazi muammolarga duch kelsam o'sha projectda ishlatgan ekotizimimga flixdagi g'oyani port qilishga xarakat qilib ko'raman.

Yani bunday researchlar manga long termda ham foyda beradi. Bazida biror dasturlash tilini o'rganishdan maqsad production qilish bo'lmasligi ham mumkin. Yani hamma narsa faqat production uchun, biznes uchun bo'lishi shart emas. Manashunday expirementlar sizni formada ushlab turadi, rivojlanishga yo'l ochadi. Muhimi shu maqsadingiz qandaydir output bo'lishi.
🔥5
Absulute kitob.
🤔9👌1
Blya macos update qilganimdan kegin accountlardan signout qivoribti.

Absolute trash.

Full linuxga qaytish davrim kelyabti shekilli.
🤔9
Aura farm time qilamizmi ?

O'zimiz qilgan va o'zimizga yoqadigan turli codelarni share qilamiz.

Ideya bunday. Masalan siz qandaydir muammoni hal qilayotganda yoki ishlayotganda umuman ish davomida turlicha code yozgansiz, turlicha qarorlar qilgansiz. Manashu narsalarni ulashing. Farqiyo'q balki qayerdadir juda creative yechim qilgandirsiz, balki code style chiroyli chiqgandir. Balki murakkab muammoni yechimini qilgandirsiz. Balki juda ham magic code yozgandirsiz. Muhim emas, muhimi bu codeni o'zingiz yozgansiz va manashundan kayf qilasiz.

Har qanday dasturlash tili mumkin. Faqat oldin biroz context bering va vaziyatni tushuntiring.

Eng muhim qismi esa hechqanaqa AI ishlatmay qilingan bo'lishi kerak.

Shunday tajriba almashamiz va discussion qilamiz.
5
O'zim boshlab beraman.

Hullas biz ishlatadigan database libraryda db entitiylar quyidagicha tipda bo'ladi

Entity Key Val

data Entity record =
Entity { entityKey :: Key record
, Entity record -> record
entityVal :: record }


Database call uchun esa library boshqa ORMlar kabi methodlar taqdim qiladi, masalan get, insert vaxakazo.


Masalan sizda User va Post degan entitylar bo'lsa ikkisiga ham bemalol get yoki getEntity ishlata olasiz. Lekin bu narsani harsafar qo'lda yozib yurish kerak. Masalan

get :: (AppState, MonadIO m) => UserId -> m (Maybe (Entity User))
get i = withPool $ DB.getEntity i

get :: (AppState, MonadIO m) => PostId -> m (Maybe (Entity Post))
get i = withPool $ DB.getEntity i


Codega etibor qilsangiz buyoqda faqat tiplar farq qilyabti. Qolgani birxil. Bu narsa ortiqcha code degani.

A manda esa boshqa ideya paydo bo'ldi. Bizda faqat tiplar farq qilyabti ekan, nima uchun biz funksiyaga aynan qaysi tipga ishlashi kerakligini tashqaridan aytmaslik kerak ?

Haskellda bu narsani qilsa bo'ladi RequiredTypeArguments bilan. Yani getById funksiya yozamiz va funksiyamiz id parametridan tashqari yana bitta argument qabul qiladi, bu argument esa tip, yani biz funksiya qaysi tip ekaniga qarab ishlaydi.

Shunda biz getById (type Entity User) i qilib userni get qilishni agar bizga post kerak bo'lsa unda type (Entity Post) berib post entitydan get qilishni amalga oshira olamiz.

Endi harsafar bir funksiyani turli tipga qo'lda yozmaymiz balki bitta funksiyani aynan berilgan tipga qarab ishlaydigan qilamiz va qaysi tip bilan ishlashi esa argumentda beriladi.

Rasmda full implementation va bu kecha qilindi, endi common primitivlarni manashunday qilib chiqishni boshladim get, select, insert.
Forwarded from Abduaziz
Hozircha esimga kelgani reference qilishga https://github.com/AbduazizZiyodov/gustav/blob/legacy/python/gustav/parser.py - interpretator (legacy python implementatsiyasi)

* Pipe operator

g(x) |> f(y) = f(y, g(x))

O'zimga qiziq bo'lgani uchun qilgandim, pipe operatorini ko'rganda mavjud parse call degan funksiyani rekursiv chaqirib. Pipeni korsa, callni qayta chaqiradi hozirgi callni astsi bilan (m: g(x) va keyingi functioni parse qilguncha argument listiga hozirgi g(x) callni ASTsini append qiladi. Ishlayapdi, lekin object instance'larini metodlarini pipe qilganda aybi bor beqqa.

* Ternary expression

* Ishlatilmagan variable'lar haqida warning
Buyurtma rostdan juda tez keldi.

Ammo endi ham savollarim borda.

Blya, kechikmaslik imkoni bor ekan nega doyim kechikadi ?

Mana endi hammasi ishlayabti fudbol ko’raman deb ishlarni tez yopishgan.

Mani ichimdagi yovuzim esa aytyabti. Davay yana 10ta buyurtma qil erta kelishidan kayf qilaylik.
🤣71
Forwarded from Abduaziz π
Tsikllar == Rekursiv Funksiya ?

Maqolaga havola: https://abduaziz.ziyodov.uz/articles/tsikllar-rekursiv-funksiya


Funksiyalarning chaqirilishidan boshlab ular ustidagi optimizatsiya(lar) haqida yozdim. C & CPython misolida muhokama qildim. O'qib-o'rganib, quyida "diskussiya" qilishingiz ham mumkin.

Foydali va qiziq deb bilsangiz, hamda sizga yoqsa - maqola(i.e. ushbu postni)ni boshqalarga ham ulashing.

Desktop kompyuterda oching, agar sahifaning ba'zi qismlari yuklanmay og'irlik qilsa CTRL+SHIFT+R (yoki SHIFT`siz) bilan qayta yuklang.


@AbduazizPy
1
Forwarded from Xinux (Habibulloh)
Forgejo orqali loyihalarimizga hissa qo‘shing!

Open Source loyihalarimiz uchun asosiy Git platforma sifatida GitHub’dan o‘zimizning Forgejo platformasiga ko‘chdik. Endilikda barcha yangi hissa qoʻshish va hamkorlik ishlari Forgejo orqali amalga oshiriladi.

Forgejodan foydalanishni boshlash uchun:

1) https://git.oss.uzinfocom.uz saytiga kiring.
2) “Kirish” tugmasini bosing.
3) “Uzinfocom Open Source orqali kirish (Keycloak)”ni tanlang.
4) Ochilgan sahifada “Ro‘yxatdan o‘tish” tugmasini bosing.
5) Akkaunt yarating.
6) Ro‘yxatdan o‘tgach, Forgejoga Keycloak orqali qayta kiring.

Shundan so‘ng siz issue yaratishingiz, pull request yuborishingiz va loyihalar rivojiga o‘z hissangizni qo‘shishingiz mumkin.

Shuningdek, git.floss.uz platformasi o‘z faoliyatini yakunlayotganini ma’lum qilamiz. Shu sababli, yaqin vaqt ichida Codeberg platformasiga ko‘chirilishi rejalashtirilgan.
🔥5🤝3👌21
AI slop vs Human slop.

Vaybkoding atrofidagi generatsiya bo'lyotgan musorxona o'z yo'liga ammo human slop ancha muammoli.

Chunki odam doyim ham o'z ustida ishlashni, xatolarini tan olish yoki qaytarmaslikni doyim ham istamaydi. Ish ketyabti hammasi yaxshi.

AI modellar xatolarni o'rgana olyabti u ijodkor yoki creative emas.

Inson creative, ijodkor kashf eta oladi.

Ammo yillar davomida xatolarni o'rganmasdan birxil uslubda yozilgan kodan qanday hulosa qilish mumkin ?

Ko'pchilik code muhim emas deyishadi. Muhim, chunki siz qilgan ishni natijasi kod va u kod turlicha bo'lishi, turli muhitda turlicha ishlashi mumkin. Tanlovlar ham juda ko'p.

Shu kodagi turli qismlar, mexanizm va abstraksiyalar esa aynan turli muammolarni hal etish uchun chiqarilgan. Vaqt o'tadi, hamma narsa eskiradi huddi shunday oldingi yechimlar ham. Ammo odamni o'zgarishi qiyin.

Agar siz yangi til yasab uni semantikasini odamga tushuntirsangiz uni hamma ham qabul qilmaydi. Buning sabablari ham ko'p, bazilar qiziqib ham ko'rmaydi.

AI sizga counter example berishi mumkin, agar siz shuni istasangiz albatta. Faqat unga enagalik qilish kerak. Nega AI xato qilsa siz erinmay detailed enagalik qilasiz bilasizmi ? Buning sabablaridan biri odamlarga enagalik arzimasligi. Yani siz nimadirni aytasiz, eshmat esa eshitadi.

Eshmat sizdan so'raydi falon narsa nima deb. Javob berasiz va bu suxbat unutiladi.

AI esa qaysidir contextda shu suxbatni mention qila oladi.

Masala eshmatning qiziqish doirasida deysizmi ?

Bo'lishi mumkin. Eshmatning o'ziga yarasha "Qadiryatlari" "G'ururi" bor. Shu sababli siz unga nimadir xato ekanini aytsangiz doyim ham qabul qilishni istamaydi. Chunki uning prioritetlari umuman boshqa siz esa ortiqcha noqulay vaziyatga solyabsiz yoki halal beryabsiz.

Haqiqat nisbiy bazida. U g'alaba qiladi deb umid qilishdan mano ham yo'q. Bu haqida o'ylab izlanish ham juda absurt narsa.

AI slop qo'rqinchili emas, shunchaki Human slop oloviga quyilgan benzin kabi jarayon.
👌51🔥1
Hullas RFC balo battarlar bilan hamma joyni standartlashga urunishadi. Ammo kimdir kelib standartlarizga tupurib ketadi.

Bu narsa doyim bo'lgan. Shunchalik darajadaki xatto kundalik hayotda ko'p kuzatiladi. Standartlik va nostandartlik tushunchalari shunchalik nisbiyki bazida standartga amal qilish munofiqlikga ham o'xshaydi va huddi shunday standartga amal qimaslik ham.

Standartni esa kimni quvvati bo'lsa anashu qo'yadi. Albatta o'ziga tog'irlab qo'yadi )) Masalan cloud ekotizimlar qurishni research qilayotganimda juda ko'p standartlar Amazon, Google tomonidan yoki o'shayerdagi odamlar tomonidan qilinganini ko'rgan edim. Masalan bunaqa temalar: https://www.iso.org/ics/35.210/x/
Masalan siz qandaydir container yoki VM sistema qilsangiz agar standartga javob bermasa butun infratuzulmani o'zingiz qurishizga tog'ri keladi. Lekin standartga amal qilsangiz juda ko'p overheadlar kutib turibti sizni.

Xozir esa yanada yaxshiroq ko'ryabmiz bu mavzuni masalan o'sha MCP protocoli yoki anavi TOON, TSON vaxakazolar. Masalan CSV bor edi. Yani bu narsalarndan maqsad doyim ham nimadirni hammaga tushunarli yoki yaxshiroq qilish emas balki o'ziga qulay qilish yani biznes orieted.

Bu narsa doyim actual bo'lgan codeclarni eslang. VLC + ffmpeg bo'lmagan payitda Apple va windows da alohida playerlar bo'lgan. Masalan avvalari windows playerda ochgan videoni appledagi quickTime ocholmas edi. Bu yerda tarix bilan batafsilroq tanishsangiz bo'ladi: https://youtu.be/NjqacgFnSAo?si=NMqHQmAmgkrW1ltm

Standartlarga amal qilish doyim ham muammoyingizni hal etmaydi. Maksimal impact bu sizga beriladigan infratuzulma. Masalan http orqali siz har qanday tilda yozilgan, har qanday platformada ishlaydigan dasturlar o'rtasida data transfer qila olasiz. Masalan browser va sizni custom linux serverizda ishlayotgan backend dastur. Shu sababli ham ko'pchilik standartlarga bevosita yoki bilvosita follow qilishadi. Ammo texnik tomondan qaraganda bu narsalar umuman muhim emas, agar Terry Davis biratdaka bo'lsangiz hamma narsa qilishingiz mumkin.
😇3