‘Teknoloji’ kategorisi için Arşiv

HTC Hero üzerinde root olmak, Android Market’i kullanabilir hale gelmek.

Pazar, 18 Nisan 2010

HTC’nin Android işletim sistemli telefonu Hero üzerine başka ROM’lar yüklemek için yapılacaklar konuusnda bayağı bir araştırma yapmam gerekti. Bir sürü forumda ve blog yazısında, uzun uzun prosedürler ve “şunu denedim olmadı”, “a ve b kombinasyonları başarısız oldu” gibi çok sayıda yazı okudum, sonunda, kendi telefonum üzerinde çalışan bir yol buldum, sizlerle de paylaşmak istedim. Ufak bir not: bu işlemler sırasında telefonunuzda problem oluşabilir, veri kaybedebilirsiniz, sorumlululuk tamamen sizde :)

Telefonum, KVK tarafından Türkiye’ye getirilmiş, bir teknoloji marketten almış olduğum HTC Hero A6262.
Bilgisayar gerektiren işlerde bir Windows XP kullandım. Bir kesintisiz güç kaynağı yada şarjı yeterli bir dizüstü bilgisayar ile bu işlemleri yapmanızı şiddetle tavsiye ediyorum (bkz. madde 7).

0. Herşeyden önce telefonda Settings – Applications – Development menüsü altından “USB debugging” özelliğini aktif hale getirdim.

1. http://developer.android.com/sdk/index.html adresinden indirdiğim Android SDK paketini C:\android-sdk altına açtım.

2. http://www.htc.com/www/support.aspx adresinden indirdiğim HTC Sync (HTC Sync upgrade for HTC Magic, Hero &Tattoo) uygulamasını kurdum.

3. HTC Sync kurulumunu tamamladıktan sonra telefonu USB kablosu ile bilgisayara bağladım. Windows “yeni donanım buldum” vs. dedi.

4. Sonrasında Android SDK ile cihazı doğru tanımlayıp tanımlamadığına baktım:

C:\android-sdk\tools>adb devices
List of devices attached
HTXXXXXXXXXX device

Buradaki XXXXXXXXXX kısmında cihazın seri numarası görülüyor.

5. Telefona taklılı olan SD kartı gold kart haline getirmek için aşağıdaki adımları izledim:

  • a. SD kartı telefona takıp, önce Settings – SD & Phone storage menüsünden “Unmount SD card” seçtim, sonra da aynı ekranda “Format SD card” seçerek kartı formatladım.
  • b.
    C:\android-sdk\tools>adb shell
    $ cat /sys/class/mmc_host/mmc1/mmc1:*/cid
    cat /sys/class/mmc_host/mmc1/mmc1:*/cid
    03534453553032478060966aa80099b0
    $

    Bu adımda elde ettiğim kodu dikkatlice bir kenara not ettim.

  • c. http://hexrev.soaa.me/ adresindeki form aracılığı ile bu kodun tersini aldım. Onu da kaydettim bir kenara. (009900a86a9660804732305553445303)
  • d. http://revskills.de/pages/goldcard.html adresindeki forma bir önceki adımda elde ettiğim ters çevrilmiş kod ve e-posta adresimi verdim, bana bir img dosyasını zip’li olarak gönderdi e-posta ile. Bu dosyayı alıp, zip’ini açtım.
  • e. Telefonu kapatıp, takılı olan SD kartı çıkarıp, bilgisayara bağlı bir kart okuyucuya taktım.
  • f. http://mh-nexus.de/en/hxd/ adresinden indirdiğim Hex Editor programını kurdum, ve çalıştırdım. Eğer başka bir Hex editor kullanıyorsanız onunla da aynı işlemi yapabilirsiniz. HxD editör’de yaptıklarım sırasıyla şöyle:
    - Extras – Open disk menüsünden SD kartı seçtim, “Open as ReadOnly” seçeneğini kaldırdım.



    - Extras – Open disk image menüsünden e-posta ile gelen imaj dosyasını seçtim. sektör boyutu olarak 512 [Hard disks/Floppy disks] seçtim.

    - goldcard imajının açık olduğu tab’da “Select All” ve “Copy” yaptım.
    - SD kartın açık olduğu tabda 00000000 – 00000170 arasını seçtim ve “Paste write” yaptım, kaydedip çıktım.
  • g. Kart üzerindeki operasyon başarılı olmuş mu diye, bir kontrol etmek gerekiyor, bunun için SD kartı okuyucudan söküp geri taktıktan sonra, My Computer altından karta girmek gerekiyor. Eğer kartın içini görüntüleyebiliyorsanız işlem tamam demektir. Eğer buna izin vermiyorsa Hex editorle yapılan işlemi tekrarlamak gerekiyor. Benim başıma ise şöyle birşey geldi: Ben karta imajı yazdıktan sonra, kartı okuyucudan çıkarıp geri taktım ancak kartı okumama izin vermedi, sonrasında kart okuyucuyu bilgisayara bağlayan USB kablosunu söküp taktım, ve kartı okumama izin verdiğini gördüm.
  • h. SD kartı telefona takıp, telefonu açtım. Android SDK ile de SD kartı gördüğümü teyid ettim:

    C:\android-sdk\tools>adb shell
    $ df
    df
    /dev: 98508K total, 0K used, 98508K available (block size 4096)
    /sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
    /system: 174080K total, 146808K used, 27272K available (block size 4096)
    /data: 169728K total, 21032K used, 148696K available (block size 4096)
    /cache: 133120K total, 1156K used, 131964K available (block size 4096)
    /sdcard: 1930240K total, 80K used, 1930160K available (block size 16384)
    $

