22 Aralık 2015 Salı

Dinamik web sayfaları mı dediniz? JSP, JSF, Servlet ve Bean' e bir bakın !

Java EE ve web geliştiriciler için önemli, birbirine yakın ve  iç içe olan şu teknolojiler ;  JSF, JSP, Servlet  birbirleri ile çok karıştırılır. Katkı verdiğim projede bunun gibi teknolojileri kullanıyoruz. Bu yazımda bu teknolojiler nelerdir? Farkları nelerdir ? Nasıl kullanılırlar ? Bunlardan bahsetmek istedim.

Java Server Pages (JSP)

Bir java uygulama sunucusu üzerinde çalışan, HTML, CSS Javascript çıktısı üretebilen java gösterim teknolojisidir. JSP, Html içine özel taglar "<%.....%> kullanılarak, java kodları yazılması ile elde edilir. Web sunucusunda değil, uygulama  sunucusunda çalışır.

Yazılış şekline basit örnek  şu verilebilir :

<hmtl>
<head>
<title> İlk JSP </title>
<body>
<%
String name="Aylin";

System.out.println ("Merhaba" +name+ "Giriş yaptığın saat :"+ LocalTime.now(); +"olarak kaydedilmiştir");
%>
</body>
</html>

JSP platformdan bağımsızdır. Java Classları ile çalışabilmektedir. Apache Tomcat gibi uygulama sunucularında çalışır.

 Servlet

Sunucu üzerinde çalışan dinamik içerik üreten web bileşenidir. HttpServlet buna örnektir. JSP kodu ilk çağrılınca, Tomcat gibi sunucular başlatıldığında  JSP kodunun servlet tarafından classları oluşturulur. Sunucuda servletin bir instance i (örneği ) oluşturulur ve sunucunun yaşam süresi boyunca bekler, gelen isteklere yanıt verir.

Bir JSP nin yaşam döngüsünde ilk dört adım JSP 'nin Servlet ' e dönüşme adımlarıdır :

  • Sayfa parse edilir,  java sınıfına dönüştürülür.
  • Compile edilir.
  • Hafızaya yüklenir.
  • instance yaratılır.
  • jsplnit() metotu çağrılır.
  • _jspService() metotu çağrılır
  • jspDestroy() metotu çağrılır ve son bulur.
Java Server Faces (JSF)

JSF MVC tabanlı bir teknolojidir. Kontrol,  modelleme ve gösterimi ayrı ayrı yapabilmek için geliştirilmiştir. İki tip MVC vardır ; request tabanlı ve olay(event) tabanlı MVC.  Request tabanlı olan apache strutsdur . Olay tabanlı olan ise JSF dir. Kendi içinde hazır kütüphaneleri vardır. Bazı bileşenler daha önceden yapılmış hazır paketler halinde sunulur.

Sonuç olarak diyelim ki dataTable kullanacaksınız JSF ' nin hazır componentleri ile yapabileceğiniz gibi,  JSP ile HTML ve CSS kodları yazarak da gerçekleştirebilirsiniz. JSP ve JSF nin basit olarak farkı budur diyebiliriz.

Java Bean

Bean sınıfları çok katmanlı uygulamalarda katmanlar arası iletişim , veri taşımak için kullanılır. Veritabanı işlemleri yaptığınız bir uygulamada sınıflar birbirlerinin metotlarını çağırıp kullanabilir. Bu çağrıları da parametrelerle gerçekleştirir. Bir çok özellik barındıran bir bileşen düşünün bunların her birini parametre olarak tek tek göndermek yerine bileşenlerin değerlerini bean sınıfa yazıp geri göndermek daha mantıklıdır. Bean sınıf, parametre almayan varsayılan yapıcı metotları içermeli, tüm değişkenleri private tanımlanmalı, get set metotları olmalı, java.io.Serializable arayüzünü implement etmeli !

Örnek bir bean sınıf :

public class StudentsBean implements java.io.Serializable
{
   private String firstName = null;
   private String lastName = null;
   private int age = 0;

   public StudentsBean() {
   }
   public String getFirstName(){
      return firstName;
   }
   public String getLastName(){
      return lastName;
   }
   public int getAge(){
      return age;
   }
   public void setFirstName(String firstName){
      this.firstName = firstName;
   }
   public void setLastName(String lastName){
      this.lastName = lastName;
   }
   public void setAge(Integer age){
      this.age = age;
   }
}



10 Aralık 2015 Perşembe

Big Data Hakkında

