Cep Anahtar vb Nasıl Çalışır (Olası)

İş bankasının Cep Anahtar’ını duymuşsunuzdur. Telefonunuza bir Java uygulaması yüklüyorsunuz ve o size internet şubesine girerken tek kullanımlık şifreler veriyor.  Neredeyse diğer tüm bankalar farklı isimlerle aynı çözümü sunuyorlar.  İki gündür kafayı ciddi anlamda Cep Anahtarın nasıl çalıştığına takmıştım.  İşleri karmaşıklaştıran sadece ilk seferinde online çalışması, siz şifre üretirken bankayla herhangi bir irtibat kurmuyor. Yani siz şifreyi oluşturduğunuzda bankaya bu şifre iletilmiyor, ya da bu şifre direkt bankadan gelmiyor. Peki banka bunun doğru şifre olduğunu nerden biliyor. Google’da arama yaptığımda başkalarının da aynı soruyu sorduğunu gördüm.  Ama verilen cevaplar beni tatmin etmedi. Kendim de tam olarak net bir cevap veremeyince biraz daha araştırmaya karar verdim. Ve çok basit bir mantıkla çalıştıklarını gördüm.  Tabii kesin olarak bu mantık diyemem ama büyük ihtimalle birazdan bahsedeceğim şekilde çalışıyorlar.

Bu işlemin yani tek seferlik şifre verme işleminin gerçekleşmesini sağlayan algoritma Leslie Lamport‘a ait. Buna göre öncelikle bir değer belirliyorsunuz. Bu sizin ilk, çekirdek değeriniz. Ve bu değeri bir fonksiyona sokuyorsunuz. Daha sonra bu fonksiyonun sonucunu da aynı fonksiyona sokuyorsunuz ve bu şekilde belirlediğiniz bir üst sınıra kadar devam ediyorsunuz. Bu fonksiyonların çıktıları sizin olası değerleriniz.  Matematik diliyle şöyle ifade edebiliriz.

Ç1=çekirdek, Ç2=F(Ç1), Ç3=F(Ç2), Ç4=F(Ç3), ...Ç[n]=F(Ç[n-1])

Bir örnek ile açıklamak gerekirse bizim fonksiyonumuz F(x)  = 2x olsun. İlk değer olarak 2 verelim. Bu durumda

Ç1=2,   Ç2=f(Ç1)=4,  Ç3=f(Ç2)=8 …

şeklinde değerlerimiz ilerler. Bu algoritmada değerleri kullanırken hep en son değerden başlayarak kullanılır. Yani yukarıdaki örnekte üst sınır 8 belirlemiş isek, uygulamanın size vereceği ilk şifre 8 olacaktır.

Hala bankanın nasıl doğru şifreyi bildiğini açıklamadık. Uygulamayı ilk yüklediğinizde bir kereye mahsus sizden ilk üretilen şifreyi internet şubesi üzerinden girmenizi ister. İşte işin can alıcı noktası burası siz üretilen ilk şifreyi bankaya tanıttığınızda, artık banka fonksiyonu(f=2x) ve dolayısıyla tersini(f^−1=x/2) bildiği için bir sonraki gelecek değeri yani yukarıdaki örnekte 4 bilecektir. Bu fonksiyonlar gerçek hayatta çok karmaşık olduğu için fonksiyonun tersini ve dolayısı ile bir sonraki şifreyi bulmak çok zorlaşıyor. Uygulamada çok fazla şifre üretip kullanmazsanız bir süre sonra tekrar senkronizasyon yapmanız yani, hali hazırdaki son şifreyi bankaya tekrar bildirmeniz gerekiyor. Çünkü oluşturduğunuz şifreleri kullanmadığınız için banka son şifreyi bir süre sonra takip edemiyor ve ipin ucunu kaçırıyor.

Şimdi örneğimizi netleştirebiliriz. Uygulamanızın fonksiyonu bu kez f(x)=3x-1 olsun. Başlangıç değeri de 3 olsun. Üst değerimiz ise 1823 olsun

Uygulamanız fonksiyonumuza göre değerleri oluşturuyor.

3    8    23     68    203    608     1823

