Her 'bütün' ayrıntılardan oluşur.Ayrıntılar içinde kaybolmamak için sizde kendi küçük bütünlüklerinizi oluşturun..
13 Şubat 2017 Pazartesi
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ı.
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
}
}
}
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
}
}
}
Etiketler:
arduino,
arduino mega,
python,
Ubuntu,
ws2811
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.
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.
Etiketler:
3 pahse,
generator,
jenerator,
kendinden uyartım,
self exciting
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) :
Bu hataların bazıları(benim başıma gelenler) :
- 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.
- 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.
- İnternet soket tipi kesinlikle 3 (ALL, 0x0003) olmalıdır. Aksi takdirde donanıma gelen gövdesiz paketleri maalesef görüntüleyemezsiniz.
- 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.
- 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.
- 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.
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.
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.
Kaydol:
Kayıtlar (Atom)


