28 Aralık 2014 Pazar

Ubuntu Sdk Kurulumu






            Ubuntu üzerinde çalışacak bir programı C , C++ , Java , Python ... gibi bir çok dille yazabiliriz. Ubuntu'nunda kendi işletim sisteminin kullanıldığı Bilgisayar , Tablet ve Telefonlar için uygulama geliştirmemize yardın eden bir SDK sı mevcutmuş. Benim bu sdk dan daha önce haberim yoktu , webte gezerken denk geldi ve kurup incelemek istedim. Daha sonra aşağıdaki Ubuntu resmi sayfasınbdaki talimatları takip ederek  SDK yı kurdum.


            Sıra ile aşağıdaki komutları terminalde çalıştırdım ve kurulumu tamamladım.

$ sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
$ sudo apt-get update && sudo apt-get install ubuntu-sdk
$ sudo apt-get update && sudo apt-get dist-upgrade

            Daha sonra yine terminalde aşağıdaki kodu yazıp çalıştırmayı denedim ancak QT yi kurmam gerektiğine dair bir uyarı verdi.

$ ubuntu-sdk

            Aşağıdaki kodu çalıştırarak QT kurulumunu gerçekleştirdim.

sudo apt-get install qtcreator-plugin-ubuntu-common



            Açılışta yukarıdaki ekran geliyor. Burada SDK ile ilgili ayarları yapıyor. Ancak 30 dk dan fazla sürdü. Format atsam bu kadar uzun sürmezdi!



            Gerekli ayarlamalardan sonra yukarıdaki gibi açılış ekranı geldi. Sonrasında Create New Project diyerek Ubuntu projelerimizi oluşturmaya başlayabiliriz. Yukarıda belirttiğimiz gibi Bilgisayar , Tablet , Telefon ve Web uygulamaları geliştirebiliriz.
           
            Ubuntu Phone uygulamalarımız için QT nin solundaki menüde Devices kısmını görmüşsünüzdür. Buraya tıklayarak yeni sanal telefonumuzu oluşturuyoruz. Bunun içinde internetten 300 MB yakın veri indiriyor. Sonra yine aynı pencerede oluşturduğumuz telefonu çalıştırıp bir Ubuntu Phone nasıl bir şey olduğunu inceleyebilririz.




            O kadar kurumlumdan sonra ilk Desktop uygulamamı yaptım.




6 Kasım 2014 Perşembe

JSF Page Navigation



          Haliyle web projelerinde birden fazla web sayfamız mevcuttur. Bu sayfalar arasında gezerken tarayıcının adres çubuğunda sayfanın adı yazar. JSF ile yaptığımız projeleri direk çalıştırdığımızda sayfalar arası geçişler sıkıntısız olabilir ama navigasyon işlemini yapmamışsak eğer projemizde bulunan sayfa isimleri adres çubuğunda gözükmeyecektir.
            Bu yazımızın konusu bunun nasıl yapıldığı üzerine olacak. Öncelikle bunu bir XML konfigrasyon dosyası ile yapıyoruz ve mantığını anladıktan sonra yapması çok kolay olacaktır. Bu XML dosyasını oluşturmak için NetBeans'te proje üzerinde sağ tık ile New – Other – Java Server Faces – JSF Faces Configuration şeklinde oluşturuyoruz.  Bu dosyanın içeriği aşağıdaki gibidir.


<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

</faces-config>

            Bu dosya ile web sayfalarımız arasında geçiş kurallarını tanımlayarak sayfa isimlerimizin adres çubuğunda görünmesini sağlıyoruz. Buraya kuralları eklemek için yine sağtık ile Insert – Navigation Rule , Navigation Case ve Managed Bean seçenekleri kullanıyoruz. Öncelikle Managed Bean seçeneğine değinelim. Burada yönlendirme için kullandığımız Managed Bean leri tanıtıyoruz. Bean name , class ve scope bilgileri burada belirtiliyor.

