25 Ağustos 2014 Pazartesi

Installing Put.io on OUYA

1

Ouya is a gaming microconsole which was funded by a Kickstarter campaing and became second most highest earned project in the Kickstarter history. Ouya has seen support, because of its open design, and it encourages developers to hack and play with the device.

Ouya runs a custom Android operating system and it's firmware is being actively developed. With 1.2.1187 "Chupacabra" update released recently, it's possible to upload Android apks directly from your browser without any software installed on your PC.

You can install Steven Schoen's excellent Put.io app into your Ouya console.

  • First connect your PC and Ouya into same Wi-Fi network.
  • Start your Ouya device and choose MAKE  > UPLOAD functionality from the menu. By clicking UPLOAD button on the right, an address just under the button will be appeared (A URL like "http://192.168.0.XX:10000/") . Note it and go to that address with your browser from any PC in the same network. A drag&drop upload page will show up on your screen.
  •  Download Put.io apk from here and drop file into the page. After progress bar is full, you can reach the app from MAKE > SOFTWARE section on your Ouya.
  • On login screen, virtual keyboard doesn't appear so you need to use a USB keyboard to enter your login credentials.
Have fun!

7 Ağustos 2014 Perşembe

Installing Put.io on Amazon Fire TV

3

It's easy to get Put.io running on your Amazon Fire TV device within a few steps.  Steven Schoen's Put.io Android app works seamlessly on Amazon Fire TV and you can install it just from your PC sharing the same Wi-Fi with your Amazon Fire Tv.

Before you start make sure your Amazon Fire TV and your PC are connected to same Wi-Fi network.


1. Set your Fire TV ready for installing


First, we must enable access into Fire TV before we can connect to device and install the Put.io app.
  1. From the main (Launcher) screen of Amazon Fire TV, select Settings
  2. Select System > Developer Options
  3. Select ADB Debugging and set to ON.

We also need the IP address of Amazon Fire TV on network to be able to access it from PC.
  1. From the main screen of Amazon Fire TV, select Settings.
  2. Select System > About > Network.  Make note of IP address listed on this screen.

2. Download Android SDK and Put.io app into your PC


We must get Android SDK which is a set of tools used for creating and testing Android applications by developers.  We are going to use just a single part of the SDK to transfer Put.io app into Amazon Fire TV.

First, download appropriate Android SDK zip file for your operating system from Android website http://developer.android.com/sdk/index.html.

After you download the zip file, for Windows extract it to your Desktop or elsewhere you feel comfortable. For Mac and Linux you can do the similar from your file browser or extract it with unzip command.

Now, download latest Put.io app (putio.apk) from the Github page https://github.com/DSteve595/Put.io/releases/latest

After download is complete, for convenience, move putio.apk into Android SDK folder you extracted from zip file.

3. Install Put.io app into Amazon Fire TV


The last step is to install our app.  Procedure is similar but changes according to your your operating system.


For Windows,
  1. Open Command Prompt window by: Click the Start button. In the Search box, type Command Prompt, and then, in the list of results, double-click Command Prompt. We are now going to enter some commands into Command Prompt.  
  2. First type  cd and put an empty whitespace after cd command. Then, from your desktop drag and drop Android SDK folder we unzipped into the Command Prompt. You should see something like  cd C://Users/Orcun/Desktop/android-bundle-windows-x86 on your screen. And press enter.
  3. Type cd platform-tools and press enter.
  4. Type adb kill-server and press enter.
  5. Type adb start-server and press enter.
  6. Type adb connect [ipaddress]  in which [ipaddress] part should be your Amazon Fire TV's IP address without brackets. And press enter.
  7. Type adb install ../Putio.apk and press enter.
For Linux and Os X fire up your terminal and enter following commands similar to Windows.
  1. cd /path/to/android-sdk-folder
  2. cd platform-tools
  3. ./adb kill-server
  4. ./adb start-server
  5. ./adb connect [ipaddress]
  6. ./adb install ../Putio.apk

4. Enjoy!