Big data diskte çok yer kaplayan, klasik yöntemlerle işlenemeyen veri anlamına gelir. İnternetin gelişmesi ve sosyal medya devrimi ile bilgi yoğunluğu artmış ve en küçük bilgi bile önemli hale gelmiştir.İnternette her bir tıklamadan tutun da finansal, istatiksel, medikal veriler hepsi birleşerek dev veriyi oluşturuyor.

Facebook, Twitter her gün yaklaşık 10 TB veri saklıyor. Peki bu büyük veriler nerede saklanıyor ? Bu büyük verileri klasik yöntemlerle saklamak için  milyon dolarlık donanım üzerinde çalışan yüzbinlerce dolarlık veritabanı sistemine sahip olunması gerektiği söyleniyor. Bu sisteme sahip olunsa bile birbiri ile ilişkili olan kelimelerin analizi yapılmak istenirse bunu SQL sorguları ile yapabilmek pek mümkün değilidir. Sorgu işlemi çok uzun süreceği için elde edilen sonuç güncelliğini yitirecektir.Büyük veri işlemek için büyük veri çözümlerine ihtiyaç vardır.Bu noktada NoSQL ortaya çıkmıştır.

 NoSQL,  SQL değil anlamına gelse de aslında sadece SQL değil demektir. Hepimizin kullandığı ilişkisel veritanlarında mantık önce tabloları oluşturmak, her tabloya ait sütun bilgileri girmek , sonrasında bilgileri satır satır girmektir. Fakat burada şu sıkıntı çıkmaktadır; tanımı olmayan alana bilgi kaydetmek. Bu sıkıntıdan kurtulmak için tablo yeniden ele alınıp yeni sütunlar eklenir.Tüm tabloları etkileyen durumlar ortaya çıkacağı gibi tüm sistemi tekrardan ele almak çok maliyetlidir. NoSQL ise tablo ve sütun kavramı yoktur. Döküman tabanlı sistemdir. Yeni bir alana ihtiyaç olduğunda kaydı direk eklemek yeterlidir. Bu sistem bizim yerimize alanı oluşturup değerini kaydeder. Maaliyetin az olmasının sebebi de JSON ve XML formatına benzer yapıda verinin saklanmasıdır. NoSQL SQL den daha iyidir gibi bir kavram söz konusu değildir. İkisininde yerinde, ihtiyaca göre kullanılması gerekmektedir.

 Google klasik yöntemleri kullanmamış  ihtiyacı olan teknolojiyi kendi geliştirmiştir. Milyonlarca veriyi Google File System (GFS) üzerinde tutar, veri tabanı olarak Big Table kullanır, dev veriyi işlemek için de MapReduce kullanır. GFS geniş ölçekli ,  dağıtık loglanabilir,  kontrol altında tutulabilen bir dosya sistemidir. MapReduce dağıtık mimari sistemidir. Map aşamasında veriler ana düğümden ufak parçalara ayrılarak işçi düğümlere dağıtılır. İşci düğümler işi tamamladıkça ana düğüme iletir. Reduce aşamasında da tamamlanan işler birleştirilerek istenilen analiz sonucu elde edilir. BigTable ise küçük tabletlere bölünmüş büyük mantıksal bir tablodur. Tek bir bilgisayarda işlenecek veri çok sayıda ufak ve daha ucuz bilgisayarlar tarafından işlenebilmektedir. Satır seviyesinde işlemler gerçekleştirilir. İlişkisel veri tabanlarında olduğu gibi tüm tablolara erişip join işlemi gibi maliyetli bir işlem yerine satır index mantığı ile disk erişimi azaltılıp bir erişimde site ile ilgili tüm bilgilere ulaşılabilir.

Facebook, Twitter, Linkedin gibi firmalar dev veri için geliştirdikleri projeleri açık kaynak olarak paylaşmaktadırlar. Bunlar Casandra,  Hadoop,  MongoDB,  Redis gibi projelerdir.

Ben bunlardan MongoDB ile ilgili bilgilerimi aktardığım yazılarımla, sizlerle olacağım .

8 Aralık 2015 Salı

Git Kurtarıcı Komutlar

Git bilindiği üzere sürüm kontrol sistemidir(SKS). Git dosyalarınızda, projenizde değişiklikleri kaydetmek, karşılaştırma yapmak ve istediğiniz sürüme geri dönebilmek için önemli bir araçtır.Git hakkında daha fazla bilgi edinmek için  bakınız :   Kaynak 

Bir sorun olduğunda en son kimin değişiklik yaptığını, sorunun nereden kaynaklandığını görebileceğiniz , silinen değişiklikleri kurtarmak için tabiri caizse hayat kurtaran bir çok önemli  git komutlarını  bilmek gerekir.

Git temel komutları şunlardır :


Ben sıklıkla ihtiyaç duyduğum,  önemli olan  birkaç komut hakkında bilgi vereceğim. Hangi durumlarda ihtiyaç duyar ? Nasıl çözüme kavuşuruz ? 


 1.  Öncelikle birçok kişinin birlikte yürüttüğü bir proje üzerinde çalışıyorsanız dikkat edilmesi gereken durumlar vardır. Projeyi çalıştırdınız,  hata veya bir eksik fark ettiniz bunu düzeltmek isteyebilirsiniz. Peki ya biri bunu düzelttiyse ? Yapılan bir şeyi tekrar yapmak gereksizdir.Daha da önemlisi siz farklı yöntemle düzeltirsiniz aynı sayfa üzerinde çalışacağınız için çakışma olacak ve içinden çıkılmaz bir hal alacaktır. Merge olan bir projeden kolaylıkla geri alınamayan bir durumla karşılaşmış olacaksınız .

Bunun için ilk tavsiyem projenizin bulunduğu dizindeyken  sizden önce yapılan değişiklikleri çekmek ve kontrol etmekte fayda var . 

Bunu sağlayan komut : 
  • git pull origin master 

master projenizin merge olmuş içeriklerinin bulunduğu ana dizindir. Bu dizinden değişikleri bu komutla yerelimize çekiyoruz.
  • git fetch origin master  

komutu ile localimdeki değişikliklerle çektiğim değişiklikleri birleştir diyoruz.     

2. Bir branch açtınız ve üzerinde çalışmanızı yürüttüğünüz esnada kullanmanız gereken bir şeye ihtiyaç duydunuz ve bunu sizin çalışmanız esnasında başka bir arkadaşınız halletmiş ve merge olmuşsa bunu çekmek istiyorsunuz, fakat işiniz bitmedi push etmediğiniz içinde pull edip kullanamıyorsunuz bu noktada imdadınıza stash yetişiyor. Stash değişiklikleri geçici olarak tutan farklı bir depolama alanıdır. 
  • git stash 
deyip bu değişikllikleri stash e atarsak, master branca geçip pull ettikten sonra tekrar kendi brancınıza dönüp;
  •  git stash pop 
diyerek stash e attığınz çalışmanızı alıp bahsettiğimiz senaryoyu gerçekleştirmiş olacaksınız. Stash de başka hangi yedekler var görmek için;
  •  git stash list  
işe yarayacaktır.
  • git stash drop
 ile de stashi temizleyebilirsiniz. Stash de bir çok kayıt var siz içinden birini çekmek istiyorsanız ;
  • git stash pop stash@{1} 
diyerek listeden istediğiniz sırada bulunan kaydı çekebilirsiniz.    
                             
3. Projenizi herhangi bir brancha resetlemek de ihtiyaç duyulan durumlardan birisidir. Bunun için de;
  • git reset--hard origin/master,  origin/feature/12
komutu çalıştırılır.       
                                    
4. Çalıştığınız branch üzerinde push ettikten sonra başka değişiklikler yaptınız fakat her biri için her defasında farklı commit mesajları yazmak iyi fikir değildir. Çalışmanızı merge olmadan önce kontrol eden yetkililer birden fazla commit görmek pek istemezler bunun için;             
  •  git commit --amend 
komutu sayesinde önceki commit ile push etmeyi sağlayabiliriz.        
                                
Branchınızda her yaptığınız değişiklik için push ederken birden fazla commit kullanmış olabilirsiniz. Bunu sonradan düzeltmek isterseniz de şu komut;
  •  git rebase -i HEAD~3 
kullanılır. Bu komut ile 3 tane birleştirmek istediğimi ifade ediyorum.                                                                    
5. Bir diğer önemli konu da Rebase işlemidir. Aynı dosya üzerinde çalışan kişilerin sıklıkla karşılaştığı can sıkıcı uğraştırıcı bir durumdur. Siz çalışmanızı yürütürken diğer arkadaşınızın tamamladığı kısım merge olmuşsa rebase yapmanız gerekir. Rebase için takip etmeniz gereken önemli adımlar şunlardır:
      
1.Master branchına geçiyoruz:
    • git checkout master
2.Localimizdeki master dizinini güncelliyoruz:
    • git pull origin master
    • git fetch origin master
3.Kendi branchımıza geçiyoruz:

    • git checkout feature/test
4.Master dizinine göre rebase başlat diyoruz:
    • git rebase - -interactive origin master
