Yeni Uygulamam [DEPREM BİLDİRİMİ]

Herkese selamlar….

Şöyle bi’ 2020nin ilk aylarına baktığımızda pek de iç açıcı girmediğimiz ortada..
En önemlisi 10 yıldan beri fay hattının durgunluğunu bozup ülkemizde ciddi derece de depremler yaşamaya başlaması…
Yakın bir sürede Aydın ve Marmara’da da büyük bir deprem beklenmekte, alacağımız önlemlerle inşallah 1 kişinin bile hayatını yitirmeden geçiririz..

Şimdi konumuza dönersek Google Play üzerinde araştırma sonucu ne yazık ki depremlerle ilgili AFAT dışında çokta güzel uygulamalar bulamadım, birinde biri varsa diğerinde yok hep bi yetersizlik..
Depremlerin şiddetli olduğu bu günlerde şöyle bir fikir geliştirdim;

1-) Uygulamaya ilk girdiğinde son 10 depremi karmaşık olmadan net bir şekilde listeleyebilmek,
2-) Uygulama kapalı olsa dahi; Türkiye gündeminden veya belirlediği illerden X büyüklüğünde bir deprem olduğunda haberdar olması/anlık bildirim (notificition) alması,
3-) Tartışmaların yapılabileceği bir sohbet paneli (kesinlikle goygoy olmadan, hislerini paylaşabilecekleri bir ortam *bizler tarafından sürekli denetlenecek),
4-) Büyük bir sarsıntı ve deniz seviyesi yüksekliğinde ani bir düşüş olduğu zaman bizim sunucumuza bildirim geçmesi ve bu durumu sağlık bildirimlerine bildirmemiz, *
5-) Büyük bir sarsıntı ve deniz seviyesi yüksekliğinde ani bir düşüşünde telefondan son ses müzik çalması. *

Genel düşüncem bu şekilde, önemli olarak 4 ve 5. maddelere baktığımızda olası bir enkaz durumunda kişinin enkaz altında efor kaybı yaşatmadan telefonundan SOS sesinin dışarıya vermesi ve depremzedenin daha kolay bir şekilde bulunması. (ani bir rakım düşüşü ve sarsıntıda uygulama bizim sunucumuza telefon numarasını kaydedecek ve bizimde sağlık ekiplerine bildirmemiz sağlanacak.)

Fikrimin çoğunu bitirmiş durumdayım bir kaç dizayn düzenlemesi yapıp paylaşacağım.

Uygulamada neler kullandın diye soracak olursanız buyrun arka planda kullanılan nugetler ve bazı hazır dizaynlar;

• Uygulama neyle yazıldı?
– Mobil ; Microsoft Xamarin.Forms
– Sunucuda ki Kandilli Rasathanesinden Veri Çekme ; Python ( https://github.com/emirkabal/deprem-api ) (fakat kısa süre içinde NET Core 3.0’a kendim bir bot yazacağım.)

• Uygulama kapalı olsa dahi bildirim alması (Android Service)
Xamarin.Android.Services ve Xamarin.Forms.MessagingCenter.Subscribe<>(); kullanımı ile Samsung ,Huwai,Vestel gibi telefonlarda 24 saat boyunca uygulama kapalı olsa dahi bildirimler alıyordum fakat Xiaomi telefonlarda uygulama kapandığı an Android.Services kapanması beni mahvetti o yüzden https://github.com/shinyorg kullanmaya karar verdim 1-2 testlerim oldu tahminlerime göre bütün telefonlarda bu sorunu bununla çözmüş olacağım. (*çözemezsem değiştirmiş olurum:p)
** Özellikle bu konu hakkında ne yazık ki Türkçe ve güncel makale bulmak çok zor bunu özel bir blog yazımda en kısa ayrıntılarına kadar anlatacağım.

• Xamarin Tasarımları Nasıl Geliştirdin?
– Tasarımları sıfırdan yapmak yerine güzel UI tasarımları geliştirmenin daha iyi fikir olduğunu düşündüm. Tasarımlarım şu 2 projeden birleştirme;
a-) https://github.com/devcrux/WeatherApp
b-) https://github.com/sthewissen/KickassUI.Banking

