Programming ∀
Ishqilib yana devaysim o’zgardi. Config o’zini oqlashni boshladi. https://github.com/lambdajon/dotfiles
Nixda begineerlar uchun ancha mos keladigan config bo'libti. lib va yana 1-2 magic bor holos ammo qolgan hamma narsa decidable va composable.
Hullas man tradeoff qilgan narsa qo'lda yozishning narxi bo'ldi.
Agar bazi narsalarni qo'lda yozish eng oson va arzoni bo'lsa va juda katta qismni qamrab olmasa unda qo'lda yozishdan arzoni yo'q.
Mani holatimda agar yangi host qo'shilsa 3ta yangi modul paydo bo'ladi aynan
1. configurations.nix
2. disk.nix
3. Hardware.nix
configurationsda hamma narsa compose qilib jamlanadi home manager va yana boshqa modular konfiguratsiyalari.
disk da esa disk configurations, man diskodan foydalanaman yani partitionlar ham declariv stilda bo'ladi, undan tashqari diskoda ham disk encryption vaxaakzolarni amalga oshirish mumkin.
hardware-configurations.nix - default hardware configurations, nixos install qilganizda generate bo'ladigan konfiguratsiyalar disks, cpu, gpu, vaxakazo configs.
Qolgan modular esa reusable va composable.
Yangi configimda bazi narsalarni ham sinab ko'rdim, WM, vim etc... va eski configimdan ham bazi narsalarni olib o'tkazdim.
Umuman olganda yomon emas bazi modular katta monolitligicha qolgan ularni ham talabga qarab ajratish mumkin.
Hullas man tradeoff qilgan narsa qo'lda yozishning narxi bo'ldi.
Agar bazi narsalarni qo'lda yozish eng oson va arzoni bo'lsa va juda katta qismni qamrab olmasa unda qo'lda yozishdan arzoni yo'q.
Mani holatimda agar yangi host qo'shilsa 3ta yangi modul paydo bo'ladi aynan
hosts directory ichida va bu narsalar flake.nix da foydalaniladi. 3ta modul haqida:1. configurations.nix
2. disk.nix
3. Hardware.nix
configurationsda hamma narsa compose qilib jamlanadi home manager va yana boshqa modular konfiguratsiyalari.
disk da esa disk configurations, man diskodan foydalanaman yani partitionlar ham declariv stilda bo'ladi, undan tashqari diskoda ham disk encryption vaxaakzolarni amalga oshirish mumkin.
hardware-configurations.nix - default hardware configurations, nixos install qilganizda generate bo'ladigan konfiguratsiyalar disks, cpu, gpu, vaxakazo configs.
Qolgan modular esa reusable va composable.
Yangi configimda bazi narsalarni ham sinab ko'rdim, WM, vim etc... va eski configimdan ham bazi narsalarni olib o'tkazdim.
Umuman olganda yomon emas bazi modular katta monolitligicha qolgan ularni ham talabga qarab ajratish mumkin.
❤1
"Five-Point Haskell": Total Depravity (and Defensive Typing)
https://blog.jle.im/entry/five-point-haskell-part-1-total-depravity.html
https://blog.jle.im/entry/five-point-haskell-part-1-total-depravity.html
in Code
"Five-Point Haskell": Total Depravity (and Defensive Typing)
I have thought about distilling the principles by which I program Haskell, and how I’ve been able to steer long-lived projects over years of growth, refactorings, and changes in demands. I find myself coming back to a few distinct and helpful “points” (“doctrines”…
Xinux settings uchun Wifi credentialsni QR qilib chiqarish ustida ishlayabman.
QR ustida oldin ham ishlagan edim. Ammo qiziq narsa topib oldim wifi creds manabunaqa formatda bo'ladi:
QR parserlar manashu prefixlar bo'yicha aniqlaydi masalan wifi uchun
Albatta yana bir narsa bu QR code size. Yani QR code turlari juda ham ko'p va har bir turdagi QR ma'lum sig'imda ma'lumotni saqlay oladi. Masalan QR version 1 16 Byte saqlasa 40-version uje 2331 bu narsa odatda mule sizega qaraladi masalan versiya 1 size 21x21
Modul deganda pixel blocklarni tushunsangiz bo'ladi. Masalan 21x21 matrix bor har bir block 1 bit. Agar qoraga bo'yalgan block bo'lsa demak 1 bo'lmasa 0.
QR o'zi haqida yana qisqacha maslan shu 21x21 modulik:
QRdagi katta kvadrat narsalar masalan 3ta kvadrat turadiku: Finder patterns deyiladi bu narsa orentatsiya uchun kerak scannerlarga.
Separators oq chegaralar - chegaralarni aniqlashga kerak.
Timing strips - bu narsa scannerga data sizeni aytadi.
Format info - Qisqasi format haqida info ))
Data + ECC - Uje buyoqda data bytelar va error correction turadi.
ECC yanada qiziq, chunki scanner adashishi yoki bo'lmasa bazi bitlar buzilgan bo'lishi mumkin. ECC data bilan qo'shib saqlanganida ECC codewordsdan yoqolgan bitlarni recover qilib olsa bo'ladi.
QR Code: https://www.qrcode.com/en/
Reed–Solomon error correction: https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
QR ustida oldin ham ishlagan edim. Ammo qiziq narsa topib oldim wifi creds manabunaqa formatda bo'ladi:
WIFI:T:<security>;S:<SSID>;P:<password>;H:<hidden>;;
QR parserlar manashu prefixlar bo'yicha aniqlaydi masalan wifi uchun
WIFI prefix, url bo'lsa shunchaki url address, sms bo'lsa smsto Scannerlar esa shu datalarni parse qilib kerakli actionlarni qiladi. Masalan wifi bo'lsa wifi connect uchun signal qiladi. Url bo'lsa browserga redirect signal qiladi.Albatta yana bir narsa bu QR code size. Yani QR code turlari juda ham ko'p va har bir turdagi QR ma'lum sig'imda ma'lumotni saqlay oladi. Masalan QR version 1 16 Byte saqlasa 40-version uje 2331 bu narsa odatda mule sizega qaraladi masalan versiya 1 size 21x21
Modul deganda pixel blocklarni tushunsangiz bo'ladi. Masalan 21x21 matrix bor har bir block 1 bit. Agar qoraga bo'yalgan block bo'lsa demak 1 bo'lmasa 0.
QR o'zi haqida yana qisqacha maslan shu 21x21 modulik:
QRdagi katta kvadrat narsalar masalan 3ta kvadrat turadiku: Finder patterns deyiladi bu narsa orentatsiya uchun kerak scannerlarga.
Separators oq chegaralar - chegaralarni aniqlashga kerak.
Timing strips - bu narsa scannerga data sizeni aytadi.
Format info - Qisqasi format haqida info ))
Data + ECC - Uje buyoqda data bytelar va error correction turadi.
ECC yanada qiziq, chunki scanner adashishi yoki bo'lmasa bazi bitlar buzilgan bo'lishi mumkin. ECC data bilan qo'shib saqlanganida ECC codewordsdan yoqolgan bitlarni recover qilib olsa bo'ladi.
QR Code: https://www.qrcode.com/en/
Reed–Solomon error correction: https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
Qrcode
QRcode.com|DENSO WAVE
Answers to your questions about the QR Code!『QRcode.com』
ECC mavzusi yana ochildi )) Ancha oldin ECC RAM bo'lmagani uchun manda rust compile bo'lmayotgani haqida aytgan edim.
QR bahona manashu ECC haqida yana bir qiziq aspect ko'rdim. Endi shunchaki ideya ketdi, demak memoryda ham manashunaqa prinsp bo'lishi mumkin masalan qandaydir holatda race conditionlar bo'lsa, yoki bo'lmasa address missing bo'lsa ECC orqali kerakli datani restore qilib olish mumkin.
Nu bunaqa bo'lmagan taqdirda ham bu memory interaction uchun umumiy protocoligicha qolaversa kerak. Lekin qiziq bo'ldi bekorchilikda buni ham bir kavlash kerak.
QR bahona manashu ECC haqida yana bir qiziq aspect ko'rdim. Endi shunchaki ideya ketdi, demak memoryda ham manashunaqa prinsp bo'lishi mumkin masalan qandaydir holatda race conditionlar bo'lsa, yoki bo'lmasa address missing bo'lsa ECC orqali kerakli datani restore qilib olish mumkin.
Nu bunaqa bo'lmagan taqdirda ham bu memory interaction uchun umumiy protocoligicha qolaversa kerak. Lekin qiziq bo'ldi bekorchilikda buni ham bir kavlash kerak.
Yana bir qiziq narsa. Gtk bilan rasm chizsa bo’lar ekan blya.
O’zi hech hayolimga kelmabti desktop app qilganda uje gpuga tog’ri access bor demak xarbalo qilsa bo’ladi.
Xinuxga ficha qo’shishdan oldin bitta soddaroq gtk app qilib ko’rsam bo’lar ekan. Url bersangiz QR generate qilib beradigan.
Qr aslida static image demak bytes to image render qilish ham qimmat emas fikrimcha. Bekorchilikda esa shu gpuda qanaqa render qilishigacha o’rganib chiqish kerak bu gui applarni Qachondir buni ham ko’raman.
O’zi hech hayolimga kelmabti desktop app qilganda uje gpuga tog’ri access bor demak xarbalo qilsa bo’ladi.
Xinuxga ficha qo’shishdan oldin bitta soddaroq gtk app qilib ko’rsam bo’lar ekan. Url bersangiz QR generate qilib beradigan.
Qr aslida static image demak bytes to image render qilish ham qimmat emas fikrimcha. Bekorchilikda esa shu gpuda qanaqa render qilishigacha o’rganib chiqish kerak bu gui applarni Qachondir buni ham ko’raman.
Data encryption/decryption uchun qilganlarim umuman trash chiqibti.
FFI call qilganidan kegin GC tozalamayabtimi bilmayman hullas memory leak topib oldim 🥲 Har requestda memory oshib boryabti :)
Xozircha uncha jiddiy emas ammo long termda muammoli chunki durable applarda bunaqa narsa yaxshigina fuckup qiladi.
Yagona ideya bu crypto prmitivlar bilan hamma narsani o’zim qilib chiqishim. Haskellda cryptography ancha rivojlangan ammo to’liq tayyor yechim muammoliroq bo’ldi. Bu degani buni o’zim yozishim kerak.
Ish qilib yana bir puzzle paydo bo’ldi. Albatta juda qiziq ammo tushunarsiz. O’zi kriptografiya qiziq ammo uning real hayotdagi implementatsiyalari steroidlarda bo’ladi. FFI dalshe kavlagandan ham uncha mano yo’q yoki vaqt ajratib hamma narsani controlga olish kerak yoki boshqa yo’lini qilish kerak.
Mani holatimda daje qaysi yaxshi ekanini ham bilmayabman ochiqchasiga gambling. Import crypton and let’s fucking go!
Lekin buni eplasam dofomindan peredoz bo’lsam kerak.
FFI call qilganidan kegin GC tozalamayabtimi bilmayman hullas memory leak topib oldim 🥲 Har requestda memory oshib boryabti :)
Xozircha uncha jiddiy emas ammo long termda muammoli chunki durable applarda bunaqa narsa yaxshigina fuckup qiladi.
Yagona ideya bu crypto prmitivlar bilan hamma narsani o’zim qilib chiqishim. Haskellda cryptography ancha rivojlangan ammo to’liq tayyor yechim muammoliroq bo’ldi. Bu degani buni o’zim yozishim kerak.
Ish qilib yana bir puzzle paydo bo’ldi. Albatta juda qiziq ammo tushunarsiz. O’zi kriptografiya qiziq ammo uning real hayotdagi implementatsiyalari steroidlarda bo’ladi. FFI dalshe kavlagandan ham uncha mano yo’q yoki vaqt ajratib hamma narsani controlga olish kerak yoki boshqa yo’lini qilish kerak.
Mani holatimda daje qaysi yaxshi ekanini ham bilmayabman ochiqchasiga gambling. Import crypton and let’s fucking go!
Lekin buni eplasam dofomindan peredoz bo’lsam kerak.
😁2
OpenPGP bo'yicha qilingan expirementlar.
Hamma narsa juda explicit qilingan misol keltiraman, aytaylik manga ed25519 key kerak va manashunday key generation qilmoqchiman.
Ho'sh public va private keylar shakli qanday bo'ladi masalan publickey
Ko'rib turdangingizdek bu yerda juda tushunarsiz infolar ko'p, MPI nima ? OID nima va nega kerak?
Agar RFC ga mos qilmasangiz unda siz qilgan narsa sizni muhitdan tashqarida ishlamaydi. Masalan publickey manashu normalarga mos kelmasa uni boshqa pgp key bilan ishlaydigan dasturlar masalan
Bu faqat rfc haqida edi. Endi texnik tomondan qaraymiz.
Masalan siz foydalanadigan tilda bularni qilsangiz qanday ishlaydi ?
Bu umumiy manoda yani tezlikdan tortib xavfsizlikgacha. Mani holatimda nativ haskellda yetarlicha tez ishlayabti key generation ammo xavfizlik qanday bilmayman.
Ammo encyption/decryption unday emas yetarlicha sekin ishlaydi )) Streamingsiz holatda 11-12minutes for ~50mb file encryption.
Streaming bilan ~3s Ammo buyoqda ham gambling qilganman yani bazi parametrlarni o'zgartirib ko'rdim va chunklarni 32kb dan oldim.
Aytishingiz mumkin 3s norm. Ha norm bo'lishi mumkin ammo rfcga mos degani muammo hal bo'ldi degani emas. Yani man buni qanday test qilishni bilmayman. Ishlayabtimi ? Ha ishlayabti )) Ha bazi componentlarni test qila olarman va biroz hotirjam bo'larman aytaylik SHA1 o'rniga SHA-512 ishlatdim. RFC bo'yicha hamma narsaga mos keladi.
Ammo asosiy savol ochiqligicha qolaveradi. Yani qanchalik xavfsiz va qanchalik tog'ri ?
Manashu yerda yo'l ikkiga ajralyabti.
1. For fun.
2. Professional.
Man professional kriptogrof emasman. Shunchaki RFC dagi aytilgan gaplar bo'yicha bazi liblar bilan expirement qilgan odaman holos. Ha dasturlashni bilaman ammo specialis emasman bu domainda. Ha bu narsani qandaydir darajada qildim, albatta full emas rfc bir qismi holos. Ammo prikol shundaki bu narsaga garantiya berolmayman.
Agar parser yozsam eng kamida visual bilishim mumkin va input/output ni test qila olaman. Ammo kriptografiyada doyim ham unday emas ekan. Yani biror narsa xato ekanini qanday isbotlashni ham bilmayman ammo tog'ri emas deb o'tiraverishim mumkin.
Ha albatta study qilish mumkin, bu borada doyim tolerantman. Ammo bunga sarflanadigan resurs, vaqt... Aynan bunaqa mavzularda tajribaga ega odamlardan feedback olish.
Shunda ham hamma narsani to'liq 0 dan emas balki uje tayyor librarylarni ishlatgan holatda qildim.
Ushbu expirement quyidagi hulosalarga olib keldi.
1. Bazi narsalarda shunchaki havaskor bo'lish ham unchalik oson emas. Masalan kriptografiya.
2. Nimadirni high levelda tushungan bilan uni implement qilish o'rtasida juda katta farq bor. Tushungan odam faqat o'zini tushunaman deb o'ylaydi ko'p holda aslida unaqa bo'lmaydi....
3. Detaillarga kirganda sizdagi tajriba va bilim aniq ko'rinadi. Masalan bit manipulationdan tajribam juda kamligi sabab doyim adashtirib o'tirdim kerakli combinatorlarni tiplarda juda ko'p adashdim bazi joylarda unsignet integer kerak bo'lsa man signed bazi joylarda esa bytestring o'rniga unsignet integer va ularni ortiqcha convertatsiyalari. Nu baxtimga haskellda kriptografiyaga aloqador juda ko'p source bor.
Bu narsa man uchun shunchalik katta puzzle bo'ldiki xatto nimani qayerdan ham boshlashni bilmagan edim. Boshida shunchaki
Ammo muammoni hal etishga ham compramise topa oldim. Yani 2ta source of truth bu yerda manga kerkali encryption/decryption algorithmlar uje tayyor testdan ham o'tgan:
https://github.com/simplex-chat/simplexmq
https://github.com/fission-codes/fission
Hamma narsa juda explicit qilingan misol keltiraman, aytaylik manga ed25519 key kerak va manashunday key generation qilmoqchiman.
Ho'sh public va private keylar shakli qanday bo'ladi masalan publickey
0x04 - Bu versiya bizda xozir V4<4 bytes> - Unix time yani qachon yasalgani0x16 - Qaysi algorithmda ekani bizni holatda EdDSA <10 bytes> - Object Identifier ASN.1 standarti bo'yicha. Masalan bizni holatdagi raqam 1.3.6.1.4.1.11591.15.1 Aynana manashunaqa formatda bo'ladi.0x01 0x07 0x40 - Bular section esa MPI: Bu encoding format for number<32 bytes> - Ed25519 public key content Ko'rib turdangingizdek bu yerda juda tushunarsiz infolar ko'p, MPI nima ? OID nima va nega kerak?
Agar RFC ga mos qilmasangiz unda siz qilgan narsa sizni muhitdan tashqarida ishlamaydi. Masalan publickey manashu normalarga mos kelmasa uni boshqa pgp key bilan ishlaydigan dasturlar masalan
gnugpg tushunmaydi.Bu faqat rfc haqida edi. Endi texnik tomondan qaraymiz.
Masalan siz foydalanadigan tilda bularni qilsangiz qanday ishlaydi ?
Bu umumiy manoda yani tezlikdan tortib xavfsizlikgacha. Mani holatimda nativ haskellda yetarlicha tez ishlayabti key generation ammo xavfizlik qanday bilmayman.
Ammo encyption/decryption unday emas yetarlicha sekin ishlaydi )) Streamingsiz holatda 11-12minutes for ~50mb file encryption.
Streaming bilan ~3s Ammo buyoqda ham gambling qilganman yani bazi parametrlarni o'zgartirib ko'rdim va chunklarni 32kb dan oldim.
Aytishingiz mumkin 3s norm. Ha norm bo'lishi mumkin ammo rfcga mos degani muammo hal bo'ldi degani emas. Yani man buni qanday test qilishni bilmayman. Ishlayabtimi ? Ha ishlayabti )) Ha bazi componentlarni test qila olarman va biroz hotirjam bo'larman aytaylik SHA1 o'rniga SHA-512 ishlatdim. RFC bo'yicha hamma narsaga mos keladi.
Ammo asosiy savol ochiqligicha qolaveradi. Yani qanchalik xavfsiz va qanchalik tog'ri ?
Manashu yerda yo'l ikkiga ajralyabti.
1. For fun.
2. Professional.
Man professional kriptogrof emasman. Shunchaki RFC dagi aytilgan gaplar bo'yicha bazi liblar bilan expirement qilgan odaman holos. Ha dasturlashni bilaman ammo specialis emasman bu domainda. Ha bu narsani qandaydir darajada qildim, albatta full emas rfc bir qismi holos. Ammo prikol shundaki bu narsaga garantiya berolmayman.
Agar parser yozsam eng kamida visual bilishim mumkin va input/output ni test qila olaman. Ammo kriptografiyada doyim ham unday emas ekan. Yani biror narsa xato ekanini qanday isbotlashni ham bilmayman ammo tog'ri emas deb o'tiraverishim mumkin.
Ha albatta study qilish mumkin, bu borada doyim tolerantman. Ammo bunga sarflanadigan resurs, vaqt... Aynan bunaqa mavzularda tajribaga ega odamlardan feedback olish.
Shunda ham hamma narsani to'liq 0 dan emas balki uje tayyor librarylarni ishlatgan holatda qildim.
Ushbu expirement quyidagi hulosalarga olib keldi.
1. Bazi narsalarda shunchaki havaskor bo'lish ham unchalik oson emas. Masalan kriptografiya.
2. Nimadirni high levelda tushungan bilan uni implement qilish o'rtasida juda katta farq bor. Tushungan odam faqat o'zini tushunaman deb o'ylaydi ko'p holda aslida unaqa bo'lmaydi....
3. Detaillarga kirganda sizdagi tajriba va bilim aniq ko'rinadi. Masalan bit manipulationdan tajribam juda kamligi sabab doyim adashtirib o'tirdim kerakli combinatorlarni tiplarda juda ko'p adashdim bazi joylarda unsignet integer kerak bo'lsa man signed bazi joylarda esa bytestring o'rniga unsignet integer va ularni ortiqcha convertatsiyalari. Nu baxtimga haskellda kriptografiyaga aloqador juda ko'p source bor.
Bu narsa man uchun shunchalik katta puzzle bo'ldiki xatto nimani qayerdan ham boshlashni bilmagan edim. Boshida shunchaki
Ammo muammoni hal etishga ham compramise topa oldim. Yani 2ta source of truth bu yerda manga kerkali encryption/decryption algorithmlar uje tayyor testdan ham o'tgan:
https://github.com/simplex-chat/simplexmq
https://github.com/fission-codes/fission
www.rfc-editor.org
RFC 9580: OpenPGP
This document specifies the message formats used in OpenPGP.
OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.
This document is maintained in order to publish all…
OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.
This document is maintained in order to publish all…
java 21+ silani ko'rsataymi ?
sealed interface PortResult permits Ok, Missing, NotNumeric, OutOfRange {}
record Ok(int port) implements PortResult {}
record Missing() implements PortResult {}
record NotNumeric(String str) implements PortResult {}
record OutOfRange(int value) implements PortResult {}
PortResult parsePort(String str) {
if (str.isEmpty()) return new Missing();
int port;
try {
port = Integer.parseInt(str);
} catch (NumberFormatException e) {
return new NotNumeric(str);
}
if (port < 1 || port > 65535) return new OutOfRange(port);
return new Ok(port);
}👏5😱3
Programming ∀
java 21+ silani ko'rsataymi ? sealed interface PortResult permits Ok, Missing, NotNumeric, OutOfRange {} record Ok(int port) implements PortResult {} record Missing() implements PortResult {} record NotNumeric(String str) implements…
Oma barbir noise ko’pda. Shu narsa scalada chiroyli bo’ladi. Haskellda esa burutal bo’ladi. Rustda ham qilsa bo’ladi :)
Qilib ko’rilar.
Qilib ko’rilar.
Bizdagi sofware productlar pizdets borku. Bittasi oddiy hide balanceni eplolmagan bo'lsa boshqasiga shunchaki adashib kirib qo'yasangiz sizga call qilishadi. 1Fitni aytyabman.
Hullas odat qilib oldim har kuni kamida 3-4 marotaba 1Fitga kiraman va manga tel qilishadi. Ammo callgaga javob bermayman.
Ko'ramiz qachongacha cho'zilar ekan. Adashmasam uje 1 hafta bo'lyabti.
Hullas odat qilib oldim har kuni kamida 3-4 marotaba 1Fitga kiraman va manga tel qilishadi. Ammo callgaga javob bermayman.
Ko'ramiz qachongacha cho'zilar ekan. Adashmasam uje 1 hafta bo'lyabti.