Samsung i7500 Galaxy (Android) için Rom kurulumu

Etiketlenen : , , , , ,

Turkcell sağolsun ülkemize ilk Android işletim sistemli cep telefonunu getirdi. Ama ne Samsung ne de Turkcell Galaxy i7500 modelinde Android Market getirmeyi becerememiş. Market olmayan bir Android düşünülemez. Issız adaya düşseniz yanınıza alacağınız üç şeyden birisi Samsung i7500 Galaxy ise Market’i yoksa onu da almayın. :)

Yazımda bu dertlere çözüm bulacaksınız. HDBlog.it tarafından hazırlanan GalaxHero Rom‘u yükleme ve Market Enabler aracılığıyla satın alınabilir uygulama/oyunlara da ulaşabileceksiniz.

Öncelikle telefonunuzda önem arzeden herşeyi yedeklemelisiniz. Bu işlemler telefonunuza zarar verebilir, garanti kapsamı dışına çıkarabilir..

İhtiyacımız olanlar:
Samsung i7500 Galaxy

USB bağlantı kablosu (kutusunda çıkar)
Windows XP (Vista veya windows 7 demeyin, denedim olmuyor.)

Download etmek gerekenler:
Multi Odin v3.95
XXII5
update.zip (GalaxoHero)
Recovery4.2
Android SDK 1.5 RC3

Telefonu kapatıyor ve “Ses Kısma”, “OK ” ve “Açma/Kapama” tuşlarına aynı anda basarak “Downloading” durumuna getiriyoruz.

Multi Odin’i açıyor, .ops dosyasını ve One Packet seçimini yapıp dosya olarak II5.tar dosyasını gösteriyoruz. Start dediğimizde artık telefonumuza II5 sürümünü kurmuş oluyoruz. :) Diyeceksiniz ne gerek var, belki seveceksiniz. Türkçe dil seçeneği olmasa da Market gelecektir. Market sizin altta adı geçen bazı uygulamaları download etmeniz için gerekecektir.

İndirilen dosyalardan Android SDK içerisinde tools klasörüne, Recovery 4.2 dosyası içerisinden çıkan recovery.img dosyasını kopyalayalım, aynı dizinde komut satırında (cmd) aşağıdaki komutu girelim.

fastboot flash recovery recovery.img

Ekranda telefonun beklendiği mesajı çıkacak. Sonra telefonu tekrar kapıyoruz. Telefonun hem “Cevapla” hem de “Açma/Kapama” tuşuna aynı anda basarak booting durumuna getiriyoruz. (Bu aşamalarda driver olarak XP herşeyi halledecektir.) Recovery Mode telefonumuzu update etmek için kullanacağımız yerdir. Gerektiğinde Ses Kısma, Cevaplama ve Açma/Kapama tuşlarına aynı anda basarak bu kısma girebilirsiniz. Buradan  yedekleme, su (super user) yetkisi, rom güncelleme gibi işlemler yapabileceğiz. Bir sonraki paragrafta anlatılan rectools.tar.gz dosyasını /sdcard içerisine atmadan henüz çalışmayacaktır. Lütfen Recovery Mode ile Downloading Mode arasında Ok ve Cevaplama tuşu farkını karıştırmayalım. :) Benzer kombinasyonlar, ben kaç saat hep OK tuşu yerine Cevaplama tuşuna bastım, siz yapmayın.

update.zip ve II5.tar dosyalarını ve rectools.tar.gz dosyasını /sdcard içerisinde atmanız gerekiyor. Ben bunları önce siteme atıp sonra AndFTP ile bağlanıp yapmıştım. Bir çok yöntem olabilir. Wifi ile bağlıyken, SwiFTP kurar ve çalıştırır dosyaları /sdcard içerisine herhangi bir FTP client ile atabilirsiniz. Veya direk telefonunuzdan yazıdaki linkleri tıklayarak telefonunuza indiriniz. :)