• Extra Kullanılan Nuget Paketleri;
– Tartışma – Mesajlaşma alanı için; SignalR
– Ekranda işleme bağlı async “Lütfen Bekleyiniz” ifadesi için; AiForms.Dialogs
– Xamarin MVVM yapısı için ; FreshMvvm
– Menünün yukarda değilde aşağıda olmasını istediğim için ; LH.BottomNavigationBar.FX
– XAML üzerinde anlık değişiklikleri görebilmem için ; LiveXAML + HotReload
– JSON verileri kullanabilmek için ; Newtonsoft.Json
– Deprem bilgisini paylaş butonları; Plugin.Share
– Kullanıcıya Notification için ; Plugin.LocalNotification **
– Bazı bölgelerde kullanıcıları yönlendirme yapmadan hızlıca pop-up göstermek için ; Rg.Plugins.Popup
– Android Jobs ve Servisler için ; Shiny.Core
– Ayarları ve kullanıcı kayıtlarını kaydetmek için database ; SQLite
– Depremin olduğu noktayı göstermek için ; Xam.Plugin.ExternalMaps
– Deprem notificationunda titreşim gönderebilmek için ; Xam.Plugins.Vibrate
– Xamarin.Android tarafında binding yapabilmek için ; Xamarin.Android.Support.Core.Utils
– Klasik vazgeçilmez pluginimiz : Xamarin.Essentials (anlatmaya gerek yok mikemmel)
– Panel ve Grid yapılarının daha güzel, göze hoş gelmesi için ; Xamarin.Forms.PancakeView

Xamarin Failed to create JavaTypeInfo for class – Hatası Çözümü

Eyyoo eyyoo herkese selamlar….

Bildiğimiz üzere Xamarin Microsoft tarafından halen geliştirilen bir proje..
Bu gelişim sürecinde durduk yere patlamalar,çatlamalar yaşatabiliyor. Hele ki bazı hataların çözümünü bulmak çok zor çünkü ne hata satırı veriyor, ne de bak hatan burada diyebileceği kızgın kod bloklarını 🙂 Bundan sonra yaşayacağım her hatada türkçe olarak bu hataların çözümlerini sizlere sunacağım bunlardan bir taneside “Failed to create JavaTypeInfo for class” hatası.

Hata Adı : Failed to create JavaTypeInfo for class: Android.Support.V4.View.Accessibility.AccessibilityManagerCompat/IAccessibilityStateChangeListenerImplementor due to MAX_PATH: System.IO.DirectoryNotFoundException: Could not find a part of the path…
Hata Resmi:


Hata Çözümü: Belgelerimde ki Github veya masaüstünde ki projenizi, daha kısa bir yol uzantısına taşıyın..
Yanii; Bu hatayı aldığınızda projeyi kapatıp, proje dosyasını C:\ dizinine taşıyın ve projeyi tekrar açın, sorun tamamen kalktığını / buildlendiğini göreceksiniz 🙂

• Eğer çözüm bulamadıysanız yorum olarak belirtirseniz beraber diğer çözüm yollarını bulabiliriz. Herkese keyifli kodlamalar, görüşmek üzere.. : )

Xamarin Forms Giriş Ekranı (YAKINDA!)

Eyyyoo herkese selamlar arkadaşlar Truegram adlı projemin mobil uyguması için geliştirdiğim giriş ekranını sizlerle paylaşacağım.
Bir sorun olmazsa planladığım paylaşım tarihi 30.12.2019 olacaktır, görüşmek üzere 🙂

Proje içinde olacak konular;

– Xamarin Custom Font,
– Binding Kullanımı,
– Grid.ColumnDefinitions ve Grid.RowDefinitions kullanım mantığı,
– CustomEntry & Models & Renderer kullanımı.

C# Windows Form Hata Geri Bildirimi

Eyyoo eyyoo herkese selamlar….

Satışa sunduğumuz program bazen bilinmedik sebeplerden dolayı kendini kapatabilir veya diğer sebeplerden dolayı sorunlar çıkartabilir. Bu ve buna benzer durumlarda müşterinin bilgisayarına bağlanıp kontrol etmek biraz profesyonellik dışı olduğu için müşterinin aldığı hatayı otomatik olarak bize mail attırabilir veya hata dosyasını kaydettirebiliriz. Nasıl mı? Buuuyyrunnnn;

İlk önce Program.cs ‘de ki Main classına bir hata yakalayıcısı ekliyorum.

Application.ThreadException += new ThreadExceptionEventHandler(ErrorThread);

Şimdi hata durumunda tetiklenecek olan ErrorThread eventini oluşturuyorum;

Hatanın ne olduğunu anlayabilmem için ThreadExceptionEventArgs içinde bulunan Exception.Message ifadesini hata nedeni olarak gösteriyorum…

Şimdi programımız olası bir hata durumunda .exe‘nin bulunduğu yere error.txt diye bir metin belgesi oluşturup dakika dakika kaydettiğini görebilirsiniz 🙂

Peki.. hatayı mail olarak göndermek istiyorsak ne yapmalıyız diyorsanız çözümü çok basit.. hemen projeme sendMail adında bir class açıyorum..

Bu sefer metin belgesi kodumu siliyorum ve mail göndermeyi tetiklettiriyorum.

