Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

January 28 2012

07:30

Yii Framework’te Detaylar #2

(Dikkat: Yazılanların daha anlaşılır olması için serinin önceki yazılarını okumanız gerekebilir veya gerekmeyebilir.)

Yii’ye ufak bir giriş yaptık ardından ilk projeyi oluşturduk ve sıra geldi proje üzerinde çeşitli değişiklikler yaparak projeyi özelleştirme ve geliştirme aşamalarına.

Yii projelerini özelleştirmek için birkaç farklı yöntem bulunmakta. Bunların başında “protected/config/main.php” dosyası geliyor. Öntanımlı ayarların büyük bir kısmı buradan değiştirilebilir durumda.

Fakat main.php’nin detaylarına geçmeden önce ana dizindeki index.php dosyasından bahsedelim. Yii’ye gelen her istek (request) önce bu index.php geliyor ve dosya üzerinden yönlendiriliyor. Birkaç satırdan oluşan index.php’ye bir göz atalım:


// change the following paths if necessary
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);

// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

require_once($yii);
Yii::createWebApplication($config)->run();

Açıklayalım:

$yii=dirname(__FILE__).'/../yii/framework/yii.php';

İlk satırdaki $yii, proje oluşturulurken frameworkün bulunduğu dizindeki yii.php dosyasını yani frameworkü çağırmak için kullanılmak üzere set ediliyor. Proje oluşturulduktan sonra framework dizini değiştirilirse bu da satırın düzenlenmesi gerekir.

$config=dirname(__FILE__).'/protected/config/main.php';

İkinci satırdaki $config, yazının başında da belirttiğim konfigürasyon ayarlarını içeren dosyanın yolu tutuyor.

defined('YII_DEBUG') or define('YII_DEBUG',true);

Sonraki satır ise, üzerindeki yorum satırından da anlaşılacağı üzere, geliştirme süresince açık kalması gereken debug modu. Yayına aldıktan false yapılması gerek.

defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

Diğer defined satırı ise çağırılan ve/veya dahil edilen fonksiyonların, dosyaların geçmişini tutmak için gerekli. 3 değeri ise her işlem için tutulacak geçmiş limitine karşılık geliyor. Değiştirmek mümkün.

Sondaki iki satır ise, ilk satırda dizini tutulan yii.php’nin çağırılması ve uygulamanın çalışmaya başlamasını sağlıyor. Üzerinde değişiklik yapmayın (zaten mümkün değil).

4 satırdan oluşan index.php bu kadar, bir de index.php ile aynı dizinde bulunan ve yalnızca bir satırı farklı index-test.php var. Bu dosyanın farklı tek satırı konfigürasyon için “config/main.php” yerine “config/test.php” dosyasını çağırması dahil etmesi.

İki konfigürasyon dosyası arasındaki fark ise, test.php’nin trace_level değerini yok sayması ve unit test bileşenini kullanması.

Projede main.php “protected/config” içerisinde yer almakta. Bu dosya, çağırıldığı yere; array olarak projenin gerekli ayarlarını göndermekte. Geçelim incelemeye:

'name'=>'Hello Uygulaması',

Projenin adını (hazır gelen şablon içerisinde h1 ve title etiketlerinde çağırılıyor) değiştirir.

'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'1234',
),

Proje geliştirirken en çok kullanılacak modüllerden biri olan Gii’nin (sonraki yazının konusu) aktifleştirilmesi ve giriş için gereken parolayı buradan değiştirebilirsiniz.

Varsayılan olarak (1.1.8′de) yorum satırına alınmış halde gelir. Komut satırlarını kaldırın ve kullanacağınız bir parola verin. Artık gii kullanıma hazır: http://localhost/hello/index.php?r=gii adresinden erişebilirsiniz. Detaylarına sonraki yazılarda değineceğiz.

Gii 1.1.2 sürümüyle Yii’ye eklendi, öncesinde ise komut satırı kullanılıyordu.

Sıra geldi bileşenlere (components):

'urlManager'=>array(
   'urlFormat'=>'path',
   'rules'=>array(
      '<controller:w+>/<id:d+>'=>'<controller>/view',
      '<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
      '<controller:w+>/<action:w+>'=>'<controller>/<action>',
   ),
),

urlManager bileşeni Yii’ye gelen isteklerin yapısını değiştirmek için kullanılır. Kısaca index.php?r=site/contact yapısını index.php/site/contact haline çevirir (çevirebilir). Varsayılan olarak yorum satırına alınmıştır, aktifleştirmek için komut satırlarını kaldırmak gerekir. Detaylarını yine daha sonraki yazılarda göreceğiz.

'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=testdrive',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
    'charset' => 'utf8',
),

Yii’nin birçok veritabanına desteği olduğundan önceki yazılarda bahsetmiştim. Bunlardan birisi olan SQLite, main.php içerisinde yer alıyor. MySQL kullanacaksanız yapmanız gereken SQLite’ı satırlarını yoruma alıp hemen altındaki db arrayini yorumdan çıkartmak. Kullanıcı adı şifreyi de mysql kurulumunuza göre düzenledikten sonra veritabanını kullanabilirsiniz.

Ayrıca connectionString üzerinden dbname parametresini değiştirmeyi de unutmayın.

'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
        ),
array(
'class'=>'CWebLogRoute',
'levels'=>'error',
),
),
),

Yii’nin başka bir güçlü yanı da gelişmiş bir log bileşenine sahip olması. Veritabanından, emaile kadar projenin olağan akışında gerçekleşen (hata, uyarı veya bilgi) her şeyi loglamak oldukça basit.

Örnekte hata (error) ve uyarıları (warning) dosyaya, yalnızca hataları da geliştirme süresince sayfaya logluyor. WebLog geliştirme dışında kullanılmıyor tabii. CEmailLogRoute kullanırsanız örneğin hataları e-posta ile iletiyor.

CFileLogRoute için varsayılan log dizini “protected/runtime/application.log”. Belirtilen seviyeye (level) göre çıkan logları oradan inceleyebilirsiniz.

'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
),

Projeyle birlikte gelen iletişim sayfasından (contact) gönderilecek iletilerin varsayılan adresi “adminEmail” alanından değiştirilebilir.

'defaultController' => 'login',

Son olarak; projenin varsayılan controller dosyası SiteController olarak tanımlanmıştır. Bunu değiştirmek için main.php içerisine yukarıdaki satırı, istediğiniz Controller ismiyle birlikte ekleyebilirsiniz. Değiştirirken controllerın dosya adını değil, sadece controller adını yazmaya dikkat edin.

Bir sonraki yazıda Gii’den bahsedeceğim.

Soru ve eklemeler için yorum gönderebilirseniz memnun olurum.

January 26 2012

07:08

Android EditText için Shake Animasyonu

