13 Aralık 2019 Cuma

Azure Devops Nedir?

Azure Devops proje geliştirme yapabilmemiz için tasarlanmıştır. Cloud tabanlı bir Devops ürünü olup tek hedefi sadece kod geliştirmek değildir.

Scrum Projelerimizi Yönetmek
Kanban Boardlarımızı Yönetmek
Kodlarımızın Versiyonlanmasını Yönetmek
Projemizi dev,Test ve Prod ortamlarında Deploy Etmek
Test Süreçlerini Yönetmek kısaca bir proje geliştirme aşamasında ihtiyacımız olan tüm proje aşamaları için gerekli olan her şeyi barındırır.


Azure Devops, Visual Studio TFS (Team Foundation Server) services olarak daha önceden kullanılan yapının yeni geliştirilmiş versiyonudur. Azure Devops Cloud çalışan bir servis olarak kullanılabilir ya da dilerseniz onPromise olarak kendi serverlarınızı da kurup kullanabilirsiniz.

Azure hizmetinin bu detaylarına ulaşmak için tıklayınız

Azure Devops Server ürünü hakkında detay bilgi için tıklayınız

Azure Devops Boards görseli aşağıdaki gibidir. 



















Kodlarımızın yönetimini Azure Repos üzerinden kontrol edebiliriz. 
Git veya Team Foundation Version Control (TFVC) yöntemleri yönetebileceğimiz bir repository yapısına sahiptir.


Visual Studio Üzerinden Git ile proje yönetebilmeniz için öncelikle gerekli kurulumları yapmanız gerekir. Ardından Team Explorer üzerinden ulaşabilirsiniz.























Projede çalışan developerların hepsinin kendisine ait branch'ı olmalıdır ve mümkün olduğunca herkes kendi branch'ında olmalıdır.
1.Master Branch ( tüm kodların birleştiği ana branch )
2.Developer Branch'leri

Kod geliştiren developer takımının günlük kod geliştirme algoritması 
  1. Developement yaparken kendi branch yapımızda çalışırız.
  2. Sabah işe geldiğinde güncel son halini kendi branch'ına çek
  3. Akşam gün sonu değişiklikleri commitle ve server tarafına push et. (master tarafına birleşecektir.)




Arkadaşımın yazdığı kodları kendime nasıl çekerim algoritması 

  1. master branchına geç
  2. sync bölümünden değişikleri Fetch edip sonra pull ederler.
  3. kendi branchlarına geçip bu değişiklikleri Branches bölümünden merge ederiz, Merge noktasında master'dan ...kendi branchımıza merge etmemiz gerekecektir.
  4. aynı dosyalarda çalışan kişiler varsa eğer bu durumda conflictler meydana gelebilir, yapmamız gereken ise conflictleri çözümlemektir. 



Git üzerinde conflict yaşamamak için development yaparken aşağıdaki durumlara dikkat etmemiz gerekecektir.
  1. OOP olmayan programming yaklaşımından uzak  durmak
  2. Design Patterns kullanmak
  3. Clean Code yazmak
  4. Abstract Class kullanmak









5 Aralık 2019 Perşembe

7 Adımda Electron Projesi Oluşturma

Yeni teknolojiler yeni heyacanlar ve yeniden blog yazısı yazarken buldum kendimi :)


Peki nedir bu electron dedikleri? Aşağıdaki gibi bir logosu var. 




Temelinde node.js bulunan farklı işletim sistemlerinde çalışabilen bir teknolojidir.









Neden Electron Öğrenelim ki?

Web ortamında çalışan bir developer olduğunuzu düşünelim ve acilen masaüstü bir uygulama geliştirmeniz istendi bu durumda ihtiyacınız olan backend dili olan bir dil öğrenerek geliştirme yapmanız beklenecekti. Ama artık electron teknolojisi sayesinde kişilerin backend programlama dilerini bilmeden masaüstü uygulamalar geliştirebilirsiniz. Java , C# vs. dillerinden birisini bilmeden çok tatlı masaüstü uygulamaları geliştirebilirsiniz ve çok lezzetli uygulamalar yapabilirsiniz :)