Bu dosyaları da attıktan sonra tek yapmanız gereken telefonu kapatmak, Ses Kısma, Cevaplama ve Açma/Kapama tuşlarına basıp telefonu Recovery Mode olarka açmaktır. Burada sizi bir menü karşılayacak. Önce nandroid Backup ile yedekleme yapınız. Bir sonraki işlemde Wipe ile sitemi temizleyelim ve en önemli olanı yani sdcard içindeki update.zip’i kullanarak güncelle yazan menüyü çalıştıralım. Sonra Restore Gapps menüsünü kullanalım. Artık taş gibi bir telefonunuz var.

Telefonda rooting yetkisine sahip olduğunuz için işletim sistemine müdahalelerde kimse sizi durduramaz. :) Biraz araştırma yaparsanız elinizde ciddi bir Linux işletim sistemi tuttuğunuzu farkedeceksiniz.

Param var, güzel şeyler nerede derseniz, MarketEnabler_v3.0.2-beta.apk dosyasını telefonunuzdan indirip kurabilir, ücretli uygulamalara da erişebilirsiniz. Ben kullanıyorum, çok sevdim kendilerini. :)

Halk diliyle bir anlatım oldu ancak daha teknik bir yazı için vakit ayırabilirsem resimleriyle birlikte yazıyı güncellerim. Hayırlı olsun… :)

Bloguna yazı yazmayı özlemek

Etiketlenen : , , , , ,

Bir süredir hem PHP hem de C# (henüz ASP.NET değil, bildiğin C#) öğrenmeye ayırdığım vakit yüzünden bloguma yeni yazı bile eklemiyordum. Aslında bu genel bir durum, eğer yapmakta olduğum bir işe bir kaç gün ara vermişsem o verilen aranın daha da büyümesine engel olamıyorum. İşte bu yüzden öğrenme çabamın aralıksız yürümesi için bazı şeyleri gözardı etmem gerekiyor. Son 2 ayda ücretini peşin ödediğimiz spor merkezine sadece 3 kez gitmiş olmak da bunlardan birisi.  Dün akşam da gidemedik ama bugün kesin gidilecek. :)

Kendime verdiğim sözleri başkalarına verdiğim sözlerle aynı seviyeye çekip bugün yeni kararlar almaya çalışacağım. Her ne kadar hanım kafan patlayacak dese de, hem PHP hem C# öğrenmeye devam ederken, satın aldığım İngilizce Eğitim Seti gelir gelmez bir de ona zaman ayıracağım. İngilizce yazılanları anlayıp yazamamak,  konuşamamak kötü birşey benim için. Keşke 5 yaşında Fono ile ingilizce öğrenmeye başlamasaydım. :) Üstelik spor faaliyetimi aksatmadan blogumu güncel tutmayı bile başaracağım. Belki de kilolarımı 90 lar seviyesine indirmeyi de kendime hedef ve söz olarak versem iyi olacak.

Bloguma uzun aradan sonra ayırabildiğim bu vakti burada sona erdiriyor çok yakında OOP (Object-oriented programming) üzerine yazılarımla daha sık görüşeceğiz diyorum. İlginize çok teşekkür ediyorum.

PHP yazarken bunlara dikkat!

Etiketlenen : , , ,

PHP diline hakim olmaya karar verdiğimde öncelikle bu işin püf noktalarını da öğrenmem gerektiğine inanıp biraz araştırma yaptım. Aşağıda sizin de yapabileceğiniz hatalar ve doğru yöntemleri göreceksiniz.

Gelen verileri aynen kullanıyorsanız hack için davetiye gönderiyorsunuzdur.

Mesela aşağıdaki şekilde kullanım hatalıdır:

<?
echo(“<p>Arama sonuçları: ” .
$_GET['arama'] . “.</p>”);
?>

htmlspecialchars kullanmak iyidir ancak yeterli değildir:

<?
echo(“<p>Arama sonuçları: ” .
htmlspecialchars($_GET['arama']) . “.</p>”);
?>

“arama” diye bir query’nin olup olmadığına bakar, <?php ile başlar ve bağlama operatörü olarak “.” kullanmak yerine ENT_QUOTES argümanı kullanılarak aşağıdaki şekilde bir kullanım en ideal olandır :

