21 Ekim 2017 Cumartesi

StajOkulu – “Otonom Sürüş Sistemleri” Semineri

Yeni yıl itibariyle, Amerika ve Çin'de insansız teknolojiler üzerine çalışmalarımıza devam edeceğiz.

Seminer içeriği: http://www.cihanozhan.com/stajokulu-otonom-surus-sistemleri-semineri/

15 Eylül 2017 Cuma

C#,Go,Oracle PL/SQL,SQL Server veritabanı programlama,java,JSP web programlama

İndirimli olarak satın alabileceğiniz kurslarımız;
- C# Programlama Dili : https://lnkd.in/gRvnz7D
- Go Programlama Dili : https://lnkd.in/gpDmPMp
- Oracle PL/SQL Programlama : https://lnkd.in/gtC-CJK
- SQL Server ile Veritabanı Programlama : https://lnkd.in/gNz3R6b
- Java Programlama Dili : https://lnkd.in/g3AGDKZ
- JSP ile Web Programlama : https://lnkd.in/gkGC8Q9

5 Eylül 2017 Salı

30 Ağustos 2017 Çarşamba

JSP ile Web Programlama Kursu -Kerim FIRAT

Yeni "JSP ile Web Programlama" kursu...
Eğitmen : Kerim FIRAT
Kurs Süresi : 27 saat
Video Sayısı : 91 ders
İndirimli Bağlantı :
jsp-web-programlama

19 Temmuz 2017 Çarşamba

Etkinlik Takvimim – StajOkulu 2017

Etkinlik Takvimim – StajOkulu 2017
Merhabalar,
2017 yılının 2. yarısındaki etkinlik konuşmalarımdan bir kaçını Staj Okulu‘nda gerçekleştireceğim.
Staj Okulu konuşmalarım aşağıdaki gibi olacaktır;
Go Programlama Dili – 26.07.2017
Otonom Sürüş Sistemleri – 29.7.2017
Karanlık Fabrikalar – 5.8.2017
Otonom Sürüş Sistemleri ve Karanlık Fabrikalar konuşmaları için özel olarak hafta sonu Cumartesi gününün tümünü değerlendireceğiz. Bir gün boyunca yapay zeka, robotik, BigData ve yazılım gibi konuları içeren otonom araçlar ve otonom fabrikalar gibi ileri seviye konuları anlatacağız.
Bu iki konuşmayı Kerim Fırat ile birlikte yapacağız. Tek sahne, iki konuşmacı!
Beklerim.
Cihan Özhan

http://www.cihanozhan.com/etkinlik-takvimim-stajokulu-2017/

6 Mayıs 2017 Cumartesi

-Java HashMap Liste Veri Sıralama-

Merhabalar,
Bu makalede "HashMap" Liste içerik sıralama örneğine yer verilecektir.
HashMap örneğine geçmeden evvel temel olarak Java'nın Nesnel Dizi Sınıflarını kısaca hatırlayalım.
Java'da dizi(array) işlemlerini daha esnek ve verimli yönetilebilmesi için "Nesnel Dizi Sınıfları" bulunmaktadır.
Dolayısıyla Nesnel dizi sınıfları standart türdeki dizilerden daha gelişmiş yapıya sahiptirler.
Gelişmiş dizi sınıfların öne çıkan bazı özellikleri kısaca şu şekildedir.

NOT: Dizi "Array",Sınıf "Class" olarak telafuz edilecektir.

Esnek boyut yapısı:
Bu özellik sayesinde,array boyutu belirli bir boyut sınırında kalmaz. Array'a veri eklendikçe büyüyebilen bir yapıya sahip olurlar.
Örneğin standart array'larda 100 elemanlı boyuta sahip bir array oluşturduktan sonra boyutu arttırmaya ihtiyaç duyulduğunda iş yükü ortaya çıkar.
Yani yeniden ihtiyaç duyulan boyutta array oluşturup,daha sonra önceki array'da yer alan verileri yeni array'a aktarıp üzerinden devam edilir.
Ancak dinamik verilerle çalışılıyorsa standart array'lar tercih sebebi olmayacaktır. Dolayısıyla "Nesnel Dizi"'lere başvurulur.