Visual Studio geliştiricileri tarafından electron kullanılarak yazılmış olan Visual Studio Code ile Electron projelerinizi geliştirmeniz çok kolay :)  


Bilgisayarımda Electron Projesi Nasıl Oluşturabilirim?

  1.VS-Code kur
     Visual Studio Code kurmak için tıklayınız.

  2.Terminal ekranının aç (Menüden Terminal....New Terminal)
     Komut satırı gibi çalışan program içerisinde açılan kod yazma ekranı
    


  3. Bilgisayarınıza versiyon kontrol sistemi için kullanılan git Programını kur.
      Git Programını bilgisayarınıza kurmak için tıklayınız.
 

  4. Git üzerinden proje clone'nu al.
    
       git
clone https://github.com/electron/electron-quick-start


  5. Projenin dosyalarının bulunduğu seviyeye geç         
      cd
electron-quick-start

6. Node.js paketini projeye aşağıdaki kodu kullanarak dahil et.
  
    npm install

7. Uygulamayı çalıştır.
  
    npm start
Electron ile geliştirilmiş en popüler uygulamalardan sadece bir kaçı 
aşağıdaki gibidir.
  • WhatsApp Desktop
  • Slack Desktop
  • Pexels Desktop
  • Visual Studio Code

7 Ağustos 2019 Çarşamba

MATLAB Giriş
















Matlab açılımı matrix laboratory'dir. Mathworks tarafından geliştirilmiştir.

MATLAB Nerelerde Kullanılır?

  • Matematik Problemlerinin Çözümü
  • 2d-3d Grafik Çizimleri  
  • Makine Öğrenmesi
  • Derin Öğrenme
  • Veri Bilimi

MATLAB ile Neler Yapılır?
  • Farklı Algoritmalar Geliştirilebilir
  • Verilerin Analizi ve Görselleştirilmesi
  • Lineer Cebir ve Matris İşlemleri
  • Veri Modelleri, Prototip, Simulasyon İşlemleri
  • Kullanıcılar İçin Programlar Geliştirme

MATLAB Nasıl Çalışır?

Yazdığımız kodların hızlı çalışmasını sağlar. Kodlar JIT(just in time) derleyici kullanılarak derlenir. Java'ya göre MATLAB'ta algoritma geliştirmek daha hızlı ve sağlıklıdır.

MATLAB Avantajları
  • Her verinin matris olarak değerlendirilmesini sağlar. Bir tamsayı bir satır ve bir sütundan oluşan matristir. Matris toplama,çarpma ve tersi gibi işlemler için hazır fonksiyonlar bulunmaktadır.
  • Vektörleştirilmiş işlemler kullanılarak kodların boyutunu önemli ölçüde düşürür.
  • Simulink yardımı ile verinin grafiğe dökülmesi kolaylaşır ve boyutunun ayarlanmasına izin verir.



31 Temmuz 2019 Çarşamba

C# DLR (Dynamic Language Runtime) Kullanımı

.NET Framework 4.0 ile birlikte hayatımıza giren DLR'ın (Dynamic Language Runtime) temel olarak amacı static ve dynamic yapıların bir arada çalışabilir olmasını sağlamaktır. Bu özellik .NET projelerinde dinamik dillerdeki kütüphanelerin kullanılmasını sağlıyor.
DLR ayrıca IronPython gibi dinamik programlama dillerinin Common Language Runtime (CLR) ile iletişim kurmasını da sağlamaktadır. Bunun için dynamic anahtar kelimesi kullanılır.



Örneğimizde python dili ile "Hesap Classı" yazılacak olup class içerisine "topla-fark-print" işlerini yapacak olan metotlar dahil edilecektir. C# Console Projesi içerisinde python tarafında yazılmış olan class kullanılacaktır. C# dünyasında "Python" kodunu kullanabilmek için projemize IronPython  kütüphanesini dahil etmemiz gerekmektedir.  

Öncelikle boş bir C# Console Projesi aşağıdaki görseldeki gibi oluşturulur.