WordPress’in login sayfasından aşina olduğumuz shake efektini Android için de kullanmak mümkün. (Bahsettiğim efekte şuradan göz atabilirsiniz: http://jsfiddle.net/UbbEg/)

Android’in kullanım örneklerinde (samples) denk geldiğim animasyon uygulamaya ayrı bir hava katıyor. Geçelim nasıl uygulanacağına. Shake animasyonu için örnek proje açın ve main.xml’in LinearLayout kısmını aşağıdaki gibi değiştirin:

<EditText
android:id="@+id/llshake"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:singleLine="true"
android:password="true"
/>

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Shake!"
/>

Daha sonra uygulama açarken oluşturduğunuz Activity sınıfının içeriğini aşağıdaki ile değiştirin:


@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   Button loginButton = (Button)findViewById(R.id.button);
   loginButton.setOnClickListener(this);
}

public void onClick(View v) {
   Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
   findViewById(R.id.llshake).startAnimation(shake);
}

Sıra geldi onClick sırasında çağırılan animasyona. Uygulamanın res/ klasörü içerisine anim isminde bir klasör oluşturun. İçerisine de shake.xml ve cycle_7.xml isminde iki dosya oluşturun.

shake.xml içeriği:


<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXDelta="0"
 android:toXDelta="100"
 android:duration="600"
 android:interpolator="@anim/cycle"
/>

cycle.xml içeriği:

<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="7" />

Yapılacaklar bu kadar. Dilediğiniz edit bileşenini koşullara bağlayarak animasyonu kullanabilirsiniz. Denemedim fakat, animasyonun farklı bileşenlerle de çalışması muhtemeldir (buton vb). Test edenler yorum bırakırsa sevinirim.

Animasyonu düzenlemek de mümkün; cycle.xml içerisindeki cycles=”7″ değeri kaç kez shake edileceğini gösteriyor.

Ayrıca shake.xml içerisindeki fromXdelta ve toXdelta sağa sola yapılacak hareketin boyutlarını, duration ise animasyonun toplam süresini (milisaniye) değiştirmekte.

January 25 2012

06:30

Yii Framework’te Detaylar #1

Yii’den bahsettikten sonra gelelim frameworkün kurulumuna ve Yii ile geliştirilecek ilk projeye.

SVN kullanıyorsanız “svn checkout http://yii.googlecode.com/svn/trunk/ yii-read-only” ile Git kullanıyorsanız ”git clone git://github.com/ogulcan/unofficial-yii-framework-mirror.git” komutlarıyla konsoldan frameworkün son sürümüne erişebilirsiniz.

Ben yazıda svn ya da git ile değil, web üzerinden indirilmiş gibi anlatım yapacağım. Yii’nin son sürümünü (bu yazı yazılırken 1.1.8) resmi siteden indirin ve geliştirme yaptığınız yolun altına (örn: www/) dosyaları çıkartın. İçeriğine geçmeden önce klasörün uzun ismini “yii” ile değiştirin (yazıda yii olarak kullanılacak), çağırırken kolay olsun. Şimdi içerisindeki klasörlerden bahsedelim:

  • demos: Resmi sitede videolu anlatımları bulunan örneklerin kaynak kodları da dahil olmak üzere 4 demo proje yer alıyor. Hepsi de giriş seviyesi için uygun ve anlaşılır.
  • framework: Yii’nin kendisi.
  • requirements: Sunucu konfigürasyonunun Yii’ye uygunluğunu kontrol etmek için kullanılan dosyalar.

Projeye geçmeden önce Yii’nin uyumluluğunu kontrol etmek için localhost/yii/requirements sayfasını açalım.

PHP 5.1+ ile başlayan ve geliştireceğiniz projeye göre yükleme zorunluluğu değişen bir liste çıkacak karşımıza.

Sarı uyarılar, uygulamada olacaksa yüklemenesi gerekenleri işaret ediyor. Hiç kırmızı işaret olmaması, konfigrasyonun Yii’ye uygun olduğunu gösteriyor.

Sıra geldi ilk uygulamayı oluşturmaya: Yii de Play gibi komut satırından yeni proje oluşturulan frameworklerden bir tanesi. Yii’nin bulunduğu dizin altındaki framework klasörüne girip, aşağıdaki komutu giriyoruz;

$ ./yiic webapp ../../hello
Create a Web application under '/var/www/hello'? [Yes|No]

Çıkan soruya Yes ya da ile cevap veriyoruz. Böylece hello isminde yeni bir yii projesi oluştu: http://localhost/hello adresinden projeye erişebilirsiniz.


Yukarıdaki gibi hakkında ve iletişim olmak üzere 1 statik sayfa, 1 giriş sayfası içeren bir proje çıktı karşımıza. Giriş bilgileri henüz veritabanından kontrol edilebilir durumda değil. İletişim formu ise doğrulama görseli ile birlikte açılıyor. Fakat form da henüz çalışır durumda değil.

Bu projeden öğrenilmesi gereken Yii’nin çalışma yapısı olmalı. Örneğin iletişim (contact) sayfası açıkken adres satırına baktığımızda; index.php’nin ardından ?r=site/contact geliyor. Bu “Site” isimli controllerın, contact metodunun çağırıldığını gösteriyor. MVC yapısına aşina olduğunuzu varsayarak, tekrardan controller kavramına girmiyorum.

Şimdi de projenin dosya yapısını, yii ile aynı dizinde bulunan hello klasöründen inceleyelim:

  • assets: Genellikle JavaScript dosyalarını ve statik dosyaları içerir.
  • css: Stil dosyalarını içerir.
  • images: Projedeki görsellerin ekleneceği dizin.
  • themes: Tıpkı wordpress gibi, projeden bağımsız bir şekilde arayüz değişimi için kullanılacak klasör (orta ve ileri seviye).
  • protected: Model-View-Controller dosyalarını, test ve diğer önemli (değiştirilebilir) dosyaları içerir (eklentiler vb). Dizinin yazılabilir olması gerekmektedir (Gii için -detaylar sonraki yazıda-) .

Genel dosya yapısından bahsettikten sonra biraz da protected içerisine göz atalım.

Projenin ”hello/protected/controller” dizini az önce bahsettiğimiz Controller/Method yönlendirmesini yapan SiteController.php dosyasını içeriyor.

Her Yii projesinin öntanımlı olarak gelen controller dosyası SiteController.php’dir (değiştirmeye daha sonra değiştireceğiz) . Yii’de controller dosya isimlerinin yanına “Controller” getirilmesi zorunludur.Controller’a ait metodlar içinse, her metodun önüne “action” getirilmesi zorunludur (örn: actionIndex).

Protected klasöründe “models/LoginForm.php” ve “models/ContactForm.php” dosyaları da SiteController içerisindeki ‘login’ ve ‘contact’ metodlarındaki modalların karşılığını sağlamakta.