Veri türüne oyumluluk:
Standart array tanımlarken veri türüne göre oluşturulması en temel kuralladır.
Yani array içerisinde yer alacak veri türü,array oluşturulurken belirtilmesi gereklidir.
Ancak Nesnel Dizi Sınıfları buna uyumluluk sağlayabilecek nitelikte tasarlanmıştır.
Fakat özellikle tek türden veri tutulacaksa,bu durumda veri türü belirtilmesi verimli ve okunabilir bir kullanım sunacaktır.

Kolay yönetilebilirlik:
Array içerisinde eleman arama,içerik sıralama,eleman silme,array içeriğini taşıma ve aktarma konularında hazır
yapılarda fonksiyonlar bulunur.

Java'da "Nesnel Dizi Sınıflar" adı altında birçok Class mevcuttur.
Ancak en temeli "Array" ve "ArrayList" classları dır.
Array ve ArrayList kullanımları oldukça basittir. Dolayısıyla bu listelerin içeriğini sıralamak da karmaşık değildir.
Ancak daha gelişmiş Liste yapılarını kullandıkça,özellikle Liste içeriğini sıralama konusunda karmaşık durumlar ortaya çıkabilir.
Liste içeriği sıralama işleminin karmaşık olduğu biri de HashMap nesnesi dır.
Bu makalede HashMap Liste yapısı kullanılarak sıralama örneklerine yer verilecektir.

İçerik sıralamaya örnek olarak çeşitli yapı ve yöntemler mevcuttur. Dolayısıyla ArrayList içeriği sıralama yöntemi
ile  HashMap içeriğini sıralamak benzer yöntemle yapılamamaktadır.
Bunu göstermek için ilk olarak "ArrayList" içeriğini sıralama örneğine yer vereceğiz.
ArrayList içeriği sıralama örneğine aşağıda yer verilmiştir:

import java.util.ArrayList;
import java.util.Collections;

public class ArrayListSort{
public static void main(String[] args) {
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("İstanbul"); 
        arrayList1.add("Ankara"); 
        arrayList1.add("Bartın");
        System.out.println("Sıralanmadan önce:");
        for(int i=0;i<arrayList1.size(); i++){
System.out.println(i + "=>" +  arrayList1.get(i));
}
//sort ile liste sıralanıyor:
Collections.sort(arrayList1);
System.out.println("\nSıralandıktan sonra:");
 for(int i=0;i<arrayList1.size(); i++){
System.out.println(i + "=>" +  arrayList1.get(i));
}
}
}

Çıktı:
Sıralanmadan önce:
0=>İstanbul
1=>Ankara
2=>Bartın

Sıralandıktan sonra:
0=>Ankara
1=>Bartın
2=>İstanbul


Aşağıdaki örneklerde "HashMap" kullanılmaktadır.
HashMap içeriğini çeşitli yöntemlerle sıralamak mümkündür. Bu yöntemler genellikle farklı yapılarda Liste class'ları kullanmakla sağlanmaktadır.
Aşağıdaki ilk örneğimizde HashMap iki farklı türden veri almaktadır. Veri türleri key=Integer,value=String olarak belirlenmiştir.
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.ArrayList;
import java.util.TreeMap;

