18 Şubat 2012 Cumartesi

Spring Android Nedir?



Bu makalemizde Android Spring Framework konusundan bahsedeceğiz.Peki Spring nedir?Framework nedir?
Framework: Framework kelimesinin Türkçe’deki karşılığı ‘çatı’ kelimesidir.Tanımı şöyle yapılabilir;hayatımızı kolaylaştırmak adına içinde bir veya birden fazla kütüphane ve araçlar bulunan bileşenler topluluğudur.
Java programlama dilinin açık kaynak kodlu olması ve sürekli gelişen yapıda olması çok sayıda paket,kütüphane ve araç (tool) türemesine neden oldu.Yapılacak işleri daha hızlı ve kolay yapılması açısından bazı çatı (framework)’lar ön plana çıkıyor.Bunlardan bir tanesi de Spring çatısıdır.Spring Framework Java’nın daha çok  Kurumsal (Java EE) kısmına hitap ederken,Standart (Java SE) platformda da kullanılıyor.
Spring’in yapısını kısaca bir hatırlayalım;içinde Spring AOP,ORM,Web,DAO,Context,MVC ve Core tabakaları bulunuyor.
Spring,Framework kavramlarını hatırladığımıza göre artık Android Spring Framework nedir öğrenebiliriz.
Android Spring Framework ,Spring Framework çerçevesinde Android Uygulamalar geliştirme işini basitleştirmeyi amaçlayan bir uzantıdır.
Android son yıllarda iPhone uygulamalarına göre çok hızlı büyüdü.Android’in güçlü uygulama varlığının önemli bir nedeni var;Java geliştiricilerin mevcut mobil cihazlara çok sayıda sunucu veya masaüstü eklentilerini getirmek için çok sayıda geliştirme yapıyor olmasıdır.
Bugün yazılan uygulamaların çoğu ,özellikle kurumsal sunucular Java üzerinde çalışan popüler framework’leri kullanır.Ancak bunların çekirdek dilleri Java değildir.Android için böyle bir uygulama geliştirmek isterseniz,framework uygulamasındaki tüm çağrıları değiştirmeniz gerekecektir.Bu da uygulamanın sıfırdan yazılması gibi uzun sürebilir.
Spring Source,Spring ve diğer birçok popüler açık kaynak projeleri destekleyen bir şirket,SpringSource şirketi Android üzerine Spring  kurulacağını açıkladı.Ancak daha tam sürüm olarak geliştirilmedi.
SpringSource şirketi ilk olarak Spring Android 1.0.0.M1 Released sürümünü yayınladı.Daha sonra Spring Android 1.0.0.M2 ReleasedSpring Android 1.0.0.M3 Released ve son sürüm olarak da Spring Android 1.0.0.M4 Released sürümlerini yayınlamıştır.
Android Spring, RestTemple gibi geniş kapsamlı projelerde kullanılan, Commons Loggingportunu içerir ki RESTful istemci uygulamalarının geliştirilmesini kolaylaştırır.
Android Spring ile ilgili aşağıdaki siteyi ziyaret edebilirsiniz:
http://www.springsource.org/spring-android



7 Şubat 2012 Salı

Samsung Galaxy S I9003 Gingerbread 2.3.4 Yükleme


