Arşivler: 2011

Yonip Kernel 3g Freeze Issue and My Solution

Yorum Yapılmamış

08/10/2011 at 23:18Kategori:Android

I am using latest Yonip  2.32 kernel (#53) with CynogenMod 8.4 (Froyo 2.2) and I have a problem on 3g usage. When I use more  continious 3g data, my phone randomly freezes and then reboots. I wrote discussion thread about this issue but I cant find any help. About solution, I believed that, by 3g configuration, this problem can be fixed.  I used 3g/edge speed improvement  script and I have configured some parameters to limit hspda speed. By default my phone have 3.6 mbps hspda speed and if I change this limit to 1.8 mbps it prevents freezing. By the way I prepared a update script and can be apply by manually editing /system/build.prop file. After editing this file, don't forget to back up build.prop file as build.prop.bak. You can find the parameters and update script file below.

o.ril.hsxpa=1
ro.ril.gprsclass=10
ro.ril.hep=1
ro.ril.hsdpa.category=4
ro.ril.enable.a53=1
ro.ril.hsupa.category=5
ro.ril.enable.dtm=1

3g_freeze_fix.zip

Android Dalvik Cache Alanını Başka Bölüme Taşımak

2 Yorum

29/08/2011 at 14:48Kategori:Android

Android yüklü cihazları root edip sonrasında kurcalamak ve yeni özellikleri, iyileştirmeleri uygulayıp takip etmek bazen çok eğlenceli olabiliyor. Kullandığım cihazların dahili hafızalarının ne kadar olduğu, sistemin nasıl çalıştığı ya da daha iyi nasıl çalışabileceği hep kurcaladığım ve uğraşmaktan zevk aldığım konulardan olmuştur. Yabancı ülkelerde de bu şekilde uğraşan ve daha profesyonel olarak kernel development ya da rom oluşturma gibi işleri yapanlar var. CynogenMod bunlardan birisi ve aralarında en profesyonel ve kaliteli olanlardan sayılabilir. Cynogen romlar ile cihazınızı 2.1/2.2 ve 2.3 android romlara yükseltebiliyorsunuz ve çoğu zaman orjinal romlardan daha çok kaliteli ve stabil bir cihaza sahip oluyorsunuz. Cynogenmod açık kaynak olarak ilerlediği için cynogenmod sitesinde desteklenmeyen telefonlar için  de çalışmalar yapılıyor ve telefon modeline özel romlar ve yeni kollar çıkıyor. Bu kadar cynogenmod tanıtımı yaptıktan sonra asıl yazının başlığında bahsedilen konuya geçebilirim.

Android işletim sistemi çalışırken birden çok disk bölmesi ( partition) ile çalışıyor. Bunlar
/system  : sistem uygulamalarının, araçlarının ve diğer configurasyon dosyalarının bulunduğu alan.
/data  : Sonradan kurulan uygulamaların ve uygulamalara ait verilerin ayrıca sistem başlangıcında üretilen dalvik-cache dosyalarının bulunduğu alan
/cache : Bazı uygulamalar tarafından geçici olarak kullanılan alan (android market vs. )

Bu 3 ana bölümden başka sistemde birkaç bölme daha bulunuyor fakat bu kısımlarda recovery dosyaları ve boot işlemi için gerekli dosyalar bulunuyor. Android sistemlerde çalışma anında sd-kart ve depolama aygıtları menusunden dahili hafıza olarak görüntülenen yer sadece /data kısmı oluyor. Örnek olarak benim cihazımda dahili 512 mb bellek bulunmasına rağmen data kısmı için ayrılan bellek sadece 145 Mb. Dalvik cache için yaklaşık 60 mb alanın da data kısmında kullanıldığını düşünürsek kullanım için sadece 90 mb gibi bir alan kalıyor. Bu sorunu aşmak için dalvik cache kısmını /cache dizinine taşıyıp sonrasında sembolik link etmek /data kısmında daha çok kullanılabilir alan sağlıyor. Aşağıda scripti ve recovery ile uygulanabilecek zip dosyasını ekliyorum. Ek olarak cihazınızın dizin yapısı aşağıdakinden farklıysa sistemi inceleyip buna göre tekrar kodları düzenlemeniz gerekebilir. Script Samsung Spica i5700 için uygulanmıştır.

dalvik-cache.zip

#!/system/bin/sh
#
# Move dalvik-cache to /cache
#
# Remove Debugger Mem Dumps

if [ ! -d /cache/dalvik-cache ]
then
	busybox rm -rf /cache/dalvik-cache /data/dalvik-cache
	mkdir /cache/dalvik-cache /data/dalvik-cache
fi

busybox chown 1000:1000 /cache/dalvik-cache
busybox chmod 0771 /cache/dalvik-cache

# bind mount dalvik-cache so we can still boot without the sdcard
busybox mount -o bind /cache/dalvik-cache /data/dalvik-cache
busybox chown 1000:1000 /data/dalvik-cache
busybox chmod 0771 /data/dalvik-cache

# remove debugger memory dumps
busybox rm -rf /data/tombstones/*

 

Oracle Decode Function

Yorum Yapılmamış

07/06/2011 at 12:33Kategori:Java | Oracle

Bir tabloda bir türe ilişkin verilerin integer olarak kodlandığı durum en sık kullanılan tekniklerden birisidir. Aynı şekilde verilerin de genelde yazılıma veriler veritabanından alındıktan sonra anlaşılır hale getirilmesi söz konusu olur. Bunu veritabanında halletmenin yolu oracle veritabanları için decode fonksiyonundan geçiyor. Çıktı olarak üretici kodu yerine şirket adını veren select sorgusu şu şekilde olacaktır:

SELECT supplier_name,
decode(supplier_id, 10000, 'IBM',
10001, 'Microsoft',
10002, 'Hewlett Packard',
'Gateway') result
FROM suppliers;

 

SHA1 Şifreleme ve The .Net Way…

Yorum Yapılmamış

12/02/2011 at 16:58Kategori:.Net

SHA1 algoritmasını kullanarak bazı kullanıcı verilerinin şifrelenmesi ve bunların veritabanında kısmen de olsa dönüştürülemez olarak tutulması konusunda yapılacak işlem kullanıcıdan ilk şifre bilgisinin istendiği anda veritabanına SHA1 şifrelenmiş olarak kaydettirmek ve daha sonra kullanıcı giriş yapmak istediğinde girilen şifrenin SHA1 hash değerini alarak veritabanındaki önceden şifrelenmiş değer ile karşılaştırmaktır. Böylece bir güvenlik açığından dolayı sisteminizde depolanan şifreler hiçbir zaman okunamazlar ve böylece belki de her yerde aynı şifreyi kullanan kullanıcımızın güvenliği tehlikeye atılmamış olur. Bunu yapmanın bir yolu byte olarak veriyi parçalayıp şifrelemektir ya da .net ile gelen Form Authentication sırasında kullanılması için yazılmış tek satırlık kodu çalıştırabilirsiniz.

FormsAuthentication.HashPasswordForStoringInConfigFile("şifrelenecek veri burada...", "sha1");
// Bu metod string döndürür ve değeri istediğimiz gibi kullanabiliriz.

ASP.Net MVC3 Validation İşlemleri

Yorum Yapılmamış

09/02/2011 at 16:43Kategori:.Net | MVC

Web uygulamalarında en çok ihtiyaç duyulan şeylerden birisi Validation İşlemleridir.Form verilerini  kullanıcı tarafında(Client side)  javascript ile kontrol ettirmeniz, en azından boş bırakılmaması gereken alanları (requied fields) giriş almaya zorlamak ya da bazı alanları belirli aralıklar dışında değer girişinden korumak ( range validation) gerekebilir. Bu işlemler form tabanlı klasik geliştirme ortamlarında view kısmında çözülür. Ama MVC yapılarında php ve java frameworkler de dahil genel olarak model kısmında yapılan annotationlar ile bu işi çözmeye çalışırlar. Sebebi ise model kısmındaki tanımlamaların  view kısmında yapılacak tanımlamalara göre daha basit olması ve  verilerin sağlıklı girilmesinden yine Model kısmını geliştirenlerin yani kısaca data tier kısmında çalışanların sorumlu olmasıdır. ASP.Net MVC ile de bu işlemlerin yapılması oldukça kolaydır. Model kısmında tanımlamalarını yaptığımız veritabanı modellerimizde alanların üst kısımlarına yaptığımız annotationlar ile bu işlemleri kolayca gerçekleştirebiliriz.


[Required(ErrorMessage="Bir fiyat girmelisiniz...")]
[Range(0.01, 100.00,ErrorMessage="Fiyat 0.01 ile 100.00 TL arasında olabilir")]
 public decimal Fiyat { get; set; }

Yukarıdaki örnekte olduğu gibi System.ComponentModel.DataAnnotations alanındaki attributelarla bu işlemleri tanımlamak oldukça kolay ve etkili. Bu alanlarda tanımlanabilecek annotationlar ve açıklamaları şöyle:

  • Required: Girilmesi zorunlu alan oluşturur.
  • DisplayName:  Form alanlarında kullanmak üzere text tanımlamaya yarar.
  • StringLength: Alanda girilebilecek en fazla karakter sayısını belirler.
  • Range: Alan için girilebilecek en küçük ve en büyük sayısal değerleri tanımlar.
  • Bind:  Parametrelere ya da form değerlerini modele yüklerken dahil edilecek ya da çıkarılacak alanları belirler.
  • ScaffoldColumn: Editör Formlarından alan saklama işlemini gerçekleştirmeye yarar.
using System.Web.Mvc;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace MvcOrnekUygulama38.Models
{
    [Bind(Exclude = "KullaniciId")]
    public class Arac
    {
        [ScaffoldColumn(false)]
        public int KullaniciId { get; set; }
        [DisplayName("Arac")]
        public int AracId { get; set; }
        [DisplayName("Marka")]
        public int MarkaId { get; set; }
        [Required(ErrorMessage="Bir araç takma adı seçilmeli...")]
        public string TakmaAd { get; set; }
        [Required(ErrorMessage="Fiyat girmelisiniz...")]
        [Range(0.01, 100.00,ErrorMessage="Fiyat 0.01 ile 100.00 arasında olmalı...")]
        public decimal Fiyat { get; set; }
        [DisplayName("Arac Resim Url")]
        [StringLength(1024)]
        public string AracResimUrl { get; set; }
    }
}

Bu şekilde model sınıfını güncellediğimizde view kısmında javascript ile form validation işlemleri yapılmakta ve girişlerin daha sağlıklı olması sağlanmakta.

İlerleyen zamanlarda MVC üzerine daha düzenli yazılar yazmaya çalışacağım.

“Entity Framework Invalid Object Name dbo…” Hatası

Yorum Yapılmamış

08/02/2011 at 16:53Kategori:.Net | MVC

ASP.Net MVC 3 ile çalışırken Entity Framework 4 kullanımı POCO ile oluşturduğumuz ve Entity Model ile veritabanına işaretlediğimiz nesnelerin isimlendirilmesinde tekillik - çoğulluk karmaşası yaşanabilmekte. Örnek olarak çoğul isimlendirdiğiniz DbSetlerinin veritabanı ile konuşması sırasında tekrar EF tarafından çoğula dönüştürülmesi  "Entity Framework Invalid Object Name dbo.tabloadi" şeklinde hata almamıza yol açabiliyor. Böyle bir senaryoda yapmamız gereken Entity Model sınıfı içerisinde OnModelCreating olayını override ederek name convention özelliğini devre dışı bırakmamız gerekiyor.  Entity Model sınıfı içerisine yazdığım

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
kodu ile bu hatayı önledim.
Mutlu günler dilerim...

Bir başarı hikayesi: Android

1 Yorum

07/02/2011 at 00:48Kategori:Android

Android son zamanlarda adını oldukça fazla duyurmayı başaran ve çok popüler  akıllı telefonlar için Google tarafından üretilmiş bir açık kaynak kodlu işletim sistemi. Bu kadar meşhur olmasının birçok sebebi olabilir ama bunlardan en çok göze çarpanlar; kaliteli bir sistem altyapısına sahip olması (linux kerneli kullanıyor), yaygın yazılım geliştirme platformlarından birisi olan java temelleri kullanılarak oluşturulan bir SDK'ya sahip olması, Google gibi büyük bir şirket tarafından desteklenmesi ve reklamının yapılması, telefon üreticileriyle iyi anlaşabilmesi, sistem gereksinimleri bakımından fazla seçici olmaması ve neredeyse her cihaz üzerinde çalışabilmesi, açık kaynak topluluklarıyla iyi anlaşabilmesi ve insanlardan destek alması, ücretsiz olması vs. sayılabilir. Ayrıca en önemlisi de insanların eleştirel değil de heyecanla yaklaşması da Android'in şanslı olduğunun göstergesi olabilir.

Peki şu anda Android hangi konumda diyecek olursak, Android akıllı telefon pazarında en büyük payı alarak Microsoft, Apple, Symbian ve RIM(Blackberry) 'i solladı. Bunu da son bir yıl içerisindeki çok yüksek orandaki satışla yakaladı. Peki ya sonrası? Bundan sonra ne olacağı yine şirketlerin politikalarına göre şekillenecek ama artık Android bir platform ve uzun yıllar piyasada Android olarak kalacaktır. Ama benim bu başarı hikayesinden çıkardığım birkaç önemli not da var. İlk olarak yıllardır piyasada yazılım alanında tekel oluşturuluyor diye bağıran akademisyenler, gönüllüler ya da piyasadaki yazılımcı, mühendis çalışanlar acaba bu olaya ne diyecekler? Bazen gerçekten kaliteli bir ürün çıkmamasından dolayı piyasada tekel oluşumuna yol açmıyor muyuz? Kaliteli ürün derken yıllarca arıza vermeyen ya da yeniden başlatmaya ihtiyaç duymayan yazılım/ işletim sistemi çözümlerinden bahsetmiyorum. Yazılımınız çok sağlam temeller üzerinde kurulu olabilir ama dökümantasyon,kullanım / kurulum kolaylığı, son kullanıcıya yakınlık, fiyat, destek ve diğer parametreler yönünden piyasaya ne kadar uygun? Ya da  Google Chrome benzer bir örnek oluşturacaktır. Kullandığım tarayıcılar içerisindeki bence şu ana kadar en stabil ve sağlıklı çalışan tarayıcı hakkında sırf Google ürünü olduğu için bu kadar yayıldı sözleri benim üzerimde ne kadar etki oluşturabilir dersiniz? Pİyasadaki sorun gerçekten yazılım olarak kaliteli ürünlere ihtiyaç duyulması ve devam eden kalitesizliğin sonucunda hala çürük şeylerin el üstünde tutulmasıdır. Bunu da "bir an önce oturup hiçbir yerde olmayan bir ERP projesi yazalım" modundan çıkıp, "yurt dışında insanlar nasıl proje geliştiriyorlar incelemeliyiz önce" moduna girerek yakalayabiliriz sanırım. Kendini girişimci hissedenlere duyurulur...

MVC Frameworkler Üzerine…

Yorum Yapılmamış

06/02/2011 at 16:58Kategori:.Net | Java | SVN | Test Driven Development

Senelerdir MVC framework ile ilgili çok farklı dillerin MVC uygulamalarını incelemekteyim. Ama hala kullanmayı alışkanlık haline getirebildiğim bir framework ya da platform seçemedim. Web tabanlı uygulamalarda PHPnin form olayından sonra kim ne derse desin  gördüğüm en mantıklı sistem olan ASP.Net Web-Forms ise kendine has bir sistemle işleri yürütüyor. ViewState ve postback gibi mekanizmaları iyi anladığınızda ve yerine göre bu özellikleri iyi yönettiğinizde çoğu uygulamayı hızlı ve sağlam bir şekilde üretebiliyorsunuz. Benim de ilk gördüğüm ve kullanmaya alıştığım sistem Web Forms olduğundan dolayı MVC mantığına alışmam kolay olmadı.

Servlet ve JSP yapılarından sonra ASP.Net Web Formsun karşısına çıkarılmış gibi düşünülen JSF ise yine kullanmaya bir türlü alışamadığım bir teknoloji oldu. Çünkü yapısı yine MVC idi.  Bu arada Java için Play Framework ve PHP CodeIgniter, CakePhp gibi MVC frameworkleri de inceleme ve üzerinden birkaç gün de olsa yoğunlaşıp denemeler yapma fırsatım oldu. Tüm bu deneyimlerimi bir noktada birleştirip kendime bir MVC yol haritası çıkardım diyebilirim.

  1. MVC metodolojisini uygulamak istediğin platformda MVC kullanmadan da yapmak istediklerini yapabilecek bilgi ve beceriye sahip olmalısın. Yani PHP , Asp.Net ya da Java/JSP bilgisi çok gerekli ve yararlı olacaktır.
  2. MVC frameworkleri her zaman her projede kullanamayacağın için yine bu platforma ait diğer klasik yöntemleri de bilmelisin. Neredeyse 1. madde ile aynı anlama geliyor.
  3. MVC frameworkler URL  formatlama, veri erişimi , organizasyon, kod okunabilirliği ve güncellenebilirlik gibi konularda çok fazla kolaylık getirdiği için bir an önce projelerde uygulayacak şekilde öğrenilmeli...

Evet MVC frameworkler hakkında  söyleyeceklerim bunlar. Yine de olayı abartmamalı ve her projede Persistence, DAO, Model, Controller, View kullanmalıyım, Unit Test yapmalı ve SVN, Git gibi araçlarla source control olayına girmeliyim gibi bir derdim yok çünkü her zaman KISS (Keep It Simple and Stupid) prensibinin ne kadar doğru olduğunu projelerde görüyorum.

Bol katmanlı projelerde yer almanızı dilerim...

SVN Organizasyon Yapısı

2 Yorum

22/01/2011 at 17:23Kategori:SVN

SVN kullanırken genelde /trunk  klasörü altındaki kodları indirir ve projeyi geliştiririz.  Normal şartlar altında svn kullanılan tüm projelerde üç adet klasör bulunur.

/trunk
/branches
/tags

Bu klasörlerin herbirinin anlamı ve işlevi vardır. Geliştiricilerin aktif olarak kullandıkları ve en son güncel proje içeriği /trunk klasöründe tutulur. Ama bu kodlar kararsız olabilirler.  /Branches klasörü altında  ise en son kararlı sürüme ait kodlar bulunur. Bu kodlar genellikle kullanım için dağıtılacak olan kararlı sürüm kodlarıdır. Güncel değillerdir ama en son kararlı kodlar burada bulunurlar. /Tags klasörü altında ise bazen projede kullanılan sınıflar ya da bileşenler sürüm numaralarına göre etiketlendirilmek ve sınıflandırılmak istenilebilir. Bu amaçla /Tags klasöründe her build numarasına göre kodlar bulunabilir.

Samsung i5700/7500 Rom Yükleme İşlemi

5 Yorum

14/01/2011 at 18:20Kategori:Android

Android işletim sistemi yüklü cihazları Türkiye'den satın aldığımızda genellikle güncelleme ve market erişimi konularını aşmak için elimizi taşın altına koymamız gerekiyor. Cihazı güncelleme ve market erişimini sağlama konusunda hala bazı kaynaklara göre garanti kapsamı dışına çıkma durumu söz konusuymuş. Ama telefonunuz ROM yükleme işlemi sırasında arıza vermediği sürece servise gönderildiğinde "aa bu telefon bozuk ama flashına baktık içinde farklı bir yazılım var garanti dışı bu telefon" diyecek kimselerin olduğunu da sanmıyorum. Telefonumu 8 aya yakın bir süredir http://www.samfirmware.com/android.htm adresinden indirdiğim avrupa kaynaklı firmwareler ile kullanıyorum ve herhangi bir sıkıntı yaşamadım. İnternette çok yerde bu konuya yer verilmiş fakat ben de bu adımları kısaca özetleyeceğim.

Öncelikle şunu hatırlamalısınız: Her firmware yükleme işlemi bazı riskler içerir. Firmware yükleme işlemini yapacağınız bilgisayarın kararlı, sağlam, USB portları hatasız ve kesintisiz çalışan, mavi ekran hataları vermeyen, tercihen 32 bit işletim sistemi çalıştıran, windows işletim sistemi yüklü olan, virüssüz(!), güç kaynağına bağlı ya da bataryası elektrik kesintisi olması halinde 15 dakika idare edebilecek olması ve bu işlemin sağlam bir usb kablosuyla yapılması gerekmekte. Ek olarak bu işlemin yapılacağı cihazın bataryası  tam dolu olmalı.  Tüm bu önlemlere rağmen telefonunuzun aşağıdaki işlemleri uyguladıktan sonra brikete dönüşmesinin sorumluluğu tamamen size aittir :)

  • İşleme başlamadan önce yukarıdaki özellikleri sağlayan bir bilgisayarı bulduktan sonra bu bilgisayara cihazla birlikte verilen Samsung PC Studio programını kurup telefonunuzun ayarlarından Ayarlar--Uygulamalar-- Gelişim -- USB Hata Ayıklama modunun aktifleştirilmiş olarak bilgisayarınıza takılması ve aygıt yöneticisinden Samsung Android Device ve USB aygıtlar kısmında da Samsung Device başlıklarını görüyor olmanız gerekir. Daha sonra NPS ve Samsung PC Studio ile ilgili prosesleri görev yöneticisinden durdurmak ve sonrasında sistem başlangıcında bu programların otomatik başlatılmasını durdurmanız gerekir. Bu işlemleri yaptıktan sonra sıra yükleme işlemini gerçekleştireceğimiz programları indirmeye gelir.
  • http://www.samfirmware.com/WEBPROTECT-i5700.htm adresinden (üyelik gerektirir) öncelikli olarak istediğimiz romu indirmemiz gerekli. Benim tercihim kesinlikle Avrupa kaynaklı romlar oluyor çünkü Türkçe dil desteğine sahipler ve samsung branded romlar oldukları için 3. parti yazılımlar ve operator kaynaklı yazılımlar yüklü gelmiyor. Gayet temiz ve kullanışlı oluyorlar. Bu alandaki romlardan I570EXXJH6  şu anda kullandığım rom. Ayrıca uzun bir zaman I570EXXJE4 sürümünü kullandım. H6 sürümü için indirme bağlantısı olarak http://www.multiupload.com/KUKLJ0NTPC nı kullanabilirsiniz. İndirdiğiniz dosyaya ait şifre ise "samsung-firmwares.com" .
  • Odin MultiUploader ise romu telefona stream olarak aktarmaya yarayan bir yazılım. 4.03 versiyonunu kullanabilirsiniz. http://www.mediafire.com/?gnzzbkix0nd adresinden güncel yazılımı edinmelisiniz.
  • OPS Dosyaları ise Odin yazılımı için bir klavuz işlevi görüyor. Romunuzun içindeki dosyaları bir nevi telefona gönderme sırası diyebiliriz. Bu dosyayı da H6 sürüm rom için http://www.megaupload.com/?d=4J8MA3SF adresinden edinebilirsiniz.
  • Sıra telefon bilgisayara bağlı değilken ses kısma-kamera- açma kapama tuşlarının üçüne  basılı tutarak cihazı download modda açmaya geldi. Bu işlemden sonra mavi bir ekranın gelmesi gerekiyor.

  • Bu ekran geldiğinde telefonun bilgisayara bağlanması gerekiyor.
  • Şimdi indirdiğimiz firmware dosyasını zip ya da rar dosyasından şifreyi kullanarak çıkartmamız gerekiyor. Eğer indirdiğimiz firmware içinden tek bir tar dosyası çıkarsa bu romun tek parça, birden fazla tar dosyası çıkarsa çok parça dosyalardan oluştuğunu anlıyoruz. Burada çıkan dosyalara göre odin programını yönetici modunda çalıştırıyoruz ve aşağıdaki prosedurleri uyguluyoruz.
  • Öncelikle rom tek parçadan oluşuyorsa One package kutucuğu ek olarak işaretlenmeli ve ops dosyası select ops kısmında ayarlanmalı ve sadece One Package olarak indirdiğimiz rom içerisindeki tek parça .tar dosyası gösterilmelidir. Eğer rom çok parçadan oluşuyorsa yukarıdaki görselde de göründüğü gibi One Package alanı seçilmemeli ve OPS dosyası seçildikten sonra diğer 4 dosya ilgili alanlara yerleştirilmelidir. Telefon bilgisayara bağlı olduğunda Odin çalıştırılırsa Com portundan iletişim sağlanacak ve detected yazısı görülecektir. Eğer bu şekilde mesaj gelmezse cihaz bilgisayara tanıtılmamış demektir.
  • Tüm ayarlamaları yaptıktan ve kontrol ettikten sonra Start butonuna basarak işlemi başlatıyoruz. Yaklaşık 5 dakika sonra telefonumuz birkaç restart ardından yeni rom yüklenmiş halde açılacaktır. Bu sürede telefonun bilgisayarla bağlantısı koparılmamalıdır.