<?php
if (isset($_GET['query']))
{
echo ‘<p>Arama sonuçları: ‘, htmlspecialchars($_GET['arama'], ENT_QUOTES), ‘.</p>’;
}
?>

Bir başka sorun ise for döngüleri içerisinde count komuturla array boyutunu almak. Her dönüşte tekrar tekrar aynı değeri aldırmak istemeyiz değil mi?

$deneme = array(“bir”,”iki”,”üç”);
for (i==0;i<count($deneme);$i++){
// …
}

Bu döngü boyunca değişmediği belli olan $deneme arrayının boyutu tekrar tekrar alınmakta. Bu nedenle önce bir değere eşitlenmesini önerilir.

$deneme = array(“bir”,”iki”,”üç”);
$max = count($deneme);
for (i==0;i<$max;$i++){
// …
}

Ayrıca tarih formatınızı bir kez tanımlayarak tek bir yerden tarih biçimlendirmesi yapabilirsiniz.

define (“TARIH_BICIMI” , “j F Y”);
şeklinde tanımlama yaparsanız kod içerisinde print(date(TARIH_BICIMI)); olarak kullanabilirsiniz.

Tarihler konusunda işinie yarayacak bir bilgi de aşağıdaki kullanım şeklidir.

<?php
$gelecekHafta = time() + (7 * 24 * 60 * 60);
// 7 gün; 24 saat; 60 dakida; 60 saniye
echo ‘Şimdi:         ‘. date(‘d-m-Y’) .”\n”;
echo ‘Gelecek Hafta: ‘. date(‘d-m-Y’, $gelecekHafta) .”\n”;
// yada strtotime() işlevi ile kullanımı
echo ‘Gelecek Hafta: ‘. date(‘d-m-Y’, strtotime(‘+1 week’)) .”\n”;
?>

Ayrıca echo kullanmak print kullanmaktan daha hızlıymış. Tıpki else if kullanmanın switch kullanmaktan hızlı olacağı gibi. Tabi else if sayısı çok fazla değilse.

Kullanılan hafıza çok değerlidir. Bu yüzden işimiz biten arrayları unset($arrayadi) ile kaldırmalı veya NULL değerine eşitlemeliyiz.

++$i her zaman $i++ dan daha hızlı çalışır. Ama ikisi farklı şeylerdir. ++$i kullanmak $i değerini kullanmadan önce artırır.

Zaman zaman bu türdeki dikkat edilmesi gerekenleri blogumda yazmaya devam edeceğim.  PHP nin çok fazla ayrıntısı olduğunu, bazı kodların 99 çeşit kullanım şekli olduğunu öğrendim. :)

PHP öğrenmek serisi : 2

Etiketlenen : , , , , , , ,

Kaldığımız yerden devam edelim;

Bir önceki yazımda değişkenleri, operatörleri, sabitleri ve syntax ile ilgili bazı bilgilere değinmiştim. Bu yazımda akış kontrol fonksiyonlarından neler öğrendiğimi yazacağım.

Öncelikle bilmeyenler için hatırlatalım akış kontrolleri değişkenlerin değerlerine göre sizi yönlendiren fonksiyonlardır. Yani bir yazılım yazıp 2 ile 5 i toplatırsınız ve 6 dan büyük olduğu için ekrana “6 dan büyük” diye yazdırabilirsiniz, ama bunu her sayı için tekrar tekrar yazarsanız ne bu işin sonu gelir ne de yazılım sağlıklı çalışır. Bu nedenle akış kontrolleri aslında yazılımın can damarıdır.

if ifadesi:

if (koşul) {
// koşul uygunsa çalışacak kısım
}

Yani eğer koşul içerisindekiler doğru (true) ise { ile } aralığındakileri çalıştırmamız gerekir. Koşulun olumsuzu için de işlem yapmamız gerekiyorsa;

if (koşul) {
// koşul uygunsa çalışacak kısım
}else{
//koşul uygun değilse çalışacak kısım
}