5.Şu komutla duruma bakarak çakışan dosyaları kırmızı olarak görüyoruz :
    •  git status 
6.Sonra bu dosyalara geçip çakışan kısımları düzeltip kalan  komutlarla devam ediyoruz.  Değiştirdiğiniz dosyaların hepsini push etmek için ekliyoruz:
    •  git add .
7. Dikkat edelim !  mesaj yazmıyoruz aynı commiti kullanması için :
    • git commit 
8.Continue  devam için,  abort  iptal için kullanıyoruz:
    • git rebase - - continue,  git rebase - -abort

9.Push ederek tamamlıyoruz.
    • git push -f origin feature/test

2 Mart 2015 Pazartesi

Yapay Zeka (Artificial Intelligence) PEAS and Task Environments




                                                            PEAS

Agent Type Performance meansure Prior Knowledge of Environment Actuators Sensors
sesleri algılayarak kişi tahmini yapabilen robot Ses kayıt ,
ses analiz
Farklı sesler ve farklı insanların bulunduğu ortam Ses kayıt için donanım mikrofon Ses algılayan sensorler


                                                             ENVIRONMENT

Task Environment Observable & Non-observable Agents:
Single-Multi
Deterministic & Stochastic Episodic &
Sequential
Static &
Dinamic
Discrete &
Continuous
sesleri algılayarak kişi tahmini yapabilen robot Partial Single Deterministic sequential Dinamic continuous


18 Ekim 2014 Cumartesi

Ubuntu üzerine Aptana Studio 3 Kurulumu

Aptana Nedir ?

Aptana ücretsiz, platformdan bağımsız ve eklenti desteği olan bir web editörüdür. Eklentiler yoluyla genişletilebilen bu web editörünün Ajax, JavaScript, HTML, CSS, PHP, RadRails, Adobe AIR , Apple iPhone ,
Ruby,Rails,Python desteği vardır.Aptana Studio Eclipse esnekliğini 
sürdürür ve güçlü bir web geliştirme motoru içine odaklanır.Resmi sitesine buradan erişebilir,daha fazla bilgi edinebilirsiniz.

Aptana'nın ubuntu üzerine kurulum ve çalıştırılması biraz sıkıntılı.Türkçe kaynak az olmakla birlikte ,ne Türkçe ne de yabancı anlatımlarda bahsedildiği gibi hatasız kurulmuyor.Bir çok yerden aldığım bilgileri tek tek denedim ve bir çok hata ile boğuşarak sonunda başarıyla kurulumu gerçekleştirdim .

Aptana Studio 3 Kurulumu 
  
NOT: Bu kurulumu ubuntu 14.04 için gerçekleştirdim!!!

  • Öncelikle Aptana Studio’nun kurulması için gerekli şeyleri şu şekilde install ediyoruz;

sudo apt-get install openjdk-7-jdk libjpeg62 libwebkitgtk-1.0-0 git-core
  • Aptana, resmi olarak OpenJDK desteklemiyor, o yüzden alternatif olarak SunJDK kullanabilirsiniz. O da şu şekilde; 
sudo apt-get install libjpeg62 libwebkitgtk-1.0-0 git-core
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
 
  • Şimdi sıra geldi Aptana Studio’yu download etmeye. Onu da buradaki adresten yapıyoruz.
    Download tamamlandıktan sonra bu kod ile extract ediyoruz;
     
    sudo unzip [indirdiğiniz AptanaStudio dosyası].zip -d /opt
  • Herşey tamamlandı, şimdi de ana menüye bir kısayol ekliyoruz, onu da şu şekilde yapıyoruz ;
wget http://www.samclarke.com/wp-content/uploads/2012/04/AptanaStudio3.desktop
sudo mv AptanaStudio3.desktop /usr/share/applications/AptanaStudio3.desktop
 
  • Bundan sonra kurulum tamamlanıyor.Fakat Aptana editör açılmıyor.Bunun için şunları yapmak 
    gerekiyor;
  • Aptana studio zipten çıkardığımız dizinde AptanaStudio3.ini dosyası oluşturuyoruz ve bu 
    dosyaya şu satırları ekliyoruz ;
