17 Haziran 2017 Cumartesi

GSOC GNU TALER PROJECT 1. WEEK STUDIES

Hi all,

    After my finals i started work on my project again. I had to start late because of my finals and now i'll try to close the gap.

   Last week i think i can manage to write Django-payments GNU Taler module first but now i realize that can't be possible because if i can't test what i do it won't go to a point. So i start with installing Saleor on my local machine to test my work at projects goal store. 
   Installation progress of Saleor explained at documentation which they wrote. I installed and run Saleor on my localhost on Debian Sid, Webpack and Nodejs versions can be tricky you must be careful about them :) . For next step i look other payment options and what they do on Django-payments. Try them with Saleor : 

   I manage to find out at forms of payments and variants of payments came from Django-Payments payment module's init.py documents. They use a template for methods on init.py documents, they are explained at Django-payments documentation also. Methods which they use at template are :
  1. get_form method:   Takes the from forms.py and show to front-end.
  2. process_data method: Processing data to send to backend.
  3. capture method: Capturing the payment which have preauth status.
  4. release method: Release the payment which have preauth status.
  5. refund method: Refund procces of selected payment.
   For using this methods firstly i start to write a form for payment proccess on GNU Taler.  This form using to show customers what will they pay and data of this form will used at init document. I study GNU Taler space document to understand which datas will i need to complete payment process. 

   I look at Dummyprovider class on Django-payments module and now i am trying to implement tutorial to my Talerprovider class. 




11 Haziran 2017 Pazar

OpenCV ile Çoktan Seçmeli Sınav Kağıdı Okuyucu

PROJE EKİBİ

CANBERK KOÇ - ÇAĞRI ULAŞ

PROJENİN AMACI

Projenin amacı günlük yaşamda çoktan seçmeli sınav kağıtlarının okunmasını daha kolay hale getirebilmektir. Bunun için OpenCv kütüphanesi ve C++ diliyle geliştirilmiş bir algoritma kullanılmıştır.

Algoritmanın Adımları:

Algoritma 7 ana adımdan oluşmuştur bunlar şu şekilde ifade edilebilir:
  1. Alınan resmi siyah beyaz hale getirme.
  2. Hough  dönüşümü kullanılarak sayfadaki kenarları bulma.
  3. Kesit oluşturmak için kenarların kesişme noktalarını bulma.
  4. Kesit'e perspektif dönüşüm uygulama (Kuş bakışı hale getirme).
  5. Resimdeki daireleri bulmak için Hough dönüşümü kullanma.
  6. Daireleri satır ve sütunlar halinde sıralama.
  7. %30'dan fazlası dolu olan daireleri dolu kabul etme

1.Alınan resmi siyah beyaz hale getirme:

    Resmi siyah beyaz hale getirme ileride kullanılacak Hough dönüşümü için önemlidir. Bunu yapmak için Gaussian blur tekniğiyle istenmeyen gürültü noktalardan kurtulunur ve adaptif eşik değeri işleme ile resim temiz bir hale getirilir.

2.Hough dönüşümüyle sayfadaki kenarları bulma:

   Resimde kenarları tespit etmek için probablistik(olasılıksal) Hough dönüşümü kullanılarak ana çerçeve belirlenir. Bu algoritma resimdeki her noktaya giderek açısal olarak bu noktaların kenar oluşturup oluşturmadığına bakar. Her nokta ve açıyı taradığı için algoritmadaki en maliyetli işlem budur.

3.Kesit oluşturmak için kenarların kesişme noktalarını bulma:

   Kesişim noktalarını bulmak için bir dizi sıralama yapılmalıdır. Ve bu işlem için noktaların toplamının en yoğun olduğu yerler bulunur.

4.Kesit'e perspektif dönüşüm uygulama (Kuş bakışı hale getirme): 

   OpenCv kütüphanesinin fonksiyonlarından dönüşüm matrisi oluşturulur ve buna perspektif dönüşüm fonksiyonu uygulanır.