public static void main(String[] args) {
 HashMap<Integer, String> hashmapList = new HashMap<Integer, String>();
  hashmapList.put(8,"Artvin");
  hashmapList.put(6,"Ankara");
  hashmapList.put(34,"İstanbul");
  hashmapList.put(23,"Elazığ");
  hashmapList.put(38,"Kayseri");
  hashmapList.put(68,"Aksaray");
  hashmapList.put(30,"Hakkari");
  hashmapList.put(42,"Konya");
  hashmapList.put(3,"Afyon");
  hashmapList.put(11,"Bilecik");

         System.out.println("Sıralanmadan önce:");
         //standart sıralamada içerik rastgele olarak çıktı olacaktır.
         Set set1 = hashmapList.entrySet();
         Iterator iterator = set1.iterator();
         while(iterator.hasNext()) {
               Map.Entry mapEntry = (Map.Entry)iterator.next();
               if((int)mapEntry.getKey() < 10){
System.out.print("0" +mapEntry.getKey() + ": ");
  }else{
                 System.out.print(mapEntry.getKey() + ": ");
      }
               System.out.println(mapEntry.getValue());
         }
        
         //Sıralama işlemi "key"'e göre yapılmaktadır.
         Map<Integer, String> mapTreeMap = new TreeMap<Integer, String>(hashmapList); 
         System.out.println("\nSıralandıktan(key) sonra:");
         Set set2 = mapTreeMap.entrySet();
         Iterator iterator2 = set2.iterator();
         while(iterator2.hasNext()) {
              Map.Entry mapEntry = (Map.Entry)iterator2.next();
               if((int)mapEntry.getKey() < 10){
System.out.print("0" +mapEntry.getKey() + ": ");
  }else{
                 System.out.print(mapEntry.getKey() + ": ");
      }
              System.out.println(mapEntry.getValue());
         }
}
Çıktı:
Sıralanmadan önce:
34: İstanbul
03: Afyon
68: Aksaray
06: Ankara
38: Kayseri
23: Elazığ
08: Artvin
42: Konya
11: Bilecik
30: Hakkari

Sıralandıktan sonra:
03: Afyon
06: Ankara
08: Artvin
11: Bilecik
23: Elazığ
30: Hakkari
34: İstanbul
38: Kayseri
42: Konya
68: Aksaray


HashMap içeriği veri türü değiştiğinde sıralama işlem yöntemi değişebilir.
Aşağıdaki örneğimizde HashMap iki farklı türden veri almaktadır. Veri türleri key=String,value=String olarak belirlenmiştir.
Bu örnekte ilk örneğimizde olduğu gibi "Collections.sort" kullanılmıştır.
Ancak burada sort fonksiyonu için bir List'e oluşturulmuştur.
Bunların dışında kullanılan diğer nesneler "TreeMap,LinkedHashMap" class'ları kullanılmıştır.
Örnek:
  public static void main(String[] args) {
   HashMap<String,String> hashmapList = new HashMap<String,String>();
   hashmapList.put("08","Artvin");
   hashmapList.put("06","Ankara");
   hashmapList.put("34","İstanbul");
   hashmapList.put("23","Elazığ");
   hashmapList.put("38","Kayseri");
   hashmapList.put("68","Aksaray");
   hashmapList.put("30","Hakkari");
   hashmapList.put("42","Konya");
   hashmapList.put("03","Afyon");
   hashmapList.put("11","Bilecik");
   
   
   System.out.println("HashMap sıralama öncesi,rastgele sıralama:");
   Set<Entry<String, String>> entrySetEntries = hashmapList.entrySet();
   for(Entry<String, String> entry : entrySetEntries){ 
   System.out.println(entry.getKey() + " => " + entry.getValue()); 
  }
      
     TreeMap<String, String> treeMapSortedbyKeys = new TreeMap<>(hashmapList);
     Set<Entry<String, String>> entrySetMappings = treeMapSortedbyKeys.entrySet();
     System.out.println("HashMap 'Key' sıralandıktan(artan sıraya göre) sonra ");
      for(Entry<String, String> mapping : entrySetMappings){
 System.out.println(mapping.getKey() + " => " + mapping.getValue());
 }
     
      
     Comparator<Entry<String, String>> comparator = new Comparator<Entry<String,String>>() {
@Override
public int compare(Entry<String, String> s1, Entry<String, String> s2) { 
/**
 * compare'dan alınan parametreler Object olması durumunda,fonksiyon içerisinde ilgili veri veya class türüne çevrilmelidir.
 * */
 String value1 = s1.getValue(); 
 String value2 = s2.getValue(); 
 return value1.compareTo(value2); 
    }
};

//HashMap liste içeriğini "value"'a göre sıralamak için "Collections.sort" kullanılacaktır.
//sort fonksiyonu bir Liste nesnesine ihtiyaç duyar.
 List<Entry<String, String>> listOfEntries = new ArrayList<Entry<String, String>>(entrySetEntries);
 //HashMap "value"'a göre sıralanıyor. sort fonksiyonu yukarıda yer alan "Comparator" yapısını kullanacaktır.
 Collections.sort(listOfEntries, comparator);
 
      LinkedHashMap<String, String> sortedByValue = new LinkedHashMap<String, String>(listOfEntries.size());
         for(Entry<String, String> entry : listOfEntries){
  sortedByValue.put(entry.getKey(), entry.getValue());
 }
        System.out.println("HashMap 'value' sıralandıktan(alfabetik sıraya göre) sonra: ");
        Set<Entry<String, String>> entrySetSortedByValue = sortedByValue.entrySet();
        for(Entry<String, String> mapping : entrySetSortedByValue){
System.out.println(mapping.getKey() + " => " + mapping.getValue());
}

  }
