Inbox by Gmail

Google Inbox Firefox’ta Nasıl Çalıştırılır?

Inbox by Gmail

Inbox by Gmail

Google yeni mail uygulaması Inbox henüz beta aşamasında olduğu için bazı güvenlik ve performans problemleri nedeniyle henüz diğer tarayıcılarda çalışmıyor. Ama her şeyin  bir başka yolu olduğu gibi Firefox’ta Inbox kullanmanın da bir yolu var. Siz de hala Firefox kullanıyorsanız ve sadece Inbox’ı denemek için Chrome kurmak ve açmak istemiyorsanız aşağıdaki adımları takip edin:

  • Aşağıdaki bağlantıya tıklayın ve Firefox için User Agent Switcher eklentisini yükleyin
    User Agent Switcher for Firefox
  • Aşağıdaki bağlantıya tıklayarak User Agent Switcher’a içe aktarmak için agent listesini indirin
    Agent list for User Agent Switcher
  • Eklentinin “Edit User Agents…” kısmından indirdiğiniz agent listesini içe aktarın
  • User agent olarak en son versiyon Chrome seçeneğini seçin
  • Firefox’un adres satırına “about:config” yazın ve entera basın.
  • Çıkan ekranda Frefox’a dikkatli olacağınıza dair söz verin :)
  • Açılan sayfada arama kısmına “security.csp.enable” yazın ve gelen seçeneğe çift tıklayıp değerini “false” yapın.

Şimdi Inbox’ı deneyebilirsiniz. Yalnız küçük bir hatırlatma: Inbox çalışsın diye değerini false yaptığımız özellik önemli bir güvenlik özelliğidir ve kapatıldığında bazı siteleri bazı saldırılara karşı korumasız bırakır. Bu nedenle bu özelliği komle kapatmak yerine site bazında kapatmaya yarayan UserCSP eklentisini kullanmanızı öneririm.

Kaynak: Why is Google blocking Inbox on Firefox?

Xcode

Xcode: Console output filtering (MCLog)

Xcode

Xcode

Daha önce Android uygulama geliştirmiş kişiler Xcode içerisinde Logcat benzeri bir aracın eksikliğini mutlaka hissetmiştir. Xcode’un konsol çıktısı üzerinde sadece arama yapmaya izin veren yapısı Logcat’e göre çok basit kalıyor. Yüzlerce satır kodunuzun içerisine yazdığınız onlarca log satırlarını tek tek kapatmak bazen mümkün olmuyor ya da çok zahmetli oluyor. Buun yerine konsol çıktısı üzerinde filtreleme yapmak oldukça faydalı bir yöntem. Neyse ki Xcode için konsol çıktısında filtreleme yapmaya yarayan bir eklenti mevcut. Aşağıda GitHub bağlantısını verdiğim projeyi bilgisayarınıza indirip derleyin ve Xcode’u yeniden başlatın. Artık konsol çıktısında filtreleme yapabiliyor olmalısınız.

MCLog: https://github.com/yuhua-chen/MCLog

MCLog

MCLog

Tekrar görüşmek üzere…

objective-c-logo

Objective-C: NSArray kullanırken rasgele indise nesne yerleştirme

objective-c-logo
Objective-C’de NSArray kullanırken rasgele bir indise nesne yerleştirmek için kullanacağınız diziyi istediğiniz kapasitede ilklendirmeniz yetmez. Diziyi istediğiniz kapasitede ilklendirdikten sonra içinde hiç nesne yokken herhangi bir indise nesne eklemeye çalışırsanız hata alırsınız. İlklendirme işleminden sonra sadece addObject metodu ile ekleme yapabilirsiniz. İstediğiniz indise ekleme yapabilmek için diziyi kapasitesi kadar NSNull nesnelerle doldurmalı ve ekleme yaparken de NSNull kontrolü yaparak ekleme yapmalısınız:


NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];

for (int i = 0; i < 10; ++i) {
    [array addObject:[NSNull null]];
}

if (array[5] == [NSNull null]) {
    array[5] = myObject;
}

Rasgele erişim için daha iyi bir yöntem

