9 Mart 2020

Merhaba,

Bu yazımda yutdışından Türkiye'ye ya da Türkiye'den yurtdışına kullandığım para gönderme yöntemlerinden bahsedeceğim. Finans dünyasında teknolojik altyapıların daha çok kullanılması ve yeni girişimlerin kurulması ile maliyetler azalmaktadır. Maliyetlerin azalması ile biz son kullanıcılara yansıyan işlem ücretleri de düşmektedir.

Açıklama: Aşağıdaki bağlantılardan bazıları bağlı kuruluş bağlantılarıdır, yani bir bağlantıyı tıklayıp işlem yaparsanız bir komisyon kazanacağım. Siz hiçbir ek ücret ödememekle beraber, kampanyalardan faydalanarak siz de kazançlı çıkacaksınız.

Ülkeler arası para transferi ücretleri de yıllar geçtikçe azalmaktadır. Birkaç yıl öncesine kadar EFT/Havale ücretleri bazen can sıkıcı olabiliyordu ama şu an birçok dijital banka seçenekleri ile (ENPARA, CEPTETEB gibi) EFT/Havale yapmak ücretsiz. Ülkeler arasındaki para transfer komisyonları da önümüzdeki yıllarda giderek azalarak ücretsiz hale gelebilecektir.

Benim 2 yıldan fazla zamandır kullandığım TransferWise ve TransferGo hakkında bilgi vereceğim. İkisi de büyüyen firmalar ve kendi alanlarında en iyilerden... Hali hazırda bazı ödeme aracıları komisyon tutarını ücretsiz yapsa da, kur farkındaki makası açarak komisyonlan alanlardan daha masraflı hale gelebiliyor. Aşağıdaki örneklerde kur farklarının ve kampanyanların yurtdışı para transferi masraflarını nasıl etkilediğini göreceksiniz.

Örneklerle Karşılaştırmalar

Şimdi ikisi için de 6 Mart 2020 tarihinde alınan örneklerle devam edelim. Dikkat etmemiz gerekenler döviz kurunun kaç olduğu, para transfer süresi ve tabi ki en önemlisi transfer masrafı. 6 Mart Saat 14:15'de serbest piyasadaki Euro kuru 6.8901 TL. Aşağıdaki ise TransferWise 6.89 alırken TransferGo 6.84 olarak alıyor.




Örnekte görüldüğü gibi Euro'dan TL'ye yani yurtdışından Türkiye'ye para transferinde bu durumda döviz kurundaki dezavantaja rağmen TransferGo daha karlı durumda. Ama bu örnek her zaman geçerli olacaktır gibi bir kural yok. Aşağıdaki diğer örnekte bu durumu farkedeceksiniz. Çünkü anlık olarak firmaların yapmış olduğu kampanyalar ya da dövizdeki kur farkları bu masrafları etkileyebiliyor.

Şimdi ise 9 Mart Sabah 09:50 itibariyle aldığım ekran görüntülerini tekrar paylaşıyorum. Kurdaki dalgalanma TransferWise tarafından güncellenirken, TransferGo tarafından güncellenmemiştir. 9 Mart 2020 sabah saat 09:50'de Euro kuru 7.0051 TL.



Dikkat ederseniz TransferWise hem kuru güncel tuttu hem de ekstra kampanya uyguladı. Şu şekilde bir açıklama yazıyor. Davet linkleri tarafından üye olunduğunda bu tür kampanyalar ikisinde de mevcut.
"You have a discount on this transfer. You can have a discount for a number of reasons — for example you might have been invited by a friend or followed a discount link from a website."


Kaç Gün Sürer?

İki firmanın da en düşük ücretli transferi olan normal transfer normal şartlarda ertesi gün geliyor. Örnekte 6 mart cuma günü olduğu için gönderim 9 mart pazartesi olacaktır. İkinci örnekteki 9 Mart 2020'de gerçekleştirilen transfer 10 Mart 2020'de banka hesabına geçecektir.

Hızlı seçenekler ile 30 dakikadan 4 saate kadar gönderim seçenekleri mevcut.

Transfer Nasıl Yapılır?

TransferWise ya da TransferGo kampanyalı linklerine tıklayarak göndermek istediğiniz para birimi seçerek transfer gerçekleştirebilirsiniz.

Avantaj ve Dezavantajlar?

