11 Nisan 2014 Cuma

TextView ve Buton Ekleme

Merhaba arkadaşlar.
Bu yazımda basit bir şekilde textview ve buton eklemenin yolunu göstermeye çalışacağım.
Android uygulaması geliştiriken sürekli kurcalayacağımız bölümler aşağıda kırmızı ile belirtilmiştir. Biraz onlardan bahsedelim.


  • src altında java kaynak kodlarının içinde bulunduğu com.example.butondenemesi  isimli paket bulunur. Bu paket içindeki kodlar .java uzantılı dosyada bulunur.
  • gen altında oluşturduğumuz nesnelerin otomatik oluşturulmuş idleri R.java dosyasında bulunmaktadır. Bu sayede xml tarafında oluşturulan nesneleri java kodları içerisinde kullanılabilmektedir. Neslerin id ataması için findViewById(R.id.nesne_adi) metodu kullanılmaktadır. Burayı sürekli açıp bir eklemeyecek ya da değiştirmeyeceksiniz ama ne için kullanıldığını bilmekte fayda var.
  • res aslında en uğrak noktalarımızdan biri olacaktır. İlk olarak layouttan bahsedelim. layout da .xml uzantılı dosya bulunmaktadır. Nesneleri burdan ekleriz ya da değişiklik yapılacaksa buradan yaparız. Uygulamanın tasarım kısmının yapıldığı yer diyebiliriz. 
  • res altındaki diğer bir inceleyeceğimiz alan values. values içinde .xml dosyaları bulunur. Bunlardan strings.xml dosyası eklenen nesnelerin string kontrol noktasıdır. Nesnenin gördüğümüz yazıları burada yapılır. 





Şimdi de uygulamamıza geçelim. İlk olarak nesnelerimiz yani textview ve butonlarımızı layout kısmında ekliyoruz, yerleşimlerini yapıyoruz. Burada dikkat edilmesi gereken yerlerden biri oluşturduğunuz her nesneye id vermeyi unutmayın. Java kodunda nesneleri kullanmak için bu id ler şarttır.id ataması android:id="@+id/nesne_adi" şeklinde olur. 
İlk olarak 3 tane textview ekledim. Gördüğüünüz gibi her birinin id 'si var.İd isimleri farklı olmalı. Daha sonra layout seçimim relative olduğundan textview nesnelerin birbirlerine göre konumunu ayarladır. Bu ayarlamalar için ben kod yazarak uğraşamam diyorsanız şimdilik  Aynı pencerede altta Graphical layout kısmından nesneleri sürükle bırak şeklinde de ekleyebilirsiniz. Dikkat ederseniz son textview nesnesini uygulama ilk açıldığında görünmez yapmak için android:visibilty 'yi kullandım. Burada değinmek istediğim son şey ise values dizini altındaki strings.xml dosyasından nesne yazılarının nasıl çekildiğidir. Bunu resimde de görüldüğü üzere android:text="@string/text_adi_girin" şeklindedir.
Buton içinde aynı şekilde id veriyoruz ve yer ayarlamaları yapıyoruz. Text'leri string.xml'den çekiyoruz. Burada göstermek istediğim iki şey var. İlk buton tıklama işlemini tamamen java kodu üzerinden yaparken , ikinci buton için xml tarafında tanımladığım onClick metoduna göre yine java kodunu kullanarak yapacağım. Bunun için ise sadece ikinci butonumuz için bir metot ismi yazıyoruz.






Daha önce de dediğim gibi nesneleri java kodunda kullanabilmek için id'lerine ihtiyaç vardır. Bu nedenle onCreate metodu içinde kullanılacak tüm nesnelerin id ataması findViewById() metodu ile yapılır.
İlk olarak 1. butonumuza click özelliği kazandıralım.Bunun için setOnClickListener(new OnClickListener)
fonksiyonunu kullanıyoruz. Butona tıkladığımızda oluşacak işlemleri bu metot içinde otomatik oluşan onClick metodu içine yazıyoruz.
İkinci butonun farkı onCreate metodunun dışında tanımlanan metottur(xml de ismini vermiştik). Metodu kendimiz oluşturuyoruz sadece, metodun içi click yapıldıktan sonra gerçekleşecek olaylar ilk butondaki gibi doldurulabilir.
Evet artık uygulamayı yazdığımıza göre emülatörden görelim.Programı run ettiğimizde uygulama aşağıdaki gibi olacaktır.Sırasıyla uygulama ilk açıldığında, İlk butona(yukarıdaki) tıklandığında ve ikinci(alttaki) butona tıklandığında oluşan ekran görüntüleri yer almaktadır.