6. Telefon USB kablosu ile bilgisyara bağlı iken 2. adımda kurduğum HTC Sync uygulamasını çalıştırdım. HTC Sync’in de telefonu gördüğünden emin oldum.

7. Bu adım, belki de tüm süreç içinde en riskli adım. Çünkü, cihazın üzerindeki ROM’u eski bir sürüme çektim, ancak bu ROM’u bilgisayar üzerinden yazdığı için, sanırım bu işlem sırasında oluşacak bir elektrik kesintisi, telefonu açılmaz hale getirebilir. Bu konudan tam emin değilim; test edecek cesaretim de yok :) Dikkat etmekte fayda var.
Ben sağolsun Fatih Aytaç’ın yansıladığı http://fatihaytac.com.tr/dh/htc_hero/Official-ROMs/RUU_Hero_HTC_WWE_2.73.405.5_WWE_release_signed_NoDriver.exe‘yi kullandım. Bu dosyayı bilgisayarıma indirip, çift tıkladım. Aşağıda ekran görüntülerini verdiğim şekilde ilerledim.



İşlem tamamlanınca telefon kapanıp açıldı. Sonrasında Settings – About phone menüsünden ROM sürümünü kontrol ettim.
Bu noktada elimde, üzerinde Android Market çalışan, ama “root” edilmemiş bir cihaz var. Bu eski sürümün ne gibi dezavantajları var açıkçası araştırmadım. Bunu sadece ara bir adım olarak kullandım.
Neden daha düşük bir sürüme geçme işini yaptığımı merak edebiliriniz. Benim telefonumun içinde fabrika ayarları ile yüklü gelmiş olan 2.73.468.xx sürümü üzerinden root işlemi yapılırken sorun yaşandığına dair bazı yazılar okudum, o nedenle önce bu sürüm düşürme işlemini gerçekleştirdim.

8. İstediğim ROM’u yüklemek için biraz daha yolum var :) http://flashrec.googlecode.com/files/flashrec-1.1.2-20090909.apk uygulamasını indirip, telefonda SD karta kopyaladım, ve kurdum.

9. http://www.androidspin.com/files/amon_ra/RECOVERY/recovery-RA-hero-v1.6.2.img adresindeki imajı indirdim ve SD kartın köküne recovery-backup.img ismi ile kopyaladım.

10. Telefon üzerinde flashrec programını açıp “restore” çalıştırdım. İşlem tamamlanınca “Reboot in recovery mode” diye bir düğme çıktı ancak işe yaramıyordu, elimi korkak alıştırmayıp, güç düğmesinden telefonu kapattım. Telefonu home tuşuna basılı tutarak açtım. Karşıma yeşil bir “recovery” ekranı geldi.

11. Bir sorun olursa yada birazdan yükleyeceğim ROM’u beğenmezsem ve geri dönmek istersem diye “Nandroid backup” aldım. İşlem bitince “Backup complete!” yazısı çıktı.

