Kanaldagi postlar xaritasi 2-qism.
👉 1-qism.
93. Dartda List konstruktorlari.
94. Dartda raqamlar haqida.
95. Dizayn vs Arxitektura naqshlari.
96. Dartda EventLoop haqida.
97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
98. Dartda "Future" sinf konstruktorlari.
99. Dart Virtual Mashinasi haqida.
100. Dartda Garbage Collector.
101. Flutterda "debugInvertOversizedImages" haqida.
102. Dartda "covariant" haqida.
103. Flutterda RichText() va Text.rich() farqlari.
104. Flutterda Overlay va OverlayEntry vidjetlari.
105. HarmonyOS haqida.
106. Dartda generator funksiya kalit so'zlari.
107. Dart FFI haqida.
108. Dizayn naqshlari (Design patterns).
109. Singleton pattern.
110. Builder pattern.
111. Factory Method pattern.
112. Abstract Factory pattern.
113. Prototype pattern.
114. Adapter pattern.
👉 1-qism.
93. Dartda List konstruktorlari.
94. Dartda raqamlar haqida.
95. Dizayn vs Arxitektura naqshlari.
96. Dartda EventLoop haqida.
97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
98. Dartda "Future" sinf konstruktorlari.
99. Dart Virtual Mashinasi haqida.
100. Dartda Garbage Collector.
101. Flutterda "debugInvertOversizedImages" haqida.
102. Dartda "covariant" haqida.
103. Flutterda RichText() va Text.rich() farqlari.
104. Flutterda Overlay va OverlayEntry vidjetlari.
105. HarmonyOS haqida.
106. Dartda generator funksiya kalit so'zlari.
107. Dart FFI haqida.
108. Dizayn naqshlari (Design patterns).
109. Singleton pattern.
110. Builder pattern.
111. Factory Method pattern.
112. Abstract Factory pattern.
113. Prototype pattern.
114. Adapter pattern.
Dizayn vs Arxitektura naqshlari.
Dizayn naqshlari (design patterns).
Takrorlanadigan kod muammolari uchun muhim va qayta foydalanish mumkin bo'lgan yechimlardir. Ular kodlash paytida tez-tez duch keladigan kichikroq, aniq muammolarni hal qilishga yordam beradi, masalan, obyekt yaratish yoki komponentlarni ajratish.
Dizayn naqshlari tushunchasi "Gang of Four" (GoF) tomonidan o'zining "Design Patterns: Elements of Reusable Object-Oriented Software" klassik kitobida ommalashgan. Ushbu kitobda ular dizayn naqshlarining uchta asosiy turini taqdim etdilar: Creational, Structural va Behavioral.
Arxitektura naqshlari (architecture patterns).
Tizim darajasidagi takrorlanadigan muammolarni hal qilish uchun muhim, qayta foydalanish mumkin bo'lgan yechimlardir. Ular ilovangizning umumiy arxitekturasini tartibga solishga e'tibor qaratadilar. Ular butun tizimingiz qanday ishlashini ko'rsatadigan rejalardir.
Arxitektura naqshlari rejalashtirish bosqichida, hatto kodlashni boshlashdan oldin, tizimingizning turli qismlari qanday o'zaro ta'sir qilishini shakllantirish uchun ishlatiladi.
Manba : Link
Dizayn naqshlari (design patterns).
Takrorlanadigan kod muammolari uchun muhim va qayta foydalanish mumkin bo'lgan yechimlardir. Ular kodlash paytida tez-tez duch keladigan kichikroq, aniq muammolarni hal qilishga yordam beradi, masalan, obyekt yaratish yoki komponentlarni ajratish.
Dizayn naqshlari tushunchasi "Gang of Four" (GoF) tomonidan o'zining "Design Patterns: Elements of Reusable Object-Oriented Software" klassik kitobida ommalashgan. Ushbu kitobda ular dizayn naqshlarining uchta asosiy turini taqdim etdilar: Creational, Structural va Behavioral.
Arxitektura naqshlari (architecture patterns).
Tizim darajasidagi takrorlanadigan muammolarni hal qilish uchun muhim, qayta foydalanish mumkin bo'lgan yechimlardir. Ular ilovangizning umumiy arxitekturasini tartibga solishga e'tibor qaratadilar. Ular butun tizimingiz qanday ishlashini ko'rsatadigan rejalardir.
Arxitektura naqshlari rejalashtirish bosqichida, hatto kodlashni boshlashdan oldin, tizimingizning turli qismlari qanday o'zaro ta'sir qilishini shakllantirish uchun ishlatiladi.
Manba : Link
Flutter Notes pinned «Kanaldagi postlar xaritasi 2-qism. 👉 1-qism. 93. Dartda List konstruktorlari. 94. Dartda raqamlar haqida. 95. Dizayn vs Arxitektura naqshlari. 96. Dartda EventLoop haqida. 97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari. 98. Dartda…»
Dartda EventLoop haqida.
EventLoop (voqealar sikli).
Bu Flutter ilovalariga bloklanmaydigan operatsiyalarni bajarishga imkon beradi, bu esa UX-ni silliq bo'lishi uchun zarurdir. Masalan, tarmoq soʻrovi tugashini kutayotganda, EventLoop ilovaga foydalanuvchi maʼlumotlarini qayta ishlash va UI yangilanishlarini koʻrsatishni davom ettirish imkonini beradi.
Ps: Dart kodlari yagona/asosiy isolate-da ishga tushadi, lekin istasangiz ko'proq isolate yaratishingiz mumkin. Har bir yangi Isolate o'zining alohida xotirasi va eventloop-ga ega bo'ladi.
Flutter ilovasi ishga tushganda, Dart runtime uning uchun ajratilgan oqim jarayoni (thread process)-ni yaratadi. Bu jarayon 2 ta asosiy navbat (queue)-ni ishga tushiradi: microtask va event.
Har ikkala navbat FIFO (first-in, first-out) asosida ishlaydi. EventLoop doimiy ravishda ushbu queue-larni tekshiradi va vazifa (task)-larni quyidagicha qayta ishlaydi:
Microtask Queue: Bu queue, event queue-ga nisbatan ustunlik qiladi. EventLoop bo'sh turganda, event queue-ga o'tishdan oldin u birinchi navbatda microtask queue-dagi barcha vazifalarni bajaradi.
Event Queue: Barcha microtask-lar qayta ishlangandan so'ng, EventLoop event queue-dagi vazifalarni bajaradi. Bunga User interaksiyalari, timer-lar va boshqa asinxron hodisalar (future, stream etc) kiradi.
Manbalar:
1. Video: Link
2. Medium: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Dart
EventLoop (voqealar sikli).
Bu Flutter ilovalariga bloklanmaydigan operatsiyalarni bajarishga imkon beradi, bu esa UX-ni silliq bo'lishi uchun zarurdir. Masalan, tarmoq soʻrovi tugashini kutayotganda, EventLoop ilovaga foydalanuvchi maʼlumotlarini qayta ishlash va UI yangilanishlarini koʻrsatishni davom ettirish imkonini beradi.
Ps: Dart kodlari yagona/asosiy isolate-da ishga tushadi, lekin istasangiz ko'proq isolate yaratishingiz mumkin. Har bir yangi Isolate o'zining alohida xotirasi va eventloop-ga ega bo'ladi.
Flutter ilovasi ishga tushganda, Dart runtime uning uchun ajratilgan oqim jarayoni (thread process)-ni yaratadi. Bu jarayon 2 ta asosiy navbat (queue)-ni ishga tushiradi: microtask va event.
Har ikkala navbat FIFO (first-in, first-out) asosida ishlaydi. EventLoop doimiy ravishda ushbu queue-larni tekshiradi va vazifa (task)-larni quyidagicha qayta ishlaydi:
Microtask Queue: Bu queue, event queue-ga nisbatan ustunlik qiladi. EventLoop bo'sh turganda, event queue-ga o'tishdan oldin u birinchi navbatda microtask queue-dagi barcha vazifalarni bajaradi.
Event Queue: Barcha microtask-lar qayta ishlangandan so'ng, EventLoop event queue-dagi vazifalarni bajaradi. Bunga User interaksiyalari, timer-lar va boshqa asinxron hodisalar (future, stream etc) kiradi.
Manbalar:
1. Video: Link
2. Medium: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Dart
Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
Flutterda ilovaning hayot sikli (lifecycle)-ni boshqarish va hodisa (event)-larini kuzatish uchun ikkita asosiy sinf - WidgetsBindingObserver va AppLifecycleListener mavjud.
WidgetsBindingObserver.
Bu ilovaning hayot sikli hodisalarini tinglash imkonini beruvchi "mixin". U didChangeAppLifecycleState deb nomlangan metodni taqdim etadi, u ilovaning hayot sikli holati har doim oʻzgarganda (masalan, paused, resumed, inactive etc) ishga tushadi. Bu sinf Flutter ilovalaridagi hayot sikli hodisalarini kuzatishning an'anaviy usuli bo'lib kelgan.
AppLifecycleListener.
Flutter 3.13 versiyadan boshlab ilovaning hayot sikli hodisalarini tinglashning yangi usuli sifatida taqdim etildi. Bu sinf WidgetsBindingObserver bilan solishtirganda yanada sodda API taqdim etish orqali hayot siklidagi o'zgarishlarga javob berish jarayonini soddalashtiradi.
Masalan, eski usul orqali faqatgina aynan bir holat (state) o'zgarishini tinglash mumkin, yangi usul orqali esa, state-lar o'rtasidagi o'tish (transitions)-larni tinglashingiz mumkin.
Manbalar:
1. Official doc: Link
2. Official doc: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Flutter
Flutterda ilovaning hayot sikli (lifecycle)-ni boshqarish va hodisa (event)-larini kuzatish uchun ikkita asosiy sinf - WidgetsBindingObserver va AppLifecycleListener mavjud.
WidgetsBindingObserver.
Bu ilovaning hayot sikli hodisalarini tinglash imkonini beruvchi "mixin". U didChangeAppLifecycleState deb nomlangan metodni taqdim etadi, u ilovaning hayot sikli holati har doim oʻzgarganda (masalan, paused, resumed, inactive etc) ishga tushadi. Bu sinf Flutter ilovalaridagi hayot sikli hodisalarini kuzatishning an'anaviy usuli bo'lib kelgan.
AppLifecycleListener.
Flutter 3.13 versiyadan boshlab ilovaning hayot sikli hodisalarini tinglashning yangi usuli sifatida taqdim etildi. Bu sinf WidgetsBindingObserver bilan solishtirganda yanada sodda API taqdim etish orqali hayot siklidagi o'zgarishlarga javob berish jarayonini soddalashtiradi.
Masalan, eski usul orqali faqatgina aynan bir holat (state) o'zgarishini tinglash mumkin, yangi usul orqali esa, state-lar o'rtasidagi o'tish (transitions)-larni tinglashingiz mumkin.
Manbalar:
1. Official doc: Link
2. Official doc: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Flutter
Dartda "Future" sinf konstruktorlari.
1. Future().
Bu konstruktor Timer.run() orqali asinxron hisoblash qiymatini qaytaradigan Future obyektini yaratadi. whenComplete() yoki then() metodlari orqali tugallangan qiymatni olishingiz mumkin.
2. Future.delayed().
Bu konstruktor berilgan kechikish (delay)-dan keyin hisoblash natijasini qaytaradigan Future obyektini yaratadi.
3. Future.error().
Bu konstruktor tezda xato (error) bilan yakunlanadigan Future obyektini yaratadi.
4. Future.microtask().
Bu konstruktor "scheduleMicrotask" bilan asinxron hisoblash natijasini o'z ichiga olgan Future obyektini yaratadi. Microtask queue-dagi event-lar 1-chi bo'lib ishga tushishini hisobga olsak, bu konstruktorga berilgan parametr tezda ishga tushadi.
5. Future.sync().
Bu konstruktor sinxron bajariladigan hisoblash natijasini qaytaradigan Future obyektini yaratadi va kamdan-kam holatlarda ishlatiladi.
6. Future.value().
Bu konstruktor qiymat bilan yakunlangan Future obyektini yaratadi. Agar value() ichiga beriladigan parametr Future obyekti bo'lmasa, parametr Microtask queue ichiga qo'yiladi, aks holda Event queue ga o'tkaziladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link
#Dart
1. Future().
Bu konstruktor Timer.run() orqali asinxron hisoblash qiymatini qaytaradigan Future obyektini yaratadi. whenComplete() yoki then() metodlari orqali tugallangan qiymatni olishingiz mumkin.
2. Future.delayed().
Bu konstruktor berilgan kechikish (delay)-dan keyin hisoblash natijasini qaytaradigan Future obyektini yaratadi.
3. Future.error().
Bu konstruktor tezda xato (error) bilan yakunlanadigan Future obyektini yaratadi.
4. Future.microtask().
Bu konstruktor "scheduleMicrotask" bilan asinxron hisoblash natijasini o'z ichiga olgan Future obyektini yaratadi. Microtask queue-dagi event-lar 1-chi bo'lib ishga tushishini hisobga olsak, bu konstruktorga berilgan parametr tezda ishga tushadi.
5. Future.sync().
Bu konstruktor sinxron bajariladigan hisoblash natijasini qaytaradigan Future obyektini yaratadi va kamdan-kam holatlarda ishlatiladi.
6. Future.value().
Bu konstruktor qiymat bilan yakunlangan Future obyektini yaratadi. Agar value() ichiga beriladigan parametr Future obyekti bo'lmasa, parametr Microtask queue ichiga qo'yiladi, aks holda Event queue ga o'tkaziladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link
#Dart
Dart Virtual Mashinasi haqida.
Dart VM, Dart ilovalari uchun yengil ishga tushish muhiti bo'lib xizmat qiladi. Dart VM bir qancha imkoniyatlarni taqdim etadi, jumladan JIT va AOT kompilyatsiya, DevTools, Heap va Isolate.
JIT va AOT kompilyatsiya haqida batafsil.
Heap.
Bu koddagi har bir element uchun qancha xotira ajratilishini boshqaradigan axlat yig'uvchi (garbage collector).
Isolate.
Bu Dart virtual mashinasida boshqa izolyatsiyalardan mustaqil ravishda ishlaydigan hisoblash birligi bo'lib, operatsiyalarni bir vaqtning o'zida va parallel ravishda bajarishga imkon beradi.
Izolyatsiyalardagi xotiralar alohida bo'lgani sababli, izolyatsiyalar bir-biri bilan malumot almashishni portlar orqali amalga oshiriladi.
Mutator thread.
Bu Dart dasturini ishga tushirishda virtual mashinaning umumiy C API-dan foydalanadigan oqimdir. Istalgan vaqtda izolyatsiyaga faqat bitta mutator oqim ulangan bo'lishi mumkin. Bundan tashqari, izolyatsiyaga bir nechta yordamchi oqimlar ulanishi mumkin, masalan:
Orqa fonda ishlaydigan JIT kompilyator oqimlari, bir vaqtning o'zida GC belgilash oqimlari va GC tozalash oqimlari.
AST yadrosi (Kernel Abstract Syntax Tree).
Dart kodini AST yadrosiga tarjima qilish jarayoni CFE (Common Front End) deb nomlangan dart paketi tomonidan boshqariladi.
Dart dasturi ishga tushganda, Dart VM dastur strukturasini ifodalovchi AST-ni yuklaydi. Ushbu AST dangasalik bilan tahlil qilinadi (parsed lazily), ya'ni VM faqat kerak bo'lganda kodning kerakli qismlarini qayta ishlaydi va resurslardan foydalanishni optimallashtiradi.
Manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
4. Video : Link
#Dart
Dart VM, Dart ilovalari uchun yengil ishga tushish muhiti bo'lib xizmat qiladi. Dart VM bir qancha imkoniyatlarni taqdim etadi, jumladan JIT va AOT kompilyatsiya, DevTools, Heap va Isolate.
JIT va AOT kompilyatsiya haqida batafsil.
Heap.
Bu koddagi har bir element uchun qancha xotira ajratilishini boshqaradigan axlat yig'uvchi (garbage collector).
Isolate.
Bu Dart virtual mashinasida boshqa izolyatsiyalardan mustaqil ravishda ishlaydigan hisoblash birligi bo'lib, operatsiyalarni bir vaqtning o'zida va parallel ravishda bajarishga imkon beradi.
Izolyatsiyalardagi xotiralar alohida bo'lgani sababli, izolyatsiyalar bir-biri bilan malumot almashishni portlar orqali amalga oshiriladi.
Mutator thread.
Bu Dart dasturini ishga tushirishda virtual mashinaning umumiy C API-dan foydalanadigan oqimdir. Istalgan vaqtda izolyatsiyaga faqat bitta mutator oqim ulangan bo'lishi mumkin. Bundan tashqari, izolyatsiyaga bir nechta yordamchi oqimlar ulanishi mumkin, masalan:
Orqa fonda ishlaydigan JIT kompilyator oqimlari, bir vaqtning o'zida GC belgilash oqimlari va GC tozalash oqimlari.
AST yadrosi (Kernel Abstract Syntax Tree).
Dart kodini AST yadrosiga tarjima qilish jarayoni CFE (Common Front End) deb nomlangan dart paketi tomonidan boshqariladi.
Dart dasturi ishga tushganda, Dart VM dastur strukturasini ifodalovchi AST-ni yuklaydi. Ushbu AST dangasalik bilan tahlil qilinadi (parsed lazily), ya'ni VM faqat kerak bo'lganda kodning kerakli qismlarini qayta ishlaydi va resurslardan foydalanishni optimallashtiradi.
Manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
4. Video : Link
#Dart
Dartda Garbage Collector.
Dartning axlat yig'uvchisi (GC) Dart Runtime ichida joylashgan va Dart dasturlash tilining muhim komponenti bo'lib, xotirani avtomatik va samarali boshqarish uchun mo'ljallangan.
Dart, xotirani ikkita asosiy avlod (generation)-ga ajratadigan avlod axlat yig'ish strategiyasidan foydalanadi:
Yangi avlod (young space scavenger).
Ushbu komponent qisqa muddatli obyektlar bilan bog'liq xotirani bo'shatish uchun javobgardir. Xotira maydoni faol (active) va faol bo'lmagan (inactive) qismlarga bo'linadi, yangi obyektlar faol qismga o'tkaziladi. Faol qismi to'lganida, tirik obyektlar faol bo'lmagan yarmiga o'tkaziladi. Chiqindilarni yig'ish obyektning holatini (alive yoki dead) eng pastdagi (root) obyektlaridan boshlab havolalarni tekshirish orqali aniqlaydi.
Eski avlod (parallel mark and sweep collectors).
Parallel belgilash (marking) obyekt grafigini aylanib o'tish orqali xotiradagi foydalanilayotgan obyektlarni aniqlaydi va bir vaqtning o'zida ishlatilmayotgan obyektlarni o'chiradi. O'chirilgan obyektlar keyingi axlat yig'ish jarayonida qayta ishlash (recycling) uchun xotira hovuziga (Heap)-ga qaytariladi.
GC ishga tushish vaqti.
Chiqindilarni yig'ish ishi User ilova bilan interaksiya bo'lmaganda tegishli vaqtlarda ishga tushadi. Axlat yig'uvchi tomonidan taqdim etilgan ilgaklar (hooks) Flutter engine-ga ilova ishlamayotganida yoki User bilan hech qanday interaksiya bo'lmaganda uni xabardor qilish imkonini beradi.
Manbalar:
1. Medium: Link
2. Medium: Link
3. Linkedin: Link
#Dart
Dartning axlat yig'uvchisi (GC) Dart Runtime ichida joylashgan va Dart dasturlash tilining muhim komponenti bo'lib, xotirani avtomatik va samarali boshqarish uchun mo'ljallangan.
Dart, xotirani ikkita asosiy avlod (generation)-ga ajratadigan avlod axlat yig'ish strategiyasidan foydalanadi:
Yangi avlod (young space scavenger).
Ushbu komponent qisqa muddatli obyektlar bilan bog'liq xotirani bo'shatish uchun javobgardir. Xotira maydoni faol (active) va faol bo'lmagan (inactive) qismlarga bo'linadi, yangi obyektlar faol qismga o'tkaziladi. Faol qismi to'lganida, tirik obyektlar faol bo'lmagan yarmiga o'tkaziladi. Chiqindilarni yig'ish obyektning holatini (alive yoki dead) eng pastdagi (root) obyektlaridan boshlab havolalarni tekshirish orqali aniqlaydi.
Eski avlod (parallel mark and sweep collectors).
Parallel belgilash (marking) obyekt grafigini aylanib o'tish orqali xotiradagi foydalanilayotgan obyektlarni aniqlaydi va bir vaqtning o'zida ishlatilmayotgan obyektlarni o'chiradi. O'chirilgan obyektlar keyingi axlat yig'ish jarayonida qayta ishlash (recycling) uchun xotira hovuziga (Heap)-ga qaytariladi.
GC ishga tushish vaqti.
Chiqindilarni yig'ish ishi User ilova bilan interaksiya bo'lmaganda tegishli vaqtlarda ishga tushadi. Axlat yig'uvchi tomonidan taqdim etilgan ilgaklar (hooks) Flutter engine-ga ilova ishlamayotganida yoki User bilan hech qanday interaksiya bo'lmaganda uni xabardor qilish imkonini beradi.
Manbalar:
1. Medium: Link
2. Medium: Link
3. Linkedin: Link
#Dart
Does your work environment suck? Is your job boring? Try to fix it. But don't try forever. As Martin Fowler says, "you can change your organization or change your organization".
from book "The Pragmatic Programmer".
from book "The Pragmatic Programmer".
Bilim portfelingizni boyitishning eng yaxshi yo'li qanday? Mana bir nechta takliflar:
Har yili kamida bitta yangi tilni o'rganing.
Turli tillar bir xil muammolarni turli yo'llar bilan hal qiladi. Bir nechta turli xil yondashuvlarni o'rganish orqali siz fikringizni kengaytirishga yordam bera olasiz va muammoda qotib qolmaslikka yordam beradi.
Har oy bitta texnik kitob o'qing.
Internetda qisqa shakldagi insholar va vaqti-vaqti bilan ishonchli javoblar ko'p bo'lsada, chuqur tushunish uchun sizga uzun shakldagi kitoblar kerak bo'ladi. Hozirgi loyihangiz bilan bog'liq qiziqarli mavzular bo'yicha texnik kitoblarni ko'rib chiqing. Buni odatga aylantiring. Hozirda foydalanayotgan texnologiyalarni o‘zlashtirganingizdan so‘ng, loyihangizga aloqador bo‘lmagan ayrimlarini ajratib oling va o‘rganing. Texnik bo'lmagan kitoblarni ham o'qing.
Shuni yodda tutish kerakki, kompyuterlardan siz, ehtiyojlarini qondirishga harakat qilayotgan odamlar foydalanadi. Siz odamlar bilan ishlaysiz, odamlar qo'lida ishlayapsiz va odamlar tomonidan "hack" qilinasiz. Tenglamaning insoniy tomonini unutmang, chunki bu mutlaqo boshqa mahorat to'plamini talab qiladi (biz buni istehzo bilan yumshoq ko'nikmalar (soft skills) deb ataymiz, lekin ularni o'zlashtirish juda qiyin).
Kurslarni oling.
Oflayn yoki onlayn, kollej yoki universitetda yoki yaqin atrofdagi ko'rgazma yoki konferentsiyada qiziqarli kurslarni qidiring.
Mahalliy guruhlar va uchrashuvlarda ishtirok eting. (Devfest etc).
Izolyatsiyalanish sizning karyerangiz uchun halokatli bo'lishi mumkin, kompaniyangizdan tashqarida odamlar nima ustida ishlayotganini bilib turing. Shunchaki borib tinglamang, faol ishtirok eting.
Turli muhitlar bilan tajriba qiling.
Agar siz faqat Windows-da ishlagan bo'lsangiz, Linux bilan biroz vaqt o'tkazing.
Yangiliklardan bohabar bo'ling.
Joriy loyihangizdan farqli texnologiya bo'yicha yangiliklar va postlarni onlayn o'qing. Bu boshqa odamlar u bilan qanday tajribalarni boshdan kechirayotganini, ular ishlatadigan jargonni va hokazolarni bilishning ajoyib usuli.
Sarmoya kiritishni davom ettirish muhim. Biroz yangi til yoki texnologiya bilan o'zingizni qulay his qilsangiz, davom eting. Boshqasini o'rganing.
Ushbu texnologiyalardan biron bir loyihada foydalanasizmi yoki hatto ularni rezyume-ingizga kiritasizmi, muhim emas. O'rganish jarayoni sizning fikringizni kengaytiradi, sizga yangi imkoniyatlar va narsalarni qilishning yangi usullarini ochib beradi. O'rgangan saboqlaringizni joriy loyihangizga qo'llashga harakat qiling. Loyihangiz ushbu texnologiyadan foydalanmasa ham, ehtimol siz ba'zi g'oyalarni qarzga olishingiz mumkin.
"The Pragmatic Programmer" kitobidan.
Har yili kamida bitta yangi tilni o'rganing.
Turli tillar bir xil muammolarni turli yo'llar bilan hal qiladi. Bir nechta turli xil yondashuvlarni o'rganish orqali siz fikringizni kengaytirishga yordam bera olasiz va muammoda qotib qolmaslikka yordam beradi.
Har oy bitta texnik kitob o'qing.
Internetda qisqa shakldagi insholar va vaqti-vaqti bilan ishonchli javoblar ko'p bo'lsada, chuqur tushunish uchun sizga uzun shakldagi kitoblar kerak bo'ladi. Hozirgi loyihangiz bilan bog'liq qiziqarli mavzular bo'yicha texnik kitoblarni ko'rib chiqing. Buni odatga aylantiring. Hozirda foydalanayotgan texnologiyalarni o‘zlashtirganingizdan so‘ng, loyihangizga aloqador bo‘lmagan ayrimlarini ajratib oling va o‘rganing. Texnik bo'lmagan kitoblarni ham o'qing.
Shuni yodda tutish kerakki, kompyuterlardan siz, ehtiyojlarini qondirishga harakat qilayotgan odamlar foydalanadi. Siz odamlar bilan ishlaysiz, odamlar qo'lida ishlayapsiz va odamlar tomonidan "hack" qilinasiz. Tenglamaning insoniy tomonini unutmang, chunki bu mutlaqo boshqa mahorat to'plamini talab qiladi (biz buni istehzo bilan yumshoq ko'nikmalar (soft skills) deb ataymiz, lekin ularni o'zlashtirish juda qiyin).
Kurslarni oling.
Oflayn yoki onlayn, kollej yoki universitetda yoki yaqin atrofdagi ko'rgazma yoki konferentsiyada qiziqarli kurslarni qidiring.
Mahalliy guruhlar va uchrashuvlarda ishtirok eting. (Devfest etc).
Izolyatsiyalanish sizning karyerangiz uchun halokatli bo'lishi mumkin, kompaniyangizdan tashqarida odamlar nima ustida ishlayotganini bilib turing. Shunchaki borib tinglamang, faol ishtirok eting.
Turli muhitlar bilan tajriba qiling.
Agar siz faqat Windows-da ishlagan bo'lsangiz, Linux bilan biroz vaqt o'tkazing.
Yangiliklardan bohabar bo'ling.
Joriy loyihangizdan farqli texnologiya bo'yicha yangiliklar va postlarni onlayn o'qing. Bu boshqa odamlar u bilan qanday tajribalarni boshdan kechirayotganini, ular ishlatadigan jargonni va hokazolarni bilishning ajoyib usuli.
Sarmoya kiritishni davom ettirish muhim. Biroz yangi til yoki texnologiya bilan o'zingizni qulay his qilsangiz, davom eting. Boshqasini o'rganing.
Ushbu texnologiyalardan biron bir loyihada foydalanasizmi yoki hatto ularni rezyume-ingizga kiritasizmi, muhim emas. O'rganish jarayoni sizning fikringizni kengaytiradi, sizga yangi imkoniyatlar va narsalarni qilishning yangi usullarini ochib beradi. O'rgangan saboqlaringizni joriy loyihangizga qo'llashga harakat qiling. Loyihangiz ushbu texnologiyadan foydalanmasa ham, ehtimol siz ba'zi g'oyalarni qarzga olishingiz mumkin.
"The Pragmatic Programmer" kitobidan.
Flutterda "debugInvertOversizedImages" haqida.
Agar true qiymat berilsa, framework keragidan koʻproq oladigan oʻlchamga dekodlangan tasvirlarni rangini oʻzgartiradi va gorizontal ravishda aylantiradi.
Undan tashqari u FlutterError.reportError-ga tasvirning dekodlangan o'lchami va displey o'lchami haqidagi ma'lumotni log-da ko'rsatadi.
Manbalar:
1. Official doc : Link
2. Medium : Link
3. Medium : Link
4. Article : Link
#Flutter
Agar true qiymat berilsa, framework keragidan koʻproq oladigan oʻlchamga dekodlangan tasvirlarni rangini oʻzgartiradi va gorizontal ravishda aylantiradi.
Undan tashqari u FlutterError.reportError-ga tasvirning dekodlangan o'lchami va displey o'lchami haqidagi ma'lumotni log-da ko'rsatadi.
Manbalar:
1. Official doc : Link
2. Medium : Link
3. Medium : Link
4. Article : Link
#Flutter
Haftada bir kun "AI-siz kun" qilish yaxshi fikr, manimcha.
Telegram
Botir Ziyatov
AI mani savodsiz dasturchi qilib qo'ydi
Endi dokumentlarni o'qimayman. AI hamma narsani tezda tushuntira olsa, nega o'qishga ovora bo'lish kerak?
Xatoliklarni tuzatish ko'nikmalarim susayib bormoqda. Bazida xato xabarlarini ham o'qimayman, ularni shunchaki…
Endi dokumentlarni o'qimayman. AI hamma narsani tezda tushuntira olsa, nega o'qishga ovora bo'lish kerak?
Xatoliklarni tuzatish ko'nikmalarim susayib bormoqda. Bazida xato xabarlarini ham o'qimayman, ularni shunchaki…
Dartda "covariant" haqida.
covariant - bu Dart 2.12 versiyada qo'shilgan, vorislik (inheritance) irarxiyasida xavfsiz tarzda kengaytirilishi mumkin bo'lgan tur (type) parametrni belgilash uchun ishlatiladigan kalit so'z. Boshqacha qilib aytadigan bo'lsak, u bola sinfiga, tur tizimi (type system)-da hech qanday muammo tug'dirmasdan, ota sinfda ishlatilganidan ko'ra aniqroq turdan foydalanishga imkon beradi.
Faraz qilaylik, bizda "Animal" deb nomlangan ota sinf bor, unda "Food" turidagi parametrni qabul qiluvchi "eat" deb nomlangan metod mavjud. Shuningdek, bizda "Cat" deb nomlangan bola sinfi bor, u Animal-dan voris oladi. Aytaylik, biz faqat "Fish"-ni parametr sifatida qabul qilish uchun Cat-dagi "eat" metodini qayta yozmoqchimiz, chunki mushuklar faqat baliq iste'mol qiladilar. Bu yerda covariant yordamga keladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link
4. Article: Link
#Dart
covariant - bu Dart 2.12 versiyada qo'shilgan, vorislik (inheritance) irarxiyasida xavfsiz tarzda kengaytirilishi mumkin bo'lgan tur (type) parametrni belgilash uchun ishlatiladigan kalit so'z. Boshqacha qilib aytadigan bo'lsak, u bola sinfiga, tur tizimi (type system)-da hech qanday muammo tug'dirmasdan, ota sinfda ishlatilganidan ko'ra aniqroq turdan foydalanishga imkon beradi.
Faraz qilaylik, bizda "Animal" deb nomlangan ota sinf bor, unda "Food" turidagi parametrni qabul qiluvchi "eat" deb nomlangan metod mavjud. Shuningdek, bizda "Cat" deb nomlangan bola sinfi bor, u Animal-dan voris oladi. Aytaylik, biz faqat "Fish"-ni parametr sifatida qabul qilish uchun Cat-dagi "eat" metodini qayta yozmoqchimiz, chunki mushuklar faqat baliq iste'mol qiladilar. Bu yerda covariant yordamga keladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link
4. Article: Link
#Dart
Forwarded from Flutter Uzbek | Mobil dasturlash (Abbos Bobomurodov)
Bug va Debugging.
Injeneriyada "Bug" termini 1870 yillar boshlarida ishlatilish boshlangan lekin 1947 yilda Amerikalik kompyuter va matematik olim Grace Hopper tomonidan Mark-2 kompyuteridan hashorat (bug)-ni topgan va uni jurnalga yopishtirib qo'ygan. Hozirda u Vashingtondagi Smitsonian milliy Amerika tarixi muzeyida saqlanadi.
Afsuski, bizning tizimimizda uchadigan turdagi bo'lmasa-da, hali ham xatolar mavjud. Zamonaviy kompyuter tizimlari hali ham siz xohlagan narsani emas, balki siz buyurgan narsalarni bajarish bilan chegaralangan. Hech kim mukammal dasturiy ta'minotni yozmaydi, shuning uchun debugging kuningizning katta qismini egallashi hisobga olinadi.
Nosozliklarni tuzatish ko'plab dasturchilar uchun nozik va hissiy mavzudir. Bunga hal qilinishi kerak bo'lgan jumboq sifatida qarash o'rniga, siz rad etish, bahonalarni yog'dirish yoki oddiy befarqlikka duch kelishingiz mumkin. Nosozliklarni tuzatish shunchaki muammoni hal qilish ekanligini qabul qiling va unga kirishing.
Birovning xatosini topib, uni yaratgan aybdorni ayblash uchun vaqt va kuch sarflashingiz mumkin. Ba'zi ish joylarida bu madaniyatning bir qismidir va katartik bo'lishi mumkin. Biroq, texnik sohada siz aybni emas, balki muammoni hal qilishga e'tibor qaratmoqchisiz, shundaymi ?
Aybni emas, muammoni hal qiling.
Xato sizning aybingizmi yoki boshqa birovnikimi, buning ahamiyati yo'q. Bu hali ham sizning muammoyingiz.
Tafakkurni tuzatish (debugging mindset).
Nosozliklarni tuzatishni boshlashdan oldin, to'g'ri fikrlashni qabul qilish muhimdir. Siz o'z egoyingizni himoya qilish uchun har kuni foydalanadigan ko'plab himoya vositalarini o'chirib qo'yishingiz kerak. Avvalo, debugging-ning birinchi qoidasini eslang:
Vahimaga tushmang (don't panic).
Vahimga uchrash oson, ayniqsa, agar belgilangan muddat yaqinlashgan bo'lsa yoki xato sababini topishga harakat qilayotganingizda asabiy xo'jayin yoki mijoz tepangizda turgan bo'lsa. Aslida xatoni ko'rsatadigan alomatlarga nima sabab bo'lishi mumkinligi haqida o'ylash kerak.
Agar xatoga guvoh bo'lganingizda yoki xatolik hisobotini ko'rganingizda birinchi munosabatingiz "bu bo'lishi mumkin emas" bo'lsa, siz ochiqchasiga adashasiz. Bunday deb boshlanadigan fikr poyezdiga bitta neyronni ham behuda sarflamang, chunki u bo'lishi aniq.
Qayerdan boshlash kerak.
Xatoni ko'rishni boshlashdan oldin, toza tuzilgan kod ustida ishlayotganingizga ishonch hosil qiling. Biz muntazam ravishda kompilyatorning ogohlantirish darajasi (compiler warning level)-ni iloji boricha yuqori o'rnatamiz. Kompyuter siz uchun topa oladigan muammoni topishga vaqt sarflashning ma'nosi yo'q! Biz oldimizda turgan qiyinroq muammolarga e'tibor qaratishimiz kerak.
"The Pragmatic Programmer" kitobidan.
Injeneriyada "Bug" termini 1870 yillar boshlarida ishlatilish boshlangan lekin 1947 yilda Amerikalik kompyuter va matematik olim Grace Hopper tomonidan Mark-2 kompyuteridan hashorat (bug)-ni topgan va uni jurnalga yopishtirib qo'ygan. Hozirda u Vashingtondagi Smitsonian milliy Amerika tarixi muzeyida saqlanadi.
Afsuski, bizning tizimimizda uchadigan turdagi bo'lmasa-da, hali ham xatolar mavjud. Zamonaviy kompyuter tizimlari hali ham siz xohlagan narsani emas, balki siz buyurgan narsalarni bajarish bilan chegaralangan. Hech kim mukammal dasturiy ta'minotni yozmaydi, shuning uchun debugging kuningizning katta qismini egallashi hisobga olinadi.
Nosozliklarni tuzatish ko'plab dasturchilar uchun nozik va hissiy mavzudir. Bunga hal qilinishi kerak bo'lgan jumboq sifatida qarash o'rniga, siz rad etish, bahonalarni yog'dirish yoki oddiy befarqlikka duch kelishingiz mumkin. Nosozliklarni tuzatish shunchaki muammoni hal qilish ekanligini qabul qiling va unga kirishing.
Birovning xatosini topib, uni yaratgan aybdorni ayblash uchun vaqt va kuch sarflashingiz mumkin. Ba'zi ish joylarida bu madaniyatning bir qismidir va katartik bo'lishi mumkin. Biroq, texnik sohada siz aybni emas, balki muammoni hal qilishga e'tibor qaratmoqchisiz, shundaymi ?
Aybni emas, muammoni hal qiling.
Xato sizning aybingizmi yoki boshqa birovnikimi, buning ahamiyati yo'q. Bu hali ham sizning muammoyingiz.
Tafakkurni tuzatish (debugging mindset).
Nosozliklarni tuzatishni boshlashdan oldin, to'g'ri fikrlashni qabul qilish muhimdir. Siz o'z egoyingizni himoya qilish uchun har kuni foydalanadigan ko'plab himoya vositalarini o'chirib qo'yishingiz kerak. Avvalo, debugging-ning birinchi qoidasini eslang:
Vahimaga tushmang (don't panic).
Vahimga uchrash oson, ayniqsa, agar belgilangan muddat yaqinlashgan bo'lsa yoki xato sababini topishga harakat qilayotganingizda asabiy xo'jayin yoki mijoz tepangizda turgan bo'lsa. Aslida xatoni ko'rsatadigan alomatlarga nima sabab bo'lishi mumkinligi haqida o'ylash kerak.
Agar xatoga guvoh bo'lganingizda yoki xatolik hisobotini ko'rganingizda birinchi munosabatingiz "bu bo'lishi mumkin emas" bo'lsa, siz ochiqchasiga adashasiz. Bunday deb boshlanadigan fikr poyezdiga bitta neyronni ham behuda sarflamang, chunki u bo'lishi aniq.
Qayerdan boshlash kerak.
Xatoni ko'rishni boshlashdan oldin, toza tuzilgan kod ustida ishlayotganingizga ishonch hosil qiling. Biz muntazam ravishda kompilyatorning ogohlantirish darajasi (compiler warning level)-ni iloji boricha yuqori o'rnatamiz. Kompyuter siz uchun topa oladigan muammoni topishga vaqt sarflashning ma'nosi yo'q! Biz oldimizda turgan qiyinroq muammolarga e'tibor qaratishimiz kerak.
"The Pragmatic Programmer" kitobidan.
Flutterda RichText() va Text.rich() farqlari.
Text.rich()
Text vidjetning bu konstruktori matn uchun qulay bo'lib, bu yordamida bir nechta uslublar (styles) bilan matn vidjetini yaratish imkonini beradi. Argument sifatida u "TextSpan" qabul qiladi, unda har biri o'z uslubiga ega bo'lgan bir nechta kichik TextSpan obyektlarini o'z ichiga olishi mumkin va foydalanish uchun qulay.
RichText()
Bu vidjet murakkab matn layout-larni yaratishga imkon beruvchi vidjet. Matn va uning uslublarini belgilash uchun u TextSpan obyektlari daraxti (object tree)-dan foydalanadi. Har bir TextSpan o'z uslubiga ega bo'lishi va ularni murakkab matn dizaynlarini yaratish uchun joylashtirish mumkin.
Bu ikki vidjet ishlashidagi bazi farqlari haqida ham bilib qo'yish lozim.
Qo'shimcha manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
#Flutter
Text.rich()
Text vidjetning bu konstruktori matn uchun qulay bo'lib, bu yordamida bir nechta uslublar (styles) bilan matn vidjetini yaratish imkonini beradi. Argument sifatida u "TextSpan" qabul qiladi, unda har biri o'z uslubiga ega bo'lgan bir nechta kichik TextSpan obyektlarini o'z ichiga olishi mumkin va foydalanish uchun qulay.
RichText()
Bu vidjet murakkab matn layout-larni yaratishga imkon beruvchi vidjet. Matn va uning uslublarini belgilash uchun u TextSpan obyektlari daraxti (object tree)-dan foydalanadi. Har bir TextSpan o'z uslubiga ega bo'lishi va ularni murakkab matn dizaynlarini yaratish uchun joylashtirish mumkin.
Bu ikki vidjet ishlashidagi bazi farqlari haqida ham bilib qo'yish lozim.
Qo'shimcha manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
#Flutter