Herkese iyi çalışmalar...



























10 Nisan 2014 Perşembe

XML NEDİR?

Extensible Markup Language(XML), World Wide Web Consortium(W3C ) tarafından geliştirilmiş hiç bir tekelin altında olmayan yani bağımsız bir dildir. W3C uluslararası ağ standartlarını belirleyen bir örgüttür. XML de bu belirlenen standartlardan biridir.
W3C 'yi bu kadar önemli kılan birkaç özellik aşağıdaki gibidir.
  • Web sayfalarının arama motorlarında ilk sırada görüntülenmesinde etkilidir.
  • Farklı tarayıcılarda web sitelerinin farklı görüntülenmesinin önüne geçer.
  • Sayfa yükleme süresinin azalması.(max 20 saniye)
W3C hakkında daha fazla bilgiye  buradan erişebilirsiniz.

Şimdi de XML özelliklerinden biraz bahsetmek istiyorum. XML neden bu kadar önemli?Avantajları neler? Yakından tanıdığımız HTML ile ilişkisi var mı?

  • XML, HTML'e yakın bir dildir.Aslında kardeşi diyebiliriz. Çünkü çıkış kökenleri aynıdır (SGML). HTML bildiğimiz üzere verinin sadece görünümüyle ilgilenen bir dildir. Oysa XML verinin direk kendisiyle ilgilenir. Yani veriyi ayrıca tanımlar ve taşır.
  • XML, HTML dili gibi bir markup dilidir. Belgedeki veriler seçilip işaretlenebilir ve biçim kazandırılabilir.
  • XML geliştiricileri kendi etiketlerini (tag) oluşturabilmektedirler.Bu da XML diline esneklik kazandırmaktadır.
  • Her elemanın başlangıç ve bitiş tag'i vardır.
  • XML ile kod geliştirilirken herhangi bir programlama aracına ihtiyaç yoktur. Tarayıcılarda da yapılabilir.
  • XML dilinin büyük, küçük harf duyarlılığı vardır.
  • XML'in en önemli özelliklerinden biri bir veri tabanındaki verinin dış sistemlere taşınabilmesidir.
  • Farklı veri tabanları veya sistemler arası veri taşımasını sağlayabilir.
  • XML  kod yapısı aslında ağaç yapısı gibidir. Kök, çocuklar ve onların çocukları şeklindedir.
XML verilerinin veri tabanına aktarılmasını düşündüğümüzde
 kök                    ->   veri tabanı
çocuk                  ->   tablo
çocuğun çocuğu   ->   alan 
şeklinde tanımlanır.




İşte basit bir XML kod parçası;

<Kitaplar>
<Kitap ISBN="9786055420796">
<baslik>Sherlock Holmes Akıl Oyunlarının Gölgesinde</baslik>
<yazar>Sir Arthur Conan Doyle</yazar>
</Kitap>
<Kitap ISBN="9789752894846">
<baslik>Bin Muhteşem Güneş</baslik>
<yazar>Khaled Hosseini</yazar>
</Kitap>
</Kitaplar>

Kitaplar, kitap, baslik ve yazar taglerini kendim oluşturdum yani önceden tanımlı değillerdi.Daha sonra taglere özgü verileri girdim.Taglerin '/' sembolü ile kapatıldığına yani o tag alanın sonlandırıldığına dikkat edin. 
Veri tabanına aktarım yaptığımızı düşünelim. Bu durumda Kitaplar (kök) veri tabanının adı, Kitap (çocuk) tablo, baslik ve yazar(çocuğun çocuğu) ise tablodaki alanlarımızdır(sütun).