<managed-bean>
        <managed-bean-name>firstBean</managed-bean-name>
        <managed-bean-class>firstBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 
            Bir diğer seçenek ise Navigation Rule ' dur. Bu her sayfa için bir tane olabilir ve içerisinde Navigation Case ler eklenerek yönlendirme sağlanır. Bir Rule içerisinde birden fazla Case olabilir. Her bir Case bir duruma karşılık gelir. Örneğin butonlara basılınca farklı sayfalara yönlendirildiği için her butona has bir Case olmalıdır. Bir Navigation Case eklerken direk yönlendirileceği sayfa adını veya Bean üzerindeki yönlendirme işlemini yapan fonksiyonu tanıtarak yönlendirmeyi sağlamış oluyoruz. Burada Bean kullanmanın asıl amacıda budur. Bir kritere göre if bloğu ile farklı sayfalara yönlendirmek istediğimizde fonksiyon adını yazarak gerekli yönlendirmeyi yapıyoruz. Aşağıda 3 sayfa ve her üç sayfada birer buton olacak şekilde bir uygulama yaptım ve bunun faces-config.xml dosyası aşağıda bulunmaktadır. Bu uygulamayı videoyada kaydettim en alttan bu videoya da bakarak bu yazıda anlatılanların nasıl yapıldığını görebilirsiniz. İlk iki buton direk yönlendirme 3. buton işe Bean üzerinden yönlendirme yapıyor.

          Buradaki diğer bir önemli hususta "redirect" tir. Bunu yönlendirme de kullanıp sonradan da web filter kodu yazarsak mantık hatası oluşur. Bu yüzden yönlendirme içerisinde kullanırken dikkatli olmamız gerekiyor

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <managed-bean>
        <managed-bean-name>firstBean</managed-bean-name>
        <managed-bean-class>firstBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/page1.xhtml</from-view-id>
        <navigation-case>
            <from-action>page2</from-action>
            <to-view-id>/page2.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/page2.xhtml</from-view-id>
        <navigation-case>
            <from-action>page3</from-action>
            <to-view-id>/page3.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/page3.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{firstBean.page()}</from-action>
            <to-view-id>/page1.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>
 





25 Ekim 2014 Cumartesi

Arduino Dht11 Bluetooth(HC-06) Uygulaması





                Bu uygulamada yapmak istediğimiz dht11 nem-sıcaklık ölçer ile oda sıcaklığını-nemini ölçmek ve bu değerleri bluetooth kullanarak Android telefona aktarmaktır. Bu iş için lazım olan donanımlar dht11 nem-sıcaklık ölçer , bluetooth  (bendeki  jy-mcu bluetooth) , yazılımlar  ise dht11 kütüphanesi ve Android cihaz için Android Marketten ulaşabileceğimiz Blueterm uygulamasıdır.

                Öncelikle uygulamaya başlamadan dht11 kütüphanesini internetten indirip derleyiciye eklememiz gerekiyor. Bunun için indirdiğimiz kütüphaneyi rar’dan çıkarıp Arduino'nun yüklü olduğu klasörün içerisindeki libraries klasörüne atalım ve derleyiciyi açıp Sketch-Import Library-Add Library şeklinde libraries kütüphanesine eklediğimiz klasörü derleyiciye tanıtıyoruz. Bu işlemlerden sonra dht11 gerekli bağlantıları yaptığımızda sorunsuz çalışacaktır.

                Aşağıda devrenin şeması bulunmaktadır. Buradan bağlantıları aynen yapıp altındaki kodu da çalıştırdığımız zaman telefon ekranında bizim belirlediğimiz aralıklarla nem-sıcaklık bilgisi gözükecektir.




#include <SoftwareSerial.h>
#include <dht11.h> // dht11 kütüp
SoftwareSerial myBluetooth(10, 11); // RX, TX
#define DHT11PIN 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.

dht11 DHT11;

void setup()
{
  myBluetooth.begin(9600);
  myBluetooth.println("Omer Guvenir");
}

