Asp.Net Core Session

Asp.Net Core Session Kullanımı Asp.Net Core 2.1 ve üstü sürüme sahip projelerinizde Session kullanmak için Startup.cs dosyanızı aşağıdaki yöntemlerden birini seçerek güncellemeniz gerekmektedir. Yöntem 1 public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true); services.AddDistributedMemoryCache(); services.AddSession(options => // <-------- { // Set a short timeout for easy testing.

Android Debugging With Local Web Server

Fiziksel Android cihazımızla localimizde çalışan web server’a erişmek, development aşamasında eminim ihtiyaç duyduğunuz veya duyacağınız gereksinimlerden biridir. Bununla beraber local makinenizde bulunan VM üzerinde koşan web server’a erişmek.. Ah harika.. Canlı bir örnek verirsem sanıyorum daha iyi olacak. Geliştirme yaptığınız makinenizinde MacOS işletim sistemi var. Bununla beraber çeşitli ihtiyaçlarınızdan ötürü windows kurmanız gerekti ve Virtual Machine kurarak içine windows yüklediniz. Windows üzerinde Visual Studio ile bir WebApi ayağa kaldırdınız ve bu api‘ye fiziksel Android cihazınızdan erişmek istiyorsunuz.

Android File System

Internal Storage vs External Storage Internal Storage Her zaman erişilebilir. Sadece uygulamanın kendisi tarafından erişebilir. Buraya kaydedilen dosyalar başka bir uygulama tarafından görünmez. USB ile bilgisayara bağlanıldığında bu dosyalara erişim sağlanamaz. Uygulama silindiğinde internal storage temizlenir. External Storage Her zaman erişilebilir durumda olmayabilir. External storage cihaza dahili olarak bulunabileceği gibi USB cihazı olarak sonradan takılmış bir cihaz da olabilir. Bu nedenle erişebilir olup olmadığı kontrol edilmelidir (getExternalStorageState()).

ASP.NET Core Filters

Not: Bu makale hazırlanırken kullanılan .net core versiyonu: 2.2 ASP.NET Core‘daki filter yapısı, middleware bileşenine benzer fakat bazı farklılıkları vardır. Filter‘lar ile sadece request-response süreci arasına girilerek istenilen kod blokları çalıştırılabilir. Filter tipine göre request-response sürecinin hangi aşamasında çalıştırılacağı belirlenebilir. Oldukça özelleştirebilir bir yapı sunar bize Filter‘lar. Filter Tipleri Authorization Filters İlk çalışan filter‘dır. İlgili mvc action metoduna erişmek için user‘ın yetkisi olup olmadığını kontrol eder. Eğer koşullar sağlanıyor ise ilgili mvc action metodu çalışır.

ASP.Net Core app.Run() Middleware

ASP.NET Core Run Method ASP.NET Core ile birlikte gelen middleware konsepti sayesinde request-response süreçleri arasına girerek kendi mantıksal devremizi yazmamız çok kolay hale gelmiştir. Yukarıda ki gibi Startup.cs sınıfı içerisindeki Configure fonksiyonuna app.Run() diyerek middleware‘ımızı ekleyebiliriz. Peki tam olarak app.Run() metodu nasıl çalışıyor? app.Run() middlaware’ı ile istenilen bir kod bloğunu çalıştırabilir ve uygulamamıza kısa devre yaptırabiliriz. Yani pipeline akışı eğer Run() içerisine girerse, sonraki kod blokları çalışmayacaktır. Yukarıda ki kodun çıktısı sadece Response 1 olacak ve sonraki kod bloğu çalışmayacaktır.

Android DataBinding

Android DataBinding Android dünyasında temiz kod(Clean Code) günümüzde çokça konuşulan konular arasında yer almakta ve neden temiz kod yazmalıyız ile alakalı bir çok makale yazılmaktadır. Temiz kod yazmak için MVP, MVVM vs. kod tasarım mimarilerinden birini seçerek yazılan kodların ve etkileşimlerinin birbirinden ayrımını sağlamaktayız. Bu kod tasarım kalıpları ile beraber bize çok faydası olacak bir mimari daha bulunmakta: DataBinding DataBinding Uygulamanın arayüzünü tasarlamak için kullandığımız layout dosyamızın içerisine Uygulamamızın arayüzünü oluşturmak için kullandığımız layout xml dosyalarına gerekli datayı doğrudan entegre ederek, arayüz değişikliği ile ilgili tüm akışların harici müdahaleye gerek kalmadan otomatik olarak gerçekleşmesini sağlayabiliriz.

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()