XML hakkında detaylı bilgiye buradan  erişebilirsiniz.

Herkese iyi çalışmalar...

29 Ağustos 2013 Perşembe

Android Dünyasına Giriş

Mobil donanım üreticilerinin maliyeti düşürmek istemeleri Android’e olan ilgiyi arttırmıştır.
Android; açık kaynak kodlu, ücretsiz, Linux tabanlı, Google tarafında geliştirilen bir mobil işletim sistemidir. Mobil işletim sistemi denir ancak tablet bilgisayarlarda, televizyonlarda da kullanılmaktadır. İhtiyaç duyulan tüm uygulamalar ücretsizdir. Windows mobile, Apple iPhone mobil uygulamaların aksine Android uygulamaları her platformda geliştirilebilir.
Android uygulamalarının geliştirilme aşamasında Java dili kullanılmaktadr. Javanın tercih edilmesinin nedeni, java uygulamalarının farklı donanım sistemlerinde de sorunsuz çalıyor olmasıdır.
Android uygulamaları, mobil cihazlara yüklemeden de Dalvik isimli sanal cihaz ile gerçekleştirilmektedir. Bu sayede daha kolay ve çabuk bir şekilde debug işlemleri gerçekleştirilebilmektedir.
Android, içerinde barındırdığı on binlerce kütüphasi sayesinde sayısız kaynak sunmaktadır.
Android uygulaması geliştirmek için gerekli ortamın hazırlanması şarttır. İhtiyazcınız duyulanları şu şekilde sıralamak gerekirse;
  • Uygulama geliştirmek için IDE (Benim tercihim Eclipse’ den  yana oldu.)
  • Android SDK
  • Ecipse için ADT plugin
  • SDK paketleri
  • ADT’nin konfigürasyonu

 Bunları tek tek indirmek kurmak gerekirdi. Ancak android developers sitesinden tek bir indirmeyle içerinde hepsini barındıran ADT Bundle ile uygulama geliştirmeye hemen başlanabilir.


Android developers sitesinde yukarıdaki işaretli yer tıklayarak indirmeyi başlatabilirsiniz. Bunun yanı sıra eğer benim IDE'm var ya da Eclipse kullanmak istemiyorum derseniz yine bu siteden gerekli adımlar anlatılmıştır.
Android ortamını kurarken karşılaştığımız SDK, ADT ,IDE  terimlerinden bahsedelim birazda...
SDK : Android uygulamalarını debug, build ve test işlemlerini gerçekleştirmek için API kütüphaneleri ve geliştirme araçlarını temin eder.
ADT : Android fonksiyonlarını eclipse'e ekler.Aslında bir eklentidir.
IDE : Android uygulamalarının geliştirildiği yerdir.Yani kodun yazıldığı yer. Eclipse, Netbeans gibi seçenekler bulunmaktadır.


15 Ağustos 2013 Perşembe

ROS ( Robot Operating System ) Nedir?



Robotiğe ilgi duyanların kesinlikle bilmesi gereken bir programla tanıştım bu yaz, ROS(Robot Operating System). ROS yani robot işletim sistemi, içerisinde barındırdığı kütüphaneler ve araçlarla robot  uygulamaları geliştirmeyi sağlayan bir yazılım sistemidir.Adının işletim sistemi olmasına bakmayın. Gerçekte bir işletim sistemi değil tabi kide.Böyle denmesinin nedeni , çalışırken işletim sistemine ihtiyaç duymasıdır.Yani, robotik bir uygulamayı çalıştırmak için birçok yazılım ve donanım gereçlerini birbiriyle haberleştirebilmektedir.
ROS, açık kaynak kodlu bir yazılımdır. ROS 'u kullanabilmeniz için Linux tabanlı bir işletim sistemine ihtiyacınız olacaktır.Benim tercihim Ubuntu oldu.Ardından ROS kurulumunu gerçekleştirmek ve ROS çalışma alanını (catkin workspace) oluşturmanız gerekmektedir.Bunları sırasıyla ROS wiki sitesinde bulunan bir çok dökümalardan faydalanarak gerçekleştirebilirisiniz. Burada bulunan tutorials sayesinde adım adım Robotik dünyasına gireceksiniz. Bende ilerleyen yazılarımda gerekli bilgileri vereceğim.
ROS, publisher/subscriber paradigması üzerine kuruludur.Hazırlanan robot davranışları node adı verilen program parçaları üzerinden simülasyon programına gönderilir (publish), hareketi için gerekli verileri çevreden alınır (subscribe). Bu konuyla ilgili ayrıntılı bilgiyi Publisher ve Subscriber yazımdan ulaşabilirsiniz.
ROS kullanırken karşınıza çıkacak diğer bir konu ise Gazebo.Gazebo kullanmaya henüz geçmedim ancak en yakın zamanda geçeceğim onunla ilgili de yazılarım olacak.Şimdilik kısaca bir tanım yapmakla yetineceğim. Gazebo, robot davranışlarının geliştirildiği üç boyutlu bir dünya oluşturur. ROS, Gazebo simülasyon programıyla iletişime geçerek davranış geliştirmenizi sağlamaktadır.Bu da robot modelinin üzerinden sensör verilerinin çekilmesiyle gerçekleştirilmektedir.