şeklinde yazabiliriz. Kısa bir örnek vermek gerekirse:

<?
$test = 3;
if($test<5){
echo $test.” beşten küçük”;
}else{
echo $test.” beşten küçük değil”;
}

Bir de koşulun her hali farklı olması durumunda çalışacak bir if .. else if .. fonksiyonu var. Kullanımı aşağıdaki gibidir.

if (koşul1){
// koşul1 true ise
}elseif(koşul2){
//koşul2 true ise
}elseif(koşul3){
//koşul3 true ise
}else{
// yukarıdaki koşulların hiçbirisi true değilse
}

Ancak çok sayıdaki koşul için üstteki gibi kullanım yerine aşağıdaki gibi switch fonksiyonunu kullanmayı tercih edelim.

switch (deyim) {
case sonuc1:
// deyimin sonucu sonuc1 e eşitse çalışacak kısım
break;
case sonuc2:
// deyimin sonucu sonuc1 e eşitse çalışacak kısım
break;
default:
//üstteki hiçbir sonuçtan biri değilse default olan çalışacak kısım
break;
}

Burada break (araya gir) ifadesi ile switch ifadesinin çalışması sonlandırılır.
Eğer break ifadesini eklemezseniz default değere kadar çalışmaya devam edecek, yanlış yorumlamaya sebep olacaktır.

? operatörünü kullanmak (ternary)
Kısaca bunu (deyim) ? deyim_dogru_ise : deyim_yanlis_ise ; şeklinde gösterebiliriz. Bir örnekle verirsek;

<?php
$deneme = “orta”;
$buluver = ($deneme == “iyi”) ?  “İyi durumda” : $deneme.” durumda”;
$echo $buluver;
// $buluver değeri burada orta durumda olarak dönecektir.
?>

Burada anlatılan “if” fonksiyonu öğrenmeniz gereken en önemli şeyler sıralamasında bana göre ilk 3 içerisindedir.

Bu yazıdaki ifadelerim daha çok ders verir nitelikte olsa da ben kendi anladığım ve okuyana da birşey katacak şekilde yazmak istediğimden böyle oldu. Bir sonraki konuda döngülere değineceğim. Teşekkürler.

FFextra.com da kullanıcı ve kod kaynaklı bir hata ve sonrası

Etiketlenen : , ,

Bir kaç gündür hiç istemediğim kadar kişinin sanki tavuklarına kış demişim gibi üzerime gelmesinden bunaldım. PHP öğrenmeye başladığımı, bunu da bir uygulama üzerinde geliştirdiğimi belirtmiştim. Evet yeni yeni PHP öğrenebilirim ancak program algoritmasına yeterince hakim olduğuma inanıyorum. Yazdığım PHP kodlarında yorumlamasını yapabilecek kadar bilgi sahibiyim.

Dün gece yarısı aklıma gelen bir fikri kodlara dökerken çalışıp çalışmadığını tam test etmediğim bir fonksiyonu da webe gönderme gafletinde bulundum. Oysa her fonksiyonu tek tek önce kendi başına deniyor, gelen sonuçlara göre asıl koduma ekliyordum. Her programcının yapabileceği bariz bir hataydı. Ancak bunu düzeltmem çok uzun sürmedi.

Yapmaya çalıştığım şey friendfeed.com üzerinde BeniTakipEtmiyor isminde bir arkadaş listesi oluşturanlar www.ffextra.com a girdiklerinde onun takip ettiği ama onu takip etmeyenleri bu arkadaş listesine eklemekti. Bu konuda hiçbir sorun yoktu. İki aşamalı kod içerisinde bu kısım gayet sağlıklı çalışıyordu.

Ancak ikinci fikir olan bu kişileri Home Feed kısmından çıkarma kısmında basit bir hata vardı. API tarafına abonelik iptal için gönderdiğim array şu şekildeydi.

‘list’ => “list/home”

