voidp


Kanal geosi va tili: O‘zbekiston, O‘zbekcha


Back End Developer at @uicgroup
TTPU 4/4
@python, @golang va OS haqida. C/C++ ham topiladi.
Ba'zida shaxsiy fikrlar. Eslatmalar birinchi navbatda o'zim uchun.

Связанные каналы

Kanal geosi va tili
O‘zbekiston, O‘zbekcha
Statistika
Postlar filtri








#p
🏁 Shunday qilib bugun 2024 uchun ish tugab, eson omon projectlarni yopib oldik, Alhamdulillah. Ana endi sessiya preplarni boshlasak bo'ladi :)

@voidplog


Ayyubxon Fargʻoniy | 0.1x engineer dan repost
Telefonimni $200dan kamroqqa sotib olganman, ammo oʻtgan 2.5 yil ichida u manga bundan oʻnlab barobar koʻproq ziyon keltirgan.


#db
🐘 Postgresda Event Management System implementatsiyasi dastlabki kunida PLpgSQL ni o'zida register_user() funksiya yozib ko'rdik. Bunda lokatsiyalar uchun PostGIS va password hash uchun pgcrypto extensionlarini ishlatdik.

🔗 v0.1: tag - register

Jarayon
🤦‍♂️ Faqat ORMda yozaverish fikrlashni biroz chalg'itar ekan. Many2Many relation define qilishda biroz o'ylanib qoldim va xato ham qildim. O'rtada intermediary table bo'lishi aniq edi, lekin django/odoo stilida field_ids deb many2many bermoqchi bo'libman birinchi :). Keyin tepib qoldi, o'rtadagi tableda primary key sifatida 2 ta related idlar qo'yilar edi sqlda.

📝 Country va Region tablelarini .csv fayldan populate qilishda error bo'ldi: csvni pgsql funksiyadan faqat postgres server turgan path orqali load qilsa bo'lar ekan. Shu sabab qo'lda import qilishga to'g'ri keldi, load_csv_data() funksiya fail bo'ldi (hozircha).

🧪 Testlash uchun pgTAP extensionini install qilolmadim, aniqrog'i menda postgres 15, sudo apt repoda esa 9.6. O'zini saytidan olishda o'zim make qilib build qilar ekanman C source faylini. Shunga e shartmas hozir dedim. Lekin database testlaganda qanday qilib db tablega yozilib qolmasligini tushundim: transaction ishlatar ekan. Rollback bo'lishidan oldin natijani tekshirib status qaytarib oladi, keyin rollback qilib yuboradi.

Davomi bor...

@voidplog


🚀 Computer Science sohasi cheksiz. Biroq eng asosiy va fundamental bilimlarni egallash keyingi imkoniyatlar eshigini ochadi.

🎯 Men bilgan eng muhim CS fieldlar:
- Discrete Mathematics
- Linear Algebra
- Number Theory
- Data Structures and Algorithms
- Statistics
- Operating Systems
- Computer Networking


Ro'yxatni davom ettirish uchun iltimos fikrlaringiz commentda qoldiring.

@voidplog


📆 voidp in 2025
voidp loyihamiz uchun kelayotgan yilda maqsadlar, implement qilinajak projectlar:

- Event Management System in pure SQL (postgres)
- Samocat management system in FastAPI
- Python Web Server
- Python ORM
- Own Git in Python
- Own Redis in Rust or C
- Own Celery in Python
- Own grep regex search in Rust or C
- Testing them in JMeter, Locust, etc.
- oldin shuni tugatib ol :)

Lekin gap faqat project qilish bilan emas. Jarayonni yozib borish, uchralgan muammolar haqida batafsil insightlar bilan bo'lishish va ularni maqola ko'rinishida yozish niyat qilinmoqda.

void pointer janoblari ehtimol ruxsat etilmagan memoryga access qilishga urinyaptimi? Quruq katta gapirib, hali shunchasini qila olasanmi yo'qmi..? Muhimi bizda maqsad bor, atigi bittasini qilsak ham loyiha maqsadi amalga oshgan bo'ladi. Boshlash esa yo'lning yarmidir. Shunday ekan boshlaymiz...


@voidplog


📆 2024 Rewind - voidp
Yakunlanayotgan yilga voidp hali elektronika g'oyalaridan voz kechmagan (@circulink nomi ostida), OOP fanini yopish uchun Java o'qiyotgan, Assemblyda kod yozar ekanman deb CompArchga o'ta qiziqqan holatda kirib kelgandi.

