Techie's Blog
146 subscribers
695 photos
198 videos
7 files
112 links
Flutter Engineer | Tech enthusiast.
Working at 🟢 https://paynet.uz

Likes traveling, books, cats 😄.
Sharing my journay to become a senior.

Community : @FlutterDevTalk
DM : @iamtechie
Download Telegram
Media is too big
VIEW IN TELEGRAM
Day9

Kech bo’lishiga qaramay kontent joylandi. Endi esa uhlab olish kerak 😵‍💫
👍6
Yangi mehmon 😄
2
💆🏻‍♂️
This media is not supported in your browser
VIEW IN TELEGRAM
Day10.
Dam olish kunlarida toshkentning hali o’zimga kashf qilmagan joylariga sayrlar qilyapman. Bu safar Anhor park tomonlarga bordim. U yerda daraxtlar juda ko’p ekan bahorda yoki yoz issig’ida anhor bo’ylari salqin bo’lsa kerak.

P.s/ Asli u yerga oltinrang baliqalar bor deb o’ylab borgan edim, boshqa bog’da ekan 😅.
🔥3
I need a vitamin C like Cat, Cash, Car, Coffee, Computer …
😁3
New location. New office.
Men bir joyda ko’p qolishni hohlamayman. Shu sabab yangi joyga ko’chdik 😄.
🤣3👏1
Yaqinda bir inverviewda savol tushid:

"Dart single thread bo'lsa va barcha amallarni event loop boshqarsa, future tasklarni faqat resultlarini handle qilsa unda future tasklar qayerda execute qilinadi ?"

Men event loop barcha tasklarni bajaradi deb o'ylardim va men shunday malumot o'qiganman lekin interviewer dart paketi bilan keladigan qandaydir OS bajarishini javobini event loop ga qaytarishni aytdi. Chat GPT dan bu haqida so'rab quyidagilarni topdim va ulashgim keldi, kimgadir shunday savol berib qolishsa yordam berar degan umiddaman,

- OS orqali Async I/O ishlashi:
Dart’da Future orqali tarmoq yoki fayl tizimidan ma’lumot olish OS yordamida amalga oshiriladi. Misol uchun, socket I/O, database query, yoki file read/write bo‘lsa, OS Future ni event loop ga qo‘shib yuboradi.


dart:
import 'dart:io';

void main() async {
print('Fayl o‘qilmoqda...');

var fayl = File('example.txt');
var content = await fayl.readAsString(); // OS orqali Async I/O
print('Fayl ichidagi ma’lumot: $content');
}


• await fayl.readAsString(); → Bu async I/O bo‘lgani uchun, OS bu jarayonni event queue ga yuboradi.
• Event loop boshqa vazifalarni bajaradi, fayl o‘qilishi tugagach, natijani qaytaradi.

- Dart Isolate va OS Thread’lari:
Dart single-threaded bo‘lgani uchun barcha kod bitta thread da ishlaydi. Ammo Isolate yordamida boshqa CPU thread larni yaratish mumkin.


dart :
import 'dart:isolate';

void uzunHisob(IsolateSendPort sendPort) {
int sum = 0;
for (int i = 0; i < 1000000000; i++) {
sum += i;
}
sendPort.send(sum);
}

void main() async {
ReceivePort receivePort = ReceivePort();
await Isolate.spawn(uzunHisob, receivePort.sendPort);

receivePort.listen((sum) {
print('Hisob natijasi: $sum');
});

print('Asosiy thread band emas!');
}

• Isolate yangi OS thread yaratadi va hisob-kitobni alohida bajaradi.
• OS multi-threading orqali resurslarni boshqaradi.
• Asosiy thread bloklanmaydi, UI yoki boshqa vazifalar davom etadi.

Ya'ni Dart native OS lardan future tasklarni bajartiradi va javoblarni event loop ga jo'natadi. Bu haqida qolgan malumotlarni o'zingiz ham research qilib ko'rishingiz mumkin.
#savol

"SOLID, DRY, KISS, YAGNI" bular nimalar ?

* SOLID :
- Single responsibility principle ya'ni barcha class faqat bitta muayyan vazifani bajarishi kerak, birdaniga barcha ishni bir funksya bajarishdan qaytaradi;
- Open/Closed principle ya'ni class qo'shimchalar uchun ochiq (open to extend), o'zgarishlar uchun yopiq bo'lishi kerak (closed to modify) ;
- Liskov substitution principle ya'ni agar S class T klassdan voris olsa, T ning istalgan o'rnida S ni ishla olish kerak.
- Interface segregation principle ya'ni katta interfacelar o'ziga hos kichik interfacelarga bo'linishi kerak. Bu degani class o'ziga kerak bo'lmagan metodlarni implement qilishga majbur bo'lmasligi kerak va interface kichik interfacechalarga bo'linishi kerak.
- Dependency inversion principle ya'ni teskari bog'liqlik. High-level classlar low-level classlarga emas balki ularning abstraksiyalariga bog'liq bo'lishi kerak.

