python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Şubat 2017 Pazartesi

40 satır kodla hesap makinesi yapmak / calculator with 40 lines code


Kopyala yapştır yapmayın diye resim olarak ekledim, baka baka yazarsınız artık !

24 Mayıs 2016 Salı

WS2811 controller (rgb led kontrolü)

Python Code :

import serial,time, pymouse

import thread
import gtk.gdk


mouse = pymouse.PyMouse()
ser = serial.Serial("/dev/ttyACM0",115200,bytesize=8,timeout=.1,parity="N",\
                    stopbits=1,)

class _get_pxc:
    def __init__(self):
        self.color = "000000"
        self.old_color = ""

    def pixel_at(self,x, y):
        rw = gtk.gdk.get_default_root_window()
        pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
        pixbuf = pixbuf.get_from_drawable(rw, rw.get_colormap(), x, y, 0, 0, 1, 1)
        return tuple(pixbuf.pixel_array[0, 0])
    def send_ardu(self,passarg):
       
        while True :

            s = mouse.position()
          
            self.color = self.pixel_at(s[0],s[1])
            if self.color != self.old_color :
                d = "".join("%0.2x"%f for f in self.color) + "\n"
                ser.write(d)
                time.sleep(0.01)
                while not ser.inWaiting():
                    time.sleep(.01)
                z = ser.read(ser.inWaiting())
                self.old_color = self.color         
                time.sleep(0.01)

get_pxc = _get_pxc()
thread.start_new_thread(get_pxc.send_ardu,(None,))

while True: time.sleep(0.1)


Arduino Code:

#include <FastLED.h>



#define LED_PIN     3
#define NUM_LEDS    3
#define BRIGHTNESS  255
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];


String inData;
String rs = "000000";
long r, g, b ;


void setup() {
  Serial.begin(115200);
 
  delay( 3000 ); // power-up safety delay
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(  BRIGHTNESS );

}

void loop(){
    while (Serial.available() > 0)
    {
        char recieved = Serial.read();
        inData += recieved;

        // Process message when new line character is recieved
       if (recieved == '\n')
        {
            int boy = inData.length() - 1;
         
            if(boy == 6){
              rs = inData.substring(0,6);
              long number = strtol( &rs[0], NULL, 16);
              long r = number >> 16;
              long g = number >> 8 & 0xFF;
              long b = number & 0xFF;
              for(int id = 0; id < 3; id++){
                leds[id] = CRGB(g,r,b);               
                }
            FastLED.show();
           
           

           
            rs = "";

            }
            delay(10);
            Serial.print(inData+"\n");



            inData = ""; // Clear recieved buffer
        }
    }
}

12 Mayıs 2016 Perşembe

Raw soket hataları

Her ne kadar Unix sistemlerde RAW soket çok pratik gözükse de aslında kullanımda bir çok problemler vardır.
Bu hataların bazıları(benim başıma gelenler) :
  1. Haddinden büyük paketler (Normalde gönderiyorsanız raw da göndermeniz gerekir), message to long gibi bir hata yükseliyorsa o zaman ethernet kartınıza tecavüz etmekten vazgeçin uyarısı gibi bir uyarıdır.
  2. Aynı nesneyi hem gönderme hem de alma işlemi için kullanmayın. Her gönderimde soketinizin hızı (refleksi) daha da düşer. Minimal TCP (donanım sekmesi) 50 ms gecikme olduğunu var sayarsak sürekli gönderimler donanım tampon belleğini aşacağı için kuyruk oluşur. Bu kuyruk sizin paket eşleştirme yada karşılaştırma işlemlerinizi sekteye uğratır.
  3.  İnternet soket tipi kesinlikle 3 (ALL, 0x0003) olmalıdır. Aksi takdirde donanıma gelen gövdesiz paketleri maalesef görüntüleyemezsiniz.
  4. Dinleme objesinde (server) tampon boyutunu 65535 yapın ki bazı paketler standart paket boyutunu (< 1600) aşmaktadır. Paket boyutu (gelen) tampon değerinizin üzerine çıkarsa ya o paketi alamaz yada bozuk içerikli bir paket görüntülersiniz.
  5. Sanal ağ uygulamalarında mutlaka içkesme (interrupt) kullanmanız gerekir. Ayrıca her bir paket için(gönderme) yaklaşık 1 ms geçikme kullanın ki paketlerin yanıtlarını kontrol edebilin.
  6. Paket alımında (server) mutlaka filtre uygulayın. Paket başlıkları üzerinden yapacağınız filtre sizin alakasız paketleri işlemenize engel olacaktır, bu şekilde yazdığınız aplikasyon daha performanslı çalışacaktır. Filitrenin temel öğesi `source port mac` (kaynak port mac adresi) dır. Farklı bir filitre ancak ana filitrelerden sonra uygulanabilir.