TransferWise'ın şu an için benim bildiğim birkaç avantajı var:
  •  Türkiye'den yurtdışına para transferi yapabiliyorsunuz. Ama kısa zamanda TransferGo da Türkiye'den yurtdışına para transferi çalışmalarını başlatacağına inanıyorum.
  •  TransferWise'da EURO, Dolar, TL gibi banka hesabı açabiliyorsunuz ve IBAN'ı direk kullanabiliyorsunuz. Yani paranızı TransferWise'ın bankasında tutabiliyorsunuz. Mesela Avrupa için 2020'ye kadar Almanya'ya kayıtlı IBAN adresi veriliyordu. 2020'den itibaren Belçika merkezli IBAN verilmeye başlandı. Yani EURO hesabı açarak kendi IBAN'ınıza para gönderebilirsiniz.
  •  Debit Card seçeneği sunması. Oluşturacağınız hesaba ait Debit Card talebinde bulunabiliyorsunuz. Şu an için hala Türkiye seçeneği mevcut değil, Avrupa'da Debit kartınız alıp kullanabilirsiniz. Eminim Türkiye'ye de kısa süre içinde Debit kart hizmetine başayacaklardır.
  • Şu an için 20'den fazla farklı para birimini destekliyor.
TransferGo'nun avantajı ise kur farkının stabil olduğu durumlarda daha karlı olması diyebilirim ama tabi her zaman kontrol etmekte fayda var.

SONUÇ

Son olarak diyebileceklerim transfer ücretleri

  • ülkeden ülkeye,
  • o anki döviz kurlarına ve
  • kampanyalara göre değişmektedir.
Bu yüzden transfer yapmadan önce karşılaştırma yapmanız ve sizin için en uygun olanı bulmanız.

TransferWise'da davet linki kullanarak ilk 500 Euro'ya kadar komisyon ücreti ödemeyebilirsiniz.
TransferWise Davet Linki

TranferGo'da davet linki kullanarak transfer yaptıktan sonra £10 toplayabilirsiniz.
TransferGo Davet Linki

Uzun yıllardır kullanılan bir yöntem olan SWIFT ile para transferi yapmak isteyenlere tavsiyem komisyon oranlarına dikkat etmeniz. Çünkü ciddi anlamda %5-10 arası masraflarla karşılaşabilirsiniz. Tabi buradaki bahsettiğim miktarlar 2000-3000 dolarlara kadar olan miktarlar. Daha büyük transferler için tabi ki her kuruluştan özel komisyon oranları istenebilir.

Umarım faydalı olmuştur.


15 Ağustos 2017

Today I’m going to show how to obtain data from the Firebase database by substring search in Objective-c programming language.

Firebase database is a NoSql database as you know. So it supplies high performance for key-value data. But you may need “LIKE” query sometimes. Firebase database doesn't have  any query such as “LIKE” yet but it provides two other queries for substring searches from the beginning and the end of the string.

We will use these 2 queries:
queryStartingAtValue
queryEndingAtValue

Let’s assume we have a database like :
// -root
//  -users
//   -user1
//     name
//     age
//     ...
//   -user2
//     name
//     age
//     ...
// ....

// Let's try to get users whos name starts with 'ja'
NSString *searchString = @"ja";
NSString *endingString = [NSString stringWithFormat:@"%@\uf8ff", searchString];

// Create the query
FIRDatabaseQuery *query = [[[[[[FIRDatabase database] reference] child:@"users"]
                             queryOrderedByChild:@"name"]
                            queryStartingAtValue:searchString]
                           queryEndingAtValue:endingString];

// Run the query
[query observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    
    if(snapshot.hasChildren) {
        for (FIRDataSnapshot *child in snapshot.children) {
            NSLog(@"User Id: %@", child.key);
            NSLog(@"User : %@", child.value);
        }
    }
}];

NOTE: We need to add  "\uf8ff" character into search string for the queryEndingAtValue. 

"The character \uf8ff used in the query is a very high code point in the Unicode range (it is a Private Usage Area [PUA] code). Because it is after most regular characters in Unicode, the query matches all values that start with the queryText." https://stackoverflow.com/a/40633692/2186887

Have a nice day.

23 Temmuz 2017

Hi,


Jailbroken iOS devices can innitiate fake in-app purchases in your application. This is a bit annoying situation, both for users as well as for an application owner. Maybe you can not stop fake in-app purchases but you can stop wrong analytic data based on fake purchases.