Publisher ve Subsciber Nedir?


Merhaba arkadaşlar. Bu yazımda, yazın yapmış olduğum stajın ilk araştırma konusundan yani publisher ve subscriber modelinden bahsedeceğim.
Publisher ve subcriber paradigması , publishers ‘ ın açıkça alıcıları belirtmeden ya da amaçlanan alıcıların bilgisine sahip olmadan mesajın yayınlanmasını gerektirir. Subscriber yayınlanan mesajlardan ilgili olanları kaydeder.



Publish ve subcribe ilişkisi şu şekildedir ; bir uygulama(publishers) belli bir konu üzreindeki mesajı yayınlar , diğer uygulamalar(subscribers) da yayınlanan mesajlara,konu ya da içerik tabanlı kuralları kullanarak abone olur.Bu form one-to-many communication  şeklindedir ve özünde eşzamanlı değildir çünkü mesajı yayınlayan bir uygulama diğer alıcı uygulamalar tarafından geri dönüş olmasını beklemez.
Publisher ve subscriber, ROS(Robot Operating System)' da kullanılan bir modeldir. Oluşturulan sınıflar üzerinden veri simülasyon programına gönderilir(publish), robotun aksesuarlarından sensör verileri program içerisine alınabilir(subscribe).





20 Nisan 2013 Cumartesi

ÖZYİNELİ FONKSİYONLAR(RECURSIVE FUNCTION)

Yazdığımız programlarda aynı işlemi yapmak için döngüler kullanırız.Bazen programda döngüler kullanmak yerine özyineli(recursive) fonksiyonları kullanmak işimizi kolaylaştırır.Bu fonksiyonlar kendi içinde tekrar kendisini döndüren fonksiyonlardır.Yani bir döngü gibi çalışırlar.bu fonksiyonlar programa sadelik katar ,karmaşıklığı önler.Ancak bellekte daha fazla yer kaplarlar ve diğer şekilde yazdığınız programa göre daha yavaştır.Recursive fonksiyonlar sürekli kendilerini çağırdıkları için dikkat edilmesi gereken durum en son aşama için koşul koyulmasıdır.
Recurive fonksiyonlara bakınırken sürekli  karşımıza çıkan  ve mantığı en basit haliyle ortaya koyan örnek faktöriyel hesabı...



package Recursif_Algorithms;

import java.util.Scanner;

public class Test_Factorial {
 /**
  * @author Aylin COŞKUN
  */
 public static void main(String[] args) {
  int num;
  Scanner num_object=new Scanner(System.in);
  System.out.println("Enter a number to calculate the factorial");
  num=num_object.nextInt();
  System.out.println(factorial(num));
  
  }
 public static int factorial(int number)
 {
  if(number==0 ) 
   return 1;
  else 
   return factorial(number-1)*number;
  }
 }






