Kitengo 2 / 11

Uzalishaji wa Misimbo ya Simu kwa kutumia Akili Bandia: Kotlin, Mwepesi na Ukuzaji wa Jukwaa Mtambuka

Faida:

  • Kupata msimbo ulio rahisi kutunza na kujaribiwa kwa kuweka usanifu kama vile MVVM na kuomba safu kwa safu katika vipande vidogo kabla ya kuwa na msimbo wa kuzalisha akili bandia.
  • Uwezo wa kutambua mitego mahususi ya lugha kama vile usalama tupu na utaratibu katika Kotlin, loops za hiari na kumbukumbu katika Swift, na kuangalia msimbo uliotolewa dhidi yao.
  • Uwezo wa kuthibitisha ruhusa na usanidi kando kwa kila jukwaa katika miradi ya jukwaa (Flutter, React Native)

Moyo wa ukuzaji wa rununu ni msimbo, na hapo ndipo faida inayoonekana kutoka kwa AI huonekana. Lakini sentensi "Wacha AI iniandike nambari" sio mkakati peke yake. Uzalishaji mzuri wa kanuni; Inahitaji kuchanganya lugha sahihi, usanifu sahihi, mipaka inayofaa, na uthibitisho sahihi. Katika kitengo hiki, tutajifunza jinsi ya kutumia AI kwa ufanisi na kwa usalama kwa Swift, lugha ya iOS, Kotlin, lugha ya Android, na zana za majukwaa mtambuka zinazoendeshwa kwenye majukwaa mawili yenye msingi mmoja wa msimbo. Kusudi ni kuweka AI sio kama "code automaton" lakini kama kiongeza kasi ambacho unaamua usanifu wake.

Usanifu kwanza, kanuni ya pili

Makosa ya kawaida ni kuuliza AI kwa nambari moja kwa moja bila mpango wa usanifu. Hii ni kama kujenga ukuta bila kuweka msingi. Usanifu unaojulikana zaidi kwenye simu ya mkononi ni MVVM (Model-View-ViewModel — muundo wa muundo unaotenganisha data, onyesho, na mantiki ya onyesho). Hii inamaanisha kuwa mtazamo ni mtazamo tu, mantiki na hali huishi katika ViewModel, na data iko kwenye safu ya Model. Usipolazimisha utengano huu kwenye AI tangu mwanzo, hutoa muundo usioweza kuthibitishwa na mgumu-kudumisha ambao unabandika mantiki yote kwenye msimbo wa skrini.

Mtiririko wa kutengeneza nambari yenye afya hatua kwa hatua:

  1. Toa muktadha. Jukwaa, lugha, toleo, usanifu, maktaba kutumika.
  2. Uliza tabaka. Kwanza muundo wa data, kisha safu ya mtandao/data, kisha ViewModel, mwisho wa skrini.
  3. Uliza vipande vidogo. Skrini moja au kazi moja; Sio faili kubwa ya safu 500.
  4. Thibitisha kila kipande. Jenga, jaribu, unganisha; kisha nenda kwenye wimbo unaofuata.
  5. Omba kirekebisha tena (boresha nambari). "fanya hii isomeke zaidi na iweze kujaribiwa" hatua baada ya nambari ya kufanya kazi.
Kidokezo: Mwambie AI "gawanya nambari kulingana na MVVM: ni sehemu gani inapaswa kuwa Tazama, ambayo inapaswa kuwa ViewModel, ambayo inapaswa kuwa Model, wape kando". Sentensi hii moja inaboresha kwa kiasi kikubwa ubora wa usanifu wa msimbo uliotolewa.

Kotlin na Swift: mazingatio mahususi kwa lugha

Kotlin (Android) na Swift (iOS) ni lugha za kisasa, salama, lakini zina vikwazo tofauti. Katika Kotlin, usalama usio na maana (kuangalia ikiwa kutofautisha kunaweza kuwa "null" kupitia mfumo wa aina) wakati mwingine huchapishwa kwa urahisi na AI; sio lazima!! opereta (ishara inayolazimisha ajali ikiwa ni batili) inaweza kuharibu programu. Katika Swift, usimamizi wa hiari na mizunguko ya uhifadhi ni muhimu; AI inaweza kusahau kuongeza [ubinafsi dhaifu] katika kufungwa na hii itaunda uvujaji wa kumbukumbu.

Kwa hivyo unapochagua lugha, bofya kidokezo ipasavyo: kama vile "Hifadhi usalama batili huko Kotlin, usitumie !!" au "Zuia mzunguko mkubwa wa marejeleo katika kufungwa kwa Swift".