Python kodlarını yazabilmemiz için gerekli olan IronPython kütüphanesini   projeye sağ tıklayıp gelen menüden "Manage Nuget Packages" seçeneğinden seçelim.






























static void Main(string[] args)
{
            var source = @"C:\Users\n.esendal\a\dynamicExample.py";
            var engine = Python.CreateEngine();
            var scope = engine.CreateScope();
            var oper = engine.Operations;
            engine.ExecuteFile(source,scope);
            var Hesap = scope.GetVariable("Hesap"); //classı kullandık
            dynamic ins = oper.CreateInstance(Hesap);
            Console.WriteLine(ins.topla(15,20));
            Console.ReadKey();

}

Python uzantısı .py olacak şekilde aşağıdaki kodlarla hazırlanır. Adını "dynamicExample.py" olarak düzenlenir.


class Hesap():
    def __init__(self):
        pass
  
    def topla(self,x,y):
        return (x+y)
  
    def fark(self,x,y):
         return (x-y)



Bu python dosyasını uzantısı .py olacak şekilde bilgisayarıma kaydediyoruz.

Console projesine geldik ve python yolunu işaret edeceğimiz bir değişken tanımladık. Ve IronPython kütüphanesini "using Ironpython.Hosting;" kodunu ekleyerek kullanabiliriz.


Kodumuzu çalıştırırsak 15 ve 20 değerlerinin toplamı olan 35 sonucunu ekranda görürüz. 

























Python kodumuzda değişiklik yaparsak ekrana bilgi yazdıran kodu ekleyelim. (Python ve C# kodlarının son hali)


class Hesap():

 def __init__(self):

  pass  

 def topla(self,x,y):

  return (x+y)  

 def fark(self,x,y):

  return (x-y)  

 def yazdir(self,a):

  print(a)


Main Kodlarında direkt olarak dynamic türünden tanımlanmış olan değişkeni kullanarak son eklediğimiz yazdir metodunu çağıralım.



static void Main(string[] args)

{



            var source = @"C:\Users\n.esendal\a\dynamicExample.py";

            var engine = Python.CreateEngine();

            var scope = engine.CreateScope();

            var oper = engine.Operations;

            engine.ExecuteFile(source,scope);

            var Hesap = scope.GetVariable("Hesap");

            dynamic ins = oper.CreateInstance(Hesap);

            ins.yazdir(ins.fark(5, 15));

            Console.ReadKey();

}
















12 Temmuz 2019 Cuma

.Net CAMP Etkinliği

Kadir Has Üniversitesi'nde Taze .NET Camp Etkinliğine eğitmen olarak katıldım. Öğrencilerimle birlikte aşağıdaki konular üzerine geliştirmeler yaptık.


  • Nesne Yönelimli Programlama (OOP)
  • S.O.L.I.D Yazılım Geliştirme Prensipleri
  • Tasarım Desenleri (Design Patterns)
Etkinlik 5 günlük bir kamptı. Etkinliğin detaylarına ulaşmak için tıklayınız. Eğitim workshop tadında uygulamalı olarak geçti. Öğrenciler anlatılan konuları örnekler üzerinden deneyimleme şansına sahip oldular. Katılımcılar farklı farklı üniversitelerden olup teknik üniversite öğrencilerinin de bulunduğu gayet dinamik ve enerjik bir gruptu. Çok etkileşimli ve keyifli bir eğitim gerçekleştirdik. Yine olsun yine gidelim :)










4 Temmuz 2019 Perşembe

Xamarin İlk Uygulama

Xamarin'i Nasıl entegre edilir makalesini okumak için tıklayınız.

Xamarin'de ilk projemiz oluşturmadan önce anroid ve IOS tabanlı uygulamalar geliştirebileceksiniz. Dolayısıyla her platformda çalışabilen bir uygulamanız olacaktır. IOS çıktısını alıp Mac işletim sistemli bilgisayarlarda bir derlemeniz gerekecektir. (Xcode editoru üzerinde) 

Uygulamadaki farklı ekranlara sırayla bakalım.