Yine protected içerisinde her bir controller için, render edilen/edilecek view dosyaları mevcuttur. Bu proje için bakarsak; “hello/protected/views” içerisinde yalnızca SiteController için kullanılan view dosyaları mevcut. Yazının önceki kısmında belirttiğim statik sayfa olan “about” ise views/site/pages/about.php içerisinde.

Son olarak da, konsoldan oluşturduğumuz projeyi IDE içerisine dahil edin (import). Ardından da “include_path” içerisine (genelde projenin özelliklerinde yer alır) www/yii/framework yolunu gösterin.

Yii’nin ilk projesi için söylenecekler bu kadar. Sonraki yazıda framework üzerinde yapılacak çeşitli değişiklikler ile devam edeceğim.

Anlaşılmayan ya da sorulması/eklenmesi gerekenleri yorum ile belirtirseniz sevinirim.

January 23 2012

06:30

Yii Framework’e Giriş

Yii, yüksek performans ve Web 2.0 uygulamaları için geliştirilmiş bir PHP çatısıdır.

Framework ismini “Yes it is” kelimesinin baş harflerinden almıştır: “Is it fast? … Is it secure? … Is it professional? … Is it right for my next project? … Yes, it is!

Yii framework geliştiricilere; hızlı, temiz ve tekrarsız (DRY Principle) bir uygulama geliştirme ortamı sağlar. MVC yapısına uygun olarak geliştirilmiş; DAO, Query Builder, Active Record desteğiyle güçlendirilmiş, AJAX destekli widgetlara sahip, ACP ve MemCache ile beraber çalışabilme yeteneğine ve daha birçok özelliğe sahip olan Yii, 2008′den beri geliştirilmekte.

Yii hali hazırda; PostgreSQL, MySQL, SQLite, SQL Server, Oracle, DBLIB ile çalışmaya uygundur ve query caching, null conversion, database cache dependencies, performance profiling, transaction gibi özellikleri desteklemektedir.


2009′da yapılan benchmark testlerine göre (testlerin doğruluğu tartışmalı) Codeigniter, Symfony gibi frameworklere göre daha fazla iş yapabildiğini göstermiştir. Testin kriteri saniyede işlenen istek oranıdır (request per second).

Yii’nin bu başarısının altında “lazy loading” kullanımı yatmaktadır. Bir sınıf ilk kez çağırılana kadar oluşturulmaz, bu da performansı diğer frameworklere nazaran daha iyi yapmaktadır.

Ayrıca çoğu frameworkte yer almayan; model, controller, form ve crud yapı ve işlemlerini otomatik oluşturan (generate) bir aracı (gii tool) mevcut. Bunun sayesinde yalnızca veribanı tasarlayarak ufak bir siteyi ayağa hızlıca kaldırabilmek mümkün.

Yii’nin ilham aldığı bazı framework ve uygulamalar: Prado (event-driven programming), Ruby on Rails (ORM layer), Symfony (Plugin-in archiecture), Joomla (Modular Desing).

Son olarak, Yii’nin temellerinden bahsettiğim bu yazıyı tamamlamadan önce, öğrenme süresince kullanılabilecek kaynaklara da değinmeli.

Resmi siteden 4 videolu anlatım.
Tam döküman: Yii Wiki
Amazon’dan satın alabileceğiniz 2 kitap.
Ve Yii’nin resmi olmayan git reposu.

Türkiye’de Yii kullanan yazılımcı ve şirket sayısı henüz kısıtlı. Bireysel olarak öğrenen ve geliştirenler ise henüz bir araya gelmiş değil. Dolasıyla Yii kullanıyorsanız yorumlarla katkıda bulunmayı ihmal etmeyin.

January 17 2012

07:00

Java’da MD5 Şifreleme

Tek yönlü şifreleme için MD5 tercih edip de Java’da kullanmak istiyorsanız aşağıdaki sınıftan yararlanabilirsiniz.

Kullanım: Sınıftan bir nesne üretirken stringi gönderin, getMD5() ile şifrelenmiş haline erişin.

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SimpleMD5 {

    private String text;
    private String MD5;
    private byte[] md5hash;
    private StringBuffer buffer;
    private MessageDigest md;
    
    protected String charset = "UTF-8";


    public SimpleMD5(String text) {
this.text = text;
try {
            md = MessageDigest.getInstance("MD5");
md5hash = new byte[32];
md.update(text.getBytes(charset), 0, this.text.length());
md5hash = md.digest();
this.MD5 = convert2Hex(md5hash);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
            e.printStackTrace();
}
    }

    private String convert2Hex(byte[] data) {
        buffer = new StringBuffer();
for(int i = 0; i < data.length; i++) {
int halfByte = (data[i]>>>4)&0x0F;
int twoHalfs = 0;
do {
if( (0 <= halfByte) && (halfByte <= 9) )
buffer.append((char)('0' + halfByte));
else
buffer.append((char)('a'+(halfByte - 10)));
halfByte = data[i] & 0x0F;
} while (twoHalfs++<1);
}
return buffer.toString();
    }

    public String getMD5() { return this.MD5; }

    public static void main(String[] args) {
        SimpleMD5 md = new SimpleMD5("123456");
System.out.println(md.getMD5());
    }
}

January 11 2012

07:20

Top Yuvarlaktır – Hakan Dilek

Malum şike soruşturması ve ardından geçen süreç futbola olan bakışımı fazlaca değiştirdi.

Futbolun içinde kalmaya çalıştıkça, futbol dışı faktörler benim gibi insanları futbol dışına itti. Bizim gibi gelişmeye yeni başlamış, cinsiyet ayrımcılığının üst seviyede yaşandığı ve kavga eşiğini çabuk aşabilen toplumlar için böyle ortamlar iyi yönetilemiyor.

Hazır hal böyleyken, fazlaca futbol temalı kitapların olduğu kütüphaneme yenilerini eklemekten geri kalmadım. Top Yuvarlak’tır bunlardan bir tanesi.

Hakan Dilek eski futbolcu, şimdi yorumcu olan yazarlardan bir tanesi. Kitap, Kazım Koyuncu’ya armağan edilmiş bir notla ve onun futbola dair görüşleriyle başlıyor; peşi sıra da pek çok ünlü ismin yorumlarıyla devam ediyor. (Editöryal süreçleri öne çıkartan kitabın benzerini daha önce de blogda yazmıştım)

Attila İlhan bu isimlerd bir tanesi. Yazar ve sanatçı kimliğine alıştığımız Attila Abi’yi futbol yorumlarken düşünmek aklıma dahi gelmemişti. Cahit Berkay, Duygu Asena ve Fuat Saka da aynı şaşkınlığın diğer aktörleri.

