Arşiv

‘Eclipse’ kategorisi için arşiv

Java ile IMDB’den film bilgisi almak

Çarşamba, 09 Kas 2011 Yorum yapılmamış

Her şey harici diskte yer açmaya çalışmakla başladı : ) Önceleri adından gözüme kestirdiğim, şöyle basmakalıp Hollywood aksiyon veya romantik komedi türü filmleri imdb’de bir göz attıktan sonra siliyordum. Sonraları bu iş can sıkıcı olmaya başladı. Yok mudur bunun bir API’si, topluca bulayım bu filmleri de külliyen uçurayım kellerini falan diye bakmaya başladım. Nihayetinde eli yüzü düzgün, inciği boncuğu olmayan bir servis buldum. Şurada sunulan servis ile ilgili linke film adı ve/veya yılını parametre olarak geçtiğinizde film bilgileri json formatında bir nesne olarak dönüyor. Geriye json formatındaki bu nesneyi ayrıştırmak kalıyor. Bunun için de halihazırda API’ler mevcut.

Şöyle ki;

package com.imdbInfo.base;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;

public class BasicTest {

private static final String BASIC_API_URL = "http://www.imdbapi.com/?";
private static final String TITLE_PARAM = "t=";
@SuppressWarnings("unused")
private static final String YEAR_PARAM = "&y=";

public static void main(String[] args) {

try {

String titleToSearch = URLEncoder.encode("Forrest Gump","UTF-8");

String text = getJSONStringOf(BASIC_API_URL + TITLE_PARAM + titleToSearch);

JSONObject jSonObject = (JSONObject) JSONSerializer.toJSON(text);

String title = jSonObject.getString("Title");
int year = jSonObject.getInt("Year");
int votes = jSonObject.getInt("Votes");
double rating = jSonObject.getDouble("Rating");
String genre = jSonObject.getString("Genre");
//Runtime, Director vs.
System.out.println("Title:" + title + "\nYear:" + year + "\nVotes:" + votes + "\nRating:" + rating + "\nGenre:" + genre);

}
catch (Exception e) {

//Movie not found !
e.printStackTrace();

}

}

public static String getJSONStringOf(String urlSpec) throws Exception {

URL url = new URL(urlSpec);
URLConnection connection = url.openConnection();

BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line = "";
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString();

}

}

Title:Forrest Gump
Year:1994
Votes:325985
Rating:8.6
Genre:Drama, Romance

diyerek filmin bilgilerini almış oluyoruz. Bunların içinde film adı, yapım yılı, türü, kullanılan oy sayısı, puan, yönetmen, oyuncular, süre ve sair filmle ilgili bir sürü bilgi bulunuyor.

Bundan sonra eldeki filmleri bu servisten alınan bilgiye göre sınıflandırmak kalıyor. Ki işin keyifli kısmı da orası : ) Yalnız şunu belirtmemde fayda var. Bu servisin elindeki veri imdb’nin yayınlamış olduğu film veritabanından alınıyor. Sanırım biraz eski. Araştırmadım ama tahminimce bir kaç ay kadar. Ziyanı yok : )

Kodu bu haliyle kullanabilmek için projenin ‘classpath’ inde commons-beanutils,commons-collections-3.2.1, commons-lang, commons-logging, ezmorph-1.0.5 ve json-lib-2.4-jdk15 jar’larının bulunması gerekliyor.

Daha bir eli yüzü düzgün ve gerekli jar’ları barındıran kod örneği şuradan indirilip incelenebilir, Eclipse’e import edilebilir.

Eclipse code template

Cumartesi, 15 Eki 2011 Yorum yapılmamış

Eclipse’in bir güzel özelliği de sık kullanılan kimi kod blokları, şablonları için kısayol oluşturabiliyor olmak. Tıpkı “syso” yazıp Ctrl+Space yapınca “System.out.println();” satırını veya “main” yazıp sınıfa bir main metodu eklemek gibi.