-Dorg.eclipse.swt.browser.DefaultType=mozilla 
 
  • Maalesef söylendiği gibi bunu yapmak da bizi  tam çözüme kavuşturmuyor.Araştırmalarım 
    sonucunda Aptana Studio 'nun asıl önemli gereksiniminin Xulrunner 1.8 olduğunu öğreniyorum.
  • Xulrunner 'ı buradan indiriyorum.Ardından indirilen dosyayı Aptana'yı açtığımız dizinde açıyoruz.
  • Ardından Aptana dizini içine geçiyoruz ve burada konsole dan 
     
     MOZILLA_FIVE_HOME=/home/xulrunner_kurulu_dizin/xulrunner ./AptanaStudio 
    komutunu çalıştırıyoruz.Aptana Studio xulrunner'ı kullanarak otomatik olarak açılacaktır.  
  • Masaüstünden çift tıklayarak açılmasını istersek;
  • Bunun için, eğer ki KDE masaüstünde iseniz Dolphin ile olmaktadır. Dolphin ile Aptana Studio'yu açtığımız dizinin üstüne sağ tıklayıp, özellikler deyin. Sonra izinler sekmesinden çalıştırılabilir'i aktifleştirin. Bunun aynısını klasör içine girip, uygulama dosyasına da uygulayın (yani ona da izinler sekmesinden çalıştırılabilir kutucuğunu işaretleyin). Böylelikle çift tıklamayla uygulama uğraştırmadan açılacaktır.
  •  Eğer Gnome masaüstündeyseniz, bende Dolphin falan yok diyorsanız Aptana Studio'nun açıldığı klasöre sağ tuş yapıp özellikler deyin. Ardından "Erişim Hakları" sekmesine gelin.Buradan "Dosyayı bir program gibi çalıştırmaya izin ver" kutucuğunu işaretleyin ve tamam deyin. 
      İşte bu kadar ;) 
 


10 Temmuz 2014 Perşembe

İntellij İDE 'de Yeni Android Projesi OLuşturma


Ubuntu kullanıyorsanız İNTELLİJ İDE ' yi açmak için şu adımları takip etmek gerekiyor;

  • Öncelikle terminalden intellijin tam yolunu yazıp o dizin altına geçmek gerekiyor şu şekilde ;
              cd '/home/aylin/Masaüstü/idea-IC-135.909' 
  • bin dizinine geçip şu komutu çalıştırmak yeterli olacaktır;
                 ./idea.sh

Şimdi yeni proje nasıl oluşturulur ona bakalım 
  • create new project ' i seçiyoruz.


  • Ardından android seçip Application module tıklıyoruz.


  • Uygulamamıza isim verip next diyoruz.


  • res in altında bulunan layout ve values sıklıkla kullanacağımız dizinler olacak.


  • Andorid sdk nın sürümünden kaynaklanan sık karşılaşılan bir hata ve çözümünden de bahsetmem yararlı olacaktır.

Failure [INSTALL_FAILED_OLDER_SDK] 

hatasının çözümü için projenizde bulunan AndroidManifest.xml dosyasını açıp <uses-sdk android:minSdkVersion="10"/> yazan kısımda versiyon numarasını düşürerek denemek ya da sdk nıza uygun versiyona internetten bakıp uygun olanı yazmak çözüm olacaktır ;)

8 Temmuz 2014 Salı

Android Yazılımların Varsayılanlarının Saklandığı Yer

  • Cihazımızın varsayılan duvar kağıdının (cihazımızın ilk açılışında varsayılan olarak ayarlanmış duvar kağıdı) konumu;
           /system/framework/framework.apk içinde res/drawable-mdpi/default_wallpaper.jpg

  • Cihazımızın zil sesleri, alarm sesleri ve diğer sistem seslerinin saklandığı konumu ;
                   /system/media/audio/ringtones

  • Cihazda yüklü sistem uygulamalarının konumu ;
                  /system/app

  • Kullanıcı uygulamalarının konumu ;
                 /data/app

Varsayılan zil sesi ve mesaj sesinin (cihazınızı kutudan çıkardığınızda seçili olan sesler)  hangi dosyadan ayarlandığı ve bu dosyanın ekran görüntüsü ;
  • Cihazımızın menulerin iconlarına ulaşmak istersek.Bu dosyalar şu şekilde bulunur.Öncelikle system/app/ dizininde bulunan apk dosyalarında Settings.apk dosyası bulunur.Bu dosyayı masaüstüne çekmek gerekecek.Bunun için de şu komutu çalıştırıyoruz ,  adb pull /system/app/Settings.apk  /home/aylin/Masaüstü sonra masaüstümüze gelen bu dosyayı açıyoruz.İçinde res dosyası bulunur.Bu dosyada istediğimiz icona ulaşabiliriz.Örneğin ayarlar menusu iconunu res dosyası içinde settings ifadesiyle arattığımızda karşımıza çıkan şu görüntü cevabımız olacaktır.