Çıktı:
HashMap sıralama öncesi,rastgele sıralama:
11 => Bilecik
34 => İstanbul
23 => Elazığ
68 => Aksaray
03 => Afyon
38 => Kayseri
06 => Ankara
08 => Artvin
30 => Hakkari
42 => Konya
HashMap 'Key' sıralandıktan(artan sıraya göre) sonra 
03 => Afyon
06 => Ankara
08 => Artvin
11 => Bilecik
23 => Elazığ
30 => Hakkari
34 => İstanbul
38 => Kayseri
42 => Konya
68 => Aksaray
HashMap 'value' sıralandıktan(alfabetik sıraya göre) sonra: 
03 => Afyon
68 => Aksaray
06 => Ankara
08 => Artvin
11 => Bilecik
23 => Elazığ
30 => Hakkari
38 => Kayseri
42 => Konya
34 => İstanbul

5 Mart 2017 Pazar

-CC++ pointer fonksiyon nesneler-


Merhabalar,

CCpp'da pointer'lar birçok şekilde kullanılabilir.
Temel düzeyde pointer'lar,değişken tanımlama,değer atama ve pointer değişkenden
bir başka pointer'e atamalarda karşılaşırız-kullanırız.
Bu örnekte pointer'ların fonksiyonlar ile birlikte nasıl kullanıldığını göreceğiz.

Temel düzeyde fonksiyonların pointer ile kullanıma dair önceki makalemi okuyabilirsiniz.
 link

Bu örnekte üç(3) adet fonksiyon mevcuttur.
Bu fonksiyonlar,oluşturulan sanal bir pointer fonksiyon nesnesine tek tek atanabileceği gibi,
toplu olarak da atanabilir.  Böyle bir atama işleminde,sanal olarak oluşturulan fonksiyon nesnesi
artık atanan fonksiyonun yerine kullanılabilir.
Dolayısıyla fonksiyonu çağırma,parametre gönderme ve geri döndürdüğü değeri bu sanal fonksiyon pointeri
üzerinden elde edebiliriz.

Aşağıda verilen örneklerde ilk olarak tek fonksiyon kullanılıyor.

NOT: Bu makalede temel "pointer" kavramını bildiğiniz varsayılmıştır.

#include <stdio.h>
#include <string.h>

void func1(int *a)
{
printf("func1: %d\n",*a);
}
void func2(int *a)
{
printf("func2: %d\n",*a);
}
void func3(int *a)
{
printf("func3: %d\n",*a);
}