Bu fonksiyonların mantığı nedir peki?İlk önce şekilde görüldüğü gibi factoriyel(5) için  factoriyel(4)*5 ,factoriyel(4) için factoriyel(3)*4  ve diğerleri içinde yandaki şekildeki gibi bu işlemler tekrar edilir.Ta ki fonksiyon factoriyel(1) i görene kadar.Çünkü biz fonksiyonu yazarken koşul koymuştuk ve bu durum da koşulu sağlamaktadır.Böylece artık factoriyel(2) ,factoriyel(3) ,factoriyel(4) ve son olarakta factoriyel(5) değeri bulunmuş olur.

14 Nisan 2013 Pazar

FABRİKA METOT(FACTORY METHOD)

Factory method ,gerçekleştirilecek bir işlemin birden çok adayı olması durumunda istemci tarafından girilen veriye göre obje oluşturan methoddur.
Tanımdan da anlaşılacağı gibi patternimiz nesne üreten bit metod üzerine kuruludur.Kullanıcı istediği veriyi girer ve işlem gerçekleşir.Gerisi yani nesne oluşumu işlemin gerçekleştirme aşaması istemciyi ilgilendirmez.


Factoy method yapısı genel olarak şu şekildedir.

virtual Product *FactoryMethod(data_type)=0;

Bu tanımlama base (ana) class da yapılır subclass(altsınıf) da bu methedun override edilmesi gerekmektedir.


Şimdi bizde bir uygulama yazalım.Programımız mobile üzerinde çalıştırılan uygulamalar hakkında olsun.Kullanıcı sadece çalıştırmak ya da durdurmak istediği uygulamayı girsin programımızda istemcinin istediği nesneyi üretip gereken işlemleri yapsın.Bunun için de bir factory methoda ihtiyacımız var.Aldığı veri tipi de string olsun ve böylece istemci sadece istediği uygulamanın adını girsin gerisine karışmadan istediği işlem gerçekleşsin.


İşte programımız...


#include

using namespace std;
//**************
//AppStore
//**************
class AppStore
{
protected:
 virtual Applications *createApp(string app)=0;
public:
 void runApp(string app)
 {
  Applications *a;
  a=createApp(app);
  a->run();
 }
 void stopApp(string app)
 {
  Applications *a;
  a=createApp(app);
  a->stop();
 }
};

//**************
//MobileAppStore
//**************
class MobileAppStore:public AppStore
{
private:
 Applications *createApp(string app)
 {
  if(app=="twitter")
   return new TwitterOnMobile();
  else if(app=="skype")
   return new SkypeOnMobile();
  else if(app=="angry bird")
   return new AngryBirdOnMobile();
 }
};
/**************
//Applications
//**************
class Applications
{
public:
 virtual void run()=0;
 virtual void stop()=0;
};

//**************
//SkypeOnMobile
//**************
class SkypeOnMobile:public Applications
{
public:
 void run()
 {
  cout<<"Skype is run on the mobile\n\n";
 }
 void stop()
 {
  cout<<"Skype is stopped on the mobile\n\n";
 }
};

//**************
//AngryBirdOnMobile
//**************
class AngryBirdOnMobile:public Applications
{
public:
 void run()
 {
  cout<<"AngryBird is run on the mobile\n\n";
 }
 void stop()
 {
  cout<<"AngryBird is stopped on the mobile\n\n";
 }
};

//****************
//TwitterOnMobile
//****************
class TwitterOnMobile:public Applications
{
public:
 void run()
 {
  cout<<"Twitter is run on the mobile\n\n";
 }
 void stop()
 {
  cout<<"Twitter is stopped on the mobile\n\n";
 }
};

//**************
//Main
//**************
int main()
{

 AppStore *appstore=new MobileAppStore();

 appstore->runApp("skype");
 appstore->runApp("angry bird");
 appstore->stopApp("skype");
 appstore->runApp("twitter");
 appstore->stopApp("twitter");
 appstore->stopApp("angry bird");



 system("pause");
 return 0;
}


Son olarak bir noktaya daha değinmek istiyorum.Dikkat ederseniz sınıf isimlerimde sürekli mobile kullandım ama istenirse masaüstü uygulamaları da kolayca eklenebilir.

Output...