Resources içerisinde bulunan layout klasöründe bulunan activiy_main.axml dosyası ekran tasarımını, ekranda bulunmasını istediğimiz kontrolleri taşımaktadır. Yeni bir kontrol eklemek istersek Toolbox üzerinden sürekleyip bırakarak tasarımını yapabiliriz.


activity_main.axml kodları aşağıdaki gibidir.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="0"
android:textSize="50sp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtNumber" />
<Button
android:text="Increment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnIncrement" />
<Button
android:text="Decrement"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnDecrement" />
</LinearLayout>

Yukarıdaki kodların tasarımı aşağıdaki gibi olacaktır. 



















Buttonun kodlarına yani MainActivity.cs dosyası kontrollerin yapacakları işleri kodladığımız backend kodlarının barındığı yerdir.

MainActivity.cs kodları


using Android.App;

using Android.OS;

using Android.Support.V7.App;

using Android.Runtime;

using Android.Widget;


namespace App1

{

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]

public class MainActivity : AppCompatActivity

 {

 TextView txtNumber;

 int number;

protected override void OnCreate(Bundle savedInstanceState)

{

base.OnCreate(savedInstanceState);

// Set our view from the "main" layout resource

 SetContentView(Resource.Layout.activity_main);

txtNumber = FindViewById<TextView>(Resource.Id.txtNumber);

FindViewById<Button>(Resource.Id.btnIncrement).Click += (o, e) => txtNumber.Text = (++number).ToString();

FindViewById<Button>(Resource.Id.btnDecrement).Click += (o, e) => txtNumber.Text = (--number).ToString();

}     

}

}

Uygulamamız hazır olup Increment buttonuna tıklandığında değer artarken, decrement buttonuna tıkladığında değerde azalma görünecektir. Yazmış olduğumuz bu uygulama hem android hem de IOS işletim sistemli uygulamalarda çalışacaktır.  


3 Temmuz 2019 Çarşamba

Xamarin'in Visual Studio Programına Tanımlaması

Merhabalar,

Bilgisayarımızda daha önce kullanmış olduğumuz Visual Studio varsa bunu silmeden "Programs and Features" bölümünden Visual Studio Programına tıklayıp change dememiz durumunda açılan ekranda xamarin eklentisini (Mobile Development with .Net) yükleyebiliriz.


































Yukarıdaki görselden yararlanarak Visual Studio Modify ekranına geçebilirsiniz. Seçimlerimizi yaptıktan sonra en altta yer alan Modify buttonuna tıklayıp kurulumları başlatabiliriz.


Kurulumu yaptığımıza göre artık ilk uygulamamızı oluşturalım.




















Proje template'ni aşağıdaki gibi seçelim. Blank bir uygulama oluşturalım.




















Android için gerekli olan emülatörlerin bilgisayarımıza kurulması gerekmektedir. 

Bunların ayarlamalarını aşağıdaki görselden yapabiliriz.
























Android uygulamasının geliştirilmesi için gerekli SDK, JDK vs. tanımlamalarını yaptıktan sonra artık Xamarin dünyasında projelerimizi geliştirmeye başlayabiliriz.




26 Nisan 2019 Cuma

Decorator Design Pattern Örneği

Decorator tasarım deseni(design pattern) , structural (yapısal) tasarım desenlerinden biridir. Elimizde bulunan class örneğine yani nesneye yeni özellikler eklemek için kullanılır. Nesnenin görevlerini kalıtım kullanmadan artırabileceğimizi gösteren bir yapıdır.


Çalışma zamanında (run time) nesneye eklenen özellikler bu sınıftan tanımlanmış olan başka nesneleri etkilemez.


Ne zaman kullanılır?
Nesneye çalışma anında yeni özellikler eklemek istiyorsak kullanılmaktadır.


Nasıl Kullanılır?
Decorator Tasarım Deseninde projede ihtiyacımız olan sınıflar gruplandırılır ve bu esnada Decorator Sınıflar ve Component Sınıflar kullanılır. Component sınıfları içerisinde Decorator sınıfı bulunur. 

Decorator Design Pattern'ini daha rahat anlayabilmek adına bir örnekle inceleyelim.


1. İlk olarak bir interface oluşturup içerisinde gövdesi olmayan metotlar yazalım.

