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 !

14 Ocak 2017 Cumartesi

Raspberry PI Performansı

Merhaba!

Açık hat şemamız :

[PC (Ethrnet)] <> [(Ethernet)Raspbery PI(USB)]<>[(USB)Teensy(Digital PIN)](OUT)

Peki Yukardaki şemaya göre bir bytelık haberleşme ile tek dijital pinden alacağımız çıkış frekansı nedir ? Diye abuk bir soru kafama takıldı.



  • Paket Sayısı : 100.000 (yüzbin)(50000 HIGH(0x01),50000 LOW(0x00))
  • Haberleşme tipi : Bidirectional (zaten Unidirectional olursa portlar şişiyor)
  • Bağlantı (Ethernet) : Direkt bağlantı (switch veya router yok)
Sonuç : 
  • Gönderme/Alma süresi : 121,033508432 saniye.
  • Paket zamanı : 1,2103 milisaniye
  • Dijital çıkış frekansı : 750Hz (yaklaşık olarak)
Osilaskop çı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

Kendinden uyartımlı jeneratörler (self exciting generators)

Bu jeneratörlerde en önemli parça AVR yani voltaj regülatörüdür. Herhangi bir bağlantısının çıkması/kopması durumunda jeneratörünüzün tahrik yada tahrik redresörün yanmasına sebep olabilir.
Kesinlikle test etmeden önce  AVR bağlantılarını kontrol edin.

Genelde buna benzer bir bağlantı mevcuttur. Böyle bir şemada fırçalı bir aktarım söz konusudur, bakım maliyetlerinden dolayı genelde fırçasız imal edilirler.

Fırçasız bir jeneratör için çalışma şekli :
Alan (F+, F-) oluşan manyetik alan uyartım armatüründe 3 faza döner doğrultulup aynı mil üzerindeki ana armatür sargılarına iletilir. Ana armatürdeki manyetik alan ana çıkış sargılarını tahrik eder.

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.

7 Şubat 2016 Pazar

Django, flask, pyramid

Hazır web framework kullanmak kahraman olmak değildir. Hazır modüller genel projenizi canlandırdığı gibi aslında yaptığınız şey sadece ilgili dağıtımı geliştirmekten başka bir şey değildir.

Peki bir statik method yada shared class yapamayan birinin web framework kullanması tamamen saçmalıktır. Kısıtlı bir talebiniz olmasına rağmen neden komplex bir yapı kullanıyorsunuz ?

Cin olmadan şeytan çarpılmaz ! Kolay olan güzel olan değildir.

4 Şubat 2016 Perşembe

Google sayfaları neden geç açılıyor ?

Bu aralar dikkatimi çeken bir olay gerçekleşti.
Google oturumum açıkken youtube videolarının açılması yavaşladı. Önceleri bunun internet hızı ile alakalı olduğunu sandım. Fakat gerçekte öyle olmadığını gördüm.

Gezinti sekmeleri 25 e ulaştığında, bu sayfalar oturum takibi yapıyor ve gezdiğiniz sayfalar aynı firmaya aitse oturum bilgilerini tutan sisteme (ki burada youtube oluyor) haddinden fazla oturum bilgileri gidiyor. Bu yanıt sürenizin uzamasına sebep oluyor. Sadece kullanıcı bilgilerini kaydetmek değildir mesele, hesabın güvenliği göz önüne getirildiğinde bu geçikmeyi haklı görebilirsiniz.

Size tavsiyem mümkün oldukça bir firmanın birden fazla servisinden yaralanıyorsanız asla oturum açmayın.