12. Telefonu normal bir şekilde açarak (home tusuna basmadan), kurmak istediğim ROM’u .zip dosyası haliyle SD kartın köküne kopyaladım. Ben http://www.villainrom.co.uk/VillainROM5.1.zip adresindeki Villain ROM’un bu işlemi yaparkenki en güncel sürümünü indirdim. (Forumlardan takip ettim kadarıyla MoDaCo ROM’lar da oldukça popüler, seçim sizin.)

13. Telefonu kapatıp yine “recovery” modunda açtım (home tuşuna basılı tutarak). Yine forumlardaki önerileri takip ederek sırasıyla Wipe items – Wipe data/factory reset ve Wipe items – Wipe Dalvik-cache işlemlerini yaptım.

14. Recovery ekranında “Flash zip from sdcard” seçeneğini seçerek, SD karta kopyaladığım zip dosyasını gösterdim. “Install from sdcard complete” mesajını alınca, telefonu kapatıp normal modda açtım. Cihaz yeni ROM ile ilk açılırken 4-5 dakika kadar bekledim açılış animasyonunun geçmesi için. Açıkçası gecenin o saati için biraz ürkütücü bir durumdu. Ancak 4-5 dakika sonra cihaz normal açıldı.
15. Android SDK ile root olmuş muyum diye kontrol ettim:

C:\android-sdk\tools>adb shell
#
# id
id
uid=0(root) gid=0(root)
#

Artık Android market erişimi olan, “root” erişimi elde edilmiş bir cihaz var elimde :)

SplunkForPostgreSQL – Bir Splunk uygulaması geliştirmek

Perşembe, 09 Nisan 2009

Yıllarca sistem yöneticiliği yaparken en büyük dertlerimden biri,  problem olduğunda GB’larca ham kayıt dosyası içinden problemin izini sürmeye çalışmaktı. Tabii sunum hazırlamak gerektiğinde geçmişe yönelik istatistikler çıkarmak, o veriyi işleyip grafiiğe dönüştürmek gibi zaman öldüren işler de cabası. İşte bu yüzden Splunk‘ı ilk kullanmaya başladığımda başardıkları karşısında çok etkilenmiştim; sağladığı indeksleme altyapısı ile bilgiyi biriktirip, çok hızlı arama ve raporlama imkanı sağlayan Splunk‘ın en beğendiğim özelliklerinden biri de kendi uygulamanızı geliştirmenize ve bunu SplunkBase üzerinden diğer kullanıcılar ile paylaşmanıza imkan sağlaması.

PostgreSQL ile ilgili birşeyler araştırırken, SplunkBase dünyasında bu veritabanı yönetim sistemi ile ilgili birşey yapılmamış olduğunu gördüm. Ben de ufak ufak birşeyler yapayım, ileride büyür birilerinin derdine derman olur belki diye düşünerek SplunkforPostgreSQL‘ e başladım. Bu uygulama ile amacım, PostgreSQL sunucularda aktif bağlantı sayısı gibi bazı performans değerlerini gözlemek.
Bu çalışmalar sırasında yaptıklarımı adım adım anlatmaya çalışacağım.

* Ara not: Splunk bir python geliştirme ortamı sunduğu için iş yapan kodları -hakim olmadığım bir dil olan- python ile yazmaya çalıştım, siz istediğiniz dil/kabuk ile işinizi görebilirsiniz. Şimdiden ne kusur ettiysem affola :)

Splunk uygulamaları öntanımlı olarak /opt/splunk/etc/apps dizini altında bulunuyor:

# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL
# ls -al
total 20
drwxr-xr-x 4 splunk splunk 4096 2009-03-26 22:28 .
drwxr-xr-x 15 splunk splunk 4096 2009-04-09 22:19 ..
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 bin
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 default
-r-xr-xr-x 1 splunk splunk 22 2009-04-09 22:23 README.txt

/opt/splunk/etc/apps/SplunkForPostgreSQL/bin dizini altında çalıştırılabilir dosyalarımız (betikler vb.), /opt/splunk/etc/apps/SplunkForPostgreSQL/default dizininde ise konfigürasyon dosyaları bulunmakta.

Önce /opt/splunk/etc/apps/SplunkForPostgreSQL/bin dizinindeki, veritabanı üzerindeki aktif bağlantı sayısını kontrol eden uygulamamıza bir bakalım:

# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL/bin
# cat active_connections.py 

import pgsql, sys

try:
        connection = pgsql.connect(host="localhost", database="template1", user=
"postgres", password="postgres_pass")
except:
        print "Failed to connect to the database"
        sys.exit()