Account.java classının kodları 

public interface Account
{
  void performTransaction(String transactionType,int accountNumber,int UserId);
  boolean checkAccountNumber();  //hesapno uygun mu kontrolü?
  boolean validateUserId(); //userid uygun mu?
}

2.Projede kullanılacak olan Bank ve Customer classlarını tanımlayalım.

public class Bank 
{
         public void performTransaction(String transactionType, int accountNo) 
         {
         //perform transaction, say transactionType is AccountBalance
         }

}


Concrete Class (Somut Class) interface implements edilerek (uygulanarak) oluşturulur.

public class BasicAccount implements Account
{  
        private Bank bank=new Bank();
        private int userId;
        private int accountNumber;


        public BasicAccount(int accountNumber, int userId)
        {
            this.accountNumber = accountNumber;
            this.userId = userId;
        }



        @Override
  public void performTransaction(String transactionType,int                                  accountNumber,int UserId
        {
             if (checkAccountNumber() && validateUserId()) 
             {
                     bank.performTransaction(transactionType, accountNumber);
             } 
             else 
             {
                    throw new Exception("Invalid user account.");
             }
}

        @Override
  public boolean checkAccountNumber() 
        {
               // using validation module validate the account.
               return true; 
}

        @Override
        public boolean validateUserId() 
        {        
              return false; // or return true if userId is valid

        }
}



Son olarak Customer Class'ını kodlayıp içerisinde main metodu olacak şekilde kurgulayalım ve bu class içerisinde BasicAccount classını barındıran classımızı yazalım.

public class Customer 
{
           private static int customerId = 007;
           private static BasicAccount bank;

           public static void main(String args[]) 
           {
                 bank = new BankProxy(123456,customerId);
                  try 
                  {
                          bank.performTransaction("AccountBalance");
                   } catch (Exception e) {
                           e.printStackTrace();
                   }
           }

}







27 Şubat 2019 Çarşamba

Class ile Struct Farkı


Gerçek hayattaki nesnelerin programlama ortamına taşınması için class yapıları kullanılmaktadır. Bizler class tanımlayarak aslına kendi türümüzü yazmış oluruz. 

Class Nasıl Tamınlanır?
class tanımlarken o class için ihtiyacımız olacak özellikleri ve alanları yazmamız gerekecektir. 

class classAdi
{
     //arabanın özellikleri

     //kurucu metot ya da metotlar 
  
     //metotlar
}

Araba türünden yazmış olduğumuz classın özellikleri aşağıdaki gibidir.















Sınıflar gibi tanımlanan içerisinde özellikler, veriler, yapıcılar içerebile diğer türümüz de structlardır. Struct yapı anlamına gelmektedir.

Struct Nasıl Tanımlanır? 
struct tanımlarken o struct için ihtiyacımız olacak özellikleri ve alanları yazmamız gerekecektir. 

struct structAdi
{
     //arabanın özellikleri

     //kurucu metot ya da metotlar 
  
     //metotlar
}


Zaman bilgisini tutabilmek adına Zaman türünden yazılmış olan struct aşağıdaki gibidir.




















Genel hatlarıyla class ve struct yapısını nasıl oluştururuz bundan bahsetmiş olduk.

İyi Çalışmalar,





24 Şubat 2019 Pazar

Doğum Günü Müziğini Console Projesinde Çaldırma


Happy Birthday müziğini C# üzerinde dinlemenin keyfini yaşayacağız. 

Happy Birthday Müziği Notaları

do-do-re-do-fa-mi
do-do-re-do-sol-fa
do-do-incedo-la-fa-fa-mi-re

do-do-si-sol-la-sol


Notaların harf karşılığı ise aşağıdaki gibidir.








Bu notaların frekansları ise aşağıdaki gibidir. Bir frekansta ses çaldırmak gerekir ki bu frekansları aşağıdaki siteden öğrenebiliriz.

















C harfin karşılık gelen nota Do notası olup Do notası 130.82 ile 1046.5 aralığında frekans değeri alabilmektedir.


Happy Birthday Kodları aşağıdaki gibidir.






SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...