❄️ Winter
- Yilni Python Challenge bilan boshladik. Eng fundamental assignment operatoridan boshlab research olib bordik, Quick Python va Fluent Python asosiy yordamchilar bo'lishdi va bu Maygacha davom etdi.
- Fevral oyida asosan CompArch va assembly bilan ishladik, dastlabki asm program run qildik.

🌱 Spring
- Mart oyida qadrli tengdoshimizni yo'qotish ortidan bahor o'zgarishlar bilan boshlandi. Bir muddatdan so'ng Data analytics sohasida o'zni sinab ko'rishni istadik va Statistics bo'yicha research boshladik. Ammo bu aprelga qadar davom etdi.
- Aprel oyida yaqin ustozlarimizdan birining bergan yo'nalishi bilan Djangoga qaytdik. Djangoda bir nechta kichik projectchalar qildik. Pychallenge 2 ga start berdik. Discrete Matem bo'yicha MIT kursi asosida research olib bordik.
- May oyida Jahongir aka build your own X atamasi bilan tanishtirdilar. Shu nuqtadan boshlab dasturlashga nisbatan qarash tubdan o'zgardi. Rustga qiziqib o'rganib ko'rdik. FastAPI bilan tanishdik.

🏝 Summer
- Iyun oyida asosan FastAPI va Sqlalchemy o'rganishga vaqt ketdi. Universitet va education systemga nisbatan qarashlarimiz o'zgardi. Biroz tushkunlik bilan kanalni vaqtincha "to'xtatdik" (@cacnos ga ko'chdi).
- Iyul oyida Jahongir akaning Build Your Own Framework kursini tamomladik.
- Avgust oyi oxirida voidp qaytdi, ammo endi Odoo ham o'yinga qo'shilgandi.

🍂 Autumn
- Sentabr oyida asosan OS va CN fanlaridan tayyorlandik. Odoo ekotizimiga moslashish davri ham bo'ldi.
- Oktabr oyini OS ga bog'liq build your own Xlar bilan boshladik. Shell, TCP packet sender kabi projectchalar yasab ko'rdik. Yana C da aktiv yozishga qaytdik. Golang o'yinga qo'shildi.
- Noyabr oyida BistroSync ishlab chiqilishi boshlandi. Golang bo'yicha research davom ettirildi. Udevs hackathonga qatnashdik. Univer miqyosida OSdan boshqa birorta fan ochib ham qaramadik.

❄️ Winter
- Dekabr oyida asosiy vaqt BistroSync uchun ajratildi. Oyning ikkinchi qismida yana django bo'yicha researchlar boshlandi. BistroSync va nihoyat tugadi.



Xulosa
Elektronikadan voz kechdik. Inson o'zi uchun aslida nima kerak ekanini aniqlashi va shu bo'yicha ketishi kerak ekan. Ta'lim tizimiga esa aslo ishonib bo'lmas ekanki, sizga faqat diplom taqdim etar ekan. Shu sabab masters o'qish fikridan ham qaytdik. Shuningdek hali yetarlicha kuchli bo'lmaguncha qiz temasiga yaqinlashmaslik kerak ekanini ham tushunib ketdik orada :).

Shunaqa gaplar. Menimcha kanal faoliyati uchun yomon yil bo'lmadi. Vaqt tez o'tgandek tuyulsa-da, nimadirlar qilishga ulguribmiz va bundan xursandman.


@voidplog


#c
Bu projectni qilish jarayonida bir muammoga duch keldim: aktiv sessiyalarni manage qilish.

Boshida client va server uchun common bo'lgan utils.c faylida shared array ochib manage qilmoqchi bo'ldim. Lekin somehow serverda ishlasa clientda ishlamadi and vice versa. extern bilan nimadir bo'ldi menimcha.

Keyin boshqacha yechim keldi: sessiyalarni shared sessions.txt faylida saqlash. Bu OS tilida aytganda Reader Writer problem, ya'ni bir thread read qilayotganda boshqasi write qilishi yoki teskarisi bo'lishi mumkin. Shu sabab mutex bilan himoyalashga to'g'ri keldi. Rasmda add_session() funksiyasi implementatsiyasi.

👇 Hozircha boshqa optimal yechim topmadim. Idealar bo'lsa commentga marhamat)

@voidplog


#c
🏁 Nasib qilsa va nihoyat BistroSync yakunlanmoqda. Umid qilamanki bu oxirgi commit bo'ladi.

📊 3600+ qator kod, 1 oydan sal ko'proq vaqt, C language.


Menimcha yaxshi sarguzasht bo'ldi, GTKga rahmat, endi iloji boricha ishlatmaslikka harakat qilaman :)

@voidplog




ChatGPT - do'stmi yoki dushman?
Ehtimol siz hozir AI ishimizni olib qo'yishi haqida yozishimni kutgandirsiz. Yo'q.

