Android Service

Android Service Android’in temel bileşenlerinden biri olan Service‘ler kısaca UI(arayüz) olmayan Activity‘lere benzetebiliriz. Tabi ki kendine göre ek özellikleri bulunmaktadır. Service tanımlaması AndroidManifest.xml içerisinde tanımlı olmalıdır. Aksi takdirde çalışmaz. <service> elementinin alabileceği özellikler aşağıdaki gibidir. Niçin kullanılır? Temel olarak ifade etmek gerekirse Service‘lerin kullanım amacı uzun süren ve arka planda(background) çalışan taskler oluşturmaktır. Bununla birlikte diğer uygulamalar tarafından çağırılabilen iletişim imkanı sağlar. Service tanımlanması <service android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" > .

Android Kotlin Test - Final Type Problem

Sorun Kotlin dili ile geliştirilen Android projelerinin test yazımı sırasında sınıfların veya metodların mocklanması, Java ile geliştirilen projelere göre bazı farklılıklar göstermektedir. Bu farklılığın sebeplerinden biri Kotlin ile oluşturulan sınıf veya metodların default olarak final olarak işaretlenmiş olmasıdır. Ve final tipindeki sınıfların mocklanması bazı sorunlar çıkarmaktadır. Çözüm Final tipindeki sınıfların veya metodların mocklama işlemi sırasında çıkan sorunu çözmenin birkaç farklı yöntemi vardır. Çözüm 1 (open ClassName) Test edeceğimiz sınıf ve metodun başına open ifadesini ekleyerek extend edilebilir hale getirmek.

Server Ip

Problem Domain’i barındıran server’ın IP’sini bulmak istiyoruz. Çözüm Linux Terminali aç host www.aykutasil.com şeklinde istediğin domain’i yaz Server IP: www.aykutasil.com has address 104.24.114.254 www.aykutasil.com has address 104.24.115.254 www.aykutasil.com has IPv6 address 2606:4700:30::6818:73fe www.aykutasil.com has IPv6 address 2606:4700:30::6818:72fe Windows Komut penceresini aç. (cmd.exe) nslookup www.aykutasil.com şeklinde istediğin domain’i yaz Server IP: Name: www.aykutasil.com Addresses: 2606:4700:30::6818:73fe 2606:4700:30::6818:72fe 104.24.115.254 104.24.114.254

Bash Scripts

cat <<EOF cat <<EOF komutu ile multiline bash script yazabiliriz. Son satır EOF oluncaya kadar satır oluşturulmaya devam eder. EOF yerine herhangi bir belirteç yazılabilir. Genelde EOF veya STOP yazılır. $ sql=$(cat <<EOF SELECT foo, bar FROM db WHERE foo='baz' EOF ) $ cat <<EOF > print.sh #!/bin/bash echo \$PWD echo $PWD EOF Yukarıda ki bash çalıştırıldığında print.sh adında ve içeriği #!/bin/bash echo $PWD echo /home/user olan bir dosya oluşur.

Android CircleCI Configuration

CircleCI Android Yapılandırması .circleci/config.yml version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28-alpha environment: JVM_OPTS: -Xmx3200m steps: - checkout - run: name: Initialize Keystore File command: echo $KEYSTORE_BASE64 | base64 --decode > app/aykutasilkeystore - run: name: Initialize Fabric Properties command: | echo "apiKey=$FABRIC_API_KEY" >> app/fabric.properties echo "apiSecret=$FABRIC_API_SECRET" >> app/fabric.properties cat app/fabric.properties - run: name: Initialize Keystore File command: | echo "signingKeyAlias=$KEYSTORE_KEY_ALIAS" >> keystore.properties echo "signingKeyAliasPassword=$KEYSTORE_KEY_ALIAS_PASSWORD" >> keystore.properties echo "signingStoreFile=$KEYSTORE_STORE_FILE" >> keystore.

CircleCI Configuration