5.Resimdeki daireleri bulmak için Hough dönüşümü kullanma:

   OpenCv kütüphanesinin HoughCircles fonksiyonu kullanılarak resim üzerindeki bütün seçim daireleri bulunur.


6.Daireleri satır ve sütunlar halinde sıralama:

    Çizilen daireler kordinatlarına göre gruplanarak satır ve sütunlara bölünür.

7.%30'dan fazlası dolu olan daireleri dolu kabul etme:

    Dairelerin içindeki piksel yoğunlukları ölçülerek yüzde 30'dan fazlası dolu olan daireler işaretlenmiş olarak kabul edilir.

Algoritmanın Karmaşıklığı:

   Geliştirilen algoritma içinde kullanılan OpenCv fonksiyonlarının karmaşıklıkları bizi analiz esnasında etkilemektedir. Eğer bu fonksiyonlar kullanılmasaydı algoritmanın en karmaşık yeri dairelerin dolu olan alanlarının bulunması için yapılan 3 for döngüsü olacak ve karmaşıklık 0(N^3) olacaktı. Kullanılan fonksiyonların karmaşıkları şu şekildedir:

GaussianBlur fonksiyonu için karmaşıklık O(ÇekirdekYüksekliği X ÇekirdekGenişliği X ResimYüksekliği X ResimGenişliğidir)'dir. Bizim algoritmamızda bu O(N^2) olarcaktır.

C++ Standart Kütüphanesi sıralama algoritmasının karmaşıklığı O(nlogn)'dir.

Hough Dönüşümü yukarıda da belirtildiği gibi en maliyetli olan kısımdır bu kısmın karmaşıklığı O(ResimBoyutu^(ParametreSayısı-2)) bizim algoritmamız için bu oran ResimBoyutu = N ve ParametreSayısı=5 olacağı için O(N^3) olacaktır. Parametre olarak kastedilen ise gürültüleri temizlemek için kullanılacak yakınlık eğrileridir. 

Bu durumda en karmaşık kısım O(N^3) olacağı için ve bu karmaşıklık diğerlerini kapsayacağı için karmaşıklık O(N^3)'tür.

PROJENİN KODU:


ÇALIŞMA VİDEOSU:




27 Mayıs 2017 Cumartesi

PRE GSOC PREPERATIONS

Hi all, 

At this part of my blog I'll talk about what I'm doing at Gsoc week by week. 
In the first post of this blog I will talk about the preparations I made before Gsoc and what is my project about.

Store integrations for Taler Merchants project aims to integrate Gnu/Taler to Saleor which is an e-commerce storefront for Python and Django. 
To achieve this goal first I need to integrate a provider class to Django-Payments module which Saleor using at their project.

I start with try the Taler web shop integration tutorial for Python.
This tutorial basicly describes what you should do to use Taler wallet to make payment and structure of how Taler works. 
For trying tutorial you must install Flask and change tutorial a little bit . I found two errors in the tutorial first use BACKEND_URL = "http://backend.demo.taler.net/" instead BACKEND_URL = "http://backend.test.taler.net/"  and change the CURRENCY = "PUDOS" to CURRENCY = "KUDOS" .

I research about Taler api and how to integrate their functions to Django-Payments library and how Saleor using the library. Saleor using Django-payments library to give payment options like paypal etc. for shop owners.

I figure out Django-payments make a structure like app for a payment option and I start to add an option for Taler. They use their BasicProvider and BasicForms for inheritance. 
Now I have to add threes document to Taler app to make it usable they are forms.py, init.py, tests.py. 


I started to write init.py to use Taler api next weeks I'll tell you about  what i do and give commits numbers at my github account






14 Kasım 2016 Pazartesi

Neden Paas kullanalım ? Bulut üzerinde depolama nedir ? Bulut bilişime giriş dersi proje tanıtımı.