Bunun için yapılması gereken Window->Preferences->Java->Editor->Templates kısmından yeni bir şablon eklemek. Mesela ben debug yaparken işlemi yarıda kesmek istediğim zaman kullandığım kod bloğu olan throw new RuntimeException(“Hata !”); ifadesini “throws” kısayolu ile eşledim. Çok da güzel oldu, iyi de oldu : )

Eclipse Code Template

Eclipse’in yine kod şablonları oluşturabilmek için “Snippets” görünümü de bulunuyor. Ctrl+3 ile açılan görünüm seçiçiden “Snippets” yazılarak benzer şekilde kod şablonları oluşturulabilir.

Eclipse Debug Pratikleri

Cumartesi, 18 Ara 2010 Yorum yapılmamış

Eclipse’in bir kaç debug görünümü özelliğinden bahsedeyim.

Drop to frame drop_to_frame

Bu sayede herhangi bir debug işlemi sırasında en baştaki breakpoint noktasında dönebiliyorsunuz. Tabi bu arada çalışan kodun meydan getirdiği değişiklikleri geri alma gibi bir özellik söz konusu değil.

Watchpoint

Herhangi bir genel değişkenin (global variable) olduğu satıra çift tıklayarak eklenebilir. Böylece değişken her değişikliğe uğradığında debug görünümüne dönüş yapılabilir.

Add java exception breakpoint addJavaException

Bu özellik ile de kodun çalışması sırasında meydana gelebilecek herhangi bir istisna yakalanıp, bu istisna durumunun incelenebilmesini sağlanıyor. Burada eklenecek istisna Java’da bütün istisnaların türediği sınıf olan “Exception” seçilirse mesela bütün istisna durumlarında Eclipse debug görünümüne dönebiliyor, veya özel bir “Exception” (OptimisticLockException, SQLGrammarException vs.) türü belirterek onu yakalayabiliyoruz. Bu daha çok yakalanmayan veya yakalama gereği duyulmayan “NullPointerException”, “IndexOutOfBoundsException” gibi istisna durumlarında faydalı olur gibi geliyor.

Skip all breakpointsskipAllBreakPoints

Pratikte çok işe yarayan, çoğu Eclipse kullanıcısının biliyor olması gereken bir özellik. Bu sayede tek tek breakpoint leri devre dışı bırakmak yerine, bütün breakpoint leri devre dışı bırakarak kodun normal çalışmasını takip edebiliyoruz.

Enable when – Hit count

Son olarak, pratikte çok ihtiyaç olmazmış gibi gözükse de, bir breakpoint in ne zaman aktif olacağını o breakpoint in özellikler kısmından “Enable when” kısmına yazacağımız kod ile belirleyebiliyoruz. Şöyle bir durumda işe yaramışlığına şahidim; Diyelim ki 200 elamana sahip bir listede for döngüsü ile işlem yapıyoruz. Hatanın da 50 ila 60. elamanlar arasında bir yerlerde olduğunu biliyoruz.

for(int i = 0; i < list.size(); i++){
...
}

Böyle bir durumda “Enable When” kısmına i >= 50; yazarak ilgili breakpoint in 50.adımla beraber aktif olmasını sağlamış, biraz zaman biraz sabır kazanmış oluyoruz.

Yine ilgili breakpoint in özellikler kısmından kaç kereden sonra pasif olacağını da “Hit count” ile belirleyebiliyoruz.

PMD ile kod analizi

Cumartesi, 24 Nis 2010 Yorum yapılmamış

Sadece Eclipse değil aynı zamanda diğer bir çok IDE’ye de (JDeveloper, JBuilder, IntelliJ IDEA vs.) eklenebilen gayet faydalı bir eklentiden söz etmek istedim; PMD. Şurada da bahsedildiği üzere PMD neyin kısaltması ola ki sorusunun bir sürü cevabı var, veya aslında yok. (Pretty Much Done, Project Mess Detector, Project Monitoring Directives vs.) Yaptığı iş Java kodunu tarayıp olası hatalara sebebiyet verecek kod parçalarını işaret etmekle kalmayıp bunların nasıl daha temiz, daha düzgün, daha okunur hale getirilebileceği konusunda öneriler getirmesi. Taradığı kural setlerinden birkaçını kabaca yazacak olursak;

