Monday, December 22, 2014

Python'da Doğrusal bir kestirim çizgisi çizmek

Problem: Elimizde bazı sayılar var ve bu sayılara doğrusal bir trend/kestirim çizgisi çekmek istiyoruz?

Çözüm:
Önce Kaynaklar:

Farklı çizimler için: http://stackoverflow.com/questions/8409095/matplotlib-set-markers-for-individual-points-on-a-line
Doğrusal kestirim / lineer regresyon için : http://stackoverflow.com/questions/10048571/python-finding-a-trend-in-a-set-of-numbers

Önce yukarıdaki ikinci kaynaktan bir regresyon kodu aldık, sonra bir çizgi hesaplattık. Dikkat edilmesi gereken nokta, x ekseni hep 1,2,3.... vs diye başlıyor. Bu da range(##) komutu ile sağlanıyor.
import matplotlib.pyplot as plt

def linreg(X, Y):
"""
return a,b in solution to y = ax + b such that root mean square distance between trend line and original points is minimized
"""
N = len(X)
Sx = Sy = Sxx = Syy = Sxy = 0.0
for x, y in zip(X, Y):
Sx = Sx + x
Sy = Sy + y
Sxx = Sxx + x*x
Syy = Syy + y*y
Sxy = Sxy + x*y
det = Sxx * N - Sx * Sx
return (Sxy * N - Sy * Sx)/det, (Sxx * Sy - Sx * Sxy)/det

x = [12, 34, 29, 38, 34, 51, 29, 34, 47, 34, 55, 94, 68, 81]
a,b = linreg(range(len(x)),x) #your x,y are switched from standard notation
print a,b
extrapolatedtrendline=[a*index + b for index in range(20)] #replace 20 with desired trend leng

#combine two arrays
total=x+extrapolatedtrendline
plt.plot(range(len(x)),x,'ro--')
plt.plot(range(len(extrapolatedtrendline)),extrapolatedtrendline)

plt.ylabel("sayılar")
plt.show()




Saturday, April 12, 2014

Linux'de Tek Bir Programın, İstenildiği Zaman İnternet Bağlantısını Engellemek

Bazen bir uygulamanın internet erişimini engellemek isteriz, bunun için tüm interneti kaldırmak yerine o uygulamanın internet erişimini sınırlamakta fayda vardır. Dahası, o uygulamayı sadece istediğimiz zaman “internet erişimi engelli” olarak çalıştırmak isteyebiliriz. Konuyla ilgili bir çok forumda değişik anlatımlar var. Ben biraz daha basitleştirmeye çalışacağım.

Kısaca yapacağımız:
- “no-internet” diye bir grup oluşturup, programları sg komutu ile bu “no-internet” grubu ayarlarına göre çalıştıracağız. 
- ama “no-internet” grubunun da internet bağlantısını iptables ile koparacağız 
- ayrıca kendi kullanıcı adımızı da “no-internet” grubuna ekleyeceğiz ki, programları “no-internet” grubu ile çalıştırdığımızda bize şifre sormasın


Adım 1 – Bir “no-internet” grubu oluşturup kendi kullanıcı adımızı (Benim durumumda “baris”'i) bu gruba ekliyoruz.

sudo groupadd no-internet
sudo usermod -a -G no-internet baris

Şimdi logout olup çıkmanız gerekiyor ki, değişiklikler etkili olsun, ya da Adım 5'i bekleyin.


Adım 2 – Önce “Ana Kodu”muzu (“script”) yazacağız. Kodun ismi “ni” olacak. Komut satırında:

sudo nano /usr/bin/ni

yazıyoruz. Nano bir text editörü, açılan text editöründe

#!/bin/bash
sg no-internet “$1”

yazıyoruz. Ctrl-X ile save edip çıkıyoruz. Yukarıdaki komut ile ni 'den sonra gelecek ilk komutu ($1) no-internet grubu kimlik bilgileri ile çalıştıracağımızı belirtiyoruz.

Adım 3 - Şimdi de “ni” programını çalıştırılabilir (executable) bir hale getirelim:

sudo chmod +x /usr/bin/ni


Dikkat aşağıdakilerden bir tanesini uygulayın, ikisini de uygulamanız zarar vermez ama sonra ne yaptığınızı bir yere yazın. Ben (4.2)'yi tavsiye ediyorum.

Adım 4.1- Şimdi de “no-internet” grubumuz için kuralları oluşturalım:

sudo nano /etc/network/if-pre-up.d/iptables_no-internet_rule

Bu dosyanın içine :

#!/bin/bash
iptables -A OUTPUT -m owner –gid-owner no-internet -j DROP

yazıp save edip çıkıyoruz. Ardından bu dosyayı da çalıştırılabilir-executable yapıyoruz.

sudo chmod +x /etc/network/if-pre-up.d/iptables_no-internet_rule

Adım 4.2- ben yukarıdaki işlemin işlemediğini gördüm. Kullandığım distrodan dolayı herhalde

sudo nano /etc/network/if-up.d/iptables_no-internet_rule

Bu dosyanın için de

#!/bin/bash
iptables -I OUTPUT 1 -m owner –gid-owner no-internet -j DROP

yazıp save edip çıkıyoruz. Ardından bu dosyayı da çalıştırılabilir-executable yapıyoruz.

sudo chmod +x /etc/network/if-up.d/iptables_no-internet_rule


Adım 5 – Komutu çalıştırın

ni firefox
ni “komut 1 komut2”
ni komut


Referanslar: http://ubuntuforums.org/showthread.php?t=1188099



Sunday, March 16, 2014

Linux'de alt dizindeki tüm dosyaları kopyalamak/move

Komutu ile alt dizinlerdeki tüm jpg'leri, mevcut dizine kopyalamak mümkün, çok çok DİKKATLİ olun. Sadece kopyalamak için mv 'yi cp ile değiştirin

find ./ -name '*.jpg' -exec mv '{}' ./ \;

Monday, February 10, 2014

LEGO EV3 - Yürüyen daha doğrusu emekleyen robot

LEGO EV3'te uzun zamandır yürüyen bir robot yapıp yapmama kısmını düşünürken, bir iki denememi de paylaşayım...
Önce iki motorlu yürüyen bir robot yapmaya niyetlendim, hareketleri ev halkını çok güldürdü. İki motorlu yürüyen robotta temel problemler:
- Senkronizasyon sorunu çok önemli
- ikincisi de kablolardan dolayı EV3 kontrol ünitesini yukarı koymanız gerek

İki tane yürüyen robot denemesini burada paylaşıyorum... Birincisi çift motorlu, diğeri tek motorlu.

Çift Motorlu Robot

Tabii adaptörden dolayı, gücü düşük tutmak zorundaydım. O yüzden robot yavaş hareket ediyor gözükebilir. Bunları bir de pil ile deneyeceğim daha sonra... Senkronizasyon sorunlarına dikkat


Tek Motorlu Yürüyen Robot

Bir yandan da en basit yürüyen robotu yapmaya çalışma fikri uyandı. Masa kaygan olduğundan yürümekte zorluklar olduğu için ayaklara pabuç vari bazı dişliler taktım. Tabii ki tek motorlu olduğundan EV3 ünitesini üstüne yerleştiremedim.

Tek motorlu yürüyen robotun videosu da aşağıdadır. Çift motorludan daha iyi çalışıyormuş gibi gözüküyor.

LEGO EV3 - Giriş

LEGO EV3 daha çok oyuncak diye bilinse de, robot prototipleme konusunda piyasadaki "bant-makas-vida-çelik aksam" çıkmazından çok daha fazla opsiyon tanıyor.

EV3'ün iki modeli var, biri ev (HOME) biri de eğitim (EDUCATION)
Eğitim modelini tavsiye ederim ama bende ev tipi modeli var.

EV3'ün en önemli bir kaç sorunu:
- Kabloların kalın ve çok da esnek olmaması
- 6 kalem pil ile çalışması
- Labview kullanmanın kolay ama illa windows veya Virtualbox istemesi (Lejos'da var gerçi)

Önce 6 kalem pil alma fikri canımı çok sıktı. Bir de daha sonra öğrendiğim kadarı ile, 2-3 motoru eş zamanlı kullanmak çok fazla güç çekiyor, yani 500 mAh-9V'luk bir adaptör ancak motor gücünün %8'ini felen verebiliyor. Zorlanınca da EV3 kendini kapatıyor.

Adaptör :

Önce adaptör'den başlayalım - 6 pil alana kadar bir adaptör ile başlamak en iyisi geldi. Adaptörü nasıl bağlayacağınızı bilmiyorsanız, hiç bulaşmayın EV3'e zarar verebilirsiniz. Sakın ama sakın voltmetresiz bu işi yapmayın. Bu konuda hiçbir sorumluluk kabul etmiyorum.
















Ardından ilk robotu yapmak için uğraşmak 1 saat civarında tamam oldu. Fakat aşağıdaki şekilden görüldüğü üzere
http://www.legomindstormsev3.com/robotarm/
Adresindeki robotu yapmak yerine kendim doğaçlama birşeyler deneyeyim dedim. Doğaçlama biraz daha EV3 sistemi ile ilgili fikir veriyor. En önemlisi, büyük servoların ağırlığından dolayı dengeli bir robot kol yapmanız gerek.

Robot kol:

Robot kol için büyük ve ağır servoları daha aşağı tarafta, mümkünse dirsek altı noktalarda, orta servoyu da el hareketi için kullanmak gerekiyor. Aşağıdaki yaptığım yanlışlardan biri görülmekte, ağır servoları üst tarafa yerleştirince, denge problemleri ortaya çıkıyor.



















bir iki gün için 3-4 robot denemesi yapmak mantıklı.
Bir de unutmamak gereken bir nokta var
Motorlar A-B-C-D, sensörler 1-2-3-4'e bağlanmalı






Friday, February 07, 2014

Network appleti gidince

Mate Desktop'ta en sağ üstte network bağlantılarını gösteren icon kaybolursa
nm-applet
yazmak yeterli.

Thursday, February 06, 2014

LEGO EV3'ü Linux'te kullanma

Linux'te LEGO EV3 kullanmak gerçekten zormuş.
lsusb
veya 
dmesg | grep LEGO
dememe rağmen bir türlü device'i mount edemedim.
En sonunda virtualbox ile windows'dan labview'a mahkum oldum.
Fakat virtualbox'da önce Extension'ı yüklemeniz lazım o da
www.virtualbox.org 'da Downloads da var
VirtualBox 4.x.x Oracle VM VirtualBox Extension Pack
tüm sistemler için aynı.
Fakat extension kurmama rağmen LEGOyu veya USB'yi görmedi. Bir forumda gördüğüm aşağıdaki komutu yazdım. Virtualbox'da mevcut kullanıcının bir diski eklemesi için kendi kullanıcı ismini vboxusers grubuna eklemesi gerekiyormuş.
      sudo usermod -a -G vboxusers $USER
ardından bir çıkıp gireceksiniz (log-off ardından log in)
artık virtualbox USB'leri görecektir. 

Ses gidince

Linuxte ses gidince önce
pulseaudio -k && sudo alsa force-reload
deneyip de bir türlü sesi açamayınca en sonunda
pulseaudio --start
yaparak sesi tekrar almayı başardım

Sunday, June 16, 2013

Raspberry Pi and Arduino (Gertboard) serial communication

A serial communication between Raspberry pi and Gertboard's ATMEGA328p chip
Remember both system work at 3.3 V.
NEVER CONNECT RASPBERRY PI and ARDUINO DIRECTLY.
But if you have Gertboard, Atmega328p on Gertboard is working on 3.3V
There are two codes, one for Arduino, the other for Raspberry Pi

Also remember the Jumpers

  • J7 - 3.3V jumper should be inserted
  • Jumper - between MCTX-GP15
  • Jumper - between MCRX-GP14



-----------------------This is the code for Arduino-----------------------------------------

char incomingByte=0;
char inData[20];
int x=0;
 void setup() {
  // initialize serial:
  Serial.begin(9600);
}
 void loop() {
    Serial.print("hello print");
    x=0;
    while (Serial.available()>0){
      incomingByte=Serial.read();
      inData[x]=incomingByte;
      inData[x+1]='\0';
      x++;
    }
    Serial.println(inData);
    delay(1000);
}
-----------------------------------------------------------------------------------------------------

And there is the code for Raspberry Pi based on Python
-----------------------This is the code for Raspberry Pi-----------------------------------------


from time import gmtime, strftime
import time
import serial
import struct
ser = serial.Serial(‘/dev/ttyAMA0‘, 9600)

while 1:
        ser.write(“testing”)
        temp=strftime(“%Y-%m-%d %H:%M:%S”, gmtime())+'\t'+ser.readline()
        print(temp)
        time.sleep(1)
-----------------------------------------------------------------------------------------------------



Sunday, February 24, 2013

Nautilus desktop problem in Openbox

If you are using Openbox and if time to time nautilus blocks your menus; you should just type this in the terminal:

gsettings set org.gnome.desktop.background show-desktop-icons false
do not run with "sudo" since you want to change the settings for the current user



Wednesday, January 02, 2013

Ubuntu-Wine Office 2003 and 2007 together

From now on, I will post my experiences on Ubuntu, so I can find my solutions to problems later on...
My first post is on having Office 2003 and Office 2007 on Ubuntu with Wine 1.5.

Every time I open Word 2003 after 2007 or vice versa, it tries to reinstall certain files. It was annoying...
Here is a good solution that worked for me:

From terminal write
regedit

The opening window is the classic regedit we have on windows
In the Regedit window select:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options

Then from the menu:
Edit>New> DWORD value
add NoReReg with value 1
So my line looks like
NoReReg        REG_DWORD     0x00000001 (1)
Do the same for
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options


Tuesday, March 08, 2011

My web page - www.barissanli.com

Recently I connected all my social web links with each other.
You can see my projects at www.barissanli.com

Friday, January 28, 2011

Back to civilian life

Hopefully, same office, same contact details, back to civilian life as of 19.01.2011....

Wednesday, November 17, 2010

Saturday, September 25, 2010

Anadolu Feneri

I am working as a signalman (vardabandra) marine at the Anadolu Feneri station for my compulsory military service, 4 more months to go

Learning about communicating with ships and Bosphorus traffic