Cahit Berkay’ın “abaza milletiz, futbolu severiz” sözleri ve arkasından gelen gerekçeler çok yerinde. Kitabın en kısa röportajı da olsa, en çok yer edeni oldu.

Futbola dair birçok kitap, belgesel ve yorum takip eden birisi olarak kitabın öne çıkartmak istediği -ve çıkarttığı- mesajı beğendim. Görüşlerini bildiren insanlarım tamamı, futbolun birleştirici ve eğlenceli unsurlarının üzerinde durmaktan bıkmamış

2005′te yayınlanan kitap, belirsizlik ve dengesizliklerin çok fazla öne çıktığı bu futbolumsu günlerde, yaşananlardan bir nebze olsun uzaklaşmaya yardım ediyor.

Kazım Koyuncu’nun sözleriyle bitirmeli yazıyı:
Beni de müziğin futbolcusu say. Say ki, içimin bayrakları havalansın. Şöyle güzel bir çalım, iyi pas ceza alanının dışından Trabzonspor’a puan kazandıracak bir gol şutu için nelerimi vermezdim ki?
Hakan Dilek: Nelerini verirdin diye sorayım o zaman?
Kazım Koyuncu: Notalarımı, parmak uçlarımdan akıp giden zamanı, yüreğimi ortaya koyardım.

January 09 2012

08:20

Java’da Data Access Object Pattern Interface

Data Access Object, tasarım mimarilerinden (desing patterns) bir tanesi. Kısaca, veriye erişilecek katmanın veritabanından soyutlanmasını sağlamak amaçlı kullanılır.

Standart oluşturması açısından, Java’da ihtiyaç olunca yazdığım DAO Interface’i buradan paylaşıyorum:

package DAOs;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;

public interface DataAccessObject<T, ID extends Serializable> {
    
    Class<T> getEntityClass();
    
    public int countAll() throws SQLException;

    public T findByID(final T entity) throws SQLException;
    
    public T findByName(final T entity) throws SQLException;
    
    public List<T> findAll() throws SQLException;

    public Boolean insert(final T entity) throws SQLException;
    
    public Boolean update(final T entity) throws SQLException;
    
    public Boolean delete(final T entity) throws SQLException;
    
}

Interface genişletilebilir (countByContidion, findByCondition vb).

Kullanırken, pojoyu DAO’dan implement etmeniz yeterli.

January 07 2012

08:20

Önyargı ya da E) Hiçbiri

Felsefe terimleri sözlüğü önyargı için “bir şeyi yeterince bilmeden varılmış kanı; önceden verilmiş yargı” tanımı yapıyor.

Felsefe tarafı uzun, girmeyelim. Henüz önyargıdan ve önyargılı insanlarla yaşamaktan şikayetçi olmayan birisine rastlamadım.

Hepimiz, hak etmediğimiz yargılara hem de ön olanlarına dair sitemlerimizi, zaman zaman dillendiriyoruz. Görünen ve anlaşılan o ki; önyargının önüne geçmenin bir yolu yok.

Çok katlı bir otelde geceyi geçiren İngiliz, sabahın ilk ışığıyla hava almak için balkona çıkmış. Tam o sırada, üst katlardan bir kadın bağırarak intihar etmiş.

Fıkra bu ya, İngiliz bir hamleyle tutmuş kadını saçından, kolundan. O sabahın keyfiyle uyanıp da, intihar eden kadını ikna etmemek olur mu? Olmaz.

Kadına derhal neden ölmek istediğini sormuş. Kadından yaşayacak bir şey kalmadı cevabını alınca, başlamış anlatmaya: Bak demiş; “gel bak atlama. Seninle harika bir kahvaltı yapalım, sonra da alışverişe çıkarız.” Teklif üzerine kadın: “Peki ya sonra?” diye sormuş. İngiliz: “Sonra da British Museum’u gezeriz, yetmez mi?”.

Beğenmesine rağmen yine sonra diye sormuş kadın. İngiliz bu kez: “Akşam da şık bir yerde yemek yer, bu otel odasına gelip sevişiriz” demiş. Cevap üzerine kadın: “Hepiniz aynısınız, sevişmek sevişmek” diye bağırdıktan kendini İngiliz’den kurtarmış ve tekrar atlamış.

10 kat aşağıda balkonda ılık şarap içen bir Fransız, kadını başarılı bir reflekse tutmuş. Malum soruyu yöneltip, aynı cevabı alınca o da başlamış anlatmaya: “Bu hayat yaşamaya değmez olur mu hiç? Önce şarap ikram edeyim sana, sonra Eiffel manzarası eşliğinde kahvaltı yapalım.” Bu kez tereddütlerinden daha da uzaklaşan kadın, merakla “peki sonra” demiş. Fransız devam etmiş: “Louvre müzesini gezeriz beraber, dilersen Pompidou da olabilir.”

İkna olmaya başlayan kadın son kez sormuş: “Akşam için ne düşünüyorsun?” Sıkılmaya başlayan Fransız: “Bu otel çok güzel, yemeği aşağıda yedikten sonra odaya gelir, sevişiriz” diye cevaplamış. Kadın iki kat hayal kırıklığıyla “erkek milleti değil mi, hepiniz aynısınız” diye haykırmış ve üçüncü kez atmuş kendini.

15 kat aşağıda balkon keyfi yapan (sürpriiz) Temel yakalamış kadını. Malum şivesiyle, biraz da sitem ederek kadına neden atladığını sormuş. Tüm ümitleri tükenen kadın hayattan alacağı bir keyif kalmadığından ve yaşamak istemediğinden dem vurmuş.

Temel sinirlenmiş ve başlamış anlatmaya: “Hiç de öyle değil. Şimdi sen geliyorsun buraya, gidip deniz manzarasında güzel bir kahvaltı yapıyoruz biz.” demiş. Sütten ağzı yanan kadın, ümitsizce diğer planlarını sormuş. Temel devam etmiş: “Sonra küçük bir taka kiralar, açılır balık tutarız” demiş.

Cevaba şaşıran kadın, bir kez daha şansını denemek adına “başka” demiş. Temel devam etmiş: “Sonra da yine deniz manzaralı bir yerde tuttuğumuz balıkları mangalda kızartıp yeriz”. Kadın tekrar sormuş, Temel aynı şevkle sözlerini sürdürmüş ve: “Bu kez büyük bir gemiye biner, gezmek için denize açılırız. Akşam olunca da güzel bir lokantada hamsi pilavı yeriz” demiş.

İyice ümitlenen kadın: “Peki ya yemekten sonra?” diye sormuş. Temel: “E ne olacak yahu, uyuruz artık” demiş. Kadın neşeli bir sesle: “Ama sevişmeyecek miyiz?” diye sormuş. Temel: “Orospu. Kadın milleti değil mi işte, hepiniz aynısınız.” diyerek kadını bırakmış.