Elimizde uygulamamız var, bankada fonksiyon. Banka fonksiyonu bilmesine rağmen son değeri bilmiyor. O yüzden ilk kullanımda bizden 1823 değerini istiyor. Bunu son değer olarak kaydediyor.

Daha sonra biz internet şubesine giriyoruz. Ve tek kullanımlık yeni şifremizi uygulamamız aracılığı ile oluşturuyoruz. 608 Bu değeri bankaya gönderdiğimizde banka hemen fonksiyonun tersinde [(x+1)/3] ilke kendisine verdiğimiz 1823 değerini koyuyor ve (1823+1)/3 işlemi ile 608 i buluyor. İki değer aynı o zaman şifremiz doğru.

Gerçekten güzel bir yöntem, offline olarak nasıl yaptığı sorusu kafamı ciddi anlamda yemişti. Şimdi gönül rahatlığı ile uyuyabilirim. 🙂

 

Kolay Para Kazanma Yolları

Bugün bir yazı okurken kafama takıldı ve “Kolay Para” ne kadar aranıyormuş diye baktım.  “Kolay Para Kazanma” kelime grubu ayda ortalama 2500 kere aratılıyormuş, içinde “Kolay Para” geçen sözcük grupları ise toplamda ortalama 27000 kere aratılıyormuş. Gerçekten garip! Özellikle facebook, twitter, youtube gibi internet fenomenlerinin ortaya çıkmasından ve onlara biçilen fiyatlardan sonra acar Türk girişimcisinin bu alana yönelmesine şaşırmadım. Ama Google’da kolay para yazarak para kazanmanın yollarını bulacaklarını, aydınlanacaklarını düşünen insanların olması beni şaşırttı. İşin enteresan tarafı ise bunun kolay olacağını düşünmeleri.

Ben üniversite yıllarımdan başlayarak sürekli bir şeyler denedim. İster adına girişim densin ister proje, birçok çalışmada bulundum. Dönemlik kazançlarım olsa da istediğim gerçek başarıyı hala elde edemedim. Bir yandan teknik bilgimi geliştirmeye çalışırken, bir yandan da teknik olmayan ama faydalı olacağını düşündüğüm alanlarda sürekli kendimi geliştirmeye çalıştım. Şu an başlangıç noktasındayım bile diyemem. Küçük adımlar attığımın farkındayım ama bu adımlarım bile dediğim gibi başlayabilmek için. Nasıl düşünemedim Google ve Kolay Para.. Boşunaymış bütün çabalarım.

Peki aslında daha önceki ve şu an süre gelen uğraşlarım Kolay mıydı? Kesinlikle değil. Bu uğraşlarımın bir sonuca ulaşıp ulaşmayacağını, ulaşırsa ne zaman ulaşacağını bilmiyorum. Ama bildiğim tek şey Google’da Kolay Para yazarak aratıp istediğim şeylere ulaşamayacağım. Muhtemelen bu yazıma da Google’da Kolay Para diye aratıp gelecek arkadaşlar olacak. Sevgili arkadaşım gördüğün o ışıltılı projelerin hiçbirisi kolay ortaya çıkmadı. Amiyane tabirle o çalışmaların hepsi kan ve gözyaşıyla hazırlandı. Seni de burada oyaladığım için özür dilerim. Şimdi elinde mavi ve kırmızı haplar var. İster geri tuşuna basar ve Google’ın sana kolay para kazanma yollarını göstermesini bekleyebilirsin ya da hemen şimdi çalışmaya başlayabilirsin. Seçim senin.

Hep denedin. Hep yenildin. Olsun. Yine dene.Yine yenil. Daha iyi yenil.   Samuel BECKETT

Yıldönümü Diye Bir Şey Yok Aslında

Kafam ciddi şekilde karıştı, lütfen biri beni aydınlatsın. Bizim kutladığımız yıldönümleri, doğum günleri hiçbir şey ifade etmiyor gibi gelmeye başladı. Çünkü bu yıldönümü olayı tamamen adı üstünde takvimden kaynaklanan birşey. Yani bugün miladi değil de, hicri takvim kullanılıyor olsaydı. Şu anki mantığımıza göre herbir kutlamamız sürekli farklı bir tarihe denk gelecekti. Tam tersi de geçerli. Yada bugün bir yıl tek günden oluşan bir takvime geçtiğimizi varsayalım, o zaman da yine şu an ki mantığımızla hergün doğum günü kutlayacaktık. Yani aslında o gün tekti ve geçti onun yıl dönümü tamamen bizim uydurduğumuz birşey. Biz aslında şu an 365*geçen sene ki gününcü yıldönümümüzü kutluyoruz. Bu durumda da bu her geçen günü yıl dönümü olarak kutlayabiliriz. benim senem 200 günden oluşuyorsa, şu an bazı yıllarda doğum günümü iki kere kutlayabilirim. Kısaca söylemek istediğim aslında yıl dönümlerinin hiçbir anlamı yok ve o günlerin de tabii ki. Bunları tamamen biz uydurduk. Yoksa deliriyor muyum?

YKB POSNET Entegrasyonu

Son zamanlarda online alışverişteki potansiyeli gören birçok kullanıcı sanal mağazalar açmaya başladı. Tabii ki bu alışveriş sitelerinin de olmazsa olmazı kredi kartı ile ücreti tahsil edebilme.

Türkiye’de bankalar 2 Sanal Pos altyapısından birini kullanmaktalar.  EST ve POSNET. POSNET’in entegrasyonu biraz daha karışık gibi. Bana da bu sanal pos’ların alışveriş sitelerine uyarlanması ile ilgili sürekli soru sorulmakta. Bunun üzerine ben de EST ve POSNET entegrasyonu üzerine küçük bir kütüphane oluşturmaya karar verdim.

Sitelerinde EST veya POSNET entegrasyonunu gerçekleştirmek isteyenler metkor@gmail.com adresine Sanal POS Entegrasyon başlığı/konusu  ile bir mail atarlarsa yardımcı olabilirim.

 

NVarChar VarChar Farkı

Google aramalarıyla siteme gelen kişilerin aradıkları şeylere ve gelen bir kaç soruya binaen bu farkı yazmaya karar verdim. Veritabanı uygulamalarımızı yazarken kolonlarımızda en çok tuttuğumuz türlerden birkaçı da char,varchar ve nvarchar’dır. Peki nedir bunların arasındaki fark. Öncelikle char tipi kolonumuzda karakter tutmamızı sağlar. Örneğin char(50) dediğimizde bu kolonumuza char tipi veri girebiliriz ve kolona kaç karakter girersek girelim her bir veri için 50 karakterlik yer ayrılır. VarChar tipindeki Var ifadesi variable yani değişken olduğunu bildiriyor. Peki değişken olması ne demek? Mesela VarChar(50) dediğimizde bu kolona 50 karakter girebiliriz ancak girdiğimiz veri 50 karakterden az ise verinin boyutu kadar yer tutar. Yani VarChar(50) tanımladığımız alanda 30 karakterlik bir veri tutulabilir. NVarChar değişkeninin mantığı ise VarChar ile aynıdır. İsmindeki N uNicode ifadesindeki N’dir. (***) VarChar’dan farkı ise bu kolonlarda Unicode karakterler tutulabilir. Yani veritabanında birden fazla dilde karakter bulunduran alanlar olacaksa bu tipte kolon oluşturmanız sorun yaşamanıza engel olacaktır.

(***): @Ahmet yorumunda NVarChar’daki N’nin “National” anlamındaki N olduğu hatırlatmasını yaptı. Hatırlatması için teşekkür ediyorum. Resmi olarak bu anlamda bir kısaltma. Ancak teknik anlamda daha açıklayıcı olduğu için üstteki ifadeyi tercih ediyorum. Nchar’da da benzeri bir durum var. Bu tipte alanlarda Unicode karakter tutabilirsiniz.

Android Virtual Device

Android için uygulama geliştirirken ilk uygulamanızı yapıp çalıştırdığınızda uzun süre bekleyip sonra uygulamanızı çalıştıramayınca sinir ve hayal kırıklığına uğrayabilirsiniz. Ama hemen pes etmeyin, çünkü sizin hatanız değil. Zaten Virtual Device normalde de çok geç açılıyor. Ancak bir de kimi zaman açıldığında sadece anasayfa da kalıyor, siz o sırada uygulamanızın açılmasını bekliyorsunuz. Aslında uygulamanız çalışmış durumda, tek yapmanız gereken Virtual Device üzerinde Home tuşuna basmak, böylece uygulamanızı görebileceksiniz. Virtual Device’ın yavaş yüklenmesi nedeniyle her seferinde Virtual Device’ı açıp kapatmamanız avantajınıza olacaktır.  Ayrıca Virtual Device’ı oluştururken Snapshot seçeneğini Enabled ederek daha hızlı açılmasını sağlayabilirsiniz.

Öte yandan Virtual Device’ı ilk çalıştırdığınızda bütün ekranı kaplar ve normal cihaz boyutlarında göremezsiniz. Bunu sağlamak için ise Window > Android SDK and AVD Manager menüsünü açıp oluşturduğunuz Virtual Device’ı seçip daha sonra Start butonuna basıyoruz.  Daha sonra çıkan ekranda Scale display to real size seçeneğini işaretleyip, Launch butonuna basıyoruz. Böylece sanal cihazımızı normal boyutlarında gösterebiliriz.

NFC Teknolojisi

NFC (Near Field Commnuciation), cihazların herhangi bir fiziksel temas sağlamadan birbirleriyle iletişime geçmesini sağlayan bir kablaosuz bağlantı teknolojisidir. Aslında temel olarak RFID teknolojisinin bir parçası olan NFC RFID’ye göre çok daha yakın mesafeler için iletişim sağlıyor. (<10 cm) . Tabii ki böyle olması da ekstra bir güvenlik sağlıyor.

Aslında NFC çok yeni bir teknoloji değil. 2004 yılında Nokia, Sony ve NXP tarafından kurulan NFC Forum ile yaygınlaştırılması ve geliştirilmesi için çalışmalar başlamıştı. Şu an NFC Forum’daki üreticilerin bazıları şunlardır :  LG, Nokia, Huawei, HTC, Motorola, NEC, RIM, Samsung, Sony Ericsson, Toshiba, AT&T, Sprint, Rogers, SK, Google, Microsoft, PayPal, Visa, Mastercard, American Express, Intel, TI, Qualcomm, and NXP.

Teknoloji eski olmasına rağmen tam olarak kullanımının yaygınlaşmaya başlaması ve isminin IT dünyasında biraz daha duyulması ancak bu yıllarda mümkün oldu. Bunda tabii ki mobil ve kablosuz teknolojilerin kullanımındaki patlamanın da etkisi var. Örneğin Google’dan sonra Lg 2012’den itibaren NFC Teknolojisini yaygınlaştırmaya başlayacak,  yeni nesil Iphone ve Ipad’lerin de NFC’yi desteklemesi bekleniyor.  Öte yandan McDonalds 2011 sonbaharından itibaren İngiltere’de NFC ile ödeme kabul edeceğini açıkladı.

Peki günlük hayatta nerelerde kullanılabilir? Aslında pekçok alanda kullanılabilir. Örneğin toplu taşımada temassız biletler gibi, kimli kartı olarak, az önceki örnekteki gibi temassız ödeme için , Google Wallet gibi cep telefonunda cüzdan ya da tamamen sosyal amaçlarla paylaşım için. NFC yaygınlaştıkça bu tarz alanlara daha pekçoğu eklenecektir.

Çalışma mantığı olarak bahsettiğimiz gibi RFID teknolojisiyle aynı. Cep telefonlarındaki bluetooth ile benzer bir yapıda. Ancak cep telefonlarından çok daha az enerji harcıyor, hatta kimi durumlarda enerji ihtiyacı olmadan da çalışabiliyor; açık bir telefon ile kapalı bir telefonun iletişimi gibi.  Ayrıca Bluetooth’a göre çok daha kısa mesafede iletişim kuruyor. Bluetooth’a göre dezavantajı ise daha yavaş çalışması.

 

 

Android İçin Uygulama Geliştirmek

Son zamanlarda IPhone üzerine geliştirilen uygulamaların ulaştığı inanılmaz satış rakamları uygulama geliştiricilerin dikkatlerini biraz daha mobil uygulamalar üzerine yoğunlaştırmalarına sebep oldu.