Tabi bu işlem sonrası sonuç çıkmayınca list keyini tümden kaldırdım. Bu kullanıcıdan tümüyle aboneliği iptal etmek anlamına geliyor. Yerine ne yazacağımı API dökümanından bulmalıydım. Bu esnada deneme yapan bir kaç kişi malesef tek taraflı takip ettiği kişilerden tamamen abonelik iptali yaşadılar. Bu iptallere http://friendfeed.com/settings/modifications adresinden erişilebilir ve tekrar abone olabilirler. Yani sadece kullanıcıya ikinci bir iş çıkardım. Hatayı farkedip aşağıdaki gibi bir düzeltme yaptığımda sistem istediğim gibi işliyordu.

‘list’ => “home”

Ancak nasıl olduysa ben kodu denerken mağdur ettiğim kullanıcılardan birisi ilk günden beri bana afedersiniz bok atmak için fırsat tepen, daha önce FriendFeed için 3. parti yazılımlar üreten Ahmet Alp Balkan a ulaşmıştı. Ahmet için gün doğmuş olsa gerek, resimde de görüleceği üzere hemen siteye girip gözleriyle olayı görmek istedi. Ancak umduğu sonucu alamadı. Sistem olması gerektiği gibi çalışıyordu. Bunu friendfeed.com üzerinde paylaşarak, bana amatör programcı sıfatını takarak elinden gelen tüm gayretle saldırısını yaptı.

vt

Sistemi denememiş, böyle bir sorunu görmemiş olan ama benimle ne alıp veremediklerini çözemediğim bir kısım yüzyüze de tanışma fırsatı bulduğum insanlar da ateşin altına odun atarak desteklerini sundular.

Evet geri dönülebilir şekildeki bu hatayla, beni lekelemek için fırsat kollayan kişilerin kucağına düşmüştüm. Bu fırsatı her şekilde değerlendirmekten çekinmeyen sözde arkadaşların, kendimi savunmama da takılmaları, bir de buradan vuralım demelerine hiç şaşırmıyordum. Eleştiriye açık olduğum kadar beni karalamak için yapılan eleştirilere de sert cevap vermekle tanınırım.

Çok sevdiğim bir söz vardır; “Bir lafa bakarım laf mı diye, bir de söyleyene bakarım adam mı diye?”.  Bana söyledikleri sözleri düşünüyorum da bu söz tam o anda kullanılacak sözlerden. İşte cevap vermek zorunda kaldığım ama bunu bile anlamak istemeyen, elime düştü ağzına sıçayım bunun hemen diyen kişilerle mümkünse yollarım kesişmesin istiyorum.

Açıklamalarıma ve özürlerine karşılık olarak benden özür dileyen, takip etmekten vazgeçip geri dönen anlayışlı insanlara da teşekkür etmek istiyorum. Dinlemesini bilen insanları bir başka seviyorum. Herkes hata yapar, ama hata önce sahibine iletilir.  Burada yapıldığı gibi kahpece yapılmaz (http://ff.im/7oVYC).

Ayrıca kendini bu işin profesörü sanıp kendinden başkasının aynı işleri yapamayacağına ve amatör olduğuna inanan Ahmet Alp Balkan kardeşimin (yaklaşık 12 yaş fark var aramızda) bu ukala ve kendinden başkasını küçük görme huyundan vazgeçmesini diliyorum.  Kendisi iyi bir yazılımcı olabilir, hatta daha ffextra fikri varken bile görüşmek istedim, ancak beni yeni yetme hiçbirşey bilmeyen, yeni PHP öğrendiğim için yazılıma yeni merak salmış biri sanmasını anlamıyorum.

www.ffextra.com uygulaması sizin izniniz olmadan sizin adınıza hiçbir şekilde friendfeed.com aboneliklerinize dokunmaz, sizin adınıza post göndermez. Hiçbir OAuth şifrelemesi kaydedilmez. Bundan sonra sitedeki hiçbir yeni uygulama yeterince test edilmeden kullanıma açılmayacaktır. Mağdur olduğunu düşünen arkadaşlardan özür dilerim.

bizimhost internet hizmetleri interaktif proje tek parola burçlar vijital Pronected
View my FriendFeed