5 Eylül 2015 Cumartesi

Python TCP threading stream(bz2)

import socket
import thread


def run(clientsock,addr):
    "Burada kesinlikle karşılaştırma, sorgu veya koşul eklemeyinz(yanıt süreniz uzar)"
    try:
          
        a=clientsock.recv(BUFF)
                                   
        status = '200 OK'
        clientsock.send('HTTP/1.0 200 OK\r\n')
        clientsock.send('Content-type:application/x-bzip2\r\n')
        clientsock.send('Access-Control-Allow-Origin:*\r\n\r\n')
           
        clientsock.send(sıkılştırılmış_bz2_json_içerik)
        
        clientsock.close()
    except Exception,e:print e
   
class _main(): #CGI+ALL THREAD
    def run(self,salla):
        ADDR = (HOST, PORT)
        serversock = socket(AF_INET, SOCK_STREAM)
        serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        serversock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
        serversock.bind(ADDR)
        serversock.listen(10)
        While True :
            try:
                #Burada kime yetki verecekseniz ona göre thread açın
                thread.start_new_thread(run, (clientsock, addr))

                   
            except Exception,e:print "thr start error :",e
           
if __name__ == "__main__":
    ma_in = _main()
    thread.start_new_thread(ma_in.run,(None,))

Python basit hafıza oyunu (Tkinter)

#! /usr/bin/python
# -*- coding: utf-8 -*-

import os
import thread,time
import random

import math

try:
    dirs = os.path.dirname(os.__file__).lower()
    if "python2" in dirs:
        from Tkinter import *
    elif "python3" in dirs:
        from tkinter import *
except Exception,e : print e

LARGE_FONT = ("Verdana",20)
color = 0

root = Tk()
frame = Frame(root)
root.title("Very Hard Memory Game !")
root.geometry("200x200")
root.resizable(0, 0)

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=8, columnspan=2)
Grid.rowconfigure(frame, 8, weight=1)
Grid.columnconfigure(frame, 0, weight=1)

class _zo : pass
zo = _zo()
zo.foo = []
zo.pick = None
zo.lq =[]
zo.a = {}
zo.level = 0
zo.lev_list = [4,9,16,25,36,49,64,81]
zo.miss = 0


def get_num(num):
    h = sorted(zo.a.keys())
    p = zo.foo.index(num)
    if num in zo.lq and num == zo.pick :
        zo.a["%0.2d_%d"%(p,num)].config(text=num, state="disabled")

        if len(zo.lq) > 1 :
            zo.lq.remove(num)
            zo.pick = ( random.choice(zo.lq))
            zo.a["my_lab"].config(text= "where is %d ?" % zo.pick)
        elif len(zo.lq) == 1:
            zo.lq = []
            zo.foo = []
            zo.pick = None
            zo.level = zo.level +1
            for s in zo.a.keys() :
                zo.a[s].destroy()
            zo.a = {}
            do_cube(zo.lev_list[zo.level])

   
    else:
        zo.miss += 1
        zo.a["my_lab"].config(text="Try again for (%d)!(Miss:%s)"%(zo.pick,zo.miss))   
       




def timot(hu):
    time.sleep(2)
    n = sorted(zo.a.keys())  

    for s in n :
        if not s.startswith("my"):
            y = zo.foo[n.index(s)]
            zo.a[s].config(text=y)
            time.sleep(1)
            zo.a[s].config(text="")
    zo.pick = random.choice(zo.foo)
    for j in n: zo.a[j].config(state="normal")
    zo.a["my_lab"].config(text="where is %d ?" %zo.pick)