Neden Paas ?
Sorunun cevabı çok basit daha az uğraş ve daha hızlı üretim anahtar noktası. Paas ile bize sağlanan neydi bir hatırlarsak hazır bir platform üzerine projemizi hemen yükleyerek canlı ortama çıkma fırsatı.
Peki bize bu fırsat neler sağlayacak maddeler halinde sıralayabiliriz:
  • Çalışma ortamını kurmakla uğraşmayacağız zaman kazanacağız.
  • Ortamı esnek bir şekilde yönetebileceğiz yüksek ulaşılabilirlik sağlamış olacağız.
  • Daha önce bu hizmet bir çok kişiye verildiği için güvenliğiyle ilgilenilmiş olacak.
  • Yazılım dünyasında zaman ve para çok yakın ilişkide olduğu için zamandan ettiğimiz kar bize para olarak da yansıyacak.
  • Kendi altyapımızı kurma riskini egale etmiş olacağız.
  • Yeni bir servisi entegre etmek istediğimizde işler daha kolay olacak ve gelişime daha çabuk ayak uyduracağız.
Bulut Bilişime Giriş Projemiz ve Görevim

Ekip arkadaşlarımla birlikte Django kullanarak bir öğrenci bilgi sistemi tasarlamaktayız. Benim görevim database modellerinin bir bölümünü models.py ve tarayıcının işleyeceği bir kaç tasarımı views.py dosyasına işlemek.
https://github.com/ComuAzure/obs/ adresinden projeyi yönetmekteyiz. 
Projenin azure web apps'e yüklenme videosu:

Projenin canlı ortamdaki bir kaç görüntüsü:


Bulut Depolama

Bulut depolama  ( havalı adıyla storage :| )  olayı aslında verinizin internet aracılığıyla uzak bir veri merkezinde tutulmasıdır. İlk bakışta bu kadar basit olan bu olayın avantaj ve dezavantajlarını şöyle sıralayabiliriz ;
Avantajlar:
  • Bir makina satın almaktan ucuza gelebilmektedir.
  • Büyük verileri depolayabilmekte ve yönetmekte kolaylık sağlamaktadır.
  • Verinizin mekan bağımlılığını kaldırmaktadır.
  • Verilerinizi dağılmış sunucularda tutarak veri kayıplarından sıyırmayı sağlayabilmektedir.
Dezavantajlar:
  • İnternet erişimini kaybetmeniz durumunda verilerinize ulaşamazsınız.
  • Güvenlik konusunda bir şirkete güvenme durumunda kalırsınız.
Kısacası hızlıca bir projeyi hayata geçirmeniz ve stabil bir geliştirme ortamına ihtiyacınız varsa bulut hizmetlerini kullanmak akıllıcadır. Zaman,para ve emekten kar etmenizi sağlar ta ki bir şirkete güvenmenin bedeliyle bunları aynı kefeye koyabiliyorsanız. 

Sonuç olarak her zaman yaptığımız gibi ne yapıyoruz okuyoruz araştırıyoruz ve çok kafaya takmıyoruz. 

Saygılar

9 Ekim 2016 Pazar

Bulut Bilişim

