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
👍2
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…
💯4😁2
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
👍2
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.
👍2⚡1✍1🎉1
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
👍2
Forwarded from Flutter For Dev - новости, статьи, дизайн.
Flutter 2025 roadmap update: Команда Flutter подготовила обновленный roadmap по Flutter за 2025 год.
https://medium.com/flutter/flutter-2025-roadmap-f127882b117f
https://medium.com/flutter/flutter-2025-roadmap-f127882b117f
👍1
Flutterda Overlay va OverlayEntry vidjetlari.
Overlay.
Bu vidjet mustaqil ravishda boshqarilishi mumkin bo'lgan kiruvchilar (entries) to'plami. Overlay mustaqil bola vidjetlariga vizual elementlarni, boshqa vidjetlar ustiga qo‘yish orqali ularga suzish (float) imkonini beradi. Overlay ushbu vidjetlarning har biriga OverlayEntry obyektlari yordamida overlay-dagi ishtirokini boshqarish imkonini beradi.
Overlay vidjeti maxsus (custom) Stack-dan foydalanadi. Overlay-dan foydalanishning asosiy holati navigatsiya va ilovadagi sahifalarning yuqori qismiga vidjetlarni qo'shish imkoniyati bilan bog'liq.
OverlayEntry.
bu vidjet, vidjetni o'z ichiga olishi mumkin bo'lgan Overlay-dagi joy. Overlay kiruvchilari OverlayState.insert yoki OverlayState.insertAll funksiyalari yordamida Overlay-ga kiritiladi.
Overlay kiruvchisi bir vaqtning o'zida ko'pi bilan bitta overlay-da bo'lishi mumkin. Overlay Stack-dan foydalanganligi sababli, overlay kiruvchilar o'zlarini overlay ichida joylashtirish uchun Positioned va AnimatedPositioned-dan foydalanishi mumkin.
Qo'shimcha manbalar:
1. Article: Link
2. Medium: Link
#Flutter
Overlay.
Bu vidjet mustaqil ravishda boshqarilishi mumkin bo'lgan kiruvchilar (entries) to'plami. Overlay mustaqil bola vidjetlariga vizual elementlarni, boshqa vidjetlar ustiga qo‘yish orqali ularga suzish (float) imkonini beradi. Overlay ushbu vidjetlarning har biriga OverlayEntry obyektlari yordamida overlay-dagi ishtirokini boshqarish imkonini beradi.
Overlay vidjeti maxsus (custom) Stack-dan foydalanadi. Overlay-dan foydalanishning asosiy holati navigatsiya va ilovadagi sahifalarning yuqori qismiga vidjetlarni qo'shish imkoniyati bilan bog'liq.
OverlayEntry.
bu vidjet, vidjetni o'z ichiga olishi mumkin bo'lgan Overlay-dagi joy. Overlay kiruvchilari OverlayState.insert yoki OverlayState.insertAll funksiyalari yordamida Overlay-ga kiritiladi.
Overlay kiruvchisi bir vaqtning o'zida ko'pi bilan bitta overlay-da bo'lishi mumkin. Overlay Stack-dan foydalanganligi sababli, overlay kiruvchilar o'zlarini overlay ichida joylashtirish uchun Positioned va AnimatedPositioned-dan foydalanishi mumkin.
Qo'shimcha manbalar:
1. Article: Link
2. Medium: Link
#Flutter
👍1
HarmonyOS haqida.
HarmonyOS 4 ta asosiy qatlam (layer)-dan iborat murakkab qatlamli arxitekturadan foydalanadi:
Yadro qatlami (Kernel layer): jarayonlar (processes) va xotira kabi asosiy funksiyalarni boshqaradigan poydevorni tashkil qiladi.
Tizim xizmati qatlami (System service layer): Tarmoq va xavfsizlikni o'z ichiga olgan muhim xizmatlarni boshqaradi.
Framework Layer: Rivojlanish vositalari (development tools) va funksiyalarini taqdim etadi.
Ilova qatlami (App layer): foydalanuvchiga qaratilgan ilovalarni joylashtiradi.
Tizim mikro-kernel arxitekturasidan foydalanadi, u samaradorlik va barqarorlikni oshirish uchun minimal asosiy funksionallikni saqlaydi.
HarmonyOS bir nechta dasturlash tillarini qo'llab-quvvatlaydi:
ArkTS: HarmonyOS Next uchun asosiy til, TypeScript-ning maxsus versiyasi.
JavaScript: HarmonyOS-ga o'tayotgan veb dasturchilar uchun.
C/C++: Tizim darajasida dasturlash uchun.
Java: mavjud Java dasturchilarini qo'llab-quvvatlash uchun.
DevEco Studio: JetBrains platformasiga asoslangan HarmonyOSni ishlab chiqish uchun asosiy IDE.
Bir nechta dasturlash tillarini qo'llab-quvvatlaydigan keng qamrovli SDK, keng qamrovli hujjatlar (docs) va dasturchilar uchun qo'llanmalar, faol dasturchilar hamjamiyati va Huawei Developer Alliance orqali yordam mavjud.
HarmonyOS turli xil qurilmalar (Smartfon, Planshet, Smart TV, watch, PC, laptop, IoT etc) toifalarida sezilarli o'zlashtirishga erishdi. 2025 yil boshida HarmonyOS bilan ishlaydigan 1 milliarddan ortiq qurilmalar, 20 mingdan ortiq ilovalar mavjud.
HarmonyOS 4 ta asosiy qatlam (layer)-dan iborat murakkab qatlamli arxitekturadan foydalanadi:
Yadro qatlami (Kernel layer): jarayonlar (processes) va xotira kabi asosiy funksiyalarni boshqaradigan poydevorni tashkil qiladi.
Tizim xizmati qatlami (System service layer): Tarmoq va xavfsizlikni o'z ichiga olgan muhim xizmatlarni boshqaradi.
Framework Layer: Rivojlanish vositalari (development tools) va funksiyalarini taqdim etadi.
Ilova qatlami (App layer): foydalanuvchiga qaratilgan ilovalarni joylashtiradi.
Tizim mikro-kernel arxitekturasidan foydalanadi, u samaradorlik va barqarorlikni oshirish uchun minimal asosiy funksionallikni saqlaydi.
HarmonyOS bir nechta dasturlash tillarini qo'llab-quvvatlaydi:
ArkTS: HarmonyOS Next uchun asosiy til, TypeScript-ning maxsus versiyasi.
JavaScript: HarmonyOS-ga o'tayotgan veb dasturchilar uchun.
C/C++: Tizim darajasida dasturlash uchun.
Java: mavjud Java dasturchilarini qo'llab-quvvatlash uchun.
DevEco Studio: JetBrains platformasiga asoslangan HarmonyOSni ishlab chiqish uchun asosiy IDE.
Bir nechta dasturlash tillarini qo'llab-quvvatlaydigan keng qamrovli SDK, keng qamrovli hujjatlar (docs) va dasturchilar uchun qo'llanmalar, faol dasturchilar hamjamiyati va Huawei Developer Alliance orqali yordam mavjud.
HarmonyOS turli xil qurilmalar (Smartfon, Planshet, Smart TV, watch, PC, laptop, IoT etc) toifalarida sezilarli o'zlashtirishga erishdi. 2025 yil boshida HarmonyOS bilan ishlaydigan 1 milliarddan ortiq qurilmalar, 20 mingdan ortiq ilovalar mavjud.
Dartda generator funksiya kalit so'zlari.
async.
Bu kalit so'zi funksiyani asinxron deb belgilash uchun ishlatiladi va Future obyektini qaytaradi.
async*.
Bu kalit so'zi Stream-ni qaytaradigan asinxron generator funksiyasini yaratish uchun ishlatiladi. Bu bitta natija emas, balki vaqt o'tishi bilan asinxron natijalar ketma-ketligini yaratmoqchi bo'lganingizda foydalidir.
sync*.
Bu kalit so'zi Iterable qiymatlarini qaytaradigan sinxron generator funksiyasi uchun ishlatiladi.
yield.
Bu kalit so'zi, async* va sync* funksiyalarida, funksiyani chaqiruvchi (caller)-ga bitta qiymatni chiqarish (emit) uchun qo'llaniladi.
yield*.
Bu kalit so'zi qiymatlarni boshqa generatorga (async* yoki sync*) topshirish uchun ishlatiladi.
Qo'shimcha manbalar:
1. Medium : Link
2. Medium : Link
3. Medium : Link
4. GFG : Link
#Flutter
async.
Bu kalit so'zi funksiyani asinxron deb belgilash uchun ishlatiladi va Future obyektini qaytaradi.
async*.
Bu kalit so'zi Stream-ni qaytaradigan asinxron generator funksiyasini yaratish uchun ishlatiladi. Bu bitta natija emas, balki vaqt o'tishi bilan asinxron natijalar ketma-ketligini yaratmoqchi bo'lganingizda foydalidir.
sync*.
Bu kalit so'zi Iterable qiymatlarini qaytaradigan sinxron generator funksiyasi uchun ishlatiladi.
yield.
Bu kalit so'zi, async* va sync* funksiyalarida, funksiyani chaqiruvchi (caller)-ga bitta qiymatni chiqarish (emit) uchun qo'llaniladi.
yield*.
Bu kalit so'zi qiymatlarni boshqa generatorga (async* yoki sync*) topshirish uchun ishlatiladi.
Qo'shimcha manbalar:
1. Medium : Link
2. Medium : Link
3. Medium : Link
4. GFG : Link
#Flutter
Yuqoridagi ikki funksiyaning farqlari :
getData.
Qaytaruvchi qiymati sifatida void belgilangan bo'lsa ham, ichki holatda Future obyektini qaytaradi. Xatoliklar (errors)-ni ushlash qiyin va qiymat qaytishini kutib turish uchun await kalit so'zini ishlatib bo'lmaydi. Asosan event handler va UI callback uchun va operatsiya tugallanishini kutishni istamaganimizda ishlatamiz.
getData2.
Qaytaruvchi qiymati aniq belgilangan. Xatolik va qiymatni qabul qilish oson (catchError, then, whenComplete etc). Jiddiy operatsiyalar uchun yaxshi (Networking, file IO etc).
Manbalar:
1. Official doc : Link
2. Medium : Link
#Flutter
getData.
Qaytaruvchi qiymati sifatida void belgilangan bo'lsa ham, ichki holatda Future obyektini qaytaradi. Xatoliklar (errors)-ni ushlash qiyin va qiymat qaytishini kutib turish uchun await kalit so'zini ishlatib bo'lmaydi. Asosan event handler va UI callback uchun va operatsiya tugallanishini kutishni istamaganimizda ishlatamiz.
getData2.
Qaytaruvchi qiymati aniq belgilangan. Xatolik va qiymatni qabul qilish oson (catchError, then, whenComplete etc). Jiddiy operatsiyalar uchun yaxshi (Networking, file IO etc).
Manbalar:
1. Official doc : Link
2. Medium : Link
#Flutter
👍1
Dart FFI haqida.
FFI (Foreign Function Interface) - bu Dart kodi va C/C++ kutubxonalari o'rtasidagi ko'prik vazifasini bajaradi, yani Dartdan turib nativ C kodlariga murojaat qilish, mavjud kutubxonalarni integratsiya qilish va nativ xotira bilan ishlash imkonini beradi.
Asosiy funksionalliklari.
1. Nativ C/C++ funksiyalarini to'g'ridan-to'g'ri Dart kodidan chaqirish imkonini beradi.
2. Nativ ma'lumotlar tuzilmalari (structure) va turlari (types)-ga kirishni ta'minlaydi.
3. Nativ kutubxonalarning dinamik va statik ulanishini qo'llab-quvvatlaydi.
4. Android, iOS, Windows, macOS va Linux kabi bir nechta platformalar va IoT dasturlarida ishlaydi. Veb-ilovalar FFI o'rniga JavaScript interop-dan foydalanadi.
5. Nativ kod orqali yuqori unumli hisob-kitoblarni amalga oshiradi.
6. Codec, image processing va kriptografiya kabi operatsiyalar uchun ideal yechim.
7. Katta turdagi API-lar uchun avtomatik ulanishlarni ffigen paketi orqali amalga oshirish mumkin.
Qo'shimcha manbalar:
1. Article : Link
2. Codelab : Link
3. Video : Link
#Flutter
FFI (Foreign Function Interface) - bu Dart kodi va C/C++ kutubxonalari o'rtasidagi ko'prik vazifasini bajaradi, yani Dartdan turib nativ C kodlariga murojaat qilish, mavjud kutubxonalarni integratsiya qilish va nativ xotira bilan ishlash imkonini beradi.
Asosiy funksionalliklari.
1. Nativ C/C++ funksiyalarini to'g'ridan-to'g'ri Dart kodidan chaqirish imkonini beradi.
2. Nativ ma'lumotlar tuzilmalari (structure) va turlari (types)-ga kirishni ta'minlaydi.
3. Nativ kutubxonalarning dinamik va statik ulanishini qo'llab-quvvatlaydi.
4. Android, iOS, Windows, macOS va Linux kabi bir nechta platformalar va IoT dasturlarida ishlaydi. Veb-ilovalar FFI o'rniga JavaScript interop-dan foydalanadi.
5. Nativ kod orqali yuqori unumli hisob-kitoblarni amalga oshiradi.
6. Codec, image processing va kriptografiya kabi operatsiyalar uchun ideal yechim.
7. Katta turdagi API-lar uchun avtomatik ulanishlarni ffigen paketi orqali amalga oshirish mumkin.
Qo'shimcha manbalar:
1. Article : Link
2. Codelab : Link
3. Video : Link
#Flutter
Forwarded from Janob Panda
Musiqa tinglab kod yozish
Bugun sizlarga dasturchilar uchun tanish bo'lgan holat - musiqa tinglab ish qilish haqida aytib bermoqchiman.
E'tibordan chetda qolgan, ammo judayam muhim mavzu hisoblanadi. Chunki, bu jarayonni noto’g’ri yo’lga qo’yish ish samaradorligiga yaxshigina ta’sir qilishi mumkin. Ba'zilar shunchaki jim-jitlikda kod yozishni xohlaydi, ba'zilar esa musiqa sadosi ostida. Musiqa va dasturlashni yaqindan tushungan inson sifatida bu mavzuga chuqurroq kirib ko'rdim. Bu post esa aynan musiqa tinglab ish qiluvchilar uchun.
Maqsadingiz ishingizga fokus qilib, miyangizni bir joyga qo'yish, to'g'rimi? Demak, siz aqlingizni chalg'itadigan kuylardan, ovozlardan qochishingiz kerak. Ayniqsa, loyihaning mantiqiy qismlarida ishlayotganingizda.
1. Qo'shiq tinglamang. Sababi, qo'shiqda so'zlar, ma'no bo'ladi. So'z bo'lgan joyda miya ishlaydi, uni tushunishga harakat qiladi. Bu esa miyangizni bir qismi qo'shiqqa qaratilishini bildiradi.
2. Ma'no musiqada ham bo'lishi mumkin. Matni bo'lmasa ham ma'no bo'lishi mumkinmi degan savol tug'iladi. Ha, albatta. Shunday musiqalar borki, ularda ma'no to'la, huddi o'zining tilida nimalardir degandek bo'ladi. Bu turdagi musiqalardan domlalar o'z maruzalarida yoki mazmunli suhbatlar, she'rlar ostida foydalanishadi. Bu turdagi musiqalarni tinglaganingizda miyangiz ishlaydi, xotiralarni eslatishi mumkin.
Namuna:
- https://www.youtube.com/watch?v=9vIcR9BvS1U
- http://youtube.com/watch?v=k0VcX4BvOrc&t=65s
- https://www.youtube.com/watch?v=xFdm-IDvaDU
3. Ma'nosiz musiqalar siz uchun yaxshiroq. Bir xil tempda, tebranishda davom etadigan musiqalar sizga yordam bera oladi. Bu huddi, soatning chiqqillashiga o'xshaydi. Nafaqat musiqa, bir xil tebranishga ega bo'lgan istalgan jarayon miyaga yoqimli bo'ladi. Bolalarni uxlatishda beshikning tebranishi yordam bergani kabi.
Namuna:
- https://www.youtube.com/watch?v=M5QY2_8704o
- https://www.youtube.com/watch?v=mhNg55_IYiw
- https://www.youtube.com/watch?v=-sZqtdT-GVw
Ba'zida ma'nosiz narsalar ma’noli narsalarni tug’ilishiga hizmat qiladi.
@mukhammadkarim_tukhtaboev
Bugun sizlarga dasturchilar uchun tanish bo'lgan holat - musiqa tinglab ish qilish haqida aytib bermoqchiman.
E'tibordan chetda qolgan, ammo judayam muhim mavzu hisoblanadi. Chunki, bu jarayonni noto’g’ri yo’lga qo’yish ish samaradorligiga yaxshigina ta’sir qilishi mumkin. Ba'zilar shunchaki jim-jitlikda kod yozishni xohlaydi, ba'zilar esa musiqa sadosi ostida. Musiqa va dasturlashni yaqindan tushungan inson sifatida bu mavzuga chuqurroq kirib ko'rdim. Bu post esa aynan musiqa tinglab ish qiluvchilar uchun.
Maqsadingiz ishingizga fokus qilib, miyangizni bir joyga qo'yish, to'g'rimi? Demak, siz aqlingizni chalg'itadigan kuylardan, ovozlardan qochishingiz kerak. Ayniqsa, loyihaning mantiqiy qismlarida ishlayotganingizda.
1. Qo'shiq tinglamang. Sababi, qo'shiqda so'zlar, ma'no bo'ladi. So'z bo'lgan joyda miya ishlaydi, uni tushunishga harakat qiladi. Bu esa miyangizni bir qismi qo'shiqqa qaratilishini bildiradi.
2. Ma'no musiqada ham bo'lishi mumkin. Matni bo'lmasa ham ma'no bo'lishi mumkinmi degan savol tug'iladi. Ha, albatta. Shunday musiqalar borki, ularda ma'no to'la, huddi o'zining tilida nimalardir degandek bo'ladi. Bu turdagi musiqalardan domlalar o'z maruzalarida yoki mazmunli suhbatlar, she'rlar ostida foydalanishadi. Bu turdagi musiqalarni tinglaganingizda miyangiz ishlaydi, xotiralarni eslatishi mumkin.
Namuna:
- https://www.youtube.com/watch?v=9vIcR9BvS1U
- http://youtube.com/watch?v=k0VcX4BvOrc&t=65s
- https://www.youtube.com/watch?v=xFdm-IDvaDU
3. Ma'nosiz musiqalar siz uchun yaxshiroq. Bir xil tempda, tebranishda davom etadigan musiqalar sizga yordam bera oladi. Bu huddi, soatning chiqqillashiga o'xshaydi. Nafaqat musiqa, bir xil tebranishga ega bo'lgan istalgan jarayon miyaga yoqimli bo'ladi. Bolalarni uxlatishda beshikning tebranishi yordam bergani kabi.
Namuna:
- https://www.youtube.com/watch?v=M5QY2_8704o
- https://www.youtube.com/watch?v=mhNg55_IYiw
- https://www.youtube.com/watch?v=-sZqtdT-GVw
Ba'zida ma'nosiz narsalar ma’noli narsalarni tug’ilishiga hizmat qiladi.
@mukhammadkarim_tukhtaboev
🏆1
Dizayn naqshlari (Design patterns).
Dasturlashda dasturiy ta'minot dizayni naqshi (software design pattern) dasturiy ta'minotni loyihalashda ko'p kontekstlarda tez-tez uchraydigan muammoning umumiy, qayta ishlatilishi mumkin bo'lgan yechimidir.
Dizayn naqshlari to'g'ridan-to'g'ri manba kodiga ko'chiriladigan tuzilma emas. Aksincha, bu turli xil vaziyatlarda qo'llanilishi mumkin bo'lgan muayyan turdagi muammolarni hal qilish uchun tavsif yoki shablondir.
Kelib chiqishi va evolyutsiyasi.
Dizayn naqshlari kontseptsiyasi birinchi marta Kristofer Aleksandr tomonidan arxitektura kontekstida tasvirlangan va keyinchalik uni dasturlashda qo'llashga ilhom bergan.
To'rtlik to'dasi (Gang of Four): Dizayn naqshlari tarixidagi eng muhim bosqich 1994 yilda Erich Gamma, Richard Helm, Ralf Jonson va Jon Vlissides tomonidan "Design Patterns: Elements of Reusable Object-Oriented Software" kitobi bo'ldi.
Ushbu muhim ish:
23 ta klassik dizayn namunalarini taqdim etdi.
Naqshlar uchta asosiy turga bo'lindi (Creational, Structural, Behavioral).
Dasturlashda asosiy tamal toshiga aylandi.
Naqshlar dastlab C++ va Java kabi OOP tillari kontekstida ishlab chiqilgan va boshqa barcha OOP tillarda ishlatish mumkin.
Nega o'rganish kerak ?
Haqiqat shundaki, siz ko'p yillar davomida bitta naqsh haqida bilmasdan dasturchi sifatida ishlashingiz mumkin. Ko'p odamlar aynan shunday qilishadi. Bunday holatda ham, siz hatto bilmagan holda ba'zi naqshlarni ishlatayotgan bo'lishingiz mumkin. Xo'sh, nega ularni o'rganish kerak ?
Dizayn naqshlari dasturiy ta'minotni loyihalashda keng tarqalgan muammolarni hal qilish uchun sinab ko'rilgan va sinovdan o'tgan yechimlar to'plamidir. Agar siz hech qachon bunday muammolarga duch kelmagan bo'lsangiz ham, naqshlarni bilish hali ham foydalidir, chunki u obyektga yo'naltirilgan dizayn tamoyillaridan foydalangan holda barcha turdagi muammolarni qanday hal qilishni o'rgatadi.
Dizayn naqshlarining real hayotda ishlatilish bo'yicha bazi misollar.
Naqshlarni o'rganish bilan birga anti-pattern-ni ham bilib qo'yish zarar qilmaydi.
Dasturlashda dasturiy ta'minot dizayni naqshi (software design pattern) dasturiy ta'minotni loyihalashda ko'p kontekstlarda tez-tez uchraydigan muammoning umumiy, qayta ishlatilishi mumkin bo'lgan yechimidir.
Dizayn naqshlari to'g'ridan-to'g'ri manba kodiga ko'chiriladigan tuzilma emas. Aksincha, bu turli xil vaziyatlarda qo'llanilishi mumkin bo'lgan muayyan turdagi muammolarni hal qilish uchun tavsif yoki shablondir.
Kelib chiqishi va evolyutsiyasi.
Dizayn naqshlari kontseptsiyasi birinchi marta Kristofer Aleksandr tomonidan arxitektura kontekstida tasvirlangan va keyinchalik uni dasturlashda qo'llashga ilhom bergan.
To'rtlik to'dasi (Gang of Four): Dizayn naqshlari tarixidagi eng muhim bosqich 1994 yilda Erich Gamma, Richard Helm, Ralf Jonson va Jon Vlissides tomonidan "Design Patterns: Elements of Reusable Object-Oriented Software" kitobi bo'ldi.
Ushbu muhim ish:
23 ta klassik dizayn namunalarini taqdim etdi.
Naqshlar uchta asosiy turga bo'lindi (Creational, Structural, Behavioral).
Dasturlashda asosiy tamal toshiga aylandi.
Naqshlar dastlab C++ va Java kabi OOP tillari kontekstida ishlab chiqilgan va boshqa barcha OOP tillarda ishlatish mumkin.
Nega o'rganish kerak ?
Haqiqat shundaki, siz ko'p yillar davomida bitta naqsh haqida bilmasdan dasturchi sifatida ishlashingiz mumkin. Ko'p odamlar aynan shunday qilishadi. Bunday holatda ham, siz hatto bilmagan holda ba'zi naqshlarni ishlatayotgan bo'lishingiz mumkin. Xo'sh, nega ularni o'rganish kerak ?
Dizayn naqshlari dasturiy ta'minotni loyihalashda keng tarqalgan muammolarni hal qilish uchun sinab ko'rilgan va sinovdan o'tgan yechimlar to'plamidir. Agar siz hech qachon bunday muammolarga duch kelmagan bo'lsangiz ham, naqshlarni bilish hali ham foydalidir, chunki u obyektga yo'naltirilgan dizayn tamoyillaridan foydalangan holda barcha turdagi muammolarni qanday hal qilishni o'rgatadi.
Dizayn naqshlarining real hayotda ishlatilish bo'yicha bazi misollar.
Naqshlarni o'rganish bilan birga anti-pattern-ni ham bilib qo'yish zarar qilmaydi.
Singleton pattern.
Bu pattern - Sinfning faqat bitta obyekti (instance) bo'lishini va unga global kirish imkonini taqdim etadi. Ayrim sinflar uchun aynan bitta obyekt bo'lishi muhim. Sinfning faqat bitta obyekti borligini va obyektga osongina kirish mumkinligini qanday ta'minlaymiz?
Global o'zgaruvchi obyektga kirish imkoniyatini beradi, lekin u sizni bir nechta obyektlarni yaratishdan to'sib qololmaydi. Eng yaxshi yechim - sinfning o'zi uning yagona obyektini kuzatish uchun javobgar bo'lishidir.
Singleton pattern bir vaqtning o'zida 2 ta muammoni hal qilishi bilan birgalikda, yagona javobgarlik prinsipini (SRP) ham buzadi.
Singleton-ni qo'llashning 2ta bosqichi mavjud:
1. Boshqa obyektlarning yaratilishidan himoyalanish uchun (default) konstruktorni private qilib qo'yish.
2. Konstruktor vazifasini bajaradigan statik metod yaratish. Ichki holatda bu metod obyekt yaratish uchun private konstruktorni chaqiradi va uni statik maydonda saqlaydi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Bu pattern - Sinfning faqat bitta obyekti (instance) bo'lishini va unga global kirish imkonini taqdim etadi. Ayrim sinflar uchun aynan bitta obyekt bo'lishi muhim. Sinfning faqat bitta obyekti borligini va obyektga osongina kirish mumkinligini qanday ta'minlaymiz?
Global o'zgaruvchi obyektga kirish imkoniyatini beradi, lekin u sizni bir nechta obyektlarni yaratishdan to'sib qololmaydi. Eng yaxshi yechim - sinfning o'zi uning yagona obyektini kuzatish uchun javobgar bo'lishidir.
Singleton pattern bir vaqtning o'zida 2 ta muammoni hal qilishi bilan birgalikda, yagona javobgarlik prinsipini (SRP) ham buzadi.
Singleton-ni qo'llashning 2ta bosqichi mavjud:
1. Boshqa obyektlarning yaratilishidan himoyalanish uchun (default) konstruktorni private qilib qo'yish.
2. Konstruktor vazifasini bajaradigan statik metod yaratish. Ichki holatda bu metod obyekt yaratish uchun private konstruktorni chaqiradi va uni statik maydonda saqlaydi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link