def do_cube(many):
    bx = int(math.sqrt(many))
    w = (200+(200*(zo.level*0.15)))
    root.geometry("%dx%d+400+200" %(w,w+(20+(5*zo.level))))
   
   
    color = "orange","red","green","blue","yellow","brown","dodgerblue","pink"
    zo.foo  = random.sample(range(100),many)
    zo.lq = [e for e in zo.foo]

    for y in range(bx):
        for x in range(bx):
            ind = (x*bx) + y 
            rand_no = zo.foo[ind]
           
            butn = Button(frame, bg=color[x], command= lambda rand_no=rand_no:get_num(rand_no), font=LARGE_FONT,state="disabled")
            butn.grid(column=x, row=y, sticky=N + S + E + W)

            zo.a["%0.2d_%d"%(ind,rand_no)] = butn
           
    for x in range(bx):
        Grid.columnconfigure(frame, x, weight=1)
    for y in range(bx):
        Grid.rowconfigure(frame, y, weight=1)

    zo.a["my_lab"] = Label(root,text="ready !")
    zo.a["my_lab"].grid(column=0, row=bx+1, sticky=N + S + E + W,columnspan = bx)
   
   
    thread.start_new_thread(timot,(None,))


do_cube(zo.lev_list[zo.level])


root.mainloop()

2 Eylül 2015 Çarşamba

py installer wxpython error (_core,_core_ etc.)

Şayet wx-2.8-gtk2-unicode modülünde herhangi bir probleminiz yoksa, varsa /usr/lib/python2.7/dist-packeges/ dizinindeki tüm wx dosyalarını silip tekrar kurun.

Aşağıdaki kütüphaneler objektif C dilini derlemesini sağlayacaktır.
    sudo apt-get install gobjc sudo apt-get install gnustep-devel
    Dosyayı indirin. dizine çıkarın,cd komutu ile dizine geçin,  make, sudo make install
    Dosyayı indirin , dizine çıkarın,cd komutu ile dizine geçin, make, sudo make install

     Pyinstaller devoloper indirin.

Dizine çıkarın ve pyinstaller-develop/bootloder dizinine geçin. 
Bu komutu uygulayın python ./waf configure build install

    Çıktı şöyle olacaktır :

    build install
    Linux-64bit detected
    Building LSB bootloader.
    Checking for program gcc or cc           : /usr/bin/gcc
    Checking for program cpp                 : /usr/bin/cpp
    Checking for program ar                  : /usr/bin/ar
    Checking for program ranlib              : /usr/bin/ranlib
    Checking for gcc                         : ok 
    Checking for program lsbcc               : /usr/local/bin/lsbcc
    Checking for LSB build tools >= 4.0      : LSB >= 4.0 is required




    pyinstaller ana dizinine geçip
    sudo python  setup.py install

    Şimdi gönül rahatlığı ile wx aplikasyonunuzu uygulamaya dönüştürebilirsiniz.

    pyinstalller --debug --onefile --window uygulamanız.py

    Uyarılar:  64bit Ubuntu 14.04 LTS de uygulanmıştır. Uygulama adınızda 'wx' kelimesini kullanmayınız..

31 Ekim 2013 Perşembe

sys.argv nedir? ne işe yarar ?

sys.argv  boş haliyle sizin yazdığınız scriptin adını döndürür(sys.argv[0]).
Bir program betiği yazdınız ve onun başlangıçta bazı opsiyonlarla çalıştırılmasını istiyorsunuz.
Bunun için:
>>> python example.py -u -o diye bir program çalıştıralım.
Burada programın içine:
if len(sys.argv) > 1: #demekki birden fazla argüman tanımlanmış:
    //argümanlar iterasyonu//
    "-f" ise dosya çıktısı olmayacak
    "-u" Grafiksel arayüz olmayacak
    ....
Şayet argüman verilmeden scriptinizin  çalışması demek tüm beceri ve kabiliyetlerin kullanılacağına işaret etmektedir.
Bu argümanlar bazen bir data,url,liste, veri tabanı vs aklınıza gelecek her şey olabilir.

Örnek win32 :
cmd>> ping debian.org -t //-t parametresi paket sayısının ve zamanının bir kısıtlama olmadan sonsuz olacağını işaret etmektedir. Bu parametreyi yazmazsanız ping.exe 4 paket gönderip size ortalama süreyi hesaplıyacaktır.