Programı hataya düşürdüğüm zaman gördüğünüz gibi otomatik olarak mail hesabıma düştü 🙂

Bu konumuzda bu kadar eğer projelerinizde neler olup bittiğini öğrenmek istiyorsanız bu kısa yolu kullanarak öğrenebilirsiniz.
Herkese bol mantıklı kodlamalar 🙂

C# Veri Kapsülleme (Class Encapsulation) {Get/Set Mevzuları}

Eyyoo eyyoo herkese selamlar…
Bugün sizlere github’da ki projelere bakınca ‘bu değişkenlere neden sadece int veya string diye bırakmıyoruz?/niye get-set ile uğraşıyoruz?/nedir bu get-set?” dedirten veri kapsüllemeyi inceleyip, nasıl kullanılacağını örnekleriyle birlikte sizlere anlatmaya çalışacağım.

Kapsülleme, sınıf içindeki değişkenlere erişimi kaldırmak ya da kısıtlamak için kullanılır. Önemli bir değişkeni public olarak tanımlamak, değişkene yazılımcı tarafından -bilinçli ya da bilinçsiz- müdahaleye açık hale getirir. Bu da sınıf içindeki metodların çalışmasını olumsuz etkileyebilir. Bu gibi durumların önüne geçmek için kapsülleme tekniği kullanılmaktadır.(*1)

Yanii.. Get ve Set metodlarını birer kontrol mekanizması olarak düşünebiliriz . Kod blokları arasında oluşabilecek hataları önceden engelleyen “hoopp hemşerim nereye” diyen bodyguard’ımız 🙂 tabi sadece hataları engellemek için değil, diğer istediğimiz limitlemeleri, koşul kontrollerini de get & set içinden yapabiliriz.

Bilmemiz gereken bilgiler;
• get : Kapsül içindeki verileri okumamız için çalışan metod. (Get -> Getir olarak aklınızda kalabilir)
• set : Kapsüle veri göndereceğimiz zaman kullanacağımız metod.
• value : Kapsüle dışardan gelen veriyi incelemek veya atama yapacağımız zaman kullanacağımız anahtar kelime,
• return : Geriye bir değer döndürmemize yardımcı olan anahtar kelime.

Örneğin nerelerde Get&Set kullanabiliriz?
– Kimlik numarasına harf ataması yapılmasını engelleme durumunda,
– Belirli bir kritere uygun olup olmamasını kontrol ettirme gibi durumlarla örneklendirebiliriz..

Şimdi birlikte kısa bir örnek yapalım;
Hedefimiz şu : Kullanıcıdan bir TC kimlik numarası isteyeceğiz ve TC numarasını tekrar çağırdığımızda ilk 4 hanesini görüp geri kalanını yıldız (*) ile gizleyeceğiz.
(benzeri örnek: 16haneli kredi kartı bilgisinin ilk 4 hanesini görüp kalanının *** olması gibi..)

İlk önce Personel.cs olarak bir class açıyorum ve malzemelerimi yavaş yavaş ekliyorum;
1-) _tckimlikNumarasi adında uzaklardan erişimi olmayan bir private değişken oluşturuyorum.
2-) tckimlikNumarasi adında her yerden erişilebilen, gelen veriyi _tckimlikNumarasi ‘e aktaracak bir kapsül oluşturuyorum.

* _tckimliknumarasi olarak açılan değişkenim private olduğu için diğer classlardan erişimi olmayacaktır. Veri gönderdiğim zaman bütün iş yükü tckimlikNumarasi ‘nin set bloğu arasında olacaktır.

Şimdi projeye geri dönersek; İlk önce kullanıcıdan gelen TC numarasının boş olup olmadığını daha sonrasında da 11 haneli olup olmadığını kontrol edeceğiz. Eğer kriterlere uyuyorsa hata mesajım çıkacak, uymuyorsa direk else bölümüne geçip _tckimliknumarasi değişkenine verimi atayacağım.

* Şimdi set tarafımdaki koşullarım bitti, hemen get tarafını kodlamaya başlıyorum.

Get tarafında ki amacım neydi? tckimlikNumarasi çağırdığım zaman 11 hanenin ilk 4hanesini gösterip 7haneyi yıldız yapmaktı…

Hatırlarsanız string değerlerin belirli bir aralığını almak istiyorsak Substring kullanıyorduk. O yüzden _tckimliknumarasi değişkenime 0,4 Substringi uygulayıp sonuna da yıldızlarımı ekledim mi istediğim her şey olmuş olacak 🙂

Personel.cs tarafım hazır, Program.cs tarafına geçip per adında Personel classını üretiyorum.

Artık işim personele tc numarası atamak ve tc numarasını çağırmak…

Kodumuzu şimdi inceleyelim bakalım;