Bulut bilişim(Cloud Computing) kısaca çevrimiçi bilgi paylaşımı olarak özetlenebilir. İsmindeki bulut, verilerin bulunma yerine işaret eder yani yerel olmayan bir hizmet olduğunu belirtir.
Daha net anlaşılması için basitleştirirsek internete ulaşımınızın olduğu herhangi bir ortamda kullandığınız cihazlar üzerinden verilerinize ulaştığınız hizmetleri topluca Bulut Bilişim olarak adlandırıyoruz. Tarihçesi ilk internet kullanımına kadar dayanan bu fikir günümüzde Google,Amazon,Intel ve Türkiyeden Ttnet gibi büyük firmaların da yatırımlarıyla çok gözde hale gelmiştir.
Fikrin temeli büyük firmaların bir ana bilgisayar alarak bunun üzerinde daha düşük donanıma sahip bilgisayarlar ile işini görmesine bağlanmaktadır ama ana bilgisayar alınması çok masraflı olduğu için, var olan bu bilgisayardan en iyi şekilde faydalanılması oldukça önemliydi buradan yola çıkarak günümüzde inanılmaz boyutlara ulaşan veri trafiklerini işlemek ve zaman paylaşımı yöntemiyle hizmet sunmak adına gelişmiştir.
Peki nedir bu bulut bilişimin faydaları diye sorarsak bir kaç ana başlık ortaya çıkacaktır:
Maliyet azaltımı.
Altyapıyı basitleştirerek hızlı geliştirme süreçleri sağlanması.
Çalışma alanı genişlemesi ve ulaşım kolaylığı sağlanması.
Peki dezavantajlar dersek bilgi güvenliği ve servislere ulaşım kısıtlamaları öne çıkacaktır.
Bulut yerleştirme türlerine gelirsek 4 şekilde karşımıza çıkıyor Genel,Özel,Karma ve Topluluk.
Bulut hizmet modelleri ise bizim üstünde duracağımız bölge bunlar IaaS,PaaS ve SaaS olarak isimlendirilmiştir.

Yukarıda görülen tablo ile aslında bu hizmetlerin kapsamları açıkca görülebilmektedir.

IaaS(Infrastructure as a Service)

En alt seviyedeki bulut hizmetidir bir diğer adıyla altyapı hizmeti sunmaktır. Hizmeti alan yazılım,veri,işletim sistemleri gibi yapıları kendi yönetir. 
Kısacası vpn kiralamaya benzer. Ücretlendirmeler genelde ayrılan veya kullanılan kaynak üzerine yapılır. Bu hizmetlere örnek olarak Amazon ECS verilebilir.

PaaS(Platform as a Service)

Bu hizmet genellikle size sunulan bir platform üzerinden kullanacağınız servisleri seçerek ilerleyeceğiniz bir şekilde kullanılır.
Kullanıcı hazır bir işletim sistemi,çalışma ortamına sahiptir uygulamaları ve veri kısmını kendi yönetir.
Bunlara örnek Google App Engine ve Microsoft Azure ortamı gibi sistemler olabilir.Ücretlendirmeler genelde kullanılan servis miktarına göre değişir.

SaaS(Software as a Service)

Bu hizmeti alan kullanıcı sadece satın aldığı programı kullanır arka tarafla ilgilenmesine gerek yoktur. Kullanıcı hizmete farklı ücretlendirme kriterlerine göre ödeme yapar. Bunlara bir çok örnek olabilir ama benim de deneyimli olduğum bir örnek vermek isterim şu anda part time olarak çalıştığım Segmentify bu hizmete bir örnektir. Kullanıcılarımız sadece Segmentify ürününü kullanıyor programın her kısmıyla şirket ilgilenmekte.

Sanallaştırma(Virtualization)

Sanallaştırma kavramı basitçe var olan kaynakların kullanıcıdan soyutlanması manasına gelir. Peki ne işe yarar dersek bu şekilde kaynaklar dağıtılabilir,birleştirilebilir ve gerekli durumlarda gereken şekilde yönlendirilebilir.
Avantajları şu şekilde sıralanabilir:
Bir sistemi bir çok kullanıcıya bölebiliriz.
Yüksek ulaşılabilirlik sağlar(High Availability)
Kaynakların dengeli ve güvenli dağıtılması sağlanabilir.
Yoğunluk durumlarında yük dengelenebilir.

Kısacası Bulut sistemi ve gelişen teknolojileri internet için çok büyük önem kazanmaya devam edecektir. Bu durumda bizim de yakından takip etmemiz ve kafaya çok takmamamız gerekir.

Saygılarla