Makalemizde Samsung’un amiral gemisi olarak gösterilen Galaxy serisinin,Samsung Galaxy S I9003 cihazını Gingerbread 2.3.4 sürümüne güncellemeyi anlatacağız.Samsung Galaxy S I9000 ile çok benzer olan telefon güncelleme yapma konusunda I9000’den ayrılıyor.Ayrıca Android tabanlı telefonlarda görülen en büyük sorunun,Android Market uygulamasının da bu güncellemeyle çözülüyor olması güncellememizin önemini artırıyor.
Cihazımız bayiden alındığında içinde Android Froyo 2.2.1 işletim sistemi bulunuyor.Eğer cihazı yurt dışından almadıysanız içinde Android Market,YouTube vb. birçok uygulamada engellenmiş halde bulunuyor.
Android Gingerbread 2.3.4 işletim sistemini şahsen kendi telefonuma kurdum.Samsung Galaxy S I9003 Gingerbread 2.3.4 üzerinde oldukça hızlı,şık ve göz dolduran bir performans gösterdi.Ancak yükleyeceğimiz sürümün Beta sürümü olduğunu söyleyelim.Yani internette bulunan resmi olmayan bir sürümdür.Yüklendiği zaman telefonunuz büyük ihtimalle garanti kapsamından çıkacaktır ve Samsung firması ortaya çıkabilecek sorunlarda sorumluluk kabul etmeyecektir.
Samsung Galaxy S I9003 cihazımıza Android Gingerbread 2.3.4 güncellememize başlıyoruz.Güncelleme için aşağıdaki programlar elinizde bulunmalı:
·         Odin3_v1.83 programı (ROM’u telefonumuza atmak için bu programı kullanacağız)
·         http://hotfile.com/dl/121597832/b5f002a/I9003XXKP7.zip.html adresinden Gingerbread 2.3.4 sürümünü indiriyoruz
·         Samsung Kies programı
Kurulumumuza başlıyoruz:
·         Kurulumuza başlarken Samsung Kies programımız kesinlikle kapalı olmalı.Ayrıca telefonunuzdaki kendi dosyalarınızın da yedeğini almanızı öneririz.
·         İndirdiğimiz Gingerbread 2.3.4 ROM dosyasını bir dizine açıyoruz.
·         Cihazımızı kapatıp SIM kartı ve hafıza kartını çıkartıyoruz.
·         Aşağıdaki resimde kırmızı çizgiyle gösterilen “Home tuşu+Ses Azaltma Tuşu+Güç Tuşu” üçlü kombinasyonuna basıyoruz.Böylece telefonumuzu Download moduna almış oluyoruz.

·         Telefonumuzu bilgisayara bağlayıp indirdiğimiz Odin programını çalıştırıyoruz.
·         Yükleme yapmak için “re-partition” seçeneğini işaretliyoruz.
·         Ardından Odin programındaki PIT butonuna tıklayıp ROM dosyasını çıkardığımız yerde bulunan “latona_20110114.pit” dosyasını seçiyoruz
·         Bootloader butonuna tıklayıp “APBOOT_I9003XXKP7_CL280937_REV08_eng_mid_ship.tar” dosyasını seçiyoruz.
·         PDA butonuna tıklayıp “CODE_I9003xxxxx_xxx_REV08_eng_mid_ship.tar” dosyasını seçiyoruz.
·         PHONE butonuna tıklayıp “MODEM_I9003xxxxx_REV_00_CL889972.tar.md5” dosyasını seçiyoruz.
·         CSC butonuna tıklayıp “GT-I9003-CSC-xxxxxx.tar.md5” dosyasını seçiyoruz.
·         Son olarak Start butonuna tıklayıp kurulumun yüklenmesini bekliyoruz.Yükleme bittiğinde Odin programında Pass yazısı gelecektir.Ardından cihazımız otomatik olarak tekrar başlayacaktır.Bu esnada USB kablosunu çıkartabilirsiniz.
Resmi olmayan Android Gingerbread 2.3.4 sürümünü bilgisayarınıza yüklediniz.Bu işlemin doğrulandığını görmek için Uygulamalar>Ayarlar>Telefon Hakkında seçeneğine giderek kontrol edebilirsiniz.

6 Şubat 2012 Pazartesi

JRuby Nedir?

Jruby Ruba programlama dili yorumlayıcısı içeren bir Java uygulamasıdır. Bu uygulamada Ruby’nin birçok özellikleri korunurken dinamik yazma gibi birçok özellik Java platformuna entegre edilmiştir. Jruby’de Ruby ve Rails tarafından sunulan basitlik ve verimlilik, Java tarafından sunulan güçle birleşmiştir. Jruby Ruby dilinin Java Virtual Machine üzerinde tamamen Open Source olarak yazılmış şeklidir. JRuby son olarak 1.5.0 versiyonunu yayınladı.