* Daha iyi ve/veya daha az kodla ifade edilebilcek kod blokları
* Kullanılmayan değişken, parametre, metotlar
* Boş bırakılmış try/catch/finally/switch ifadeleri
* Fazlaca karmaşık, okunması zor ifadeler, metotlar
* Gereksiz if cümlecikleri, while ile değiştirilebilecek for cümlecikleri
* Kopya kod blokları
* Kopyala/yapıştır kaynaklı oluşabilecek hatalar
* Fazlaca uzun veya kısa isimlendirilmiş değişkenler, metotlar

Elbette bunların dışında Java kodunu değerlendirmeye tabi tuttuğu bir dolu kural seti var. Pratikte daha çok karşımıza çıkabilecek olanlardan bahsettim.

Bir iki örnek vermek gerekirse;

Query sınıfının getResultList() metotundan dönen liste değişkeninin içeriğini if(list.size()>0) gibi kontrol etmek yerine list.isEmpty() ile kontrol etsene,

veya String değişkenler için eşitlik kontrolü yaparken (a diye String bir değişkenimiz olduğunu varsayarsak) if(a.equals(“Ahmet”)) şeklinde kontrol etme arkadaş, if((“Ahmet”).equals(a)) diye kontrol ederek muhtemel null pointer hatalarından da sıyrılsan ya,

veya bir başka örnek BigDecimal tipinden bir değişkene new BigDecimal(“0″) ile değer atadığımız bir ifade için, arkadaş ne diye statik olarak zaten elinde var olan BigDecimal.ZERO ‘yu kullanmıyorsun ki diyebiliyor. Bu gibi örnekleri çoğaltmak mümkün.

Eklentinin sahip olduğu kural setlerini Window->Preferences->PMD menüsünden düzenleyebiliyoruz da. Böylece hangi kuralı değerlendirmeye alacağını veya nasıl değerlendireceğini belirleyebiliyoruz. İşte efendim ben değişken isimlerini anlaşılır olması adına uzun yazarım, sen karışma benim işime, o yüzden sen beni ancak 20 karakterden daha uzun olarak isimlendirilmiş değişkenler için uyarıver diyebiliyoruz.

Merak edip denemek isteyenler için Eclipse ‘ e nasıl ekleyebileceğimiz şurada anlatılmış.

Şurada da PMD’nin sahip olduğu kural setleri ayrıntılı bir şekilde izah edilmiş.

Kategoriler:Eclipse Etiketler:,

Eclipse Method Refactoring

Pazartesi, 08 Mar 2010 Yorum yapılmamış

Projeler dallanıp büyüdükçe sınıflar artık okunulmaz, anlaşılmaz ve hatta yer yer içinde bir ben yokum tadında bit pazarı kıvamına geldiyse refactor kaçınılmaz olmuş demektir. Eclipse’in bir güzel özelliği de tam olarak burada karşımıza çıkıyor. Sınıfları özelleştirerek ayrıştırma, bölme işlemi sırasında istenilen metotlar “Outline” perspektifinden çoklu bir şekilde seçilip (CTRL ile) daha “Refactor->Move” seçeneğinden istenilen sınıfa sorunsuz bir şekilde taşınabilir. Böylece metot çağırım ve import düzenlemelerini yaparken karşılacağımız olası insan hatalarına izin vermemiş ve bir nevi hamallık olan bu işgücünden de tasarruf sağlamış oluyoruz.

eclipsemethodrefactoring

Refactor menüsünde;

Move; Metot veya sınıf düzeyinde yer değiştirme
Rename; Seçilen değişken, metot veya sınıfı yeniden isimlendirme
Extract Interface; Seçili sınıftan interface oluşturma
Change Method Signature; Metot imzasını değiştirme
Pull Up; Seçilen metotları bir üst sınıfta konumlandırma
Pull Down; Seçilen metotları bir alt sınıfta konumlandırma

vesair gibi proje geliştirme sırasında kolaylık sağlayacak daha bir çok özellik mevcut. Konu ile ayrıntılı bilgi isteyenler şuradaki makaleye göz atabilir.

Kategoriler:Eclipse Etiketler: