AFNetworking

iOS: AFNetworking + PHP ile Dosya Upload

Benim yıllardır bir arada bulamayıp da öğrenene kadar çok sıkıntı çektiğim konulardan biridir sunucuya dosya yükleme konusu. İşte size iOS için PHP kullanarak yazdığım çalışan, hem Objective-C hem de PHP kodu bir arada dosya upload çözümü:

iOS Kodu

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSMutableDictionary *parameters = [NSMutableDictionary new];
[parameters setObject:sdm.user.userId forKey:@"username"];
[parameters setObject:imageName forKey:@"filename"];

[manager POST:@"http://www.yourwebsite.com/upload.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileData:UIImagePNGRepresentation(image) name:@"upfile" fileName:imageName mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    DDLogDebug(@"NewIdeaView - Success: %@", operation.responseString);
    DDLogDebug(@"NewIdeaView - Upload media: Dosya upload edildi");
    [ai stopAnimating];
    [HMXCommonMethods showMessage:@"Resimler başarıyla sunucuya yüklendi!" withTitle:@"Dosya yüklendi"];
    
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    DDLogError(@"NewIdeaView - Response: %@", operation.responseString);
    [ai stopAnimating];
    [HMXCommonMethods showMessage:@"Resimler yüklenemedi!" withTitle:@"Hata"];
}];

Yukarıdaki gibi yapılan sorgular Multi-Part Request olarak adlandırmaktadır. Kodu kısaca açıklayacak olursak manager sorguyu gerçekleştirecek olan objedir. Bu objenin POST metodunu upload kodumuzu içeren PHP dosyamızın adresi ile çağırıyoruz. parameters ise dosya ile beraber göndermek istediğimiz diğer bilgileri içerecek. Bu kısma uygulamanız için sunucu tarafında gerekli ne bilgi varsa koyabilirsiniz. constructingBodyWithBlock kısmı ise upoad etmek istediğimiz dosya verisini sorguya eklediğimiz kısım. Burdaki örnekte bir UIImage objesini forma ekliyoruz. Bu kısımda AFMultipartFormData objesinin appendPartWith ile başlayan birden fazla metodu vardır. Bu metodları kontrol ederek ihtiyacınıza en uygun metodu kullanabilirsiniz. Örenğin sizin elinizde doğrudan bir UIImage dosyası değil de dosyasın yerini gösteren bir NSURL objesi de olabilir. Bu durumda appendPartWithFileURL metodunu kullanabilirsiniz. Kodun geri kalan kısmı zaten çok açık.

PHP Kodu

<?php
header('Content-type: application/json; charset=utf-8');
use Psr\Log\LogLevel;
require 'vendor/autoload.php';

function jsonResponseWithErrorMessage($errorMessasge) {
    $responseArray = array();
    $responseArray["success"] = "0";
    $responseArray["errorMessage"] = $errorMessasge;
    echo json_encode($responseArray);
}

try {
    $logger = new Katzgrau\KLogger\Logger("logs", LogLevel::DEBUG);
    $content = file_get_contents('php://input');
    $post = json_decode($content, true);

    // Undefined | Multiple Files | $_FILES Corruption Attack
    // If this request falls under any of them, treat it invalid.
    if ( !isset( $_FILES['upfile']['error'] ) || is_array( $_FILES['upfile']['error'] ) ) {
        $logger->error("File Upload: Invalid parameters");
        jsonResponseWithErrorMessage("Invalid parameters");
    }

    // Check $_FILES['upfile']['error'] value.
    switch ($_FILES['upfile']['error']) {
        case UPLOAD_ERR_OK:
            $logger->debug("File Upload: No error");
            break;
        case UPLOAD_ERR_NO_FILE:
            $logger->error("File Upload: No file sent.");
            jsonResponseWithErrorMessage("Invalid parameters");
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            $logger->error("File Upload: Exceeded filesize limit.");
            jsonResponseWithErrorMessage("Invalid parameters");
        default:
            $logger->error("File Upload: Unknown errors.");
            jsonResponseWithErrorMessage("Invalid parameters");
    }

    // You should also check filesize here.
    if ($_FILES['upfile']['size'] > 1000000000) {
        $logger->error("File Upload: Exceeded filesize limit.");
        jsonResponseWithErrorMessage("Invalid parameters");
    }

    $logger->debug("File Upload: Filesize limit OK.");
    $uploaddir = 'ArendiUsers/';
    $username = basename(filter_input(INPUT_POST, 'username'));
    $filename = basename(filter_input(INPUT_POST, 'filename'));
    $uploadfile = $uploaddir . $username . '/' . $filename;
    $logger->debug("File Upload: upload file= " . $uploadfile);

    if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile)) {
        $logger->debug("File Upload: File uploaded.");
        jsonResponseWithErrorMessage("File uploaded.");
    }
    else {
        $logger->error("File Upload: File upload failed.");
        jsonResponseWithErrorMessage("File uploaded failed.");
    }
} 
catch (RuntimeException $e) {
    $logger->error("File Upload: Exception " . $e->getMessage());
    jsonResponseWithErrorMessage($e->getMessage());
}

PHP kodu için açıklama yazmıyorum, sonra bakarız ;)

Samsung Galaxy S2 GT-i9100: Android 5 Lollipop CyanogenMod

Samsung Galaxy S2 Lollipop

Samsung Galaxy S2 Lollipop

Samsung Galaxy S2 GT-i9100 telefonunuza XDA Developers üyesi Lysergic Acid tarafından geliştirilen Android 5 Lollipop yüklemek için gerekli dosyalar ve yükleme adımları aşağıdadır.

Gerekli Ön Şartlar ve Yedekleme

  • Telefonunuzdaki tüm önemli verileri yedekleyin:
  • Bu romu yüklerken telefonunuzdaki bütün bilgiler, harici kartınız hariç, tamamen silinecek. Bu nedenle bütün bilgilerinizi yedeklediğinizden emin olun.
  • Samsung mobil telefonlar için USB sürücülerini indirip kurun.

Ekran Görüntüleri

Sistem Belleğinin Arttırılması

İlk yapacağımız işlem CynogenMod gibi özel romlar tarafından kullanılmayan /preload bölümünü küçülterek sistem bölmünün boyutunu 1GB yapmak. Google Android 5 Lollipop ile birlikte Java programlarını çalıştırmak için Dalvik sanal makinesi yerine ART kullanmaya başladı. ART programların daha hızlı çalışmasını sağlıyor ancak daha fazla sistem belleği kullanılıyor. Bu nedenle eğer sistem hafızasını genişletmek istemesseniz romu kurduktan sonra başka uygulama kurmak için sistem üzerinde yeterli belleğiniz olmayacak.

Sistem belleğini arttırmak için aşağıdaki adımları takip edin:

  • Aşağıdaki üç dosyayı indirin :
    Odin 3.09
    Yeni pit dosyası
    Orijinal pit dosyası
    Kernel dosyası
  • Odin programını çalıştırın.
  • Telefonunuzu kapatın ve yükleme moduna alın.
  • Telefonunuzu USB kablosu ile bilgisayarınıza bağlayın.
  • Odin’in sağ tarafında telefonun eklendiğini göreceksiniz.
  • Odin ekranında PIT düğmesine tıklayın ve indirdiğiniz yeni pit dosyasını seçin.
  • Odin ekranından AP düğmesine tıklayın ve indirmiş olduğunuz tar uzantılı kernel dosyasını seçin.
  • Start düğmesine basın ve işlemin tamamlanmasını bekleyin. İşlem tamamlanınca telefonunuz yeniden başlayacak.
  • Telefon yeniden başlayınca pilini söküp kapatın. Sonra tekrar açıp kurtarma moduna girin.
  • Kurtarma modunda “mounts and storage” kısmına gelin ve “/storage/sdcard1” hariç bütün bölümleri formatlayın.

Formatlama işlemleri sırasında herhangi bir hata almadıysanız doğru yoldasınız. Ancak /preload bölümünü formatlarken hata alabilirsiniz, önemli değil.

Herhnagi bir terslik olması durumunda yukarıdaki aynı işlemleri orijinal pit dosyasını kullanarak yeniden uygulayarak telefonunuzun bölümlerini eski haline getirebilirsiniz. Daha sonra istediğiniz bir romu tekrar yükleyebilirsiniz.

Rom Yükleme

Rom yüklemek için aşağıdaki adımları takip edin:

  • Telefonunuzu kurtarma moduna alın ve bilgisayara USB kablo ile bağlayın.
  • Kurtarma modunda “mounts and storage” kısmına gelin ve “mount USB storage” seçeneğini seçin.
  • Telefonunuzun dahili ve harici kartı bilgisayarınızdan erişilebilir olacak. Burada Windows ben bu belleği formatlamadan kullanamam diyebilir. Fat32 olarak formatlayın ve devam edin.
  • Aşağıdaki dosyaları indirip harici kartınıza kopyalayın
    Rom dosyası
    Google Uygulamaları dosyası
  • Kopyalama işlemi bitince kurtarma modunda “Unmount” seçeneğini seçin ve ana ekrana geri dönün.
  • Kurtarma modunda “install zip” -> “choose zip from /storage/sdcard1” seçeneğini seçin ve “cm-12-20150127-UNOFFICIAL-i9100.zip” dosyasını seçin.
  • Yükleme işlemi bitince telefonunuzu yeniden başlatın ve ilk kurulumu yapın. ART nedeniyle telefonun ilk açılışı biraz uzun sürebilir.
  • Telefon açılıp kurulumu tamamlayınca tekrar kurtarma moduna girin.
  • Aynı yükleme adımını Google uygulamaları dosyası için de yapın ve telefonunuzu yeniden başlatın.
  • Artık Google hesabınızla telefona giriş yapabilirsiniz ve marketten istediğiniz uygulamaları yükleyebilirsiniz.

Kaynaklar

Netbeans: Maven ile log4j2 nasıl kullanılır?

Java Simgesi

Netbeans’i açın. Yeni proje penceresinden Maven altından Java Application seçeneğini seçerek yeni proje oluşturun:
maven java application

Proje pom dosyasını açın ve aşağıdaki gibi dependencies etiketleri arasına log4j dependency kodlarını yazın:

<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mukcay</groupId>
    <artifactId>Log4j2WithMaven</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.1</version>
        </dependency>
    </dependencies>
</project>

Dikkat

Programınız çalışınca log4j2‘nin sizin configuration dosyanızı kullanabilmesi için log4j2 configuration dosyasını projenin /src/main/resources kalsörü altına koyun. Yoksa log4j sizin configuration dosyanızı bulamaz ve sadece error seviyesindeki logları konsola yazar.

Örnek Consele Appander içeren configuration dosyası:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
		</Console>
	</Appenders>
	<Loggers>
		<Root level="debug">
			<AppenderRef ref="Console" />
		</Root>
	</Loggers>
</Configuration>

Samsung Galaxy W GT-I8150
Android 5.0.2 Lollipop Resurrection Remix 5.2.8

Resurrection Remix 5.2.8

Resurrection Remix 5.2.8

XDA üyesi nilac8991 tarafından geliştirilen Google, CyanogenMod, Omni, Paranoid Android, AOKP ve Slim ROM’un çeşitli özelliklerini taşıyan romun genel özellikleri ve yükleme adımları aşağıdadır.

Rom Özellikleri

  • Dark Material Theme
  • Quick-Smart Pulldown
  • Buttons
  • Battery mods
  • Heads up
  • Lockscreen Shortcuts
  • Perfomance Profiles
  • Ambiant Display
  • ClockColor options
  • Statusbar clock customization + second + fonts
  • Network traffic monitor
  • Toast animations
  • Add changelog
  • Listview animations
  • Navigation bar dimensions
  • Add Weather display to status bar header
  • Quick unlock
  • Overall Speed up system
  • Amazing Battery Life
  • Brand new music and audio fx app from cyanogen
  • Included all cm 12 features

Gerekli Ön Şartlar ve Yedekleme

  • Bu ROM’u yükleyebilmeniz için telefonunuza aşağıdaki yazıma bakarak ClockworkMod Recovery yükleyin ancak yazıda belirtilen dosya yerine aşağıda ikinci bağlantıdaki kurtarma dosyasını yükleyin. Yükleme sırasında telefonun dahili hafızası da silinecektir. O nedenle dahili hafızadaki tüm bilgilerinizi yedekleyin:
  • Telefonunuzdaki tüm önemli verileri yedekleyin:
    • SMS: SMS Backup & Restore
    • Telefon rehberi: Google ile senkronize olun
    • Arama kaydı: Call Logs Backup & Restore
    • İnternet ayarları: APN Backup & Restore
    • Kablosuz ağ ayarları: Ayarlar kısmından kablosuz ağ isim ve şifrelerini bir yere not edin
    • Bu romu beğenmemeniz ya da problem çıkması durumunda şu anki mevcut durumunuza tamamen geri dönebilmek için kurtarma kipine girip komple telefon yedeği alın.

Yükleme Adımları:

  • Aşağıdaki bağlantıdan yükleme dosyalarını indirin:
    cm-Resurrection_Remix_LP_v5.2.8-20150109-ancora.zip
    gapps-lp-20141109-signed.zip
  • Dosyasını telefonunuzun sd kartına kopyalayın.
  • Telefonunuzda Ayarlar -> Geliştirici seçenekleri kısmına giderek USB hata ayıklamayı etkinleştirin.

    This slideshow requires JavaScript.

  • Telefonunuzu kurtarma moduna alın. Kurtarma moduna nasıl girileceğini aşağıdaki videodan öğrenebilirsiniz:
  • Kurtarma ekranında “Wipe data/factory reset”, “Wipe Cache partition”,  “advanced” kısmından “clear dalvik cache”, “mounts and storage ” kısmından “format /system” ve “format /data” işlemlerini uygulayın.
  • Kuratma ekranında “install zip from sd card” seçeneğini seçin ve karta kopyaladığınız “cm-Resurrection_Remix_LP_v5.2.8-20150109-ancora.zip” dosyasını seçin.
  • Yükleme tamamlanınca “reboot system now” seçeneğini seçin ve telefonunuzu yeniden başlatın.
  • İlk açılış süresi biraz uzun olabilir. Sabırla bekleyin. Eğer çok uzun süre beklemenize rağmen telefon açılmassa pili söküp taktıktan sonra tekrar açmayı dneyin. Gene açılmassa yükleme işlemini baştan bir kere daha deneyin.
  • Telefon açılınca tekrar kurtarma moduna girin.
  • Kuratma ekranında “install zip from sd card” seçeneğini seçin ve karta kopyaladığınız “gapps-lp-20141109-signed.zip” dosyasını seçin.
  • Yükleme tamamlanınca “reboot system now” seçeneğini seçin ve telefonunuzu yeniden başlatın.

Rooting

Bu rom Cyanogenmod 11 üzerine geliştirilmiştir ve entegre root özelliği vardır. Root ayarlarına erişim için ayarlar menüsünden Superuser kısmına gidin.

Tekrar görüşmek üzere…

Samsung Galaxy W GT-I8150 – MoKee Android 4.4.4 KitKat

MoKee

MoKee

XDA üyesi Sidoarjo tarafından geliştirilen Google AOSP tabanlı romun özellikleri ve yükleme adımları aşağıdadır.

Rom Özellikleri

  • Incremental updates
  • Native exFAT support
  • ListView animations
  • Multi window
  • Calendar – with lunar and solar calenders
  • Lunar calendar in lock screen
  • Task switching sidebar in recent apps (the list will increase if you install supported apps)
  • Bulk SMS recipients
  • Adjustable SMS font size
  • SMS sending delay
  • Smart dialing
  • Speed dialing
  • IP dialing
  • Custom carrier name
  • Network speed in status bar (upload and download!)
  • Built in timer in Apollo – determine when to stop playing music
  • MoKee NotePad
  • MoKee Setup Wizard
  • Active Display
  • Adjustable navigation bar height
  • Unique Power Saver functions!
  • Custom screen off animations
  • OTA

Gerekli Ön Şartlar ve Yedekleme

Yükleme Adımları:

  • Aşağıdaki bağlantıdan yükleme dosyalarını indirin:
    MK44.4-ancora-201501051648-UNOFFICIAL
    gapps_kitkat-140619.zip
  • Dosyasını telefonunuzun sd kartına kopyalayın.
  • Telefonunuzda Ayarlar -> Geliştirici seçenekleri kısmına giderek USB hata ayıklamayı etkinleştirin.

    This slideshow requires JavaScript.

  • Telefonunuzu kurtarma moduna alın. Kurtarma moduna nasıl girileceğini aşağıdaki videodan öğrenebilirsiniz:
  • Kurtarma ekranında “Wipe data/factory reset”, “Wipe Cache partition”,  “advanced” kısmından “clear dalvik cache”, “mounts and storage ” kısmından “format /system” ve “format /data” işlemlerini uygulayın.
  • Kuratma ekranında “install zip from sd card” seçeneğini seçin ve karta kopyaladığınız “MK44.4-ancora-201501051648-UNOFFICIAL” dosyasını seçin.
  • Yükleme tamamlanınca “reboot system now” seçeneğini seçin ve telefonunuzu yeniden başlatın.
  • İlk açılış süresi biraz uzun olabilir. Sabırla bekleyin. Eğer çok uzun süre beklemenize rağmen telefon açılmassa pili söküp taktıktan sonra tekrar açmayı dneyin. Gene açılmassa yükleme işlemini baştan bir kere daha deneyin.
  • Telefon açılınca tekrar kurtarma moduna girin.
  • Kuratma ekranında “install zip from sd card” seçeneğini seçin ve karta kopyaladığınız “gapps_kitkat-140619.zip” dosyasını seçin.
  • Yükleme tamamlanınca “reboot system now” seçeneğini seçin ve telefonunuzu yeniden başlatın.

Rooting

Bu rom Cyanogenmod 11 üzerine geliştirilmiştir ve entegre root özelliği vardır. Root ayarlarına erişim için ayarlar menüsünden Superuser kısmına gidin.

Tekrar görüşmek üzere…

Xcode

Xcode – Seçili satırlar nasıl alfabetik olarak sıralanır?

Xcode ile kod yazarken yazdığınız tanımları ya da benzeri kod satırlarını alfabetik olarak sıralamak istiyorsanız aşağıdaki adımları sırayla uygulayın:

  • Automator programını çalıştırın.
  • Açılan pencereden “New Document” seçeneğini seçin.

    Automator - New

    Automator – New

  • Gelen pencereden “Service” seçeneğini seçin.

    Automator - Service

    Automator – Service

  • Açılan pencerenin sol üst kısmındaki arama kutusuna “run” yazın ve gelen arama sonuçlarından Run Shell Script seçeneğini sağdaki alana sürükleyin.
  • Sağ tarafta üstteki “Output replaces selected text” seçeneğini işaretleyin.
  • Gene sağdaki “Run Shell Script” bölümünde “sort -fb” yazın.
  • Dosyayı “Sort Selected Lines” olarak kaydedin.
Automator - Sort selected lines

Automator – Sort selected lines

Artık Xcode içerisinde bir kod bloğunu seçip sağ tıkladığınızda sağ tıklama menüsünde “Sort Selected Lines” seçeneğini göreceksiniz:

Xcode - Right click menu sort option

Xcode – Right click menu sort option

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…