Biz tobora ko'p AI modellardan ishimizni qildirishda foydalanyapmiz. Gap shundaki, usiz hozir nima qila olasiz? Siz u bilan butun boshli projectni bitirishingiz mumkindir (amallab), lekin usiz bitta serializer to'g'ri yoza olasizmi?

- AIsiz, faqat dokumentatsiya google bilan yozsam bilasanmi qancha vaqt ketadi, ishim qiyinlashadi, ...


Lekin siz hali senior emassizku, yillab bir ishni qilaverib xit bo'lganingizdan AIga topshirgani. Hozir internet o'chib qolsa C da webserver yozib ber desa yozolmaysizku. Yana project qilmoqchi bo'lsangiz tirs GPT ga tashlab, qildirtirasiz, kodni copy-paste qilasiz, juda bo'lsa ortidan ko'chirasiz, va oxirida men project qildim degan illyuziyaga tushib qolasiz. Yo'q, siz emas GPT project qildi.

Xulosa o'zimizga.

@voidplog


Anchadan beri ishlatishga erinayotganim precommit haqida o'rganish va foydalanib boshlashga qaror qildim:

https://pre-commit.com/

@voidplog


📊 Git Wrapped - 2024
Ajoyib statistik tool ekan. Top language nima uchun Python bo'lganini bilmadim ochig'i, butun Noyabr C da yozgandim lekin)

@voidplog




#c #go #rust
🧨 "Object-oriented" structs: C vs Go vs Rust

Mazkur 3 tilni birlashtiruvchi bitta jihat bor: ularda class-object degan tushuncha yo'q va uning o'rniga structga method biriktirib functionality implement qilinadi.

C da eng yoqtirgan fichalarimdan biri function pointerlar. Struct ichiga funcptr e'lon qilib, tashqarida funksiya yozib pointeri orqali bog'lasa bo'ladi. Lekin turli error holatlarni qo'lda tekshirishimiz shart. Binding dynamic.

Golang. Bunda pointer receiverlar orqali function pointersifat narsa yoziladi, logika juda o'xshash. Lekin C dan farqli ravishda method static bind qilinadi.

Rust. Bunda esa impl keywordi orqali struct implement qilinadi, lekin logika juda o'xshash. Binding esa ham static ham dynamic bo'lishi mumkin (dyn trait orqali).

@voidplog


#rs
Uyqudan oldin ko'rish uchun zo'r video bo'ldi :).

Ochig'i bu yerda hamma ma'lumotni ham bermabdi, lekin manabu bratni videolarini yo'l-yo'lakay ko'rib yamalarni yopib ketsa bo'ladi. Monov playlistdan esa mini projectlar topsa bo'larkan.

Ex sessiyaa! Otomatic control menga kerakmas, menga shular kerak!


@voidplog




🍃 Green Threads
OS o'qiganimizda Processlar va Threadlar haqida gaplashgan edik. Ularning har ikkisi OS aralashuvini, ya'ni kernel space interactionni talab qiladi: address space allocation, scheduling, va h.k. Keyin o'ylab qolishgan: OSni bezovta qilmasdan, user spaceni o'zida threadsifat narsa yasasak bo'lmaydimi?

✅ Shu yerda yashil threadlar paydo bo'lgan.

Green threadlar bitta OS-level thread ichida va juda lightweight bo'ladi. Ular ishlashiga OS aralashmaydi: shu sabab osonlik bilan minglab yashil threadlar ochib tashlash mumkin. Shuningdek, yashil threadlar cooperative-scheduling orqali ishlaydi. Ya'ni, ularni qaysidir nuqtada to'xtab context switch qilishga majburlovchi OS (preemptive-scheduler) yo'q, qachon ishini tugatsa o'zi aytadi: men ishimni tugatdim!

Pythonda green threadlar gevent va greenlet, yoki eventlet liblari orqali hosil qilinib, run qilinadi. Ularning har biri o'z schedulerlariga ega bo'lib, gthreadlar yield qilganda keyingi gthread ishlashini ta'minlaydi.

Golangda juda katta hype bo'lgan goroutinelar ham green thread aslida. Va bu concept faqat golangda emas, deyarli barcha tillarda bor ekan.


Pythonda async keywordi orqali hosil qiladiganimiz - coroutine mazkur green threadning asosini tashkil etadi. Faqat, coroutinelarni o'zimiz yield qilib, qaysi qachon ishlashini o'zimiz aytishimiz kerak, yashil threadlarda esa scheduler mavjud.

@voidplog

20 ta oxirgi post ko‘rsatilgan.