BİL209U-MOBİL UYGULAMA GELİŞTİRME
Ünite 7: İleri Düzey Uygulama Seçenekleri
Giriş
Mobil cihazlarda gerçekleştirebileceğimiz uygulamalar donanım ve yazılım tabanlı birçok gelişmeyle yakından ilgilidir. Özellikle cep telefonu formatında sadece aramaları ve mesajlaşmaları destekleyen mobil cihazlar, zamanla telefon rolünün ötesine geçmiş ve her türlü bilgi oluşturma, değiştirme ve paylaşma çözümlerini de kapsamları içerisine almıştır. Söz konusu değişimde özellikle İnternet ve Web teknolojilerinin önemli etkileri vardır. İnternet sayesinde artan bireyler arası etkileşim düzeyi, farklı uygulamaların geliştirilmesine ve mobil cihazlara entegre edilmesine sebep olmuştur. Örneğin sosyal medya platformları, iletişim uygulamalarındaki önemli dönüm noktaları arasında yer almaktadır. Bununla birlikte gerek sosyal medya platformları gerekse alternatif e-Ticaret, mesajlaşma (eposta servisleri ve özel mesajlaşma uygulamaları) ve işbirlikçi çözüm ortamlarının oluşturmaya başladığı, Büyük Veri olarak anılan bilgi hengamesi, mobil cihazların hızlı çözüm üretebilme kapasitelerinin yenilenmesine sebep olmuştur. Bu yenilemeler donanım tarafında olduğu kadar yazılım tarafında da gerçekleşmiştir.
Mobil teknolojiler 21. yüzyılın sadece ilk çeyreğinde bile hayatımızın ayrılmaz birer parçası haline gelmiştir. Artık günlük hayatta gerçekleştirdiğimiz birçok faaliyet, sayısal ortamlardaki bilgiler (veriler) üzerinde çalışan özel mobil uygulamalar sayesinde yerine getirilebilmektedir. Mobil teknolojiler kullanıcılar arası anlık iletişim çözümlerinden, eğitim uygulamalarına, bankacılık işlemlerinden sağlık uygulamalarına kadar hayatın her alanında yoğun bir şekilde kullanılmaktadır (Agarwal, & Bhattacharyya, 2018; Keengwe, & Bhargava, 2014; Meder, & Wegner, 2015; Shaikh, & Karjaluoto, 2015). Ancak bu kadar farklı kullanım senaryosu, kullanıcı etkileşimine daha fazla önem veren, veri işleme süreçleri sayesinde otomatik çözümler üreten uygulamaları gerekli kılmıştır. Vazgeçilmez parçamız olan mobil cihazlardan etkileşimsel bağlamda faydalanmanın en pratik yolu, donanımsal bileşenlerden elde edilen verilerle kullanım tecrübesini artıran uygulamalardan geçmektedir. Mobil uygulamalarda, kullanım tecrübesini etkileşim boyutunda artırmak için şu hususları dikkate almak gerekmektedir:
1. Kolay kullanım sağlamak: Hayat koşturmacası içerisinde en hızlı şekilde kullanılabilen ve kullanıcıların en çok sevdiği mobil uygulamalar kolay kullanım sağlayanlardır. Söz konusu kolay kullanım sade, anlaşılır arayüzlerle olabileceği gibi, az sayıda kullanıcı dönütü içerebilecek senaryolarla da sağlanabilmektedir. 2. Donanım-yazılım etkileşiminden faydalanmak: Mobil cihazlar, etkileşim ihtiyacının artışı nedeniyle alternatif kameralardan sensörlere kadar kullanıcı ile gerçek dünyayı bağlantılayan ve kullanıcı eylemlerini yakalayan birçok donanımla desteklenmiş durumdadır. Dolayısıyla bu donanımlardan faydalanan yazılımları (uygulamaları) geliştirmek kullanım tecrübesinde
yenilikçi ürünlerin elde edilmesini mümkün kılmaktadır. 3. Gerçek dünyayı mobil ortama taşımak: Kullanıcıların mobil uygulamaları kullanırken gerçek dünyadan destek alabilmeleri, etkileşim düzeyinde büyük avantajlar sunmaktadır. 4. İleri düzey veri işleme süreçleri işletmek: Mobil uygulamalar aldıkları verileri işleyip anlamlı hale getirerek kullanıcılara zekice çözümler üretebilmekte, onları asiste ederek destekleyebilmektedir.
Sensör Tabanlı Uygulamalar
Sensörler, güncel mobil teknolojilerin vazgeçilmez bileşenleri arasında yer almaktadır. Aslında mobil cihazlarımızdaki mikrofonlar bile sensör niteliğindedir. Ancak çevre ortamı algılama aşamasındaki farklı ihtiyaçlar birçok sensörün geliştirilmesine sebep olmuştur. Mobil taşınırlığı sağlamak ya da cihazı giyilebilir bir biçimde kullanmak adına görece küçük geliştirilen mobil cihazlarda yazılım kabiliyetlerinin artırılması sensörler sayesinde mümkün olmaktadır. Sensörler, çevredeki ışık, ses, basınç gibi unsurları algılayan birçok farklı makinede/cihazda kullanılıyor olsa da, mobil teknolojiler sayesinde seviye atlamış ve yenilikçi mobil uygulamaların doğmasını kolaylaştırmıştır. Mobil cihazlarda üretici ve model bazlı olmak üzere birçok farklı sensörün kullanımı söz konusudur. Ancak diğerlerine göre daha çok dikkat çeken, uygulamalara daha kritik mekanizmalar kazandıran en önemli sensörleri, görevleriyle birlikte şöyle sıralayabiliriz:
1. İvmeölçer: İngilizce Accelerometer olarak da anılan bu sensör, bağlı olduğu cihaz kapsamındaki ivmeyi algılayarak, yerçekimi düzeyini ya da hızlanma, durma gibi olayları ölçebilmektedir. 2. Jiroskop: Üzerinde bulunduğu cihazın X-Y-Z eksenlerindeki açısal konumunu ölçerek, açısal hızı tespit edebilen bir sensördür. Bu yönüyle jiroskop, ivmeölçerin sadece ivme ölçmeye dayanan kabiliyetini üç eksenli düzeye taşımakta ve açısal hız tespitine ulaşabilmektedir. İngilizce Gyroscope olarak adlandırılmaktadır. 3. Manyetometre: Adından da tahmin edileceği üzere, çevredeki manyetik alan yoğunluğunu ve yönünü ölçebilen bir sensördür. İngilizce Magnetometer olarak ifade edilmektedir. 4. Yönlendirme Sensörü: Mobil cihazın yataydikey kullanım değişikliklerinin tespitini sağlayan sensördür. Yönlendirme sensörü İngilizce orientation sensor olarak da bilinmektedir.
Flutter Ortamında Sensör Kullanımı
Flutter ortamında farklı sensörler için uygulama kodlamayı sağlayan birçok farklı eklenti bulunmaktadır. Bunlar arasında İvmeölçer, Jiroskop, Manyetometre ve Yönlendirme Sensörünün dördünü de destekleyen eklenti motion_sensors eklentisidir. İlgili sensörleri içeren uygulamalarda öncelikli olarak Flutter projesindeki pubspec.yaml dosyasına sensör kullanımını işaret eden
dependencies meta bilgisini eklemek gerekmektedir. Bunu sağlamak için dependencies: satırı altına motion_sensors: ifadesi yazılır. Yönlendirme sensörü ile ilgili olarak hareketin başladığı noktaya göre görece ölçüm ya da kuzey yönünü dikkate alarak, absolute (mutlak) yönlendirme ölçümü de yapılabilmektedir.
Kamera Kullanan Uygulamalar
Mobil uygulamalarda gerçek dünya ile görsel etkileşime girmenin en kolay yolu, cihaz üzerinde yer alan kameraları kullanmaktır. Kameralar sayesinde yine ilerleyen başlıklar altında değineceğimiz Artırılmış Gerçeklik tabanlı uygulamalar da geliştirilebilmektedir. Ancak öncelikli olarak kameraların temel kullanım şekillerine ilişkin bazı ön bilgilere hakim olmak gerekmektedir.
Kamera Kullanım İzni
Flutter ortamında Dart programlama diliyle geliştirilen uygulamalarda kamera kullanım izinlerinin denetlenmesi için permission_handler eklentisi kullanılabilmektedir. Eklentiyi kullanabilmek adına projedeki pubspec.yaml dosyasına dependencies: satırı altına permission_handler: çağrısı yapılmaktadır.
Tıpkı diğer eklentilerin eklenme sürecinde olduğu gibi, yaml dosyası altındaki çağrı sonrasında terminal ekranında flutter pub get komutunu kullanarak, ya da pencere sağ üst alanında beliren pub get linkine tıklayarak güncel eklenti paketlerinin kurulması sağlanıp, flutter run komutu ile rebuild işlemi gerçekleştirilmektedir. Ardından dart dosyası içerisinde permission_handler eklentisinin import edilmesi suretiyle kamera izinleri kullanıma açılmaktadır: Uygulama çalıştırıldığında kameranın mevcut izin durumu undetermined durumunda ekranda görüntülenecektir. İzin Al düğmesine tıklandığında kullanıcıdan izin talep edilecektir. Kullanıcının izin vermesi durumunda kamera kullanım izni granted olarak ekrana yansıtılacaktır.
Kamera ile Fotoğraf Çekimi
Flutter ve Dart işbirliği içerisinde geliştirilen uygulamanızda kamera üzerinden fotoğraf çekimi sağlayabilmek için camera eklentisine ihtiyacınız bulunmaktadır. Bu eklentiyi öncelikli olarak pubspec.yaml dosyasına dependencies: satırı altında ekleyip, önceki sayfalarda açıklanan güncelleme süreçlerini gerçekleştirmeniz gerekmektedir. Yine çekilen fotoğrafların mobil cihaz galerisine kaydedilebilmesi için path_provider ve path eklentileri de yaml dosyasına eklenmelidir.
Mobil uygulamamıza kamera fonksiyonlarını kullanma işlevi sağlayan camera eklentisi şu komut ile dart dosyası içerisinde import edilmelidir: import ‘package:camera/camera.dart’; Uygulamanın ilk kodları, kamera kontrolünü sağlayacak, CameraController sınıfından değişkenin ve diğer destekleyici değişkenlerin tanımıyla birlikte, kamera arayüzünün arka plana atılıp tekrar çağrılması durumunda çalışmaya devam etmesini sağlayacak metotların çağrılması üzerine yazılır: Çekilen
görüntünün (fotoğrafın) ekranda sabit bir şekilde görüntülenmesi için Image widget bileşeni kullanılabilmektedir. Ayrıca ekranda görüntüleme sonrasında controller değişkeninin (nesnesinin) bellekten silinmesi için dispose metodu kullanılır:
Artırılmış Gerçeklik Uygulamaları
Kullanıcıların mobil uygulamalar üzerinden sanal ve gerçek dünyayı aynı anda görüntüleyebilmeleri ve böylelikle etkileşim düzeylerini artırmaları, son yıllarda uygulama geliştirme süreçlerinde sıklıkla tercih edilen bir yaklaşım olmuştur. Böylelikle gerçek dünyayı mobil ortama taşıma ve sanal unsurlarla destekleme mekanizmaları sayesinde kullanıcıların daha anlamlı kullanım süreçleri tecrübe etmeleri sağlanmaktadır. Esasında kullanıcılar olarak sanal dünya ile etkileşim içerisine girmemiz, Sanal Gerçeklik (VR: Virtual Reality) adı altında 20. Yüzyıl’daki gelişmelere kadar uzun bir geçmişe sahiptir (Schroeder, 1993). Ancak kullanıcı etkileşim fırsatlarını çeşitlendiren teknolojik gelişmeler, Karma Gerçeklik (Mixed Reality) adı verilen; sanal ve gerçek dünyanın aynı anda varolabildiği çözümlerin de geliştirilmesini sağlamıştır (Benford, & Giannachi, 2011). Sanal Gerçeklik özellikle son birkaç yılda, Metaverse oluşumuyla birlikte toplumları ve hayatı dönüştüren bir karaktere bürünmüşken (Sparkes, 2021), Karma Gerçeklik uygulamaları da mobil cihazların donanım ve yazılım tabanlı kabiliyetleri sayesinde popülaritesini artırmaya devam etmiştir. Sadece mobil uygulamalarla sınırlı kalmayıp; TV ortamlarında bilgi aktarımı ve reklam sunumu süreçlerine kadar yayılan Karma Gerçeklik, temelde iki başlık altında incelenebilmektedir:
1. Artırılmış Gerçeklik (AR: Augmented Reality): Gerçek dünyadaki görüntüye sanal unsurların dahil edildiği Karma Gerçeklik türüdür (Craig, 2013). Örneğin, TV ekranlarında spor karşılaşmaları izlerken, gerçek görüntü üzerine eklenmiş izlenimi veren sanal gösterimler Artırılmış Gerçeklik ile ilgilidir. Yine insanların gerçek dünyada Pokemon adı verilen anime karakterleri arayıp yakalaması üzerine kurulu olan Pokemon Go mobil oyunu da bu teknolojiyi kullanmaktadır. 2. Artırılmış Sanallık (AV: Augmented Virtuality): Sanal görüntülenen ortama gerçek dünyadan unsurların dahil edildiği Karma Gerçeklik türüdür (Ternier vd., 2012). Artırılmış Gerçeklik’e göre daha ender olduğunu yorumlayabileceğimiz bu Artırılmış Sanallık’ın en iyi örnekleri, gerçek kişilerin çizgi karakterlerin dünyasına dahil olduğu, çizgi film/animasyon filmleridir.
Mobil uygulamalar düşünüldüğünde, özellikle Artırılmış Gerçeklik kullanımının daha çok rağbet gördüğünü ifade edebiliriz. Artırılmış Gerçeklik içeren uygulamalar sayesinde eğitimden turizme, ticari uygulamalardan video oyun dünyasına, hatta sağlığa kadar hayatın farklı alanlarında etkili uygulamalar geliştirilebilmektedir (Avila-
Garzon vd., 2021; Aytekin vd., 2019; Eckert vd., 2019; Wetzel vd., 2011; Yung, & Khoo-Lattimore, 2019). Özellikle bilgiyi kullanıcıya aktarma ve kullanıcıyı gerçek dünya ile sanal dünyanın birleştiği noktada daha yüksek etkileşim düzeyine ulaştırma amacı güden Artırılmış Gerçeklik ile mobil uygulamalar içerisinde kullanımı kolay ve bir o kadar etkili mekanizmalar eklenebilmektedir.
Flutter Ortamında Artırılmış Gerçeklik
Mobil uygulamalarınıza Artırılmış Gerçeklik entegre etmek için arcore_flutter_plugin eklentisi kullanılabilmektedir. Daha önce anlatılan eklentilere benzer şekilde, eklentinin pubspec.yaml dosyasına dependencies: altında eklenmesi ve güncelleme süreçlerinin gerçekleştirilmesi önemlidir. Söz konusu eklenti, Google firmasının sunduğu ARCore teknolojisinin kullanımını sağlamaktadır. Bu nedenle mobil uygulamada ARCore eklentisinin yüklü olup olmadığının kontrolü için AndroidManifest.xml dosyasına çeşitli etiketlerin eklenmesi gerekmektedir. Bu noktada iki farklı yaklaşıma göre: AR Required ya da AR Optional altında etiketler yazılmaktadır. AR Required etiket bütünü, mobil uygulamanın AR Core desteği olan cihazlara görünmesini sağlamaktadır: Her şekil çağrısında ArCoreMaterial kısmı şeklin renk ve materyal yapısını (örneğin, metalik) belirlemekte, ArCoreNode altında ise nihai şekil ve şeklin konum değerleri tanımlanabilmektedir. ArCoreNode kamera ile görüntülemede sanal nesnelerin yerleştirileceği konumları işaret etmektedir. Şekil çağrılarının da eklenmesi akabinde widget çağrıları ve body altında ArCoreView çağrısı yapılmak suretiyle, görüntüleme ortamının dahil edildiği uygulama arayüzü tamamlanmaktadır: Uygulamada ArCoreNode altında imaj dosyalarının şekillere eklenmesi sayesinde spesifik nesneler de oluşturulabilmektedir. Bunun için ArCoreMaterial altında ikinci bir parameter ile imaj dosyasını tanımlamak yeterlidir. Örneğin, proje dosyaları içerisine eklenen bir dünya imaj dosyasını, mevcut sphere şekli kodlarında güncelleme yapmak suretiyle, Artırılmış Gerçeklik ortamına ekleyerek sanal bir yer küre nesnesi elde edebilirsiniz.
Yapay Zekâ Uygulamaları
Yapay Zekâ, hedef problemleri irdeleyip esnek çözümler üretebilen, gelişmiş yazılımlar geliştirilmesini mümkün kılan, önemli bir bilim ve teknoloji alanıdır. Özellikle verilerle tanımlanmış, bilinen problem örüntülerini algılayıp, olası yeni durumlara tanımlayıcı (descriptive) ve tahmin edici (predictive) çözümler üretebilen Yapay Zekâ algoritmaları (Hunt, 2014; Kelleher vd., 2020), gerek günümüzün gerekse geleceğin en önemli teknoloji araçları olarak bilinmektedir. Yapay Zekâ tabanlı sistemler, çözülmesi zor ya da geleneksel yöntemlerle çözülememiş problemlerin üstesinden gelinmesi noktasında başarılı sonuçlar ortaya koymaktadır. Bu nedenle günümüz teknolojik ilerlemeleri, insanlardan bağımsız bir şekilde bağımsız muhakemelerde bulunan ve çözüm üreten zeki
araçların tasarlanması-geliştirilmesi yönünde ilerlemektedir.
Yapay Zekânın temelinde yer alan matematiksel ve mantıksal mekanizmalar, döngülerle desteklenmiş fonksiyonlar ve hedef verilere uyum sağlayarak ve esnek çıktılar üretilmesini sağlayan değişken yapıları, Yapay Zekâ tabanlı yazılımları standart yazılımlardan ayırmaktadır. Bu açıdan yazılım teknolojisi Yapay Zekâ sayesinde üst düzey atılımlara sahne olmuştur. Yapay Zekâ tabanlı yazılımlar esasında farklı özel algoritmaların amaca uygun bir şekilde kullanımını içermektedir. Bu noktada, en etkin ve yetenekli Yapay Zekâ algoritmalarının Makine Öğrenmesi adı altında toplanan algoritmalar olduğunu söyleyebiliriz (Köse, 2021). Ancak gerek Kural tabanlı, gerekse modeller üzerinden zeki optimizasyona dayanan algoritmalar da güçlü Yapay Zekâ alanını şekillendiren diğer algoritmalar arasında yer almaktadır (Köse, 2017; Nabiyev, 2005).
Makine Öğrenmesi, Yapay Zekanın çeşitli örnekler ve senaryolar üzerinden (eğitim verilerinden) problem kapsamını öğrendikten sonra, aynı problemle ilgili yeni karşılaşılan durumlara etkin cevaplar üretme çabasını içermektedir. Makine Öğrenmesi, 2000’li yıllarda ortaya konulan daha gelişmiş teknikler sayesinde Derin Öğrenme adı altındaki bir alt-alanı da içermeye başlamıştır. Makine Öğrenmesi ile geliştirilen Yapay Zekâ yazılımlarının böylelikle çözüm üretebildiği problem durumlarını şöyle örnekleyebiliriz:
• Görüntülerden nesne tanımlama, tanımlanan nesnelerden durum analizi yapma • Yüz tanıma, kişi tanıma, yüz tanıma üzerinden duygu tanıma • Nedenlere göre sonuç tahmin etme (örneğin hastalık teşhisi, makine arıza tespiti) • Yeni veri türetme (örneğin anlamlı metinler, yeni görüntüler türetme, ilaç keşfetme) • İnsanlara karar destek sağlama (örneğin tedavi planlama, işletmeler için stratejiler belirleme).
Yapay Zekanın çözüm üretme süreci her zaman için ilgili algoritmaların kodlanması, kodlanan algoritmalardan yazılım sistemlerinin oluşturulması (çok sayıda alt programın birleştirilmesi -tıpkı Flutter ortamında metodların/fonksiyonların tanımlanması gibi-) ve bu sistemlerin hedef donanımlarda (örneğin robotik sistemler, bilgisayarlar, mobil cihazlar) çalıştırılması yönünde organize edilmelidir.
Flutter Ortamında Yapay Zekâ Çözümleri
Flutter ortamında, Dart programlama dili desteğiyle Yapay Zekâ uygulamaları geliştirmek, -tıpkı diğer ileri düzey uygulamalarda olduğu gibi- çeşitli eklentilerle mümkün olmaktadır. Bunlar arasında en dikkat çekeni Google tarafından sunulan Firebase ML Kit (Machine Learning Kit) eklentisidir. Bu eklenti Yapay Zekâ çözümlerini bir tür API (Application Programming Interface: Uygulama Programlama Arayüzü) üzerinden sunmaktadır. Eklentinin
kullanılabilmesi için Google Firebase Web platformu üzerinden proje oluşturmak gerekmektedir. Bunun için create project seçeneğine tıkladıktan sonra proje adı ve Google Analytics seçeneklerinin (kapalı seçilmesi durumunda iki adımda) belirlenmesi suretiyle Flutter uygulamasının iletişim kuracağı API için proje açılışı yapılmalıdır (Şekil 7.12). Proje platformu açıldıktan sonra Android uygulama seçeneği seçilip, uygulama isminin kayıt altına alınması (register) gerekmektedir. Kayıt sonrası Flutter ortamındaki projeye sunulan JSON dosyasının ve build kodlarının (build.gradle dosyasına) eklenmesi gerekmektedir (Şekil 7.13). Firebase ML Kit taraflı düzenlemeler sonrasında Flutter ortamında projenin pubspec.yaml dosyası altındaki dependencies kapsamında mlkit: ibaresi eklenir ve uygulama dart dosyasında import ‘package:mlkit/mlkit. dart’; kodu ile eklentinin çağrısı yapılır.
Firebase ML Kit ile etkileşim sağlayarak metin tanıma, nesne tanıma, yüz tanıma ve doğal dil işleme yönelimli farklı uygulamalar geliştirilebilmektedir. Örneğin, mobil cihaz ortamındaki görsellerde nesne tespiti yapan uygulama için ön tanımlamalar yapılırken FirebaseVisionLabelDetector kullanılır:
İlgili tanımlamalar sonrasında uygulama arayüzünde FloatingActionButton kullanmak suretiyle görselin çağrılması ve çağrılan görseldeki tespitin Firebase ML Kit üzerinden yapılmasını takiben, tespit edilen nesnelerin isimlerini (label) ve doğruluk (güven) değerlerini (confidence) belirten dönütlerin ilgili widget bileşenler yardımıyla elde edilmesi sağlanır.