Jruby ne işe yarar? Jruby Ruby dilinin bütün özelliklerini barındırır. Jruby 1.5.0’a, Ruby 1.8.6 ve RubyGems 1.3.6 destekleriyle beraber şu özellikler eklenmiş durumda :
·         Ant desteği ve Rake-Ant Entegrasyonu
·         Geliştirilen Windows desteği
·         Varsayılan Ruby-debug kurulumu
·         Rails 3 için birçok düzeltme
Peki Jruby nerelerde ve kim tarafından kullanılır? Simulasyondan robotik’e, web uygulamalarından güvenlik’e kadar birçok alanda kullanılır.Bunlardan bazıları:
Simulasyon
·         NASA Langley Araştırma Merkezi simulatorleri yönlendirmek için Jruby kullanıyor
·         Motorola bir araştırma grubu Jruby’i Simulator geliştirirken,hem senaryo üretmek için hemde  işlem sonrası veriler için kullanılıyor.
3D Modelleme
·        Google SketchUp makro geliştirme API’si için Jruby kullanılan 3D modelleme uygulamasıdır
İş
·        Toronto Rehab BT yardım masası ve BT yardım operasyon takımlarında çağrı destek ve yerinde destek ve yerinde destek yöntemi ve izlemesi için Jruby tabanlı bir uygulama kullanır.
Robotik
·         MORPHA projesinde Siemens servis robotunun reaktif denetim kısmını uygulamak için kullanıldı.
·         Open Domain Server IP ayarlarının gerçek zamanlı olarak güncellenmesini ve böylece statik domainler ile eşlenebilmesini sağlayan istemciler uygulamasında kullanıldı.
Telefon
·         3G kablosuz telefonculuk sisteminde Jruby kullanılmaya başlandı.
Sistem Yönetimi
·         Level 3 Communications uygulamasında kullanılıyor.Özellikle merkezi veri toplama kısmında.
Web Uygulamaları
·         Basecamp,37signals tarafından geliştirilen web tabanlı proje yönetim uygulamasında,
·         43Things adlı internet sitesinde,
·         A List Apart,1997’den bu yana web sitesi yapmakta olanlar için bir dergi yine Jruby tabanlı,
·         Blue Sequence,Toyota Motor İmalat’ının kendi üretim sürecinde kullandığı gelişmiş ve kritik bir uygulama.
Güvenlik
·         Metasploit Framework,Rapid7 tarafından yönetilen topluluk açık kaynak projesi, ağların ve uygulamarın güvenliğini değerlendirmede BT uzmanlarına yardımcı olan ücretsiz bir penetrasyon test platformudur.Bu uygulamada şuanda Jruby kullanmaktadır.
JRUBY KURULUMU
1.       Öncelikle URL adresinden Jruby’nin son dağıtımını indiriyoruz: http://www.jruby.org/download

2.       İndirilen zip dosyasını “D:\Program Files\NetBeans 7.0\ruby” gibi kendi netbeans dizininize çıkartın
3.       Zip dosyası makine dizininde şu şekilde olmalıdır : <kendi netbeans dizininiz>\ruby\ jruby-1.6.3\

4.       Netbeans IDE programını çalıştırın ve Tools>Ruby Platforms>Add Platform seçeneğine tıklayın
5.       Ardından <kendi netbeans dizininiz>\ruby\ jruby-1.6.3\bin\jruby.bat dosyasını seçiyoruz.
Kurulumumuzun bu aşamasında JRuby 1.6.3 için Rails 2.2.2 kurulumu yapıyoruz;
1.       Rails 2.2.2 kurulumu için Tools> Ruby Gems seçeneğini seçiliyoruz
2.       “JRuby 1.6.3” seçeğini seçiliyoruz.
3.       New Gems seçeneğine tıklıyoruz,liste tamamlandığında(biraz zaman alabilir)’rails’ arıyoruz
4.       Açılan listeden Rails Gem seçeneğini seçiyoruz ve Install’e tıklanıyoruz.
5.       Açılan menüden,” allow it to include dependencies” seçeneğini seçip “Tamam” a basılıyoruz
Kurulumumuzda JAVA_HOME ayarlama ve MySQL JDBC adaptör yükleme yapacağız;
Yeni Rails’in kurulumunda önceki sunumlarından bazı farklılıklar bulunuyor.Bu farklılıklardan biri de önceki sürümlerde varsayılan olarak bulunan MYSQL Gem kurulumunun bulunmamasıdır.Bilgisayarınızda MYSQL yoksa yükleme yapmanız gerekir.Ancak Gem yüklemeden önce aşağıdakileri yapmanız gerekiyor
1.       Netbeans IDE’den çıkıyoruz.
2.       Ardından  Bilgisayarım>Özellikler>Gelişmiş>Ortam Değişkenleri seçeneğini seçiyoruz.
3.       Sistem Değişkenleri>Yeni seçeneğini tıklayarak yeni bir değişken tanımlıyacağız.
4.       Değişken İsmi kısmına JAVA_HOME yazıyoruz
5.       Değişken Değer kısmına kendi JDK yolunu yazıyoruz.Örneğin; "C:\Program Files\Java\jdk1.6.0_10"  gibi kendi bilgisayarınızdaki JDK yolunu yazıyorsunuz.
6.       Tekrar Netbeans IDE’yi başlatıyoruz ve Tools>Ruby Gems seçeneğini tıklıyoruz
7.       Ardından New Gems seçeneğini tıklıyoruz ve açılan listeden ‘MYSQL’ seçeneğini arıyoruz
8.       Arama sonuçlarından 'activerecord-jdbcmysql-adapter' seçeneğini kuruyoruz.
Kurulumu tamamladıktan sonra MYSQL desteği ile RoR projelerine başlamak gerekir.Yeni projeye başlarken "Access Database Using JDBC" seçeneğini tıkladığınızdan emin olun.
                Özetle bu kurulum ile yeni projeler başlatmak hakkında yapacaklarımız:
1.       Ruby platformu olarak JRuby 1.6.3’ı seçiyoruz.
2.       Web sunucusu olarak Webrick’i tercih ediyoruz.
3.       Yeni Sihirbazın Yapılandırılması bölümünde 'Access Database Using JDBC' seçeneğini seçiyoruz.
Kurulumumuzda sırayı yeni bir veritabanı oluşturmak alıyor.Nedense veritabanı oluşturmak için Rake Task’ımız çalışmıyor.Servis Paneline giderek bunu şu şekilde yapabilirsiniz:
1.       MySQL Server at localhost:3306 sağa tıklatıp Veri Tabanı oluştur seçeneğine tıklıyoruz
2.       Veri Tabanınıza vermek istediğiniz adı girip Tamam’a basıyoruz.
Artık Jruby 1.5.0 sürümünü  Netbeans IDE üzerine kurduk.
JRUBY ÖRNEK
                Jruby’nin ne olduğunu öğrenip kurulumunu yaptıktan sonra küçük bir örnek yapıyoruz.
require "java"


stringHello= "Hello World"
stringDate = java.util.Date.new


puts "#{stringHello.to_s}"
puts "Date := #{stringDate.to_s}"
Programımızın ilk satırındaki require”java” ifadesi Ruby programının Java sınıflarını kullanması için gerekli.Bu örnekte iki dize nesne yarattık bir dize “Hello World” stringini diğer dize de geçerli tarihi döndürmek için kullanıyoruz.İfadeleri yazdırmak için ‘puts ’ anahtar kelimesini kullandık.
Jruby komutu ile HelloWorld.rb dosyamızı çalıştırıyoruz.Programımızın çıktısı şu şekilde :
C:\JRuby>jruby HelloWorld.rb
Hello World
Date := Tue Sep 23 18:12:26 GMT+05:30 2008

5 Şubat 2012 Pazar

Groovy Nedir?


Groovy Nedir?
                Groovy Java platformu üzerinde çalışan dinamik tipli, imperative, nesne odaklı(object oriented) bir programlama dilidir.Başka bir tanımla Java Sanal Makinesi için geliştirilmiş, söz dizimi Java’ya benzeyen betik bir dildir. Groovy tüm platformlarda kullanılabilen, herhangi bir platform için odaklanmamış Java geliştiricileri için bir betik dili çözümüdür. Java Specification Request bünyesinde bulunan Java Communicity Process tarafında Groovy dilinde standartlaşma söz konusudur. Groovy programlama dilini standartlaştırmaya çalışan bu uzman grubun amacı değişik sağlayıcıların implementasyonlarını mümkün kılmaktır.

                Groovy için güçlü bir programlama dili denilmektedir. Bu güçlülüğü sağlayan özellikler arasında ileri seviye görevleri kolaylıkla programlayabilecek eklentileri, Java’ya direk erişim, Java söz dizimine benzerlik ön plana çıkmaktadır. Groovy’nin en önemli özelliği, Java üzerinde çalışan dinamik diller arasında en yüksek ve kolay entegrasyona sahip dil olmasıdır. Groovy içinden herhangi bir Java nesnesi bir Groovy nesnesi gibi çağırabilir. Aynı şekilde Java içinden de bir Groovy nesnesi, Java nesnesi gibi çağırılabilir.
                James Strachan ve Bob McWhirter tarafından Ruby, Smalltalk gibi esnek ve dinamik programlama dillerinden etkilenilerek Codehaus adlı açık kaynak yazılım geliştirme portalı bünyesinde geliştirilmiştir. Daha sonradan proje başka geliştiriciler de eklenmiştir. Groovy’nin şimdiki geliştirici ekibi, Guillame Laforge (proje yöneticisi), Jochen Theodorou, Dierk König ve başka pek çok kişiden oluşuyor.
                Groovy dilinin Java dilinden farklı bir takım özellikleri bulunmaktadır. Java dilinden farklı olarak şu özelliklere sahiptir:
      Statik Tipler ve Dinamik Tipler
      List, Map, Array, Regular Expression, Range tipleri için yerel syntax desteği
      Closurelar