IPhone uygulama geliştirmek için Mac bilgisayar ve MacOS gibi gereksinimlerin olması Iphone için uygulama geliştirmek isteyenleri bu isteklerinden alıkoyuyor. Ancak amacınız sadece Iphone için değil de, yaygın bir platform için mobil uygulama geliştirmek ise birçok kişi tarafından gelecekte mobil cihazların işletim sistemi olarak gösterilen ve şu an bile ciddi aktivasyon rakamlarına ulaşan Android için uygulama geliştirebilirsiniz. İşin en güzel yani Android üzerine uygulama geliştirmek için yüksek maliyetli gereksinimlere ihtiyacınız olmaması.

Android için yazdığınız uygulamaları https://market.android.com/ üzerinden satışa sunabilirsiniz. Bu adreste ücretli ve ücretsiz birçok uygulama bulabilirsiniz. Şu an Türkiye’den geliştiriciler bu adresten uygulama satamıyorlar ancak diğer ülkeleri göz önüne aldığımızda yakında zamanda Türkiye’nin de listeye dahil edilmesini umuyorum. Şu an ise uygulamanızdan para kazanmak için yapabileceğiniz tekşey uygulamalarınıza reklam koymanız. Bunu daha önce Google’ın satın aldığı admob aracılığı ile yapabilirsiniz.

Peki uygulama geliştirmeye nasıl başlayabilirsiniz? Bunun için öncelikle makinanıza JDK kurmanız gerekiyor. Çeşitli uygulamalarla geliştirme yapabilirsiniz ama en kolay şekilde uygulama Eclipse vasıtasıyla geliştirilebildiği için, Eclipse tavsiye ediliyor. Eclipse Classic versiyonu buradan indirebilirsiniz.

Eclipse’i kurduktan sonra ikinci olarak Android SDK‘yı indirip kurmamız gerekiyor.  Android SDK kurulumu sırasında bilgisayarınızda JDK kurulu olup olmadığına bakacaktır. Eğer kurulu değilse kurulum sırasında da indirip kurabilirsiniz.  Kimi zaman JDK kurulu olmasına rağmen Android SDK kurulum sırasında bunu algılayamayabiliyor. Bu durumda Androdi SDK kurulumunu iptal etmeden JDK’yı tekrar kurabilirsiniz. Daha sonra kurulumu bir adım geri götürüp devam ettiğinizde sorun ortadan kalkacaktır.

Bir sonraki adım da Eclipse üzerine Android Development Tools eklentisini (ADT Plugin) kurmamız gerekiyor. Bu yüklemeyi yaparken öncelikle Eclipse’i açmamız gerekiyor. Daha sonra Help > Install New Software menüsünü açıyoruz ve Add butonuna tıklayıp eklentiye bir isim veriyoruz ve adres kısmına da

http://dl-ssl.google.com/android/eclipse/

adresini yapıştırıyoruz.  Aslında normalde gösterilen adres https protokolü üzerinden ama ben de o şekilde sorun çıkardığı için http üzerinden kurulumu yaptım. Daha sonra OK’e tıklıyoruz ve çıkan ekranda Developer Tools’u seçip Next adımlarıyla işlemi tamamlıyoruz.

Bu işlemden sonra Eclipse’de Window > Preferences menüsünü açıyoruz. Sol kısımdan Android’i seçiyoruz ve sağ kısımdan az önce kurulumunu yaptığımız Android SDK’nın yolunu gösterip, Apply ve OK butonlarına basıyoruz ve eklentinin kurulumunu tamamlıyoruz.

Geliştirmeye başlamadan yapmamız gereken son işlem gerekli komponentlerin indirilmesi. Bunun için yine Eclipse içinde Window > Android SDK and AVD Manager menüsünden SDK Manager’ı çalıştırıyoruz ve Available Packages kısmından kullanacağımız komponentleri seçip Install Selected butonuna basıyoruz. Kimi zaman bu kısımda da https protokolü yüzünden sorunlar yaşayabiliyoruz. Böyle bir durumla karşılaşırsanız.  SDK Manager’da Settings kısmında Force https://… sources to be fetched using http:// seçeneğini işaretleyip ilgili komponentleri yükleyin.

Artık Android Uygulaması geliştirmeye hazırız.  Artık Eclipse içerisinde File > New Project > Project Menüsünde Android seçeneği altında Android Project’i seçerek projenisi hazırlamaya başlayabilirsiniz.