Gördüğü kadarıyla değerlendirenlere, göründüğü gibi olmadığını anımsatması dileğiyle.

January 05 2012

08:30

Terra Nova

Özellikle Lost’un ardından geniş kadrolu ve farklı konuları içeren bir diziye hasret kalmıştım şahsen. Bu beklentiyi yalnızca bütçe harcamasıyla karşılayacak gibi görünüyor. Bazı tereddütlerim hala mevcut.

Terra Nova’nın hikayesi 2149 yılında başlıyor. Yaşam şartları çok kötü, hava kirliliği hayatı zorlaştırıyor. Uzay-Zaman ekseninde bulunan bir yarık 85 milyon öncesine açılıyor. Ve kahramanlarımız da Terra Nova adı verilen yeni dünyaya gidiyor. Asıl konu burada başlıyor.

85 milyon öncesi  ve 2149′un teknolojisi bir araya gelince, bir de ıssız bir ortam sırasıyla Jurassic Park, Flash Forward + Fringe, Lost gibi bir sentez beklentisi uyandırıyor. Henüz Spielberg ve harika efektlerden bahsetmedik bile. Jurassic Park IV için söylentiler ortada gezerken, benzeri bir kullanımı aynı yönetmenden izlemek güzel bir deneyim.

Şimdiye kadar bahsettiklerimin hepsi tam anlamıyla “kağıt üzerinde” olanlar. Bir de işin pratiği var. Terra Nova oyuncu kalitesi açısından anımsattığı dizileri -özellikle ilk bölümlerde- mumla arıtıyor. Tanınan neredeyse hiçbir isim zaten yok ve oyunculuğun öne çıktığı, beklenti oluşturan isimler de yok.

Her yana çekilmeye müsait konu ve ortam, oyuncuların yetenekleriyle orantılı bir dram sahnesine çekilerek harcanıyor. 13 bölümü yayınlanan ilk sezonun her bölümü “az kaldı hızlanacak” tadında geçiyor. Bu eksileri toparlayan ise fazla hikaye ve yadsınamayacak deneyim ile denenmişlik. Dizide zaman zaman Lost’tan, bazı anlar Fringe’den tanıdık sahneler görmek mümkün.

Sezon finaliyle geride kalan tüm bölümlerin birkaç kat üzerine çıkan dizinin geleceğinden ümitliyim.

Eğer bu tarz dizileri ilk kez izliyorsanız kuşkusuz beğenecekseniz. Yalnız 85 milyon yıl, dinazorlar gibi anahtar kelimelerin yaratacağı haklı beklenti biraz hayal kırıklığı yaşatabiliyor. Ben demiş olayım.

January 03 2012

06:20

Kadınları Aldatmanın 50 Yolu – Kaan Erkam

Kaan Erkam ile 2004′te Ankara’da tanıştım. Keyifli bir stand-up gösterisinin ardından, sohbet etme şansım olmuştu.

Kelimelerle oynayan, seyirciyle iletişimi yüksek bir profil çizediğini hatırlıyorum sadece. Sonradan öğrendim ki (yaklaşık 1 yıl sonra) K. Erkam hem tiyatrocu hem de yazarmış.

İlk denk geldiğim yerde, bu yazıya konu olan kitabını aldım. O dönemler -14-15 yaşları- fazla dram içermiş gibi gelmesine rağmen farklı zamanlarda 4 - 5 kez okudum.

7 yıldır ne kendisine, ne de herhangi bir kitabına veyahut adının geçen gazete haberine dahi hiçbir yerde denk gelmedim. Kitabı da zaten taşınırken kaybetmiştim. Belki kitapta geçenler bu kadar yer etmese, yazar adından tanımayamazdım.

Geçen gün kitabı, yine görür görmez aldım. Lise öncesi dönemde kitap okumak çoğu zaman sıkıcı gelirken, bu kitabın ne kadar çabuk bittiğini anımsadım.

Ardından da bi’ merak tekrar okumaya başladım. İtiraf etmeliyim, içindekilere dair çok az şey hatırladığımı fark ettim.

Fakat kitap yine su gibi geldi. Yalnızca uyumak için kitabı elimden bıraktım, o da mecburiyetten yani.

Kadınları Aldatmanın 50 Yolu bir kitap için fazla irite edici. Ve pek tabii iddialı. Hatta abartırsak saçma. Kaan Erkam’ı tanımamış olsam, kitabı bedava verseler almazdım. İlk 10 sayfada “olsun diye” yazılmış 50 madde var, kitabın geri kalanı adından alakasız.

Ama konu kadınlar. Alakasız dediysek, o kadar da değil. Yazarın açık sözlü tavrı, kitaba konu olan anılar ve aktarış tarzı için okumaya değer. Sonrasından da ne alırsan kardır.

January 01 2012

07:00

2012 Nasıl Geçmeli?

2011′e girerken geçmişi bırakıp, gelecekten bahsetmiştim. Bkz: Yazının ilk paragrafı (“2010 yılına girerken “2009 Neden İyi Geçti?” diye yazmıştım, bu kez de tarz değiştirerek, önümüzdeki yılı yazmak istedim“)

Bu kez ise değişen sadece bakış açısı olmasın, gelin şunu tepetaklak yapalım. Bu gün, 31 Aralık 2012 Pazartesi olsun.

Üzerinde çalıştığım keyifli projenin büyük bir kısmını bitirmenin rahatlığıyla, yeni yılı karşılamak üzere arabaya atlayıp planlanmış eğlencenin tam ortasına giriyorum. Gece uzuyor, alkol malum. Sabaha karşı 4 civarı, mide sancıları çekerken geçen yıl (2012) aklıma düşüyor:

Hiçbir şey anlamadığım, sınavlarla dolu ocak ayı. Ucuz atlatılıyor, fakat tatil kısa. Yıl sanki kötü başlamış ve tüm gerginlik üzerimde. Hiç çaktırmıyor puşt. Beklenti artıyor, karşılamak başa düştü. Tatil.  Yine tam zamanında. Dönüşü ise başka bir macera, şimdilik boşver.

28′lik Şubat bu yıl 29 olduğundan mıdır bilmem, bir türlü bitmiyor. Bitmiyor lan.  Blog boşlanıyor, işler aksıyor. Bahar bile gelmemişken, alakasız bir rehavet. İmdadımıza bilmök yetişiyor. Hava değişikliği iyidir. Toparlanma dönemi. Mart ayı geçerken “sık dişini, şurada kaldı 2 ay” avuntusu yetmemeye başlıyor.

Nisan. Vize. Hoş geldin, özlemiştik. Bahar bir yandan. Isparta, hiç çekilmiyorsun be. Gelme üstüme. Malum sınav yazımı bilmemkaçıncıkez baştan yazıyorum. Sabahın köründe gidilen dersler ağır geliyor.