CI/CD Uygulamaların build/test/depleyment süreçlerini otomatize etmemizi sağlayan CI/CD kavramları günümüz yazılım dünyasında olmazsa olmaz, bilinmezse ayıp olurlar arasına girmiş bulunmaktadır. Manuel yapılan bu işlemlerin otomatize edilmesi bize ve takım üyelerine çeşitli konularda fayda sağlayacak ve eğer manuel yöntemler ile ilerlendiği takdirde oluşabilecek hataları minimuma indirecektir. Projenizin build/test/deployment adımlarında çeşitli sorunlar yaşamaya başlamışsanız ya da başlamadan bitirmek istiyorsanız bu kavramları öğrenmekte fayda var. Çeşitli CI/CD araçları bulunmaktadır. Travis, Bitrise, AppCenter, CircleCI bunlardan bazılarıdır.

SSH Sürekli Parola İstemesi Sorunu

Problem ./ssh klasörünüzde id_rsa ve id_rsa.pub dosyanız var ve Github, Gitlab, DigitalOcean vs. gibi platformlara erişim için bu rsa keyini kullanıyorsunuz. Her biri için ayrı ayrı rsa key oluşturmuşda olabilirsiniz tabi. Fakat git clone [email protected]:aykuttasil/test.git gibi bir komutu çalıştırdığınızda Enter passphrase for key '/Users/aykutasil/.ssh/id_rsa': gibi bir uyarı karşınıza çıkıyor ve rsa keyinizin şifresini girmenizi istiyor. Her git komutunda aynı şey ile karşılaşıyorsunuz. Yukarıda ki durum ssh‘ın kullanım amacına ters düştüğü için ortada bir problem var demektir.

Android Dagger

@BindsInstance Bağımlılıklarınızı oluşturma esnasında belirtmeniz gereken bir değişkenininiz var ve bu değişkeni diğer module leriniz içerisinde kullanıcaksınız. Aşağıdaki gibi @BindsInstance kullanarak bu bağımlılığınızı dependency graph içerisine ekleyerek diğer modüller içerisinde kullanımını sağlayabilirsiniz. @Component(modules = AppModule.class) interface AppComponent { App app(); @Component.Builder interface Builder { @BindsInstance Builder apiUrl(@ApiUrl String apiUrl); AppComponent build(); } } Component build edilirken apiUrl değeri bind edilir. App app = DaggerAppComponent .builder() .apiUrl("http://....") .build()

AMP

Not: Bu yazı öğrenme sürecinde hazırlanmış olup kısa kısa notlar içerir. Nedir bu AMP Kurallar <!doctype html> ile başlamalı <html amp> şeklinde düzenlenmeli <head> tagı içerisine ilk sırada <meta charset="utf-8"> şeklinde meta tagı eklenmeli <head> tagı içerisine mümkün olduğunda erken sırada <script async src="https://cdn.ampproject.org/v0.js"></script> script tagı eklenmeli <head> tagı içerisine sayfanın AMP olmayan halinin linkini ya da sadece AMP li hali var ise kendi url i <link rel="canonical" href="$SOME_URL"> şeklinde belirtilmeli <head> tagı içerisine <meta name="viewport" content="width=device-width,minimum-scale=1"> meta tagı eklenmeli AMP js dosyası yüklenene kadar mevcut içeriği gizlemek için <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript> tagı eklenmeli Bir çok HTMl tagı direk olarak AMP HTML içerisinde kullanılabilir fakat bazılarının (img gibi) AMP için özel versiyonları bulunmaktadır.

Android Test

Not: Bu yazıyı hazırlarken ben de öğrenme sürecinde olucam. Araştırdığım ve öğrendiğim tüm teknik bilgileri ve yöntemleri, best-practice leri gelişi güzel(karmakarışık değil) bir şekilde yazıcam. Sonrasında zaman bulduğum vakit bir düzenleme yapıcam. Unit Test ve Instrumentation Test Unit Test Unit Test: Android framework ünden bağımsız olan sınıfları/metodları test etmek için kullanılır. Robolectric ve JUnit popüler unit test araçlarıdır. If you run local unit tests, a special version of the android.

DNS over TLS Nedir?