Rasgele veri erişimi söz konusu olduğunda bilinen en iyi yöntemlerden biri hash map benzeri bir yapı kullanmaktır. Objective-C’de hash map yerine kullanabileceğiniz yapı ise NSDictionary’dir. Aşağıda NSDictionary kullanımı örnekllendirilmiştir:


NSMutableDictionar *dictionary = [NSMutableDictionary new];

//Eklerken
for (int i = 0; i < 10; ++i) {
    NSString *keyString = [[NSString alloc] initWithFormat:@"Object-%d", i];
    [dictionary setObject:someRandomObject forKey:keyString];
}

//Alırken
NSObject *object = [dictionary objectForKey@"Object-5"];

mac and printer

Mac OS X: Windows Paylaşımlı Yazıcı Eklerken Kullanıcı Adı Hatası

mac and printer

Mac OS X üzerinde bir Windows paylaşımlı yazıcı eklemek istediğinizde Mac sizden Windows bilgisayar üzerindeki bir hesabın kullanıcı adı ve şifresini sorar. Bu adımda kullanıcı adı ve şifrenizi doğru yazdığınız halde bile hata alıyorsanız kullanıcı adınızı hepsi büyük harf olarak tekrar yazmayı deneyin. Örneğin kullanıcı adınız “Olcay Ertaş” ise “OLCAY ERTAŞ” olarak yazıp tekrar deneyin.

Inbox by Gmail

Davetiyesiz Gmail Inbox nasıl Kullanılır?

Inbox by Gmail

Inbox by Gmail

Google’ın yeni mail uygulaması için hala davetiye alamadınız mı? Sorun değil, eğer hali hazırda Inbox kullanan bir arkadaşınız varsa davetiye hakkı olsun ya da olmasın siz de onun sayesinde hasretle beklediğiniz Inbox’ı kullanmaya başlayabilirsiniz. İşte yapmanız gerekenler:

  • Inbox uygulamasını telefonunuza kurun
    AndroidiPhone
  • Inbox kullanan arkadaşınızın Google hesabını telefona ekleyin. Android için ayarlar hesaplar bölümünden ekleme yapabilirsiniz. iPhone için herhangi bir Google uygulamasına giriş yapmanız yeterli.
  • Inbox uygulamasını açın ve arkadaşınızın hesabıyla giriş yapın.
  • Inbox’ın ayarlarına gidip kendi hesabınıza geçiş yapın.
  • Arkadaşınızın hesabını telefondan kaldırın.

Sizin bir davetiyeniz olmadığı için başka bir telefonda Inbox kullanmak için gene aynı işlemleri yapmalısınız. Gene davetiyeniz olmadığı için sizin hesabınızı kullanarak aynı işlemi bakası için yapamazsınız.

Kaynak: Life Hacker

Xcode

Xcode: Alt görünümü yeniden boyutlandırırken üst görünümün de değişmesi

Xcode

Xcode

Xcode ile görsel tasarım yaparken bir görsel öğeyi yeniden boyutlandırmaya çalışırken aşağıda videodaki gibi üst görünüm de değişiyorsa tasarım ekranının sağ en altında “Resizing Behavior” kısmına tıklayın ve açılan menüde “Siblings and Ancestors” seçeneğindeki tiki kaldırın:

Xcode - Storyboard options

Xcode – Storyboard options

Xcode - Storyboard options

Xcode – Storyboard options

Samsung Galaxy Note 2 GT-N7100

Samsun Galaxy Note 2 GT-N7100 Android 4.4.4 Ditto Note 4 Rom

Samsung Galaxy Note 2 GT-N7100

Samsung Galaxy Note 2 GT-N7100

Samsung’un öncülük ettiği Phablet kategorisindeki ikinci telefonu olan Samsung Galaxy Note 2, Samsung Galaxy S3′ benzer donanım özellikleri üzerine sunduğu  5.5″ ekran ve Spen ile birlikte normal bir akıllı telefondan oldukça farklı kullanıcı tecrübesi sunmuştu kullanıcılara. Çıktıktak sonra iki ayda beş milyonun üzerinde satış başarısı yakalayan telefon en son Nisan 2014’te Android 4.4.2 güncellemesi almıştı. Note 4’ün çıkışıyla beraber XDADevelopers’tan Team Electron boş durmamış ve Note 4 özelliklerini Note 2’ye getiren bir rom hazırlamışlar. Ben de bu romun getirdiği özellikleri ve romu nasıl yükleyebileceğinizi aşağıda anlattım:

Team Electron

Team Electron

Rom Özellikleri

  • Based on 4.4.4 Touchwiz rom ported from S3 Korean version
  • Features ported from Galaxy Note 4
  • AGNI Kernel by default
  • Standalone flashable zip (no aroma)
  • Rooted and Deodexed
  • Note 4 Air Command (new features)
  • Note 4 S Note with Action Memo
  • Note 4 Smart Select
  • Note 4 Image Clip
  • Note 4 Scrapbook
  • Note 4 S Finder
  • Note 4 Quick Connect
  • Note 4 Multiwindow
  • Note 4 Recent Apps
  • Note 4 Direct Pen Input
  • Note 4 Side Key Panel
  • Note 4 Resize Windows from corners (new Pen Window)
  • Note 4 Power Saving Mode
  • Note 4 Ultra Power Saving Mode
  • Note 4 Settings and UI
  • Galaxy Note 4 Launcher and Accuweather
  • Galaxy Note 4 Contacts app
  • Galaxy Note 4 Phone app with N4 feature incoming call popup notification, resize window during calls feature and call recording feature
  • Galaxy Note Messaging app with N4 feature SMS pop-up notificaton
  • Galaxy Note 4 lockscreen with charging effects and new lockscreen effects (only Abstract Mozaic don’t work)
  • Galaxy Note 4 Music Player
  • Galaxy Note 4 Video Player
  • Galaxy Note 4 Internet Browser
  • Galaxy Note 4 Gallery with SStudio
  • Galaxy Note 4 S Voice with new pop-up features
  • Galaxy Note 4 S Planner, Email, Keyboard, Clock, My Files, Calculator
  • Galaxy Note 4 Story Album
  • Galaxy Note 4 Photo Note
  • Possible to use the same app in both multiwindows
Team Electron

Team Electron

Ekran Görüntüleri

This slideshow requires JavaScript.

Başlamadan Önce

Aşağıda anlatılan işlemler sadece orijinal Android 4.4.2 Samsung Galaxy Note 2 rom yüklü telefonlar içindir başka bir telefon ile denemeyin. Bu yazıda anlatılan işlem telefonunuzun garanti kapsamı dışına çıkmasına neden olacaktır. Buna rağmen devam etmek istiyorsanız başlamadan önce şunları yaptığınızdan emin olun:

  • Telefonunuzdaki tüm önemli verileri yedekleyin:
  • Telefonunuzu en az %50 şarj edin

Yükleme Adımları

  • Aşağıdaki yazıma ya da istediğiniz herhangi bir yere bakarak telefonunuza costum recovery kurun. Yazının devamında benim yazımda bahsettiğim costum recovery için açıklama olacak ama diğerleri de birbirine çok benzer. Aynı işlemleri başka costum recovery kullanarak da yapabilirsiniz:
    Samsung Galaxy Note 2 GT-N7100 Philiz Touch Recovery 6.26.6 (Rooting)
  • Aşağıdaki dosyayı indirip telefonunuza kopyalayın:
    Ditto Note 4 Rom
  • Telefonunuzu kapatın ve USB kablosu ile bilgisayara bağlayın.
  • Ses açma, ev tuşu ve açma kapa tuşuna aynı anda basın. Samsung logosunu görünce tuşları bırakın. Kurtarma ekranı açılacak.
  • Üçüncü seçenek olan “Wipe Data/Factory Reset” seçeneğini seçin. Açılan ekranda “Clean to Install a New ROM” seçeneğini seçin ve çıkan soruyu onaylayın.
  • Ana ekrana dönüp “Install Zip” -> “Choose zip from /storage/sdcard..” seçeneğini seçin ve telefonunuza kopyaladığınız dosyayı seçin. Çıkan soruyu onaylayın.
  • Yükleme işlemi bitince en başa dönüp telefonu yeniden başlatın.