void loop()
{
 
  myBluetooth.println();
 
  int chk = DHT11.read(DHT11PIN);

  myBluetooth.print("Nem (%): ");
  myBluetooth.println((float)DHT11.humidity, 2);

  myBluetooth.print("Sicaklik (Celcius): ");
  myBluetooth.println((float)DHT11.temperature, 2);

  myBluetooth.print("Sicaklik (Fahrenheit): ");
  myBluetooth.println(DHT11.fahrenheit(), 2);

  myBluetooth.print("Sicaklik (Kelvin): ");
  myBluetooth.println(DHT11.kelvin(), 2);

  myBluetooth.print("Cig Olusma Noktasi: ");
  myBluetooth.println(DHT11.dewPoint(), 2);

  delay(5000);

}


                BlueTerm Arduino ile Telefon arasında eşleştirme yapıyor. Eşleştirme için ‘1234’ yazarak Arduino’ya bağlanıyoruz.  Bağlanmadan önce Bluetooth’ta bulunan led sürekli yanıp sönerken bağlantı kurulunca sabit yanmaya başlayacaktır. Bu uygulamada Arduino’dan veriler telefona aktarılıyor. Tam tersini yapmakta mümkündür , yani bu program Arduino’daki Serial Monitor görevi yapar. Basit bir örnek ; telefondan 0 ve 1 yazarak Arduino üzerindeki bir ledi yakıp söndürebiliriz. 

                Önemli bir hususta RX , TX konusudur. Bunlar veri aktarımını sağlar ve Arduino ile Bluetooth arasında çapraz bağlı olmalıdır. Şekle bakarsak Arduino’nun RX’i Bluetooth’un TX’ine denk gelecek şekilde bağlanmıştır. Aynı şekilde Arduino’nun TX’i Bluetooth’un RX’ine denk geleck şekilde bağlanmalıdır. Yoksa veri aktarımı gerçekleşmeyecektir.



19 Ekim 2014 Pazar