Groovy Kurulumu
1.       İlk olarak http://groovy.codehaus.org adresinden Groovy’nin en son sürümünü indirin.
2.       Windows işletim sistemi için Windows Installer versiyonunu indirin.
3.       İndirdiğiniz zip dosyasını açın.
4.       GROOVY_HOME adında bir çevresel değişken yaratın
Unix için: export GROOVY_HOME=/dosyanızın bulunduğu dizin/Groovy
Windows için: set GROOVY_HOME=C:\Groovy
5.       GROOVY_HOME/bin klasorünü PATH isimli çevresel değişkene ekleyin.
Unix için: export PATH=$PATH:$GROOVY_HOME/bin
Windows için: set PATH=$PATH;$GROOVY_HOME\bin
Groovy’nin kurulumu böylece tamamlandı. Şimdi kurulumumuzu doğru yapıp yapmadığımız test ediyoruz.
                İşletim sistemimizin komut satırını çalıştırıp ‘Groovysh’ yazıyoruz.Bu komuta işletim sistemimiz asağıdaki gibi yanıt verecektir:
Let’s get Groovy!
================
Version: 1.0-JSR-06 JVM: 1.5.0_08-b03
Type ‘exit’ to terminate the shell
Type ‘help’ for command help
Type ‘go’ to execute the statements
groovy>

groovy> println “Hello world!”
groovy> go
Hello World!
Eğer sistemimiz bu şekilde çıktı veriyorsa Groovy başarıyla kurulmuş demektir.
Groovy Örnekler
Groovy’nin kurulumundan sonra yapacağımız ilk iş örnek bir Groovy programı yazmak olacaktır.
      Basit bir ‘Hello World’ komut dosyası:

def name='World'; println "Hello $name!"

      Dosyamızın Object-Oriented kullanarak daha gelişmiş bir sürümü:

class Greet {
  def name
  Greet(who) { name = who[0].toUpperCase() +
                      who[1..-1] }
  def salute() { println "Hello $name!" }
}

g = new Greet('world')  // nesne olustur
g.salute()         


      Groovy Java kütüphanelerinden yararlanır bilgisi verilmişti.Programımızda yararlandığımız Java Kütüphaneleri:



import static org.apache.commons.lang.WordUtils.*

class Greeter extends Greet {
  Greeter(who) { name = capitalize(who) }
}

new Greeter('world').salute()

      Komut satırında:

groovy -e "println 'Hello ' + args[0]" World


Programımızın çıktısı ‘Hello World’ şeklinde olacaktır.

Dinamik Tipli Diller ile Statik Tipli Diller Arasındaki Farkla


Özellikle son 10 yılda birçok programlama dili geliştirildi. İnanılmaz sayıda programlama dili tasarlanıp onlara yeni özellikler ekleniyor.