Tekrar görüşmek üzere…

Samsung Galaxy Note 2 GT-N7100

Samsung Galaxy Note 2 GT-N7100\n Philiz Touch Recovery 6.26.6 (Rooting)

Samsung Galaxy Note 2 GT-N7100

Samsung Galaxy Note 2 GT-N7100

Samsung Galaxy Note 2 GT-N7100 telefonunuza Philiz Touch Recovery 6.26.6 kurulumunu yapabilmeniz için gerekli dosyalar ve yükleme adımları aşağıdadır:

Gerekli Ön Şartlar ve Yedekleme

Bu yazıda anlatılan işlem telefonunuzun garanti kapsamı dışına çıkmasına neden olacaktır. Buna rağmen devam etmek istiyorsanız başlamadan önce şunları yaptığınızdan emin olun:

  • Telefonunuzdaki tüm önemli verileri yedekleyin:
  • Telefonunuzu en az %50 şarj edin

Yükleme Adımları

  • Aşağıdaki dosyaları indirin:
    Odin v3.09
    Philiz Touch Recovery 6.26.6
  • Telefonunuzu kapatın ve USB kablosu ile bilgisayara bağlayın.
  • Ses kısma ev tuşu ve açma kapama tuşlarına aynı anda basılı tutun. Karşınıza “Warning!” başlıklı bir ekran çıkacak. Ses açma tuşuna basın. Ekranda Android simgesi çıkacak bu sefer ve altında “Downloading…” yazacak

    Samsung download mode

    Samsung download mode

  • Odin programını çalıştırın. Buraya kadar düzgün gelebildiyseniz Odin’in sol üstteki ID-COM yazan yerin üstündeki kutu mavi yanacak. Yanmıyorsa sürücülerle ilgili probleminiz var demektir. Geri dönüp sürücülerinizi kontrol edin. Sürücüleri yüklediğiniz halde olmadıysa kullandığınız USB kablodan farklı bir USB kablo deneyin.

    Odin

    Odin

  • Samsung’un yeni romlarının çoğunda işletim sistemi başladığında orijinal kurtarma yazılımının var olup olmadığını denetleyen yoksa orijinal olanını otomatik olarak geri yükleyen bir koruma mekanizması vardır. Bu nedenle kurtarma yazılımını yükledikten sonra telefonun otomatik olarak yeniden başlamasını önlemek için “Option” kısmı altından “Auto Reboot” seçeneğini kaldırın.
  • Geri kalan ayarların hiçbirini değiştirmeden “File [Download]” kısmından “AP” düğmesine tıklayıp “philz_touch_6.26.6-n7100.tar.md5″ dosyasını seçin ve “Start” düğmesine tıklayın.
  • Yüklemi işlemi bitince Odin’in “Message” kısmında “Complated” yazacak. Telefonunuzu kapatın.
  • Ses açma, ev tuşu ve açma kapa tuşuna aynı anda basın. Samsung logosunu görünce tuşları bırakın. Kurtarma ekranı açılacak.
  • Bu ekranda ses açma ve kısma tuşlarıyla seçenekler arasında gezinebilir ve açma kapa tuşuyla da seçme işlemi yapabilirsiniz. Kurduğumuz kurtarma programının isminden de anlaşılacağı üzere bu ekranda dokunarak da işlem yapabilirsiniz.
  • Hiçbir işlem yapmadan “Rebbot System Now” seçeneğini seçin.
  • Kurtarma programı size ard arda iki soru soracak. İkisine de olumlu cevap verin. Birinci soru Samsung romun otomatik olarak orijinal kurtarma yazılımını geri yüklemesini engellemek için ikincisi ise telefonunuzu rootlamak içindir.

Tekrar görüşmek üzere.

objective-c-logo

iOS – ASIHTTPRequest nasıl kullanılır?

objective-c-logo