Today I'm going to explain in-app purchase validation with php in your server. For this aim, Apple provides a special service. To obtain the response data, you should first send your receipt data to Apple.


Apple link to obtain response data:
https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html

21000
The App Store could not read the JSON object you provided.
21002
The data in the receipt-data property was malformed or missing.
21003
The receipt could not be authenticated.
21004
The shared secret you provided does not match the shared secret on file for your account.
21005
The receipt server is not currently available.
21006
This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.
Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
21007
This receipt is from the test environment, but it was sent to the production environment for verification. Send it to the test environment instead.
21008
This receipt is from the production environment, but it was sent to the test environment for verification. Send it to the production environment instead.
21010
This receipt could not be authorized. Treat this the same as if a purchase was never made.
21100-21199
Internal data access error.
There are some status codes in the bottom of the page. If your response status code is one of them, there is a problem with your receipt data or your request. If the status code is 0 (zero), your receipt-data is valid.



You can get the receipt-data from your in-app purchase by following the steps bellow:

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; if (receipt) { NSString *receiptEncoded = [receipt base64EncodedStringWithOptions:0]; // In addition we need to replace +(plus) sign for encoding receiptEncoded = [receiptEncoded stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"]; NSString *post = [NSString stringWithFormat:@"receipt-data=%@", receiptEncoded]; NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]; NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:@"your_server.com/verify_inapp_ios.php"]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postData]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; if (!error) { int statusCode = [[json objectForKey:@"status"] intValue]; if (statusCode == 0) { // Receipt-data is valid } } }]; [dataTask resume]; }

You can send the receipt data to your server with the above code block. You only change the your_server.com.  

NOTE: Plus sign (+) needs to be converted by utf encoding. Becuase it is a valid code in POST requests. 

We need a php page for processing this request. Apple provides 2 different URL for this aim. One for sandbox purchases and the other one for real purchases.

Sandbox: https://sandbox.itunes.apple.com/verifyReceipt
Real: https://buy.itunes.apple.com/verifyReceipt

<?php $json['receipt-data'] = $_POST['receipt-data']; $post = json_encode($json); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"https://buy.itunes.apple.com/verifyReceipt"); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $result=curl_exec ($ch); curl_close ($ch); ?>


Those php codes prints the response data in json format. You can deserialize the data in your objective-c or swift code.


Sample sandbox receipt-data can be found here : https://gist.github.com/sauloarruda/2559455

You can send the sandbox receipt-data to citynom.com/verify_inapp_ios.php for testing. Your json response should resemble this lines below.

object
{2}
receipt
{13}
original_purchase_date_pst
:
2012-04-30 08:05:55 America/Los_Angeles
original_transaction_id
:
1000000046178817
original_purchase_date_ms
:
1335798355868
transaction_id
:
1000000046178817
quantity
:
1
product_id
:
com.mindmobapp.download
bvrs
:
20120427
purchase_date_ms
:
1335798355868
purchase_date
:
2012-04-30 15:05:55 Etc/GMT
original_purchase_date
:
2012-04-30 15:05:55 Etc/GMT
purchase_date_pst
:
2012-04-30 08:05:55 America/Los_Angeles
bid
:
com.mindmobapp.MindMob
item_id
:
521129812
status
:
0

5 Aralık 2016

Merhabalar,

Daha önce yazıya döktüğüm makalemde "fpdf" kütüphanesini kullanarak php ile nasıl pdf dosyaları oluşturabileceğimizi anlatmıştım.
http://www.kodyazma.com/2013/05/php-pdf-olusturma.html

Bir arkadaşımızdan gelen Türkçe karakter sorunu üzerine problemi araştırdım ve çözümünü anlatmak istedim.

Farklı dil sistemlerini fdpf'de kullanabilmek font dosyası için ayar yapmamız gerekiyor. Bunun için "makefont" klasörü içerisindeki "makefont.php" dosyasını kullanacağız. Ana klasör içerisine oluşturduğumuz dosyaya aşağıdaki kodları ekleyerek, php dosyamızı çalıştıralım. Font seçimini kendi bilgisayarınızdaki font dosyalarına göre değiştirebilirsiniz.

<?php

include("makefont/makefont.php");

MakeFont("C:\Windows\Fonts\arial.ttf",  "ISO-8859-9") ;

?>

Php komutlarını çalıştırdıktan sonra 2 adet dosya oluşacaktır. "arial.php" ve "arial.z" isimli 2 adet dosyayı "FPDF" kütüphanesi içerisindeki "font" klasörü içerisine yerleştiriyoruz.

 $pdf->AddFont('arial','','arial.php'); 
 $pdf->SetFont('Arial','',14);
 $turkce_icerik = iconv('utf-8', 'ISO-8859-9', 'ŞüİĞ gibi harfleri artık kullanabiliriz');

Böylece Türkçe karakterleri pdf dosyamızda sorunsuzca kullanabiliriz. Farklı dillerin karakterleri için aşağıdaki tabloyu da paylaşalım.
  • cp1250 (Central Europe)
  • cp1251 (Cyrillic)
  • cp1252 (Western Europe)
  • cp1253 (Greek)
  • cp1254 (Turkish)
  • cp1255 (Hebrew)
  • cp1257 (Baltic)
  • cp1258 (Vietnamese)
  • cp874 (Thai)
  • ISO-8859-1 (Western Europe)
  • ISO-8859-2 (Central Europe)
  • ISO-8859-4 (Baltic)
  • ISO-8859-5 (Cyrillic)
  • ISO-8859-7 (Greek)
  • ISO-8859-9 (Turkish)
  • ISO-8859-11 (Thai)
  • ISO-8859-15 (Western Europe)
  • ISO-8859-16 (Central Europe)
  • KOI8-R (Russian)
  • KOI8-U (Ukrainian)
Son olarak daha önceki makalemde paylaşmış olduğum kodlarımızın güncel halini (oluşturulan font dosyasının ekli olduğu) paylaşayım. 

https://yadi.sk/d/dAq6QGz532FE4z

Umarım yardımcı olabilmişimdir, kolay gelsin.

6 Kasım 2016

Merhabalar,

Gönderdiğimiz e-postalarda "imza" bölümü vardır ve bu imza sayesinde kendimizi tanıtabilir ve yönlendirmeler yapabiliriz. İmza bölümünün daha güzel görünmesi için "html" kodlarından oluşmuş bir içeriği entegre edebiliriz.

MacOS'larda yer alan "Mail" uygulamasını kullanıyorsanız, html kodlarını entegre etmek normalden biraz daha zaman alıyor. Bu yazımda adım adım html kodlarını nasıl entegre edeceğimizi anlatacağım.

Not: Kullandığım işletim sistemi İngilizce olduğu için çevirilerimde yanlışlıklar olabilir...

Mail uygulamasını açtıktan sonra Preferences->Signatures sekmesini açıyoruz.









Açılan ekranda yeni bir imza ekliyoruz.

Bu işlemden sonra Mail uygulamasını tamamen kapatıyoruz. (Tamamen kapatmamız önemli!)
"Users->kullanici_isminiz->Library->Mail->V4->MailData->Signatures" dizinine gelerek oluşturduğumuz imza dosyasını görebiliriz. Birden fazla imza dosyanız varsa, tarih sıralaması yaparak en son oluşturduğunuzu bulabilirsiniz ya da "AllSignatures.plist" dosyasını açarak imzanıza verdiğiniz isimle eşleşen dosya adını bulabilirsiniz.




Değiştirmek istediğimiz imza dosyasını TextEdit veya benzeri programlarla açıp düzenleyeceğiz. Entegre etmek istediğiniz html kodlarının sizde olduğunu varsayıyorum. Eğer yoksa internette "online html editor" yazarak kolayca editör bulabilirsiniz.
Benim kullandığım site : http://www.html.am/html-editors/online-html-editor.cfm

Html kodlarımızı aldık ve imza dosyasını düzenlemek için açtık.
<body> tagından sonraki bölüme kendi kodlarımızı yerleştiriyoruz.  Aşağıdaki resimlerde değiştirilecek bölümleri göstermeye çalıştım.

Kendi oluşturduğumuz kod















İmza dosyasının içi




















İmza dosyasının içeriğini değiştirdikten sonra dosyayı kilitliyoruz. Kilitledikten sonra dosyayı kapatabiliriz.


















Bütün işlemlerimiz bitti. Şimdi Mail uygulamasını açıp, imzanın değiştiğini görebilirsiniz. İmza sekmesinde resimlerin yüklenmemesi normal, çünkü resimler herhangi bir erişilebilir sunucu üzerinde. (Ben flaticon sitesindeki resimleri kaynak olarak gösterdim)