Ve mayıs. Biraz daha gayret. Plaka saymaktan utanmamak gerek. Sayılı gün sınavları da getirecek ya, çabuk geçiyor. Konsantrasyon sıfır, motivasyon zirve. Son dakika golü olmaz değil mi? 2-2 mi?

Bitti. Kep töreni alakasız bir tarihte, her yıl olduğu gibi. Keşke, o kep daha havadayken kanatlansa. Lüzumsuz bir hüzün. Gidiyorsun işte, hiç bıdıbıdı yapma. Bu boktan şehirden geriye sadece güzel insanlar kalıyor. ”Bir ilk gün, bir de son gün” dedikleri doğruymuş.

Yine ben kazandım, sen kaybettin..

Dört yılın acısı zaten ancak böyle bir tatil ile çıkardı.  Aferin haziran, harikasın. Tatil bitiyor, işe koyulma zamanı. Ankara ne tarafta? Uzakmış.

Temmuz, Ağustos. Planlar, planlar. Tatlı heyecanlar. Sıcak lan. Beklediğine değdi. Tamam fazla değmesin, sorun yok.

Bavul yok, alınacak bilet yok. Ne garip. Bu nasıl eylül? Sabah iş var. Kim kalkacak? Hiç çeki.. Tamam tamam, güzelsin Ankara.

Ekim, aslında sen hep buradaydın. Fakat ben yoktum. Bir itiraf: tek şikayetim umarsızca film izleyebilme özgürlüğümün son bulması. Renklileri kaçta yıkıyorduk? Hey gidi Isparta.

Kitaplar. Kütüphanem genişliyor. Soğuk lan. Düzen oturdu, tıkırtıkır. Yalnız bu trafik meselesi sorun. Araba şart.

Bak kar yağıyor. Ankara’ya böyle yakışıyormuş demek ki kar.. Şikayet yok. Kar dedik, tatil beklentisini aşmak kolay değil. Neyse, daha ilk yıldan olur o kadar. Güzel. Dünyanın sonu yok, Maya Takvimi yalan.

Gömleği de pislettik. Çıkmaz bu leke. Keşke arabayla gelmeseydim. Kim götürecek şimdi?

Mutlu yıllar.

(Kendime not: Az iç, birbirine karıştırma)

Not: Henüz bir yılbaşı planım yok.

December 30 2011

11:00

2011′de OgulcanOrhan.com

2012 ile birlikte blogun devirdiği yıl sayısı 3 olacak, geçen yıl “2010′da Ogulcan.org” yazısı bu yıl domain değişikliğinden ötürü OgulcanOrhan.com oldu.

Bu yıl blog için “2011 Nasıl Geçmeli?” yazısı ile başlamıştı, 2012 de öyle olacak.

2011, blog ve yazma alışkanlığım açısından önceki yıllara -özellikle 2010- göre pek verimli geçmedi.

Bu yıl toplam 56 yazı yazdım, geçen yıl bu sayı 96′ya çıkmıştı.  Geçtiğimiz 3.5 yılda ise blogun toplam yazı sayısı 326(#). Başta da söylediğim gibi, verimsiz bir yıl oldu.

Geçelim detaylara:

  • Yorum kategorisine yazılanlar azalınca, yazı başına harcadığım vakit de aynı şekilde azaldı. Bu yıl neredeyse tüm yazıları ortalama 1 saat içerisinde yazdım.
  • 2011′de en çok English ve Yazılım kategorilerine yazı yazmışım. Bu gelişme güzel, çünkü önceki yıllarda hem İngilizce yazmıyordum, hem de yazılım kategorisi hep en az yazı içeren kategori olmuştu (artık değil).
  • Bu yıl en çok okunan 5 yazım: 1) Twitter Hesabınızın Yaşını Öğrenin: Twitage  – 2) İşini Garantiye Almak #101 – 3) Fringe Teorilerim – 4) Seçim Tahmini – 5) Blog Yazarlarına Tavsiyeler. Her birini ayrı bir zevkle yazmıştım, karşılığını görmek sevindirici.
  • 2011′de blogun en az yazı yazılan kategorisi “İzledim” olmuş. Oysa en çok sinemaya gittiğim yıl 2011′di. Yine de yazılan tek yazının, en çok okunanlar arasında olması enteresan olmuş.
  • Kitap kategorisi, önceki yıl da olduğu gibi yine hakkını alamadı. Okuduklarımın yarısını dahi yazamadım.
  • Bu yıl özellikle #101 etiketiyle yayınladığım yazıları içeren “Kişisel” kategorisi toplamda en çok yazıları içeren ve okunma/yazı oranı en yüksek yazılara sahip.

2011′in istatistiklerine gelirsek:

  • Bu yıl sayfa görüntülenme sayısı %55 artmış, toplam sayfa görüntülenme sayısı: 200.000.
  • Gelen ziyaretçi ortalama 1.6 sayfa gezmiş ki bu 125.000 tekil ziyaret anlamına geliyor.
  • Blogun en çok ziyaret edildiği ay Eylül, en az ziyaret edildiği ay ise Nisan. Garip bir şekilde o ayın yazı sayılarıyla ilgisiz.
  • Gelen ziyaretçilerin %40′ı Chrome, %38′i ise Firefox kullanıyormuş (çok güzel).
  • En çok tercih edilen işletim sistemi %84 ile Windows peşinden Ubuntu geliyor.

2012′de sanıyorum Kitap ve Yazılım kategorileri patlama yapacak. Hedefim de 100 yazının üzerine çıkmak  (tıpkı ilk 2 yılda olduğu gibi). Buradan da belirteyim.

Okuduğunuz için teşekkürler, iyi yıllar.

Not: Görsel facebook kaynaklı.

December 19 2011

21:17

Tecrübe ve Bedeli

Tecrübe herkes için önemlidir, değerlidir ve bazen hayatidir. Lakin her teorinin pratiği gibi, bu da genelde sadece söylendiğiyle kalır.

Ülkenin çok okunan değerli köşe yazarlarından biri, büyük bir gazeteden başka bir büyük gazeteye yüksek meblağ karşısında transfer olur. Basın ve okuyucular geçişin etkilerini heyecan ve merakla beklemektedir. Zamanı gelir, yazar işe başlar ve ilk gün gazeteye gelir.

Genel yayın yönetmeni tarafından kapıda karşılanır. Yönetmen yazara ilk yazıların öneminden, beklentilerden ve gazetenin tarzından bahsettikten sonra yazıyı tamamladıktan sonra görmek istediğini söylerek yazarı yalnız bırakır.

Öğle vakti ilk yazıyı okumak umuduyla odaya gelir, fakat yazarın henüz başlamadığını görür.