ASIHTTPRequest, iOS ve Mac OS X’te CFNetwork API’ı daha kolay kullanmak için Objective-C ile geliştirilmiş bir kütüphanedir. Sunduğu özellikler şunlardır:

  • Web sunucularına veri göndermek ve web sunucularından veri almak için basit arayüz
  • Hafızaya ya da doğrudan dosyaya veri indirebilme
  • HTML dosya girdi mekanizması ile uyumlu, POST data içerisinde yerel diskteki bir dosyayı gönderebilme
  • HTTP’nin istek ve yanıt başlıklarına kolay erişim
  • İndirme ve yükleme durumunu göstermek için ilerleme temsilcisi (NSProgressIndicators ve UIProgressViews)
  • Auto-magic management of upload and download progress indicators for operation queues
  • Basic, Digest ve NTLM kimlik doğrulama desteği, kimlik bilgileri oturum süresince otomatik olarak kaydedilir ve sonradan erişim için Keychain içinde saklanabilir.
  • Çerez desteği
  • İstekler arka planda da çalışabilir  (iOS 4+)
  • Yanıt bilgisi ve istek gövdesi için GZIP sıkıştırma desteği
  • ASIDownloadCache sınıfı isteklere yanıtları transparan olarak önbellekleme sağlar. böylece internet olmasa bile istek başarılı olabilir
  • ASIWebPageRequest – Bir web sayfasını harici kaynaklarıyla birlikte indirme olanağı sağlar. Herhangi bir web sayfası indirilip önbelleklenebilir ve sonra internet olmadan bile UIWebview / WebView içinde gösterilebilir
  • Kullanımı kolay Amazon S3 desteği – isteği kendinizin imzalamasına gerek yok!
  • Rackspace Cloud Files için tam destek
  • İstemci sertifikaları desteği
  • Otomatik ya da elle proxy tespiti, proxy kimlik tespiti ve otomatik PAC dosyası ayarlama. Dahili giriş diyaloğu iPhone uygulamanızın proxy kimlik tespitini fazladan efor sarf etmeden transparan olarak yapmasını sağlar
  • Bant genişliği kısma desteği
  • Kalıcı bağlantılar için destek
  • Senkron ve asenkron istek desteği
  • Temsilci ya da bloklar ile isteğin durumundaki değişiklikler hakkında bilgi alabilme
  • Geniş çaplı birim testleri

Bu kütüphane aktif olarak geliştirilmemektedir ancak halen birçok açıdan yeterli bir kütüphane olduğundan birçok geliştirici tarafından kullanılmaktadır. İnternette kütüphaneyi kullanırken karşılaşacağınız problemler hakkında da geniş bir destek bulmak mümkündür. Aşağıda bir iOS projesinde bu kütüphaneyi kullanmak için yapmanız gerekenler adım adım anlatılmıştır. İşte yapmanız gerekenler:

  • Aşağıdaki bağlantıdan kütüphanenin en son versiyonunu indirin:
    ASIHTTPRequest
  • İndirdiğiniz dosyayı açıp dosyaları proje klasörüne kopyalayın ve Xcode içerisinden projenize dahil edin.
  • Bu kütüphane ARC desteklemediği için ARC destekl bir projede kullanırken şunu yapın: Proje ayarlarından “TARGETS” kısmından projenizi seçin ve “Build Phases” kısmına gelin. Arama kısmına “ASI” yazın. Arama sonucunda çıkan dosyaların tümünü seçip enter tuşına basın ve açılan pencereye “-fno-objc-arc” yazıp enter tuşuna basın.

    ASIHTTPRequest build settings

    ASIHTTPRequest build settings

  • Proje ayarlarının aynı ekranında “General” kısmında “Linked Frameworks and Libraries” kısmına gelin ve şu kütüphaneleri ekleiyn:
    • CFNetwork.framework
    • SystemConfiguration.framework
    • MobileCoreServices.framework
    • CoreGraphics.framework
    • libz.dylib

Bu kütüphaneyi kullanarak yapacağınız HTTP isteklerinin durumları hakkında kütüphanenin ASIHTTPRequestDelegate metodlarını kullanarak haberdar olabilirsiniz. Aşağıda delegate metodlar listelenmiştir ancak istenildiğinde didStartSelector, didFinishSelector ve didFailSelector metodlarını kullanarak farklı metodlar da kullanabilirsiniz:

- (void)requestStarted:(ASIHTTPRequest *)request;
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;
- (void)request:(ASIHTTPRequest *)request willRedirectToURL:(NSURL *)newURL;
- (void)requestFinished:(ASIHTTPRequest *)request;
- (void)requestFailed:(ASIHTTPRequest *)request;
- (void)requestRedirected:(ASIHTTPRequest *)request;

// Farklı method kullanarak istek bittiğinde haberdar olmak için örnek
// Servis sonlanınca çağırılacak metod tanımı
- (void)loginServiceFinished:(ASIHTTPRequest*)request;
// Servise bittiğinde çağıracağı metodu söyleme
[request setDidFinishSelector:@selector(loginServiceFinished:)];

Tekrar görüşmek üzere…

Java Simgesi

Apache POI – The Java API for Microsoft Documents

Yakın zamanda bir arkadaşımın bir isteği üzerinde Java’da Excel dosyası üzerinde çalışmıştım. Kısa bir araştırmadan sonra birçok konuda olduğu gibi bu konuda da Apache tarafından hazırlanmış güzel bir kütüphane olduğunu öğrendim. Apache POI, Java dilini kullanarak Microsot belgelerini açıp okuma, yeni belge oluşturma ve var olan belgeyi değiştirme gibi her türlü işlemi yapmanızı sağlayan çok faydalı bir kütüphane. Aşağıda Excel dosyası açıp okuma ve yeniden bir Excel dosyası oluşturma gibi temel işlemleri gösteren kodu doğrudan bulabilirsiniz. Microsoft’un docx ve eski doc uzantılı dosyaları için farklı kullanımları var kütüphanenin. Hangisi size lazımsa ona uygun olanı kullandığınıza dikkat edin.

Daha detalı bilgi için aşağıdaki bağlantıdan Apache POI sayfasını ziyaret edebilirsiniz.

package excelsearchandreplace;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

/**
 * @author Olcay Ertaş
 */
public class ExcelSearchAndReplace {

    private class ProductInfo {
        public String fiyat_sekli;      //1
        public String cari_kod;         //2
        public String unvan;            //3
        public String kod_id;           //4
        public String stok_kart_kod;    //5
        public String tanim;            //6
        public double fiyat;            //7
        public String doviz_cinsi;      //8
        public String ana_birim;        //9
        public Date baslangic_tarihi;   //10
        public Date bitis_tarihi;       //11
        public boolean up = true;
    }
    
    private class NewValue {
        public String stok_kart_kod;
        public double fiyat;
    }
    
    LinkedList<ProductInfo> product_list;
    LinkedList<NewValue> new_value_list;
    private long new_count = 0;
    