mark = connection.cursor()
statement = 'SELECT COUNT(*) FROM pg_stat_activity'
mark.execute(statement)
connection.commit()
rows = mark.fetchall()
for row in rows:
        active_conn = row[0]

print "PostgreSQL active connections: pg_active_conn =", active_conn

Bu betik Splunk tarafından çalıştırıldığında PostgreSQL veritabanı sunucumuza bağlanıp, aktif bağlantı sayısını alacaktır. Splunk’da ilgili kayıtları sourcetype=”pg_active_conn” sorgusu ile aradığınızda aşağıdaki gibi bir görüntü ile karşılaşıyoruz :

Şimdi amacımız bu sorguyu belli aralıklarla çalıştırıp, grafiğe dokmek. Bunun için /opt/splunk/etc/apps/SplunkForPostgreSQL/default dizini altındaki konfigürsyon dosyalarını kullanacağız.

# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL/default
# ls -al
total 32
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 .
drwxr-xr-x 4 splunk splunk 4096 2009-03-26 22:28 ..
-r-xr-xr-x 1 splunk splunk 351 2009-04-09 22:23 bundles.conf
-r–r–r– 1 splunk splunk 154 2009-04-09 22:23 eventtypes.conf
-r-xr-xr-x 1 splunk splunk 235 2009-04-09 22:23 inputs.conf
-r–r–r– 1 splunk splunk 141 2009-04-09 22:23 props.conf
-r-xr-xr-x 1 splunk splunk 727 2009-04-09 22:23 savedsearches.conf
-r–r–r– 1 splunk splunk 3994 2009-04-09 22:23 transforms.conf

Şimdi tek tek dosyalara bir göz atalım:

bundles.conf
Uygulmanın amacı ve yazarı hakkında kısa bir bilgiyi bu dosya içerisnde veriyoruz. Ayrıca uygulamanın geriye doğru uyumluluk ile ilgili bir sorunu var ise çalışabildiği en düşük Splunk sürümünü de yine bu dosyada belirtiyoruz.

# Copyright (C) 2005-2008 Splunk Inc.  All Rights Reserved.  Version 3.3
[SplunkForPostgresql]
author = Ahmet Ozturk
version = 0.1
minsplunkversion = 3.3
contactemail = ahmet.ozturk@pro-g.com.tr
description = This application is a collection of saved searches, eventtypes,
field extractions, dashboards, and scripted inputs that support the PostgreSQL DBMS

eventtypes.conf:
Şu anda bizim uygulamamız için bir eventtype tanımı yapmadık. Gerektiğinde bu dosya içinde tanımlayacağız.

inputs.conf
Periyodik olarak çalıştırıp veritabanındaki aktif bağlantı sayısını alacak betiğimizi burada tanımlıyoruz. “interval” değişkeni saniye biriminde tanımlanıyor. Aramalarda kullanacağımız “source” ve “sourcetype” türlerini burada tanımlıyoruz. Son satırdaki “disabled” parametresne dikkat. Bu değeri “false” yaparak, uygulamanın çalışmasını sağlıyoruz:

# Copyright (C) 2005-2008 Splunk Inc.  All Rights Reserved.  Version 3.0
[script://$SPLUNK_HOME/etc/apps/SplunkForPostgreSQL/bin/active_connections.py]
interval = 60
sourcetype = pg_active_conn
source = pg_active_conn
disabled = false

props.conf
Tanımladığımız pg_active_conn sourcetype’ın özelliklerini bu dosyada belirtiyoruz:

[pg_active_conn]
SHOULD_LINEMERGE=false
LINE_BREAKER=^()$
TRUNCATE=1000000
DATETIME_CONFIG = CURRENT
REPORTS-pg_active_conn = pg_active_conn

savedsearches.conf
Yaptığımız aramaları kaydedip, her sferinde aynı işi yapmaktan bizi kurtaran bir özellik savedsearch özelliği. İlk satırda közeli parantezler içinde verdiğimiz isim Splunk’ın giriş sayfasında “Saved Seraches” kısımıda göreceğimiz isim. “search” parametresi ile son 1 saat içinde pg_active_conn sourcetype’ındaki olayları arayıp, sunucu bazında grafik çiziyoruz. “viewstate.chart.plotMode” parametresi ile de grafiğimizin özelliğniverebiliyoruz. Duruma göre pasta, çubuk gibi grafikler de çizmek mümkün:

[SplunkForPostgreSQL - pg_active_connections by host]
action_rss = 0
search = sourcetype="pg_active_conn" pg_active_conn starthoursago=1 | timechart avg(pg_active_conn) by host
schedule = */60 * * * *
sendresults = 0
userid = 1
viewstate.chart.formatting.dateTimeFormat = %m/%d/%Y %H:%M:%S
viewstate.chart.formatting.height = 300
viewstate.chart.formatting.padding.bottom = 10
viewstate.chart.formatting.padding.left = 0
viewstate.chart.formatting.padding.right = 0
viewstate.chart.formatting.padding.top = 20
viewstate.chart.formatting.textColor = 3355443
viewstate.chart.formatting.width = 788
viewstate.chart.plotMode = line
viewstate.prefs.selectedKeys = source host sourcetype action linecount
viewstate.resultView = reportView

transforms.conf
Kayıt satırlarının nasıl yorumlanacağına ilişkin tanımların yapıldığı bir dosya. Şimdilik bu dosya ile ilgili birşey yapmıyoruz.

Bu kadar lafın üstüne biraz da ekran görüntüsü inceleyelim:
Splunk “main” menü kısmında tanımladığımız sourcetype (pg_active_conn) ve savedserach ( “PostgreSQLForSplunk – pg_active_connections by host) değerlerini görebiliriz:



Saved Seraches kısmından, tanımladığımız aramaya tıkladığımızda yukarıda açıkladığım şekilde grafiğimizi görebiliriz:

Uygulamayı bu ilkel hali ile denemek, yada göz atmak isterseniz, buradan indirebilirsiniz.

Başta da belirttiğim gibi bu bir başlangıç. Şimdilik listemde aşağıdaki konular var:
- Daha fazla performans değerinin gözlenmesi
- SMS/RSS gibi haber verme mekanizmalarının kullanılması

Buraya kadar katlanıp okuduğunuz için teşekkür ederim.

1.4 Milyar Piksel Dijital Kamera

Cumartesi, 29 Kasım 2008

Ev kullanımı için değil tabii ki…

Hawai’de yeryüzüne yakın gök cisimlerini tespit etmek için yürütülen çalışmalarda kullanılmak üzere geliştirilen kamera 40 santimetrekarelik bir alanda 1.4 milyar piksel içerecek. Kameranın bir diğer özelliği de atmosferden kaynaklanan görüntü netlik problemlerini giderecek bir teknoloji içeriyor olması.

Ayrıntılı bilgi çalışmayı yürüten Hawai Üniversitesi’ nin web sayfasında: http://pan-starrs.ifa.hawaii.edu/public/home.html.

Teknolojinin akışı takip edildiğinde uzay araştırmalarında kullanılan bu teknolojinin ilerde boyut olarak küçülüp, savunma sanayisinde ve sağlık endüstrisinde de karşımıza çıkacağını tahmin ediyorum.

3G (3. Nesil) ihalesi yapıldı. Hayırlı olsun.

Cuma, 28 Kasım 2008

2007 yılında rekabet şartları oluşmadığı için iptal edilen 3G ihalesi gerçekleşti. Türkiye’nin 3 GSM operatörü de lisans aldılar. Operatörler Haziran 2009′dan itibaren 3G hizmetleri vermeye başlayacaklar.

3G hizmetleri ile mevcut şebekelerde aldığımız GPRS, EDGE gibi hizmetlerden çok daha hızlı bir bağlantı imkanına kavuşacağız ve bu sayede mobil cihazlar ile çoklu ortam (multi-media), görüntülü konuşma (video-konferans), hızlı internet gibi servislere çok daha rahat erişebileceğiz.

Mevcut 2.5 Nesil (2.5G) ve 2.75 Nesil (2.75G)  protokoller (GPRS ve EDGE protokolleri) ile 3. nesil bir protokolün (W-CDMA) teorik hız sınırları aşağıdaki gibi:

GPRS: 171.2 Kbps

EDGE: 384 Kbps

W-CDMA: 2Mbps

Artık gitgide gezgin (mobil) yaşamaya alışan çalışanlara 3G hizmetlerinin çok yardımcı olacağını düşünüyorum ve biraz geç kalmış da olsak -dünyada 3G hizmetler verilen 102. ülke olacağız- tekrar hayırlı olsun diyorum.