Birkaç saat sonra aynı heyecan yine hüsrana dönüşünce yönetmen dayanamaz ve yazara bir an önce yazıyı görmek istediğini tekrar iletir. Yönetmen odayı terk ettikten 10 dakika sonra, yazar ilk yazısı ile odaya girer. Kağıdı masaya yavaşça bırakır ve yönetmenin okumasını bekler.

Yazıyı beğenerek okuyan yönetmen biraz da bunun etkisiyle yazara döner ve: “Sizin iş de çok kebapmış; eşşek yüküyle parayı 10 dakikalık yazı için alıyorsunuz” der. Yazar ince bir gülümsemeyle cevap verir:

“Evet. Ama, 40 yıl + 10 dakika.

Not: Birikim de olur.

Tags: Yorum Tecrübe

December 18 2011

23:17

İç Kitabı – Ece Temelkuran


“Ne yapsan gözlerini çıkarıp bir başkasına veremeyeceksin..”

Her kitap bir kez okunmayı hak eder. Bazıları birkaç kez ve yine bazıları ise başucu kitabı olmayı..
İç Kitabı, tam bir başucu kitabı. Aç oku ve kapat.

‘’Ancak soylu bir ruh parçalanarak acı çeker. Ancak soylu bir ruhun etleri lime lime dağılır kimsenin anlam veremeyeceği ufak tefek kötülüklerle.’’

December 07 2011

03:00

Weekend Project: jQuery CountDown Plugin

Here is my second jQuery plugin: CountDown and also third weekend project. CountDown plugin is simply calculates time different between two dates and also count down second by second.

Until parameter should be from future otherwise plugin throws an error. Another date parameter will be setted now automatically. Date formats are is the same as CountUp plugin.

Version History
v1.0: Just launched plugin.

Note: Lastest version is on github.

Example:


$(document).ready(function(){
	$('#jq_count_down').countDown({"from":"now", "until": "21/12/2012-00:00:00", "lang": "en", "zero" : true, "format":"full", "message": "It finished!" });
});

Other notes:

  • Don’t forget message parameter.
  • 4 languages (Turkish, English, Spanish and Deutsch
  • Call the plugin only with id, not class.
  • Please use jQuery 1.4+ (jQuery.min is okay!)
  • You may want to hide “0″ outputs, “write_zero” parameter does it.

Demo is here and plugin is on github.

Please do not hesitate for bugs and any suggestions.

November 28 2011

22:16

SDUBilisim.com Teması

SDÜ Bilişim Kulübü Başkanlığı yaptığım dönemde, kulübün sitesi için bir wordpress teması tasarlamıştım. O dönemde de temayı yayınlamaya niyetim vardı, fakat bu güne kaldı.

Temayı sdubilisim.com‘dan inceleyebilirsiniz. WordPress için yazdığım ilk tema olmasından ötürü sadece temel fonksiyonları (sayfa, 404, yorumlar vb.) içeriyor. Geliştirilebilir hatta değiştirebilir.

Kullanırken kulüp sitesinin linkini eklerseniz -zorunlu değil- memnun olurum. Sonuç olarak; hiçbir ticari kaygı gütmeyen, tamamen gönüllü olarak yapılan bir oluşuma az da olsa destek olacaksınız.

Tema hem github’da hem de bu linkte indirebilir durumda.

19:01

Footer Tasarımı

1.5 yıl kadar önce blogun footerını elden geçirip, şimdiki haline getirmiştim. Sonra da bir flickr ve twitter hesaplarından veri çekmek için gerekenleri ayrı ayrı blogda yazmıştım.

Boş vakit bulur bulmaz da elden geçirdim, düzenlemelerden sonra tam halini yayınlamaya karar verdim. Kısa süre içinde bloga entegre edilmiş halini de -yani temayı- yayınlayacağım.

Kullanırken veya alıntılarken link vermeye gerek yoktur. Dilediğiniz gibi kullanabilirsiniz. 

Kodları github’dan inceleyebilir veya buradan indirebilirsiniz.

Tags: Yazılım

November 27 2011

23:40

Android’te Twitter API Kullanımı

Bu yıl aldığım ders projelerinden birinde, Android üzerinde göreceli şekilde işleyecek bir twitter istemcisine ihtiyacım vardı. Hazırı kullanmak yerine, üşenmeyip bana yetecek kadarını yazdım.

Şu anda, kullanıcı adına dair bilgileri public api ile gelen json üzerinden parse ediyor. Sonraki aşamalarda oAuth ile devam edebilirim (Bkz: api limitleri).

JSON parse etmek için java’nın standart çözümü yerine gson sınıfını tercih ettim. Çok daha performanslı ve kullanışlı. Gereksiz birçok detayla uğraşmaktan kurtarıyor. Java ile json parse edeceksiniz mutlaka göz atın.

Arayüz için çok fazla detaya girmedim, bir buton, dört textview ve kullanıcı adını almak için edittext ekledim.

Activity sınıfı bileşenlerin erişimini sağlıyor ve butonun tıklama olayını yakalıyor:


public class JSONParseActivity extends Activity {

	String username;

	TextView name;
	TextView frcount;
	TextView flcount;
	TextView stcount;
	TextView lstweet;

	Button btn;
	EditText edt;
	ImageView img;

	GetJson getJ;
	TwitterUser twUser;

	private OnClickListener lstn = new OnClickListener() {
		@Override
		public void onClick(View v) {
			if(!edt.getText().equals("")){
				username = edt.getText().toString();
				init();
			} else {
				Toast.makeText(getApplicationContext(), "Bir kullanıcı adı girin", Toast.LENGTH_SHORT).show();
			}
		}
	};

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        name = (TextView)findViewById(R.id.twName);
        frcount = (TextView)findViewById(R.id.twFollowing);
        flcount = (TextView)findViewById(R.id.twFollowers);
        stcount = (TextView)findViewById(R.id.twStCount);

        edt = (EditText)findViewById(R.id.username);

        btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(lstn);

    }

    public void init() {
    	getJ = new GetJson(username);
    	twUser = getJ.parser();

    	name.setText(name.getText().toString()+": "+twUser.getName());
    	frcount.setText(frcount.getText()+": "+twUser.getFriends_count());
    	flcount.setText(flcount.getText()+": "+twUser.getFollowers_count());
    	stcount.setText(stcount.getText()+": "+twUser.getStatuses_count());
    }
}

HttpGet ile Twitter’dan json getiren ve object olarak parse eden (gson kullanarak) GetJson sınıfı:


public class GetJson {

	private String username;

	StringBuilder jsonBuilder;
	TwitterUser twUser;

	public GetJson(String username) {
		this.username = username;
	}