    public void searchAndReplace() {
        FileInputStream file = null;
        product_list = new LinkedList<>();
        new_value_list = new LinkedList<>();
        
        try {
            file = new FileInputStream(new File("2014.xls"));
            
            //Get the workbook instance for XLS file
            HSSFWorkbook workbook = new HSSFWorkbook(file);
            
            //Get first sheet from the workbook
            HSSFSheet sheet = workbook.getSheetAt(0);
            
            //Get iterator to all the rows in current sheet
            Iterator<Row> rowIterator = sheet.iterator();
            
            // Skip first row;
            rowIterator.next();
            
            Row row;
            Cell next_cell;
            Iterator<Cell> cellIterator;
            ProductInfo pi = null;
            NewValue nv = null;
            
            while (rowIterator.hasNext()) {
                row = rowIterator.next();
                
                //Get iterator to all cells of current row
                cellIterator = row.cellIterator();
                pi = new ProductInfo();
                nv = new NewValue();
                
                if (row.getFirstCellNum() != 0) {
                    next_cell = cellIterator.next();
                    next_cell.setCellType(1);
                    System.out.printf("%s\n", next_cell.toString());
                    nv.stok_kart_kod = next_cell.getStringCellValue();

                    next_cell = cellIterator.next();
                    next_cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                    System.out.printf("%s\n", next_cell.toString());
                    nv.fiyat = next_cell.getNumericCellValue();
                    
                    new_value_list.add(nv);
                    continue;
                }
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.fiyat_sekli = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.cari_kod = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.unvan = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.kod_id = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.stok_kart_kod = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.tanim = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                System.out.printf("%s\n", next_cell.toString());
                pi.fiyat = next_cell.getNumericCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.doviz_cinsi = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                pi.ana_birim = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                System.out.printf("%s\n", next_cell.toString());
                pi.baslangic_tarihi = next_cell.getDateCellValue();
                
                next_cell = cellIterator.next();
                System.out.printf("%s\n", next_cell.toString());
                pi.bitis_tarihi = next_cell.getDateCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(1);
                System.out.printf("%s\n", next_cell.toString());
                nv.stok_kart_kod = next_cell.getStringCellValue();
                
                next_cell = cellIterator.next();
                next_cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                System.out.printf("%s\n", next_cell.toString());
                nv.fiyat = next_cell.getNumericCellValue();
                
                product_list.add(pi);
                new_value_list.add(nv);
                System.out.printf("Eski: %d - Yeni %s\n", product_list.size(), new_value_list.size());
            }

            Iterator<ProductInfo> pi_iter = product_list.iterator();
            Iterator<NewValue> nv_iter;
            
            int count = 0;
            int count2 = 0;
            
            System.out.printf("Eski: %d - Yeni %s\n", product_list.size(), new_value_list.size());
            
            while (pi_iter.hasNext()) {
                pi = pi_iter.next();
                boolean found = false;
                nv_iter = new_value_list.iterator();
                
                while (nv_iter.hasNext()) {
                    nv = nv_iter.next();
                    
                    if (pi.stok_kart_kod.equals(nv.stok_kart_kod)) {
                        pi.fiyat = nv.fiyat;
                        found = true;
                        System.out.printf("Buldum güncelledim! %d\n", ++count2);
                        break;
                    }
                }
                
                if (!found) {
                    System.out.printf("%s %s - %d\n", pi.stok_kart_kod, nv.stok_kart_kod, ++count);
                }
            }
            
            HSSFWorkbook out_workbook = new HSSFWorkbook();
            HSSFSheet out_sheet = out_workbook.createSheet("Fiyat Listesi");
            Cell cell;
            pi_iter = product_list.iterator();
            int rownum = 0;
            
            while (pi_iter.hasNext()) {

                row = out_sheet.createRow(rownum++);
                
                pi = pi_iter.next();
                
                cell = row.createCell(0);
                cell.setCellValue(pi.fiyat_sekli);
                
                cell = row.createCell(1);
                cell.setCellValue(pi.cari_kod);
                
                cell = row.createCell(2);
                cell.setCellValue(pi.unvan);
                
                cell = row.createCell(3);
                cell.setCellValue(pi.kod_id);
                
                cell = row.createCell(4);
                cell.setCellValue(pi.stok_kart_kod);
                
                cell = row.createCell(5);
                cell.setCellValue(pi.tanim);
                
                cell = row.createCell(6);
                cell.setCellValue(pi.fiyat);
                
                cell = row.createCell(7);
                cell.setCellValue(pi.doviz_cinsi);
                
                cell = row.createCell(8);
                cell.setCellValue(pi.ana_birim);
                
                cell = row.createCell(9);
                cell.setCellValue(pi.baslangic_tarihi);
                
                cell = row.createCell(10);
                cell.setCellValue(pi.bitis_tarihi);
            }
            
            FileOutputStream out = new FileOutputStream(new File("new.xls"));
            out_workbook.write(out);
            out.close();
            System.out.println("Excel written successfully..");
            
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ExcelSearchAndReplace.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ExcelSearchAndReplace.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                
                if (file != null) {
                    file.close();
                }
                
            } catch (IOException ex) {
                Logger.getLogger(ExcelSearchAndReplace.class.getName()).log(Level.SEVERE, null, ex);
            }
        } // end of try-catch
    }

    public static void main(String[] args) {
        ExcelSearchAndReplace esr = new ExcelSearchAndReplace();
        esr.searchAndReplace();
    } // End of main
} // End of class ExcelSearchAndReplace