JSF PrimeFaces Hibernate dataTable Örneği




            Önceki 2 JSF yazımda kurulumdan ve Managed Bean kavramına değinmiştik. Bu yazıda ise PrimeFaces componenti olan dataTable içerisine veri tabanından çektiğimiz verileri direk olarak nasıl ekleriz buna göz atacağız. Bundan önceki yazıların başlığında PrimeFaces bulunmasına karşın neredeyse hiç PrimeFaces componenti kullanmadım. Bunun  sebebi zaten PrimeFaces’in resmi sitesinde hepsinin kullanımını görebilmemiz ve altındaki kodu alarak kendi işimiz doğrultusunda geliştirebilmemizdir. Bu yüzden PrimeFaces’teki commandButton şu işe yarar ribbon bu işe yarar gibi işlerle uğraşmak zaman kaybıdır. Aynı zamanda doküman desteğide bulunmaktadır. Hem web hem de doküman kullanarak bu işi daha iyi öğrenebiliriz. Sizde daha önce görmemişseniz eğer aşağıdaki linklere tıklayarak bütün componentlerin kullanımını ve kodlarını görebilirsiniz.







            Gerekli kaynakları gösterdikten sonra biz işimize dönelim. Büyük ihtimalle yapacağımız işlerde veri tabanı ile uğraşmamız gerekecek. Bu uygulamada kısaca veri çekme işlemini gerçekleştirdim. Bu işlemi yaparken direk SQL cümleleri kullanmak yerine Hibernate kütüphanesi ile verilerimizi çektim. Hibernate  redhat bünyesinde geliştirilen bir kütüphanedir. Amacı verileri fazla SQL komutları kullanmadan getirebilmektir. Büyük projelerde tercih edilen bir kütüphanedir. Bunun en temel sebebi direk SQL cümlelerine göre veri getirme hızının yakın olmasıdır. Ayrıca kullanım açısından geliştiricilere seçenekler sunar. Hatta SQL kodu yazmaktan vazgeçemeyenler için Hibernate Query Language (HQL) tarzında özelleşmiş bir dili de mevcut. Temel olarak söyleyebileceklerim bunlar. Aşağıdaki linlere göz atabilirsiniz. İlk link resmi sitesinin , ikincisi ise Hibernate kullanımını anlatıyor.






            Hibernate kütüphanesi NetBeans içerisinde mevcuttur. Direk kütüphane ekle diyerek ekleyebilirsiniz.  Daha önce Java ile Xhtml arasındaki ilişkinin Managed Bean ler ile sağlandığını görmüştük. Peki burada veri tabanı ile Java kısmı nasıl bağlantı kuracak diye düşünebilirsiniz. İşte tam burada karşımıza POJO (Plain Old Java Object)  çıkıyor. Bunlar aslında birer java class larıdır ve her tabloya karşılık bir POJO olmalıdır ve bu POJO lar esasen içerisinde tablolara ait verileri tutar. Hibernate bu POJO ları kullanarak verileri Java kısmına taşır. Bunu yapabilmek için de mapping işlemi gerçekleştirerek tablolar arasındaki ilişkileri belirler. Bu sayede bire bir , bire çok çoğa çok şeklindeki tablolardan veri çekmeyi kolaylaştırır.  NetBeans sayesinde bu POJO ları ve Hibernate mapping işlemlerini otomatik veri tabanı bağlantısı kurarak oluşturabiliyoruz. Burada her POJO nun yanında ".hbm.xml" dosyası da oluşturulur. Her tablonun bilgileri ve diğer tablolarla olan ilişkileri burada belirtilir. Bunun yanı sıra bu işlemleri yaparken dikkat etmemiz gereken çok ince bir ayrıntı var , o da bağlantıyı yapacak Connector kütüphanesini de proje kütüphanelerine dahil etmeliyiz. Yoksa diğer bütün işlemleri doğru yapsak bile sonuç elde edemeyiz. Bu yüzden aşağıdaki Hibernate Configuration videosuna göz atmanızı tavsiye ederim.


            Hibernate ile bağlantıyı kurduktan  ve POJO ları oluşturduktan sonra Managed Bean içerisine fonksiyonlarımızı yazıyoruz ve Xtml sayfamıza  “ <p:dataTable …“ componentimizi ekliyoruz  buradan  yazdığımız fonksiyonu çağırıyoruz ve veriler geliyor. Yazı ile en basit şekilde böyle anlatabiliyorum.  Aşağıdaki ikinci videoda ise baştan sona kadar bahsettiğim şeyleri sıra ile yapıyorum. Yazıda görüldüğü gibi hiç kod yok. Bunun sebebi yazı ile detaylı anlatmaya kalktığımda işlerin karışacağıdır. Bu yüzden video ile daha rahat anlaşılabilir. Son olarak direk bulunduğunuz sayfayı deploy etmek için  Shift+F6’yı kullanabilirsiniz. 






6 Ekim 2014 Pazartesi

Arduino Sensörlü Lamba Uygulaması




                Aslında bu uygulama gerçek hayatta hemen hemen her yerde kullanılan ,  hareketi algıladığı anda eğer ortam ışığı yetersiz ise lambanın yanmasını sağlayan sensörlü lambanın Arduino ile gerçekleştirilmesidir.(Neredeyse bütün binalarda mevcuttur) Bu uygulamada  PIR(hareket sensörü) , LDR , led ve 1 K lık bir direnç kullandım.  Bu malzemeler olduktan sonra yapımı çok kolay ve eğlenceli aynı zamanda gerçek hayatta oldukça kullanılan bir uygulamayı gerçekleştirmiş olacağız.

Uygulamanın Kod kısmında ise LDR den okuduğum değer düşük olduğunda ve aynı anda hareket algılandığında ledin yanmasını sağladım.  Aşağıda devre şeması , kodu ve yaptığım uygulamanın resimleri bulunmaktadır.



int pirPin = 3;
int ledPin = 10;
int deger = 0;            

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  int ldr = analogRead(A0);
  deger = digitalRead(pirPin);
  Serial.println(ldr);
  if (deger == HIGH && ldr <= 15) {
    digitalWrite(ledPin,HIGH);
  }
  else{
    digitalWrite(ledPin,LOW);
  }
  delay(500);
}