Don-Up! (BattleHack 2014 Hack)

Dün yazdıgım BattleHack 2014 isimli yazımda, adı geçen yarışmadaki ‘hack’imizden bahseden bir yazı yazacağıma söz vermiştim. Bu yazıya başlamadan önce ‘Hackathon’ nedir, ne değildir ondan biraz bahsetmek istiyorum.

Hackathon’un wikipedia sayfasına göre bu tabir 1999 senesinde birbirinden bağımsız olarak OpenBSD geliştiricileri ve Sun Microsystems pazarlama ekibi tarafından ortaya atılmış. ‘Hack’ ve ‘Marathon’ kelimelerinin birleşimi olan hackathon kelimesi o zamandan bu yana geliştiricilerin ve yazılımla ilgili diğer mesleklere dahil insanların (grafikerler, arayüz geliştiricileri ve proje yöneticileri vs.) birlikte çalışması durumunu ifade etmek için kullanılıyor. Hackathonlar birkaç saatten birkaç güne kadar değişen uzunluklarda olabiliyor. Ancak yarışma formatında olanlar çoğunlukla 24 saat sürüyor.

Hackathonlar maker/mucit[1] kültürünün yaygınlaşmasıyla ülkemizde de geçtiğimiz yıllarda popülarite kazanmaya başladı. Bu kapsamda Türk hackerlar bir araya gelip 24 saatte bir projeyi hacklemeye çalışıyorlar.

[1] Maker kelimesinin türkçe karşılığının mucit olmadığı, maker’ın inovasyon peşinde, mucit’in icat peşinde koştuğuna dair kavga asla bitmez. Ben kişisel olarak bu çeviriyi rahatsız edici bulmuyorum.
 

‘Hacker’ deyince şu ana kadar anlattıklarıma aşina olmayan insanların gözlerinde oluşan şaşırma duygusunu görebiliyorum. Hacker aslında bir işi normal olmak zorunda olmayan yollardan yapan insana verilen isimdir. Başka bir deyişle her hangi bir şeyi alışılmışın dışında kullanma becerisine sahip olan insandır hacker. Genelden özele örnek vermek gerekirse: Yoğurt kabından saksı yapan anne, evde yapıştırıcı olmadığı için lambayı yerine oyun hamuru ile sabitleyen baba ve evdeki kombiyi internete bağlayan insanlar aslında hep bu ‘Hacker’ perspektifine sahip insanlardır.

Bütünlük açısından o ilk akla gelen hacker’lara neden hacker dendiğini de açıklayayım: çünkü güvenlik bağlamındaki hackerlar programlama dilleriyle yazılmış olan sistemleri alışılmışın dışında kullanarak sisteme erişim sağlamaya çalışırlar. Yani sistemin amacı belli bir bilgiyi sunmak, ama hackerlar o sistemi normal kullanım dışındaki hareketlerle sunulmak istenenin dışında bilgi sunmaya zorluyor.

Bu kadar aforizma yeter, gelelim biz bu hackathon’da ne yaptık…

Don-Up

Ekran Görüntüsü (57)

Etkinliğin teması: ‘Yerel veya global bir sorunu çözecek bir hack yapın’

Don-Up ismi Round Up (yukarı yukarı yuvarlamak) ve Donation (bağış yapmak) birleşiminden gelirken Donut kelimesine benzerliği de logo tasarımımızı ciddi şekilde etkiledi diyebilirim. Çözmeye çalıştığımız sorun insanlarda bağış yapma kültürünü arttırmak. Don-Up internette herhangi bir websitesinden alışveriş yaparken alışveriş sepetinizdeki tutarı yukarı yuvarlayıp (27,30 ise 28′e) aradaki farkı istediğiniz yardım kuruluşu ya da kuruluşlarına bağışlamanızı sağlayan bir Chrome eklentisi. Tüm websiteleri ile uyumlu (teoride) ve websitesi ile herhangi bir anlaşma gerektirmiyor.

Don-Up nasıl çalışıyor?

Öncelikle Don-Up Chrome Extension’ı tarayıcınıza kurmanız gerekiyor.

Screenshot 2014-04-29 19.58.33

Bu aşamadan sonra browserınızın sağ üst köşesinde donup sembolünün çıktığını göreceksiniz. Tıkladığınızda ise küçük bir çerçeve içerisinde bir sayfa açılıyor ve sizin üye olmanızı istiyor.

Screenshot 2014-04-29 19.59.46

Üye olduktan sonra ise sizi PayPal’a yönlendirip kabul etmeniz halinde hesabınızdan 1 liralık bir çekim yapıyor (birazdan nedenini açıklayacağım).

Screenshot 2014-04-29 20.03.32

Bu işlemleri tamamladıktan sonra kullanıma hazırsınız. Tek yapmanız gereken herhangi bir websitesinden alışveriş yapıp ödeme sayfasına gelmek ve sitenin kendi ödeme butonunun yanında Don-Up butonunun çıktığını göreceksiniz.

Screenshot 2014-04-29 20.09.16

Butona tıkladığınızda ise websitesinin içinde küçük bir pencere açılacak, bu pencereden istediğiniz yardım kuruluşlarını seçip, slider’lar vasıtasıyla bağışınızın ne kadarının nereye gittiğini ayarlatıp kaydet butonuna bastıgınız anda Don-Up paypal hesabınızdan toplam bağış miktarını çekiyor.

Screenshot 2014-04-29 20.14.57

Screenshot 2014-04-29 20.24.43

Peki Don-Up bunu nasıl yapıyor?

Don-Up aslında bir tür aracı kurum olarak hizmet görüyor. Sisteme kayıt olduğunuzda sizi PayPal’a yönlendiriyor ve daha sonra iade edilmek üzere bir para aktarımı yapıyor. Burada gerçekte olan şey şu: PayPal sıfır liralık aktarımlara izin vermediği için sembolik bir ücret çekip bu esnada kullanıcıya bir faturalandırma anlaşması imzalatıyoruz (Reference Transaction).

Screenshot 2014-04-29 20.04.03

Bu API çağrısını yapan server’da ise Ruby on Rails çalışıyor. Şunu belirtmeliyim ki API oldukça güzel olmasına rağmen düzgün bir Client’ı olmayışı benim hem epey zamanımı boşa harcamama neden oldu, hem de üzdü. Ayrıca API oldukça eski, yani REST değil. Çağrı stili olarak İsim-Değer ikilisi kullanıyor (Name Value Pair, NVP).
Daha sonrası ise tamamen bizim server’ımız ve kullanıcı arasında dönüyor. Kullanıcı butona bastığında serverdan daha önce kaydedilmiş yardım kuruluşlarının listesi dönüyor ve açılan çerçevede görüntüleniyor. Slider’lardan miktarları ayarlayıp göndere bastığınızda ise jquery ile bir GET request atıp bu request’in parametrelerine ise toplam yardım miktarı ve her kuruma gidecek yardım miktarı ekleniyor.

Rails server’ımız hemen toplam miktarı önceden sahip olduğumuz, kullanıcıya ait faturalandırma anlaşmasının numarası ile PayPal’a bir aktarım isteği atıp total miktarı bizim hesabımıza geçiriyor.

Screenshot 2014-04-29 20.15.47

Her kuruma gönderilecek tutarlar ise MongoDB çalışan veritabanımızda saklanıyor. Daha sonra ise bu tutarlar periyodik olarak toplanıp PayPal’ın MassPay API’ı ile kurumlara aktarılıyor. Periyot para miktarının artması durumunda bizim üstümüzde kalmaması açısından kısaltılarak daha sık aralıklarla kurumlara aktarılıyor.

Yaptığımız websitesinden ise yardım kuruluşları giriş yapıp kendilerine bağışlanan toplamı görebiliyorlar.

Ayrıca yine websitesinden giriş yapan kullanıcılar ise:

‘Bugüne kadar sadece küsüratlar ile #{falanca} miktar bağış yapıp #{filanca} kurumlara yardımcı oldunuz’

şeklinde yarattıkları etkiden haberdar olabilecekler.

Ben back-end entegrasyonuyla uğraşırken bizim ekibin geri kalanı da harıl harıl dizaynlar ve front-end üzerinde çalışıyordu tabi. Hiç bilmediğimiz bir alan olan extension yazma konusunda sıfırdan başlayıp çalışan proje çıkarmayı başardılar. Gökhan ve Berk’in inanılmaz çalışması ve Zülfü’nün harika dizaynlarını gördükçe ben de motive oldum. Etkinlik başlangıcından yaklaşık 18 saat sonra saat sabah 7 civarında back-end tamamen bitti.

Sabahın ilk ışıkları ile birlikte enerjimin azaldığını hissetmeye başlamıştım.  Front-end ekibi ile 1-2 iterasyon daha yaparak gerekli bağlantıları yaptık. Ve artık sunuma hazırdık. Tabi ben 18. saatin sonunda fark ettim ki daha projenin neye benzediğini bilmiyorum, kalkıp bakma gereği duymamışım. Back-end beni yeteri kadar meşgul etmiş demek ki. Sonunda kalkıp saatlerimi harcadığım projenin neye benzediğini gördüğümde oldukça memnun kaldım. Artık sunumdan önce uyuma vakti geldi, yoksa o 2 dakikalık sunumun sonunu getiremeyebilirdim. İçeride uyku için ayrılmış alanda mindelerin üstünde 1.5 saat uyudum. Kalktığımda kendimi çok daha iyi hissediyordum.

Saat 13:00′ı gösterdiğinde gong çaldı ve etkinlik sona erdi. Saat 13:30′da neredeyse uykusuz geçen 30 saatin ardından juriye sunumumuzu yaptık.

Sonuç olarak ilk 3′e giremedik ama ‘en iyi fikir’ dalında ödül aldık. Bize birer quadcopter hediye ettiler.

Screenshot 2014-04-29 20.52.57

30 proje içerisinde öne çıkan 7-8 projeden biri olduğumuza inanıyoruz. Bu muhteşem etkinlik için tüm PayPal ailesine ve Partnerlerine tekrar teşekkür ediyorum.