int main()
{
 // tek fonksiyon kullanımı:
   /*
   * Pointer olarak oluşturulan sanal fonksiyon aşağıda verilmiştir.
   * Atanacak fonksiyon "func1" ismindedir. Fonksiyon int türünden bir parametre almaktadır
   * ve geri değer döndürmüyor. Dolayısıyla sanal fonksiyon da buna uygun tasarlanmıştır.
   * "void": elde edilecek fonksiyonun geri dönüş değeri.
   * "(*function)": sanal fonksiyon nesnesidir.
   * "(int *)" : func1 fonksiyonun parametre türüdür. Parametre sayısı kadar oluşturulmalıdır.
   **/
   void (*function)(int *) = func1; //func1 fonksiyonu atanıyor.
   int a = 55;
   //func1 fonksiyonuna sanal nesne üzerinden değer gönderiliyor.
  (*function)(&a); // func(&a) ile aynı görevi görmektedir.

  //Fonksiyon atamasını aşağıdaki gibi yapabiliriz.
  void (*function)(int *) = &func1; //"&" karakterine dikkat!!

  //şayet funk1 fonksiyonu iki parametreli olsaydı,bu durumda pointer tanımlaması şöyle olacaktı:
  void (*function)(int *,int *) = func1;
}


//ÖRNEK 2:
Bu örnekte elimizde bulunan tüm(3 adet) fonksiyonları tek bir pointer nesnesi üzerinden kontrol edeceğiz.
Bu nedenle bir array(dizi) oluşturmamız gerekir.
Aşağıda tüm fonksiyonlar tek pointer nesnesine atanmıştır.

int main()
{
   //pointer nesnesi array olarak tanımlanıyor.
   void (*functions[3])(int *) = {func1,func2,func3}; //fonksiyonlar atanıyor.
 
     int a = 10;
     int b = 20;
     int c = 30;
     //parametre gönderiliyor:
     (*functions[0])(&a);
     (*functions[1])(&b);
     (*functions[2])(&c);
    return 0;
}


//ÖRNEK 3:
Son örneğimizde ise fonksiyonlarımız geri dönüş değerine sahiptir.
Bu durumda,oluşturacağımız sanal fonksiyon pointeri bu yapıya uygun tasarlanmalıdır.
Yani fonksiyon geri dönüş tipi-türüne uygun olmalıdır.

int *func1(int *a)
{
printf("func1: %d\n",*a);
*a = *a + 5;
return a;
}
int *func2(int *a)
{
printf("func2: %d\n",*a);
*a = *a + 5;
return a;
}
int *func3(int *a)
{
printf("func3: %d\n",*a);
*a = *a + 5;
return a;
}

int main()
{
     int a = 10;
     int b = 20;
     int c = 30;
     //func1,func2,func3 fonksiyon dönüş tipleri "int" olduğu için:
    int* (*functions[3])(int *) = {func1,func2,func3};
   
    printf("%d\n",*(*functions[0])(&a)); // pointer karakterine(*) dikkat.
    printf("%d\n",*(*functions[1])(&b));
    printf("%d\n",*(*functions[2])(&c));
     
return 0;
}


İyi çalışmalar.

1 Mart 2017 Çarşamba

Bilişim Sohbetleri 3 Mart 2017 Cuma

3 Mart 2017 Cuma Türkiye saati ile 21:30'da Bilişim Sohbetleri canlı yayınında konuğumuz Turkey Java User Group Başkan Yardımcısı, Android-AOSP/Linux Kernel Developer(R&D Engineer), Java/Android Teknik Kitap Yazarı Sayın Kerim Fırat hocamız ile Yazılım Sektörünün İhtiyaçları üzerine konuşacağız. Sakın kaçırmayın. :)
Canlı yayın adresimiz: https://youtu.be/wCLH2HiuHIk
Hazırlayıp sunanlar:Mimar Aslan & Çağdaş Öğüt


4 Şubat 2017 Cumartesi

Go Programlama Dili

Merhabalar,
Go programlama diline yönelik kaynaklara cihan özhan'a ait blogdan ulaşabilirsiniz.