* DRY (Don't repeat yourself) ya'ni bir funksyani har hil klassda qayta-qayta yozish kerakmasligni anglatadi. Bu jamoaviy ishlaganda sodir bo'ladi va bir classda bitta vazigani bajaradigan 3-4 ta funksyalarni ko'rish mumkin bo'ladi;

* KISS (Keep it simple, stupid) ya'ni bazida funksyalarni juda ham murakkab yozib yuboriladi va buni boshida o'zi va Hudo keyin faqat Hudo biladigan holatga keltiriladi. Bu prinspl bundan qaytarib oddiyroq barcha tushunadigan qilib yozishga chaqiradi. Baht oddiylikda deydiku 😁😁.

* YAGNI (You aren't gonna need it) ya'ni kimlardir hayollaridagi supper mega zo'r funksyani yozaman deb class ochib qo'yadi lekin keyin esidan chiqib qolib ketaveradiku shunaqa holatni oldini olishni eslatadi. Faqat kerakli narsani yoz, qolganini kezi kelganda yozasan degani.

Kelajakda qandaydir inteviewlarda kerak bo'lib qolishi mumkin 😉.
👍3
#thoughts

Mndee o'ylab qarasam, holimga shukurdan boshqa narsa yarashmaydi.

Oilamdan uzoqda yashash, ishlash, o'zimni eplab yurish, oilamga ozgina bo'lsa ham yordam berish, bir joyda to'xtab qolishga qarshilik, o'sish, o'rganish, to'g'ri yo'lga intilish, xato qilish va ulardan o'rganish, boriga shukur qilish. Holim bazilarga orzu bu ham bir inom. Hechkim begunoh emas va shu qatori meni ham gunoh va kamchiliklarim bor. Bularni ko'rib kamchiliklarimga ko'nib, xatolarimni to'g'irlashda yordam beradigan yaxshi insonlar davrasi. Bularni barchasiga shukur qilib harakat qilish kerak.
🔥7
#savol

OOP va uning 4 asosiy prinsiplari ?

OOP (Object Oriented Programming) Obyektga yo'naltirilgan dasturlash - kodni modullarga bo'lish, qayta ishlashga moslashtirish, ko'dlarni kengaytirishga qulaylashtirishga yordam beradigan dasturlash paradigmasi.

1. 💥 Inkapsulyatsiya (Encapsulation) - class memberlarini yashirish va to'g'ridan-to'g'ri foydalanishni cheklash;
2. 💥 Abstraksiya (Abstraction) - Classning yoki funksyani soddalashtirish va ishlash jarayonini yashirish. Bu deyarli sklet vazifasida ishlaydi. Abstraksiya ichidagi funksyalar hight-level va ularning class ichidagi bodylari low-level funksiya deb ataladi.
3. 💥 Merosxorlik (Inheritance) - Bitta class boshqa classning xususyat va metodlarini meros qila olishi. Bunda merol olgan class CHILD CLASS meros bergan class esa PARENT CLASS deb ataladi.
4. 💥 Polimorfizm (Polymorphism) - Bir hil nomda har hil parametrdagi funksyalarning bo'lishi. Bu ikki hil overload va overrirde bo'ladi.
Overload - bir sinfda bir nomda har hil parametrdagi funksyalarni yozish
Override - meros qilib olingan classning metodlarini yangi classda o'zgartirib yozish.

Ushbu savol barcha interviewlarda beriladi. O'ylamanki foydasi tegib qoladi.
🔥4
#savol

Dartda kompilyatsiya (Compilation) turlari ?

Dart asosan ikkita asosiy kompilyatsiya usulini qo'llab-quvvatlaydi :
- AOT (Ahead-of-Time) - oldindan kompilyatsiya;
- JIT (Just-in-Time) - bajarish vaqtida kompilyatsiya;

AOT - kodni ishga tushishidan oldin optimallashtiradi va mashina tiliga o'giradi. Bu asosan Flutterda apk yoki ipa fayllarni chiqarishda ishlatiladi.

JIT - bu kod ishlashi davomida optimallashtiriladi va kompilyatsiya qilinadi. Bu asosan run yoki debug qilganda ishlaydi va Hot-reload orqali kodni qayta ishga tushurmay o'zgarishlari ko'rish mumkin va bu flutterning key feature bo'lib hizmat qiladi.

updated

Hot Restart ham JIT da ishlar ekan
#Onam

Ertalabdan Onam telefon qilib yig'lamsirab gapirdi, nima bo'ldi ekan deb o'ylandim. So'rasam "Seni sog'indimda bolam, tushumga kirib qolibsan" dedi. Ichimda bir nima uzulib bo'g'zimga kelib, ko'zimdan yosh chiqdi. O'zi nima qilib yuribman bu yerlarda degan savol keldi. Onamga har kuni telefon qilaman. Lekin baribir yuzma-yuz diydorni sog'inadi odam. Balki rostdan bag'ritoshdirman. Uzoqda yashash, ishlash yaxshi lekin Ota-ona ichida nimalar yutib sog'inib o'tirganini biz sezmaymiz. Ularga pul topsam bo'ldida deyish mumkin lekin ularga endi pul emas ko'proq e'tibor kerakligini bilmay qolamiz... bilganimizda kech bo'lib qolmasa deyman.
❤‍🔥8💯1
#savol

Nega flutter 3 layoutga bo'lingan widget, element, render tree ?

- Bu bo'linish fluttering samarador ishlashi va UI yangilanishlarni optimallashtirishga yordam beradi. Har biri bilan qisqacha:

Widget tree (WT) - dasturchi tomondan yoziladigan barcha kodlar bo'lib UI tuzulishni ifodalaydi, bunda UI mavjud yoki mavjudmasligi bilinmaydi. build() metodi chaqirilganda har doim yangi widget hosil qilinadi. WT faqat deklarativ bo'lib, UI ning haqiqiy holatini saqlamaydi.

Element tree(ET) - WT ning real ishlov berilgan versiyasi, bunda flutter qaysi widgetlar mavjud va qanday bog'langanligini aniqlaydi.
- ET WT va Render tree (RT) o'rtasida ko'prik vazifasini bajaradi; - UI ning stateini saqlaydi;
- statelessElement va StatefulElement obyektlari mavjud;
- agar build() chaqirilsa, WT yangilanadi lekin faqat kerakli qismlar ET da o'zgaradi;
- kerakli qismlarni eslab qolishi va qayta ishlatishi mumkin;
Nega kerak ? Agar har safar butun UI qayta chizilsa, u juda sekin ishlaydi. Element Tree esa faqat kerakli qismlarni o‘zgartirishga imkon beradi, bu esa samaradorlikni oshiradi.

Render tree (RT) - ekranda ko'ringan haqiqiy UI qismlarni hosil qiladi va chizadi;
- UI ning fizik tasvirlarini saqlaydi (size, position, paint);
- RenderObject larni boshqaradi ;
- Flutter SKIA orqali GPU yordamida RT elmentlarini ekranga chizadi;
Nega kerak ? RT UI ni qanday chiziqsh kerakligini optimallashtiradi va keraksiz qayta chizishlarni oldini oladi;

⚠️ Hot reload qilganda WT qayta yangilandi lekin ET va RT o'zgarishlarni minimallashtiradi;
#savol

Widget lifecycle ni hamma biladi lekin Element lifecycle nima ?

Element lifecycle quydagicha ishlaydi:
1️⃣ createElement() – widget birinchi martta chizilganda flutter ushubu metodni chaqiradi va widget uchun yangi element hosil qiladi;
2️⃣ mount() – element yaratilgach, u element tree ga qo'shiladi, agar statefulElement bo'lsa initState() chaqiriladi;
3️⃣ update() – agar setState() chaqirilsa yoki o'rniga boshqa o'xshash widget kelsa ushbu metod chaqiriladi. Bunda flutter widget tree ning eski va yangi versiyasini solishtiradi:
- agar widget o'zgarmagan bo'lsa elementni qayta ishlatadi;
- agar widget o'zgargan bo'lsa update() ni chaqiradi;
- agar turlar har hil bo'lsa (ya'ni Text o'rniga Container) unmount() -> createElement() ishlaydi;
4️⃣ deactivate() – agar widget WT dan olib tashlansa va qayta ishlatilishi mumkin bo'lsa ushbu metod chaqiriladi;
Qachon ishlaydi ? agar widget key bilan ishlatilgan bo'lsa flutter uni saqlaydi va qayta ishlatadi. Masalan ListView.builder() dagi elementlar deactivate bo'lib qayta ishlatiladi;
5️⃣ unmount() – agar element kerak bo'lmasa flutter ushnu metodni chaqiradi va uni butunlay o'chirib tashlaydi; dispose() oxirgi chaqiriladigan metod bo'lib barcha resuslarni tozalaydi va xotirani bo'shatadi;

Element Lifecycle haqida Qiziqarli Faktlar

Element UI ning haqiqiy holatini saqlaydi, Widget esa faqat deklarativ UI modelidir.
StatelessWidget har safar yangidan yaratiladi, lekin Element qayta ishlatilishi mumkin.
dispose() har doim unmount() chaqirilishidan oldin chaqiriladi.
ListView.builder() kabi widgetlar Element va RenderObjectlarni qayta ishlatadi, bu esa samaradorlikni oshiradi;
👍2
#thoughts

They say: “If you truly love someone, fight for them”. But they also say: “If you truly love someone you have to let them go”.
💯2
#flutter
Flutter 3.29 foydalanishga chiqdi. Shu bilan birgalikda Dart 3.7.0 ham chiqdi.

Flutterda ko'pgina yangilikar bor:
- Cupertino Widgetlarning ishlash samaradorligi oshirilgan va yangi widgetlar qo'shilgan;
- Impller engine ishlashi stabillashdi;
- Material uchun yangi page transition qo'shilibdi;
- Material 3 ning so'ngi dizaynlari kirtildi;
- Yangi DevTool inspektor;
Va boshqa yangiliklar taqdim etildi.

P.s/. Yangilashga arziydimikin nima deysizlar ?
@techiesBlog

1 vs 2 qaysi biri yoqdi ?