Teknolojinin sürekli gelişmesi ve günümüz ihtiyaçlarının sürekli artmasına bağlı olarak yazılım sektörü de büyüyor. Yazılım geliştirme süreçlerinde kullanılan araçlardan birisi de programlama dilleri. Bir Developer bütün programlama dillerini bilemeyeceği için,farklı projelerde kullanılan farklı programlama dillerine adaptasyon biraz zor olabiliyor. Programlama dilleri açısından amaç değişmiyor;bilgisayara derdimizi anlatabilmek. Tek farklılık gösteren nokta ise yazılım geliştirirken izlenilen yollar ve kullanılan metodlar. Bu sebepten programlama dilleri bazı noktalarda birbirinden ayrılıyor. Bu noktalardan birisi de Tip Sistemleri.
Bir programlama dilini incelemeye başladığımızda önümüze ilk olarak tip konuları hakkında bilgiler gelir. Örneğin; Java Static Type Checking yapar veya Python Dinamic Type  Checking yapar ibarelerini görürüz. Bu bilgiler bize dilin mantığının kavranması ve geliştirilmesinde büyük rol oynar.
Programlama dillerinde tip sistemleri, değerleri belirli tiplerde gruplarlar. Aynı değerler,belirlenen tip adı altında gruplanarak yazılım geliştiricilerin veriyi çok daha etkili ve anlamlı kullanmasına olanak sağlar. Verinin işlenip çıktı olarak alınması noktasında verilerin etkili ve hataya yol açmadan işlenmesi çok önemlidir. Birbirinden alakasız veriler üzerinde işlem yapılması tip sistemlerinin getirdiği bu özellik sayesinde önlenir. Örneğin; Bir İnteger ile bir Boolean değer aynı ifade içinde kullanılıp anlamsız bir değer çıkması tip sistemleri sayesinde önlenir.
Programlama dillerinde yapılan her işlem öncesi hataları önlemek için verilerin tip kontrolü yapılır. Bu tür kontrollere ”Checking”  adı verilir. Checking işlemleri compile-time (derleme esnasında) veya run-time (çalışma esnasında) olarak yapılır. İşte bu farklılık Statik Tipli ve Dinamik Tipli dillerin temel ayrım noktalarından biridir.
Statik Tipli dillerde her değişkenin değişmez bir tipi olmak zorundadır. Developer ya bu tipi bizzat belirler yada Derleyici tarafından belirlenir. Statik Tipli dillerde yapılan işlemlerden önce Tip Konrolü yapıldığı için, operandların tiplerinin belirlenmesi gerekir. Tip kontrolleri compile (derleme) esnasında yapılır. Bu tarz dillere örnek olarak Java, C, C++ ,C# ,F# ,Ada ,Fortran ,Haskell ,ML ,Objective-C ,Pascal dilleri verilebilir.
Dinamik Tipli dillerde değerler değişmez bir tipe sahiptir. Ancak değişkenler ve ifadelerin belirli bir tipe sahip olma zorunlulukları yoktur. Her bir işlem esnasında, operandlar değişik değerler üretebilir. Değişkenlerin ve ifadelerin tipleri run-time (çalışma) esnasında belirlenir. Bu tarz dillere örnek olarak Groovy, Javascript, Lisp, Lua, PHP, Prolog, Python, Ruby, Smalltalk dilleri verilebilir.
Statik Tipli Diller ile Dinamik Tipli dillerin birbirlerine üstünlükleri konusunda birçok fikir ortaya atılıyor. İkisinin de birbirlerine üstün oldukları noktalar var.
Statik Tipli dillerde derleme (compile-time) esnasında tip kontrolü yapıldığı için programın çalışması esnasında ekstra tip kontrolü yapılmaz, bu da uygulamanın çok daha verimli ve hızlı çalışması anlamına gelir. Dinamik Tipli dillerde ise çalışma (run-time) esnasında kontrol yapılması ufak da olsa bir yavaşlamaya sebep olmaktadır. Ayrıca yine bu özellikten dolayı her değişkenin tip bilgisi hafızada saklanmak zorundadır. Bu durum ekstra bir hafıza yükü anlamına gelir. Statik Tipli dillerde derleme (compile-time) esnasında tip kontrolü yapıldığı için ekstra bir hafızaya gerek duyulmaz.
Statik Tipli dillerde derleme (compile-time) esnasında herhangi bir hata yakalanmadı ise tip hatası oluşmamış demektir yani Dinamik Tipli dillere nazaran çok daha güvenlidir. Dinamik Tipli dillerde ise böyle bir kesinlik bulunmaz. Öte yandan Dinamik Tipli diller Developer’lara çok büyük esneklik sağlar. Gelen verinin türünün bilinmediği uygulamalarda çok kullanışlıdır. Ayrıca Developer’lar bir değişkene farklı noktalarda farklı değerler atayabilirler.