DNS over TLS Nedir? Kısaca açıklamak gerekirse, İnternet Servis Sağlayıcılarının, hangi siteye erişmek istediğimizi görmesini engelleme yöntemidir. TLS/SSL protokolü zaten bunu yapmıyor mu? TLS/SSL protokolüne sahip siteler üzerinden yapılan veri alış verişleri şifreli yapılır fakat hala hangi siteye erişmek istediğimiz açık/şifresiz bir şekilde bellidir ve internet servis sağlayıcıları bunu görebilir. Bunu engellemek için DNS over TLS kullanılır. Özet TLS üzerinden DNS, tüm DNS isteklerinin güvenli bir şekilde yapılmasını sağlayan bir protokoldür.

TLS vs SSL

TLS/SSL nedir? TLS (Transport Layer Securtiy) , SSL(Secure Sockets Layer)‘ın modernize edilmiş halidir diyebiliriz. Yani günümüzde SSL den bahsedildiğinde aslında TLS den bahsediliyor olduğunu söyleyebiliriz. TLS protokolü, makinelerin web üzerindeki iletişimini kimlik doğrulama ve şifreleme mekanizmaları ile güvenli hale getirem bir standarttır. Günümüz dijital dünyasında güvenliğin önemi her geçen gün arttığı için iletişim yöntemleri ve güvenliği de beraberinde değişmekte ve gelişmektedir. Bu nedenle web iletişiminin güvenli hale gelmesi zorunluluk ve ihtiyaçtır.

Step Motor Nedir?

Step motoru bir diğer adıyla adım motorları; hızlı, Doğrusal ve kademeli hareket istenilen uygulamalarda kullanılan fırçasız DC elektrik motorudur. Kademeli motorlar düşük devirlerde yüksek tork ve düşük titreşim ve hassasiyetle çalışmaktadırlar. Step motorları rotor denilen sabit bir manyetik dönen şafta ve stator olarak adlandırılan motoru çevreleyen sabit kısımdaki elektromıknatıslardan oluşur. step motorlar, yarim adim modunda çalistiklarin da hassasiyetleri daha da artar. STEP MOTORUN SÜRÜCÜ İLE ÇALIŞTIRILMASI Step motorlar mikro denetleyici, arduino ve step motor sürücü yardımı yöntemi ile sürülmektedir.

Android Backstack Navigate

Android Navigate Örnek Senaryo Kullanıcıya bir ürün ile ilgili notification yolladınız. Kullanıcı bu notification a tıkladığında direk olarak Ürün Detay sayfasına yönlendiriliyor. Kullanıcı sayfada işi bittiğinde geri tuşuna basıyor ve siz bu durumda kullanıcıyı uygulamanın Anasayfasına yönlendirmek istiyorsunuz. Ek bir geliştirme yapmadığınız takdirde bu senaryo için geri tuşuna basıldığında uygulama kapanır. Çünkü geri gidecek ekranı yoktur. Direk olarak Detay sayfası açılmıştır. Çözüm İlk olarak yapmamız gereken Manifest.xml dosyasında DetailActivity tanımlamasını yaptığımız yerde parentActivityName i belirtmek.

Android Architecture Components

Android Architecture Components Öncelikle şu linkleri verelim: https://developer.android.com/topic/libraries/architecture/index.html Lifecycle LiveData ViewModel LifeCycle Daha önce Android uygulaması geliştirenler çok iyi bilirler ki bir activity veya fragment ın yaşam döngüsünü yönetmek sıkıntılı bir süreçtir. Activity’nin arka planda mı yoksa görünür vaziyette mi oluşuna göre düzenlenen akışlar çoğu zaman yoğun dikkat gerektiren süreçlerdir. Yukarıda ki Lifecycle linkine tıklarsanınz çok güzel bir örnek ile durumu açıklamışlar. Oluşturduğumuz nesneler eğer activity’nin yaşam döngüsüne bağlı ise bunu yönetmek için activity’mizin genelde onCreate ve onStop metodları içerisinde bu nesnelere ait fonksiyonları çağırıyorduk.