Tahadhari: Nambari ya asynchronous inayozalishwa na AI inahitaji uangalifu maalum. Kuchagua upeo usio sahihi katika coroutines za Kotlin au kuzuia thread kuu katika async/kusubiri katika Swift kutasimamisha programu. AI hufanya makosa haya mara kwa mara; Usiiamini bila kuijaribu.

Ukuzaji wa jukwaa mtambuka: Flutter na React Native

Kwa wale wanaotaka kutumia iOS na Android kwa kutumia msimbo mmoja, Flutter (kifurushi cha Google cha kutumia lugha ya Dart) na React Native (suluhisho la JavaScript la Meta) ni bora. AI ina nguvu katika mazingira haya pia, lakini wakati mwingine hupita tofauti za jukwaa (ruhusa, sheria za duka, tabia mahususi ya kifaa). Kwa mfano, katika Flutter, ruhusa ya kamera inafafanuliwa katika faili tofauti kwenye iOS na Android; AI inaweza kuandika moja tu. Katika msimbo wa jukwaa-msingi, ni muhimu kusema "peana ruhusa na usanidi unaohitajika kwa majukwaa yote mawili kando".

Muhtasari wa uchaguzi:

Mbinu

lini

makini na AI

Asili (Kotlin/Swift)

Utendaji wa juu zaidi, muunganisho wa kina wa kifaa

Kila jukwaa lina msimbo tofauti; thibitisha mara mbili

Flutter

Timu moja, UI ya haraka na thabiti

Angalia mwenyewe ruhusa/mipangilio maalum ya jukwaa

React Native

Timu ya Wavuti/JS inapatikana

Jaribu sehemu za daraja (daraja la asili) kwa uangalifu

kesi tatu ndogo

Kesi ya 1 - Mtego wa Corroutine. Timu ya Android ilipata chaguo la kukokotoa ambalo linatoa orodha ya bidhaa kutoka kwa AI. Nambari hiyo ilikuwa ikifanya ombi la mtandao kwenye uzi kuu; Tatizo halikuonekana kwenye kifaa cha majaribio, lakini kwenye mtandao dhaifu, programu ilisimama kwa sekunde 4 na kutoa onyo la ANR (Application Not Responding). Ilirekebishwa wakati AI iliambiwa "fanya kazi ya mtandao kwenye kisambazaji cha IO". Somo: concurrency inadhibitiwa kila wakati.

Kesi ya 2 - Uvujaji wa kumbukumbu. Msanidi programu wa iOS aligundua kuwa baada ya kufungua na kufunga skrini inayozalishwa na AI mara 20, kumbukumbu ya programu iliongezeka kutoka 40 MB hadi 180 MB. Sababu ilikuwa kwamba ViewController haikuweza kuondolewa kwenye kumbukumbu kwa sababu ya kukosa [ubinafsi dhaifu] katika kufungwa. Grafu ya kumbukumbu ya Xcode ilifunua mtego. Somo: wasifu wa kumbukumbu ni wa lazima katika ukuzaji asilia.

Kesi ya 3 - Tofauti ya jukwaa. Timu ya Flutter ilipata msimbo wa ufikiaji wa ghala kutoka kwa AI, ilifanya kazi kwenye Android lakini ilianguka kwenye iOS. Sababu ilikuwa kwamba maelezo ya ruhusa ya maktaba ya picha (NSPhotoLibraryUsageDescription) hayakuongezwa kwenye faili ya Info.plist; AI iliandika tu upande wa Android. Ni marekebisho ya dakika 15, lakini ingekuwa kukataliwa kwa duka ikiwa haingekamatwa.

Mwongozo dhaifu / Mwongozo thabiti

Kidokezo dhaifu: "Andika msimbo wa Kotlin ambao huchota bidhaa kutoka kwa API."

Kidokezo chenye nguvu: "Tengeneza msimbo wa Android/Kotlin ambao huchota orodha ya bidhaa kutoka kwa API ya REST.- Safu ya mtandao iliyo na urejeshaji, sitisha utendakazi- Kazi ya Mtandao katika Dispatchers.IO; kuzuia uzi kuu- MVVM: Repository -> ViewModel -> hali ya UI yenye StateFlow- Hitilafu inasema: hakuna mtandao, kutenganisha muhuri wa darasa la 4, hali ya usalama ya Uct4xx iliyotengwa, 5 x 5 ya usalama!! !! Hamisha tabaka kama faili tofauti, sentensi 1 kila moja inaelezea."

Ushawishi mkali huzuia msimbo uliozalishwa kutoka kwenye mitego ya matukio ya awali.