	public TwitterUser parser() {

		this.getTwitterUser();

		GsonBuilder gsonb = new GsonBuilder();
        Gson gson = gsonb.create();

        try {
        	JSONObject jsonObj = new JSONObject(jsonBuilder.toString());
        	twUser = gson.fromJson(jsonObj.toString(), TwitterUser.class);
        } catch (JSONException e) {
            //logging
        	e.printStackTrace();
        }

        return twUser;

	}

	private void getTwitterUser() {

		jsonBuilder = new StringBuilder();
		String line;

		HttpClient client = new DefaultHttpClient();
		HttpGet httpGet = new HttpGet("http://twitter.com/users/show.json?screen_name="+this.username+"&include_entities=false");		

		try {
			HttpResponse response = client.execute(httpGet);
			StatusLine statusLine = response.getStatusLine();
			int statusCode = statusLine.getStatusCode();
			if (statusCode == 200) {

				HttpEntity entity = response.getEntity();
				InputStream content = entity.getContent();
				BufferedReader reader = new BufferedReader(new InputStreamReader(content));

				while ((line = reader.readLine()) != null) {
					jsonBuilder.append(line);
				}

			} else {
				//logging
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Son olarak da gson’ın json’ı parse ederken ihtiyaç duyduğu sınıf yapısı:


public class TwitterUser {

	private String username;
	private String name;
	private String statuses_count;
	private String friends_count;
	private String followers_count;
	private String profile_image_url_https;

        //getters & setters
}

Not: Gson gelen bilgileri birebir sınıf üzerine yerleştiriyor.

Gson sınıfı, Play Framework’le birlikte geldiği için bu projeye özel bir jar eklemesi yapmadım (Eclipse dahil etti). Gson kullanacaksanız son sürümü yukarıdaki linki kullanarak edinebilirsiniz.

Son olarak, uygulamayı tam çalışır hale getirmek için internet erişim iznini manifest’e eklemeyi unutmayın.

November 26 2011

21:10

İki Editörün Güncesi – A. Doğan&F. İnce

Blogda kitaplarla ilgili bir yazı yazmayalı epey vakit olmuş. Halbuki okumuyor değilim, yalnızca çeşitli sebeplerden ötürü (zaman, kitap içeriği, konu vs) erteliyorum.

İki Editörün Güncesi’ne bir sahafta denk gelmiştim. Daha önceki kitaplarından tanıdığım Ahmet Doğan’ın ismini görünce almaya karar verdim. Ahmet Doğan ve Fahrettin İnce’nin, Türkiye’nin önemli isimleriyle yaptığı söyleşileri içeren kitap; söyleşiye katılanların da katkılarıyla, tıpkı kapak yazısındaki söylendiği gibi tam “arşivlik” olmuş.

Siyasetten, insanlık tarihine; sanattan, ideolojilere, farklı konuların doğru harmanlandığı bir kitap çıkmış ortaya.

Röportaj yapılanlar arasında: Attila İlhan, Nihat Behram, Nebil Özgentürk, Alev Alatlı, Emre Kongar, Deniz Ülke Arıboğan gibi isimler var. Aramızdan ayrılmış olmasının bıraktığı etkiyle birlikte, Attila İlhan’ın söyleşisi ayrı bir keyifli olmuş.

Fikirlerini ilk kez okuduğum veya ilgisiz kaldığım söyleşileri saymazsak, kitabı başarılı buldum. 2006′da yayınlanan (söyleşiler daha eski) kitabın, siyasi konulardaki yaklaşımı ve dile getirilen görüşler önemli mesajlar veriyor.

Türkiye’de hala dokunulmazlık vasfına sahip milliyetçilik ve kemalizm’in sözcülerinin/destekçilerinin geçen 6-7 yıla rağmen, hala aynı cümleleri tekrarladığını kitapla beraber görmek mümkün. Türkiye gibi, iç dinamikleri çabuk değişen bir ülke için bu muhafazarkarlık biraz fazla.  

Ne kadar yeni söz, ne kadar yeni fikir o kadar çözüm demektir.

Komplo teorileri bile hala aynı tutarsızlığa sahip. Geçen yıllar, paranoyaklığımızdan bir şey alıp götürmek yerine adeta üzerine eklemiş. Değişen şartların, yaklaşımların malum ideolojiler üzerinde hiçbir etkisi yok. Özeleştiri kültürümüz daha da bozulmuş. Kutuplaşmışız başka bir deyişle.

Yine de; 50 yıl önce de, 30 yıl önce de, şimdi de aynı tazeliği yaşatan düşünceler yok değil. Attila İlhan ile bitirmeli:

(Batı’dan bahsediyor)
Demokrasi kurulurken kime karşı kuruluyor? Krallara ve soylulara karşı. Peki bunlara karşı kim ayağa kalkıyor? Şehir halkı, işçiler ve köylüler. Çünkü onların hakkı yoktu. Ama asıl hak isteyen burjuvazi. Burjuvazi, para sahibi olmuş ve gücü burada görüyor.

Eskiden toprak güçtü; ama artık para ve ticarettir. Bütün güç para olunca, o zaman paraya göre toplumsal bir sistem kurulması lazımdı. Halbuki mevcut sistem paraya göre değil, toprağa göre ayarlanmış bir sistemdi.

Değiştirmedikleri için ihtilal oldu ve iktidar oluyorlar. Peki işçiler ve köylüler mi iktidar oluyor? Hayır, burjuvazi. Onun için onların hakkını yemek istemiyor ve onlara diyor ki, “Siz de muhalefet olun.” Onlar da partilerini koruyorlar. Bak Batı’daki ülkere, bütün partiler burjuvazi ile işçilerdir. Biri gider, biri gelir…

November 21 2011

20:01

Sınavlara Çalışmıyor Musun?

Takip edenler bilir; bu hikaye blogun klasiklerinden oldu artık.

Yine bir sınav dönemi, hem de 5 gün 6 sınav olanından.

Yine bulaşıklar yıkandı, oda toplandı ve yılın geleneksel tek ütüsü yapıldı. Sıçtın mavisi, yumurta ve şemsiye hazır; maç saatini bekliyorlar.

Hikaye eksik kalmasın.
Efendim bir profesöre sormuşlar: Çince’yi ne kadar zamanda öğrenebilirsiniz? Profesör biraz düşündükten sonra 1 yıl diye cevap vermiş.

Bir doçente aynı soruyu sormuşlar, doçent kendinden emin bir şekilde 6 ay diye yanıtlamış.

Son olarak da öğrenciye yöneltilmiş aynı sual:
- Çince’yi ne kadar zamanda öğrenebilirsiniz?
Öğrenci çoktan hazır:
- Sınav ne zaman? Yarınsa sorun değil, bu gece hallederim.

Hal böyle böyle, var hocalara söyle.
Başarılar.

(Başlığa ek: Şemsiye seni çağırıyor)

Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.