It's all done! You can now find Putio app on your Amazon Fire Tv on: Settings > Applications > Manage All Installed. Login and enjoy!





    3 Temmuz 2012 Salı

    Open Monitor ile Yaz

    0

    Bu yaz için Google'ın düzenlediği Summer of Code'da Umit Project'in Open Monitor projesine kabul edildim. Open Monitor, tüm dünyadaki internet bağlantı durumunu monitörleyen dağıtık bir çok parçalı sistem. Amacı farklı hedefler için başta HTTP/DNS ve diğer (SMTP gibi bloklanma ihtimali yüksek) servislerin dünyanın farklı yerlerindeki çalışabilirliğinin kontrolünün sağlanması ve bunların http://www.openmonitor.org üzerinden raporlanmasını içeriyor. Bu internet yasaklarını daha somut bilgilerle gözlemleyebileceğimiz anlamına geliyor. Sonuçta oluşacak utanç haritasında Türkiye'nin durumu da ortaya çıkacak.

     Sadece bloklamaları değil, teknik arızaların işaret edilmesi de mümkün. Örneğin eğer bir yerlerdeki fiber optik kabloda bir kesinti ya da yönlendiricide bir sorun yaşanıyorsa Open Monitör sorunlu yönlendiriciyi tesbit edip haritasında bildiriyor (basit bir traceroute implementasyonunu kullanarak). 

    Sistemin çalışması için, gönüllü kişilerin bilgisayarına kuracağı istemci uygulamaları arkaplanda sunucudan aldığı testleri çalıştırarak raporlarını sunucuya bildiriyor. Eğer siz de gönüllü iseniz yakın zamanda çıkacak beta versiyonundan sonra sadece programı bilgisayarınızda çalıştırarak katkıda bulunabilirsiniz.  Beta sürümünden haberdar olmak için web sitesinin sağ kısmındaki kutucuğa mailinizi yazarak abone olabilirsiniz.

    22 Haziran 2011 Çarşamba

    commit yapmak artık daha kolay!

    1

    Mercurial kullanırken 'hg commit' demek beni hep huzursuz etmekteydi. Ta ki MQ ile tanışana dek. Commit yaptıktan sonra commit'in hash'i yeni commit'in parent'ı olarak kullanılacağı için commit'i hiçbir şekilde değiştirmek artık mümkün olmuyor. Push demeden önce bir sorun fark ettiyseniz, bunu yeni bir commit ile halletmekten başka çareniz yok. MQ (Mercurial Queue) burada yetişiyor yardıma. Ana fikri değiştirilebilir changeset'ler yaratmanıza imkan vermek. En çok iki açıdan faydası var.
    1.  Girişte yazdığım gibi, bir commit yapmanız gerek fakat bunun en mükemmel commit olduğuna ikna olmadığınız halde şimdilik yeterli gibi duruyor. Bu durumda bunu bir mq patch olarak kuyruğa atabiliriz ve daha sonra üstüne yeni patchler eklesek dahi geri dönüp tekrar düzenlememiz mümkün. Bunun sayesinde commit'imizi yapmış gibi varsayıp yeni bir commit üzerinde çalışmaya başlayabiliriz. Ya da aynı anda birden fazla commit üzerinde çalışabiliriz.
    2. Bir dosya üzerinde çalışırken çalıştığımız dosyada bir hata bulduk. Bulduğumuz hatayı onarırsak bu değişiklik bizim önceden yaptığımız çalışmalarla birlikte commit edilecek ve atomic commit yerine iki farklı işi tek bir commit'de yollamış olacağız. Ya da hatayı işimiz bittikten sonra düzelteceğimize kendimizi inandırıp unutmamız da mümkün. Bunun yerine mq kullanıp şu ana kadar yaptığımız değişiklikleri bir patch kuyruğuna atıp hatayı onaran kodu commitleyip tekrar patchimize dönüp çalışmaya devam edebiliriz.
    Bir patch ile işimizin bittiğine emin olduktan sonra onu gerçek bir commit'e çeviriyoruz. Şurada MQ ile ilgili güzel bir belge mevcut. Ne işe yaradığını ve nasıl çalıştığını tam olarak anlayıp kullanmaya başladıktan sonra hayat daha bir güzel oluyor. Yatmadan önce patch'imi qrefresh edeyim diye buluyorum kendimi.

    6 Haziran 2011 Pazartesi

    GSoC 2011

    0

    Gecikmiş bu yazıyı nihayet yazabiliyorum, benim için bir zamanlar gerçekleşmesi oldukça uzak bir hayal olan "Google Summer of Code"a bu sene kabul edildim ve bunun mutluluğu içerisindeyim. Kodlama süreci başlayalı 2 hafta geçti fakat okullar dolayısı ile henüz sıkı bir çalışma sürecine giremedim.

    Bu yaz Summer of Code'da Melange için "Integration with External APIs" projesi üzerine çalışacağım. Melange GSoC ve GCI etkinliklerinin üzerinde çalıştığı Django ve App Engine ile birlikte çalışan bir çatı. Geleneksel Django yaklaşımı yerine bir nevi kendi framework'lerini kullanmaktalar ve sanırım dahil olabileceğim en düzenli kod yazılan projelerden birisi. (Açıklama satırının sonuna nokta koymadığım için uyarılmışlığım oldu :) Projem ile ilgili ayrıntıları buradan ve Melange bloğundan takip etmeniz mümkün.

    15 Nisan 2011 Cuma

    Planet Caravan

    0

    Uykusuz bir sınav gecesinde boşlukta uçmak...

    4 Mayıs 2010 Salı

    Staj @ Pardus

    1

    Hiç beklemediğim anda gerçekleşen bir olay oldu bu. O kadar emindim ki gerçekleşmeyeciğine bilgi işlemde staj yapmak için Necdet hocayla prensipte anlaşmıştık bile.

    Stajın çok yararlı olacağını daha ilk dakikalardan anladım. Müthiş bir gazla Linux'la Pardus'la ilgili ne varsa okuyasım var. Bir de sanki kırk yıllık Pardus geliştiricisiymişim gibi bir sahiplenme geldi bir anda. Tarih gaza gelen stajerlerin hezimetleriyle doludur kesin. Olsun! Tutmayın beni diyorum. Ağustos'a kadar okumam ve öğrenmem gereken çok fazla şey var.

    Artık bloğuma da bol bol yazacak  malzemem olacak gibi.

    12 Nisan 2010 Pazartesi

    R.I.P. Run For Osman

    3


    Orta Doğu Teknik Ünivesitesi Bilgisayar Topluluğu'nun düzenlediği programlama yarışmasında finale kaldık fakat Run for Osman'a nazarımız değdi ve şampiyon at sonuçların açıklanmasından 2 gün önce kalp krizi geçirerek öldü.  Yarışmadaki grubumuzun isminin gerçek sahibi ve evdeki 'VUHAHAHA Run for Osman haa' şeklindeki espirilerin nedeni, ilham kaynağımız ata veda ettik.  Artık finalde onun için yarışacağız. Run for Run for Osman

    8 Nisan 2010 Perşembe

    Python 1 Satırda QuickSort

    1

    İnternette dolaşırken 3 satırlık bir quicksort fonksiyonuna rastladım. Python'un list comprehension'ının gücünü göstermesi açısından güzel bir örnek fakat bu kodu gerçek hayatta kullanmaktan kaçının. Bunun yerine sort'u kullanın.

    def qsort(L):
        if len(L) <= 1: return L
        return qsort( [lt for lt in L[1:] if lt < L[0]] ) + [L[0]] + qsort( [ge for ge in L[1:] if ge >= L[0]] )
    

    Aslında bunu daha da kısaltmak mümkün:) Python'da and ve or operatörleri sadece boolean tipinde veri döndürmezler. Bu operatörler işlenilen son değeri döndürürler. Bu özelliği 2. ve 3. satırları birleştirmek için kullanabiliriz. Ayrıca fonksiyon tanımını bir lambda ifadesi olarak belirtirsek kodu tek bir satırda yeniden yazabiliriz:

    qsort = lambda L: (len(L)>1 and qsort( [lt for lt in L[1:] if lt < L[0]] ) + [L[0]] + qsort( [ge for ge in L[1:] if ge >= L[0]]) ) or L 
    

    7 Nisan 2010 Çarşamba

    Python Sıralama İpuçları

    0

    Python'da sıralama yapmak istediğiniz  listeniz sayısal olarak değeri olan veri tiplerinden (sayılar,stringler) oluşuyorsa bu listeyi liste.sort() ile sıralamanız kolaydır.

    Farklı veri tiplerinden oluşan bir listeyi sıralamak biraz daha farklı bir durum fakat Python'un sort'unun gücünden burada da faydalanmalıyız. Mümkün olduğunca(her zaman) bir sıralama algoritması yazmaktan kaçınmak pek çok açıdan yararlı. En önemlisi sort metodunun performanslı olması. Python'un sıralaması yıllarca Python ile birlikte gelişen,  farklı durumlar için (değişik boyutlu listeler,  sıralanmışlık derecesi çok ya da az olan listeler, ters sıralanmış listeler) performanslı, teknik açıdan anlaşılması güç yaklaşık 1200 satır C kodundan oluşan bir mergesort algoritması ve her durumda kullanılması geliştiricileri tarafından da tavsiye ediliyor.

    Python'un sort metodunu artık her koşulda kullanmak istiyoruz. Bunu farklı veri tipinden oluşan listeler için kolay ve hızlı bir şekilde kullanmak için "Decorate-Sort-Undecorate" yöntemini kullanırız. "Decorate" listeyi sort metodu için uygun hale getirmek, "Sort" sıralama işlemini gerçekleştirmek, "Undecorate" ise listeyi tekrar eski görünümüne döndürmek anlamına geliyor.  Burada bilmemiz gereken bir diğer nokta sort metodu arraylerden oluşan bir listeyi sıralarken arraylerin ilk elemanlarına göre karşılaştırma yapar. Örneğin [ (1,4,2) , (0,4,5), (3,0,"b") ] için sort metodu listeyi şu şekle sokar: [(0,4,5),(1,4,2),(3,0,"b")].  O halde "Decorate"den kastımız listeyi sıralanmasında karşılaştırılmasını istediğimiz değerler arraylerin başına gelecek şekilde değiştirmektir: [(deger1,nesne1),(deger2,nesne2),....., (degerN,nesneN)]

    Problem:
    Nesnelerden oluşan bir listeyi nesnelerin bir özelliğine göre sıralamak istiyoruz.

    Decorate-Sort-Undecorate(DSU) çözümü:

    nesneler = [nesne1,nesne1,nesne3,nesne4]
    decorated_liste = [(nesne.ozellik, nesne) for nesne in nesneler] # decorate 
    decorated_liste.sort()                                           # sort
    nesneler = [ array[1] for array in decorated_liste ]             # undecorate
    
    Problem 2:
    Dictionary(Sözlük) tipindeki bir nesnemizi sözlüğün anahtar verilerine göre sıralamak istiyoruz.

    DSU çözümü:
    Çözüm yine benzer fakat dictionary'lerin sıralanma gibi bir özelliği olmadığını unutmamalıyız. Sıralanmış değerlere yine bir liste içinden ulaşabiliriz.

    sozluk = {int1:nesne1,int2:nesne2,int3:nesne3}
    ogeler = sozluk.items()                    #decorate  
    ogeler.sort()                              #sort 
    degerler = [array[1] for array in ogeler]  #undecorate (sıralanmış nesneler listesi)
    

    12 Kasım 2009 Perşembe

    Python'da Javascript Kodu Çalıştırmak

    0

    pyv8, Google tarafından geliştirilen ve Google Chrome'da da kullanılan V8 Javascript motoru için yazılmış bir çeşit wrapper. Bu sayede Python programları içerisinde gömülü olarak Javascript kodu çalıştırabiliyoruz. pyv8 V8 API'sini kullanarak çalıştırdığı Javascript kod parçacıklarının sonucu olarak dönen Javascript nesneleri ile Python nesneleri arasında bir köprü kurma görevini yerine getiriyor. Ayrıca Python'da oluşturduğunuz bazı özel sınıfları Javascript'e aktarıp orada kullanmanıza da olanak sağlayabiliyor.

    >>> import PyV8
    >>> ctxt = PyV8.JSContext()          # bir javascript ortamı oluşturduk
    >>> ctxt.enter()                     
    >>> ctxt.eval("1+2")                 # javascript kodunu string argümanıyla çalıştırıyoruz
    3                                    # dönen cevap bir python integerı
    >>> class Global(PyV8.JSClass):      # javascript ile uyumlu bir sınıf
    ...   def hello(self):               # bir javascript metodu
    ...     print "Hello World"          
    ...
    
    >>> ctxt2 = PyV8.JSContext(Global()) # yeni javascript ortamımıza bu sınıfı dahil ettik
    >>> ctxt2.enter()                    
    >>> ctxt2.eval("hello()")            # artık bu sınıfın metoduna javascript içinde erişebiliriz
    Hello World                          # dönen cevap bir python nesnesi
    

    Kütüphane kurulumu ve çalışması için Python haricinde programlara ihtiyaç duyduğu için kaynak dosyadan kurulumu bazı bağımlılıklar gerektiriyor. Bununla ilgili bir belge mevcut: http://code.google.com/p/pyv8/wiki/HowToBuild. Windows kullanıyorsanız çalıştırılabilir kurulum dosyaları ile tek adımda kurulabiliyor.

    Javascript kodu yazarken kullandığımız onclick, XMLHttpRequest, window.open, document.url, DOM elementleri gibi özellikler Javascript'in özellikleri değildirler ve bunlar Javascript motorları tarafından sağlanmaz. Bu özellikleri tarayıcılar eklentiler ile sağlarlar. pyv8 ile bu değişkenleri kullanmaya çalıştığınız zaman tanımlı olmadıklarını belirten bir hata alırsınız.

    8 Ekim 2008 Çarşamba

    python tower of hanoi

    2


    "Tower Of Hanoi" is a mathematical puzzle game. there are lots of python examples around but i couldn't find out one with a good UI.

    As honoi solving depends on a recrusive function, it was hard to run UI and solve hanoi at same time. Pre-solving and running UI is seemed to be a solution but in big numbers of disks i would have to wait quite long time for solving. So i used python threading module and created one more thread for hanoi solver. It looks like this:

    place x disk
    
    place y disk
    keeps going deeper...
    wait for ui
    y disk placed
    
    place z disk
    keeps going deeper...
    wait for ui
    zdisk placed
    
    wait for ui
    x disk placed
    


    You need to have pygame installed to run code.


    download hanoi.py

    5 Temmuz 2008 Cumartesi

    Python sudoku solver

    0

    An easy solver. It doesn't make brute-force . So it's able to solve only simple sudokus where at least one field has no doubt about matcing only one number at any time.  


    #!/usr/bin/python
    # -*- coding: cp1254 -*-
    
    
    #sample board
    board=[[0,4,0,0,2,0,0,0,8],
          [0,8,0,0,0,7,4,5,0],
          [1,0,5,3,0,0,7,0,0],
          [9,0,4,0,3,8,1,0,7],
          [0,0,0,0,0,0,0,0,0],
          [5,0,7,4,1,0,2,0,9],
          [0,0,8,0,0,1,9,0,6],
          [0,9,1,8,0,0,0,2,0],
          [3,0,0,0,4,0,0,7,0]]
    
    def get_row_suitables(y):
       lst=range(1,10)
       for x in range(0,9):
           number=board[y][x]
           if number:lst.remove(number)
       return lst
    def get_column_suitables(x):
       lst=range(1,10)
       for y in range(0,9):
           number=board[y][x]
           if number:lst.remove(number)
       return lst
    def get_square_suitables(y,x):
       ystart=y-(y%3)
       xstart=x-(x%3)
       lst=range(1,10)
       for y in range(ystart,ystart+3):
           for x in range(xstart,xstart+3):
               number=board[y][x]
               if number:lst.remove(number)
       return lst
      
    def get_mutuals(a,b,c):
       mutuals=[]
       for i in a:
           if b.count(i) and c.count(i): mutuals.append(i)
       return mutuals
    def total_zeros():
       total=0
       for y in range(0,9):
           total+= board[y].count(0)
       return total
    def print_board():
       for y in range(0,9):print board[y]
    
    #main loop
    while True:
       has_found_any=0
       for y in range(0,9):
           for x in range(0,9):
               if not board[y][x]:
                   a=get_row_suitables(y)
                   b=get_column_suitables(x)
                   c=get_square_suitables(y,x)
                   d=get_mutuals(a,b,c)
                   if len(d)==1:
                       board[y][x]=d[0]
                       has_found_any=1
                   elif len(d)==0:
                       print "Error! This sudoku is wrong."
                       break
                   else:
                       pass
       if not total_zeros():
           print "Sudoku solved succesfully"
           print_board()
           break
       if not has_found_any:
           print "Sudoku isn't solved"
           break