Violezo vinavyoweza kunakiliwa

Kiolezo cha uzalishaji chenye tabaka: "Tengeneza [kipengele] cha [jukwaa/lugha]. Tengeneza kwa mpangilio:1) Muundo wa data (daraja la data/muundo)2) Mtandao au chanzo cha data safu3) Repository4) Mtazamo (udhibiti wa hali)5) Skrini (UI)Hamisha kila safu kivyake, ongeza noti ya muunganisho kati yao."

Kiolezo mahususi cha usalama cha lugha (Kotlin):"Kagua msimbo huu wa Kotlin:- Futa matumizi ya !! na aina ya jukwaa- Thibitisha upeo wa Corutine na uteuzi wa mtumaji- Je, kuna simu zinazozuia thread kuu?[code]"

Kiolezo cha usalama cha lugha mahususi (Swift): "Kagua msimbo huu Mwepesi:- Hatari ya kurejesha mzunguko katika kufungwa (dhaifu/ubinafsi usiomilikiwa)- Matumizi ya hiari ya kujifungua kwa nguvu (!)- Kazi nzito inayohitaji kuhamishwa nje ya uzi mkuu [msimbo]"

Kiolezo cha udhibiti wa mifumo mbalimbali: "Orodhesha ruhusa, usanidi, na msimbo mahususi wa jukwaa unaohitajika kwa kipengele hiki cha [Flutter/React Native] kwenye iOS na Android. Toa maingizo tofauti ya Info.plist na AndroidManifest.xml."

Makosa ya kawaida

  • Kuuliza nambari bila kuweka usanifu. Matokeo: muundo usioweza kuthibitishwa ambao unabandika kila kitu kwenye skrini.
  • Kuamini bila kujaribu nambari ya kuthibitisha kwa wakati mmoja. Vitalu vya nyuzi kuu na upeo usio sahihi ni sababu za kawaida za kuacha kufanya kazi.
  • Kuzingatia usimamizi wa kumbukumbu. Hasa uvujaji katika kufungwa kwa iOS; Haionekani bila kuchukua wasifu.
  • Kukwepa tofauti za jukwaa. Katika zana za jukwaa la msalaba, ruhusa na usanidi huandikwa tofauti kwenye majukwaa mawili.
  • Haithibitishi toleo la maktaba. AI inaweza kupendekeza API ya Retrofit/Alamofire iliyopitwa na wakati; Angalia na hati rasmi.
  • Inazalisha faili moja kubwa. Haiwezekani kudumisha na kuthibitisha; uliza tabaka.

Kwa muhtasari

Uzalishaji wa msimbo kwa kutumia AI una nguvu unapobainisha usanifu. Kwanza weka muundo kama MVVM, kisha uombe safu kwa safu na vipande vidogo, kusanya na ujaribu kila kipande. Usalama tupu na utaratibu huko Kotlin, loops za hiari na kumbukumbu katika Swift zinahitaji uangalifu maalum. Katika zana za jukwaa tofauti, ruhusa na usanidi huandikwa tofauti kwa kila jukwaa. Kidokezo kikuu huambia sheria za usalama za lugha, toleo, usanifu na lugha mahususi; Hii huzuia hitilafu za kawaida za kuacha kufanya kazi na uvujaji katika uzalishaji.

Jukumu la maombi

Kwa skrini ya orodha (k.m. "orodha ya anwani"), omba msimbo kutoka kwa AI ukitumia "Kiolezo cha utengenezaji wa ziada" kwenye jukwaa lako la chaguo (Kotlin au Swift). Ongeza msimbo uliotolewa kwa mradi, uukusanye, na ufanye ukaguzi huu mbili: (1) je, mtandao/mchakato mrefu unaendeshwa kwenye uzi mkuu, (2) je usalama batili/hiari ni sahihi? Acha AI irekebishe suala unalopata kwa kiolezo cha usalama cha lugha mahususi.

orodha ya ukaguzi

  • [ ] Nilibainisha usanifu (MVVM n.k.) kabla ya kuomba msimbo
  • [ ] Nilitaka iwe safu kwa safu, katika vipande vidogo
  • [ ] Nilijaribu kuwa nambari inayofanana haizuii uzi mkuu
  • [ ] Niliangalia usalama batili/hiari na usimamizi wa kumbukumbu
  • [ ] Nilithibitisha ruhusa/mipangilio ya mifumo miwili tofauti katika mradi wa majukwaa mtambuka
  • [ ] Nilithibitisha matoleo ya maktaba na sahihi za API kutoka kwa hati rasmi