Mail atacağınız zaman resimler otomatik olarak yüklenecektir ve e-postayı alan kişide de sorunsuz olarak görüntülenecektir.




























Umarım faydalı olmuşumdur, teşekkürler...

19 Ocak 2015

Uzun zamandır üzerinde çalıştığım CityNom sosyal platformu için IOS uygulaması yayında.

Itunes İndir

www.citynom.com


11 Aralık 2014

Bu makalede propertygrid üzerinde otomatik enum tipi için lokalizasyon yapmanıza yardımcı olacak kodu paylaşacağım.


public class GlobalEnumConverter : EnumConverter
    {
        Dictionary> _lookupTables;

        /// 
        /// Instantiate a new Enum Converter
        /// 
        /// Type of the enum to convert
        public GlobalEnumConverter(Type type)
            : base(type)
        {
            _lookupTables = new Dictionary>();
        }

18 Haziran 2014

Yapay zekadaki makine öğrenmesi(machine learning) algoritmalarından önemli biri olan Perceptron öğrenme algoritmasından ve C# diliyle yazılmış kodlardan bahsedeğim

Öncelikle kodumuzu verelim :

https://github.com/muhammedtanriverdi/Perceptron_Learning_C_Sharp


Perceptron algoritması gözlenmiş verileri kullanarak yeni gelecek verilerin sonuçlarını tahmin etmede kullanılır. Algoritmanın temel prensibini 2 boyutlu düzlemde anlatmaya çalışayım.

X ve Y koordinatları giriş verilerimizi ifade etsin. Sonuç verimiz ise + ya da - olsun.

X = 1 ve Y = 2 olduğunda sonucumuz - olur gibi değerler vererek devam edelim.
Burada şöyle düşünülebilir;
X değeri kandaki X maddesinin değeri
Y değeri kandaki Y maddesinin değeri
+ ya da - değerleri ise;
+ Hasta
- Hasta değil

30 Nisan 2014


Bu algoritma yapay zekada kümeleme algoritmalarının en bilinen ve en basit yöntemlerinden biridir.

Hemen proje kodlarımızı paylaşalım sonra algoritmanın basit anlatımına geçelim.

https://github.com/muhammedtanriverdi/K_mean_Clustering

"K" harfi küme sayısını işaret eder. Yani bu algoritma verilen küme sayısına göre bir yol izler. Küme sayısının belli olduğu durumlarda kullanılır.

İşletim süresi (time complexity) -> O(ndkt)

n -> Veri sayısı
d -> Uzay sayısı (Yani verilerin sahip olduğu özellik sayısı)
                        (2 boyutlu koordinat düzleminde, x-y özellikleri varsa 2;
                         ya da yaş-boy-günlük tüketilen su miktarı özellikleri varsa(3 boyutlu) 3 )
k -> Küme sayısı
t -> İterasyon sayısı

Yukarıdan anlaşıldığı gibi bu algoritma;
her veri için
her özellik için
her küme için
içiçe döngü oluşturuyor.

Algoritması hakkında bahsedelim (2 boyutlu koordinat sistemi üzerinden anlatacağım)


2 boyutlu düzlemde (x,y) koordinatları belli 1000 tane veri yerleştirdik. Gözle görüldüğü üzere 4 farklı küme var.

Peki neye göre 4 farklı küme var deriz?
Koordinat düzlemindeki (öklit) uzaklığa göre diyebiliriz.

1. ADIM : İlk adımda 4 küme olduğunu bildiğimiz için koordinat düzleminde 4 kümeyi rastgele noktalara atarız ve her veriyi herhangi bir kümeye sokarız.

3 Mart 2014

Xcode 5'de boş proje hariç diğer projelerde, özellikle alışık olduğumuz 'Single View Application' da otomatik gelen storyboard'u kaldırma ve projeye yeni viewcontroller ekleme videosunu paylaşmak istedim.

Storyboard küçük projelerde çok kullanışlı olsa da, proje büyüdükçe ve projede 1'den fazla kişi çalıştığında yönetmek zorlaşabiliyor. Bu yüzden küçük ölçekli projeler hariç storyboard kullanımını pek sevmiyorum :)

Bu Blogda Ara

İletişim

Ad

E-posta *

Mesaj *