Thursday, August 23, 2012

Zaman Serisi Tahmini (Forecasting), R, VAR, rpy2

Zaman serisi modellemesinde VAR modelleri bugunlerde en populer olanlari. VAR, vector autoregression kelimelerinden geliyor, yani tek bir zaman serisi degil, birkac tanesine birden, ayni anda modellemeye ugrasiyoruz.

Autregression, zaman serisinin kendi kendisiyle regresyona sokulmasidir; bilindigi gibi regresyon y = f(x) modellemesinde gurultulu elde edilen y ile, x degerleri arasindaki baglantinin bulunmasina yardim eder (eger f(x) lineer ise iyi sonuclar da bulur). Tek boyutlu zaman serisi modellemesi icin soyle bir numara kullanilir, serinin kopyasi alinir, bir geri kaydirilir, x bu kaydilirilmis seri, y esas seri olur, bu ikili regresyona sokulur. Boylece zaman serisinin kendisini ve regresyon mekanizmasi kullanilarak zaman serisi tahmini yapilabilir.

VAR ise bunu cok boyutlu yapar. Her seriyi hem kendisi, hem de diger tum serilerin p kadar gecmis degeri goz onune alinir. Oldukca guclu bir metottur.

Bu alanda unlu isimlerden Sims'i bilmek gerekir, 1980 yilinda yazdigi ve kendi alanini elestirdigi bir makalede makroekonomide yapisal modeller yerine, ciplak veriye bakmak gerektigini, ve bunu yapmak icin her zaman serilerine tek baslarina degil tum diger serilere de baglantilarini goz onune alarak incelemek gerektigini soyler. VAR matematigi buradan cikmistir. Granger ismi de vardir, VAR modellemesi sonrasi serilerin "birbirine ne kadar etki ettigini" hesaplayan "Granger istatistigi" mesela ona aittir.

Isin matematigine sonra daha detayli girebiliriz, simdilik kodlama acisindan ornekleri verelim. Bu alanda R kodculari cok aktif, o yuzden bir R paketi vars kullanacagiz, ve onu Python uzerinden cagiracagiz.

Diyelim ki bir predict-1.csv icinde bir ulkenin GDP ve tuketim verileri (cons) var, 1959-2009 arasi icin (bu oldukca standart bir veri seti). Once R kurulur

sudo apt-get install r-base-dev r-base python-rpy2

Sonra R'ye girilir

> install.packages("vars")

Simdi su R kodu kullanilabilir

library("vars")

file = "predict-1.csv"
a <- read.csv(file, header = TRUE, sep = ",", na.strings="")

impute.med <- function(x) {
    z <- median(x, na.rm = TRUE)
    x[is.na(x)] <- z
    return(x)
}

a2 <- sapply(a, function(x){
    if(is.numeric(x) & any(is.na(x))){
            impute.med(x)
        } else {
            x
        }
    }
)

out <- VAR(a2, p = 2, type = "const")
out.prd <- predict(out, n.ahead = 30, ci = 0.95)


Bunu Python'dan cagirmak icin rpy2 kullaniriz,

import os, sys
import numpy as np
import rpy2.robjects
from datetime import date, timedelta

f = file("predict.R")
code = ''.join(f.readlines())
result = rpy2.robjects.r(code)
res = [['gdp','cons']]
for i in range(30):
    res.append([str(result[0][0][i]),str(result[0][1][i]) ] )

res = np.array(res)
np.savetxt('predict-2.csv',res,delimiter=",",fmt='%s')


Python isledikten sonra sonuc predict-2.csv icinde olacak. Sonuclar 2009 sonrasi 30 sene sonrasi icin gdp ve tuketim rakamlarini tahmin edecek.

Eger pur Python kullanmak isteseydik, scikits statsmodels adinda bir paketi de kullanabilirdik. Bu durumda hic R kodlamasi olmayacak, kurmak icin

https://github.com/statsmodels/statsmodels

Bu kod

import os
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.api import VAR
 
def pad(data):
    bad_indexes = np.isnan(data)
    good_indexes = np.logical_not(bad_indexes)
    good_data = data[good_indexes]
    interpolated = np.interp(bad_indexes.nonzero()[0], good_indexes.nonzero()[0], good_data)
    data[bad_indexes] = interpolated
    return data

data = np.genfromtxt("predict-1.csv", skip_header=1, delimiter=',')
data = np.apply_along_axis(pad, 0, data)
model = VAR(data)
res = model.fit(2)

f = res.forecast(data[-2:], 30)
np.savetxt('predict-3.csv',f,delimiter=",",fmt='%s')


Ustteki kod sonuclar predict-3.csv icine yazar.

VAR ile zaman serisi tahminlerinde onemli bazi konular incelenen verinin (zaman serisinin) duragan (stationary), ve beraber entegre (co-integrated) olup olmadigidir -- bu durumlarda bazi ek numaralar kullanmak gerekebilir, mesela duragan bir veri seti yoksa serinin farklarini kullanmak gibi..

Ana veri

gdp,cons
2710.349,1707.4
2778.801,1733.7
2775.488,1751.8
2785.204,1753.7
2847.699,1770.5
2834.390,1792.9
2839.022,1785.8
2802.616,1788.2
2819.264,1787.7
2872.005,1814.3
2918.419,1823.1
2977.830,1859.6
3031.241,1879.4
3064.709,1902.5
3093.047,1917.9
3100.563,1945.1
3141.087,1958.2
3180.447,1976.9
3240.332,2003.8
3264.967,2020.6
3338.246,2060.5
3376.587,2096.7
3422.469,2135.2
3431.957,2141.2
3516.251,2188.8
3563.960,2213.0
3636.285,2251.0
3724.014,2314.3
3815.423,2348.5
3828.124,2354.5
3853.301,2381.5
3884.520,2391.4
3918.740,2405.3
3919.556,2438.1
3950.826,2450.6
3980.970,2465.7
4063.013,2524.6
4131.998,2563.3
4160.267,2611.5
4178.293,2623.5
4244.100,2652.9
4256.460,2669.8
4283.378,2682.7
4263.261,2704.1
4256.573,2720.7
4264.289,2733.2
4302.259,2757.1
4256.637,2749.6
4374.016,2802.2
4398.829,2827.9
4433.943,2850.4
4446.264,2897.8
4525.769,2936.5
4633.101,2992.6
4677.503,3038.8
4754.546,3110.1
4876.166,3167.0
4932.571,3165.4
4906.252,3176.7
4953.050,3167.4
4909.617,3139.7
4922.188,3150.6
4873.520,3163.6
4854.340,3117.3
4795.295,3143.4
4831.942,3195.8
4913.328,3241.4
4977.511,3275.7
5090.663,3341.2
5128.947,3371.8
5154.072,3407.5
5191.499,3451.8
5251.762,3491.3
5356.131,3510.6
5451.921,3544.1
5450.793,3597.5
5469.405,3618.5
5684.569,3695.9
5740.300,3711.4
5816.222,3741.3
5825.949,3760.2
5831.418,3758.0
5873.335,3794.9
5889.495,3805.0
5908.467,3798.4
5787.373,3712.2
5776.617,3752.0
5883.460,3802.0
6005.717,3822.8
5957.795,3822.8
6030.184,3838.3
5955.062,3809.3
5857.333,3833.9
5889.074,3847.7
5866.370,3877.2
5871.001,3947.9
5944.020,3986.6
6077.619,4065.7
6197.468,4137.6
6325.574,4203.2
6448.264,4239.2
6559.594,4299.9
6623.343,4333.0
6677.264,4390.1
6740.275,4464.6
6797.344,4505.2
6903.523,4590.8
6955.918,4600.9
7022.757,4639.3
7050.969,4688.7
7118.950,4770.7
7153.359,4799.4
7193.019,4792.1
7269.510,4856.3
7332.558,4910.4
7458.022,4922.2
7496.600,5004.4
7592.881,5040.8
7632.082,5080.6
7733.991,5140.4
7806.603,5159.3
7865.016,5182.4
7927.393,5236.1
7944.697,5261.7
8027.693,5303.3
8059.598,5320.8
8059.476,5341.0
7988.864,5299.5
7950.164,5284.4
8003.822,5324.7
8037.538,5345.0
8069.046,5342.6
8157.616,5434.5
8244.294,5466.7
8329.361,5527.1
8417.016,5594.6
8432.485,5617.2
8486.435,5671.1
8531.108,5732.7
8643.769,5783.7
8727.919,5848.1
8847.303,5891.5
8904.289,5938.7
9003.180,5997.3
9025.267,6004.3
9044.668,6053.5
9120.684,6107.6
9184.275,6150.6
9247.188,6206.9
9407.052,6277.1
9488.879,6314.6
9592.458,6366.1
9666.235,6430.2
9809.551,6456.2
9932.672,6566.0
10008.874,6641.1
10103.425,6707.2
10194.277,6822.6
10328.787,6913.1
10507.575,7019.1
10601.179,7088.3
10684.049,7199.9
10819.914,7286.4
11014.254,7389.2
11043.044,7501.3
11258.454,7571.8
11267.867,7645.9
11334.544,7713.5
11297.171,7744.3
11371.251,7773.5
11340.075,7807.7
11380.128,7930.0
11477.868,7957.3
11538.770,7997.8
11596.430,8052.0
11598.824,8080.6
11645.819,8122.3
11738.706,8197.8
11935.461,8312.1
12042.817,8358.0
12127.623,8437.6
12213.818,8483.2
12303.533,8555.8
12410.282,8654.2
12534.113,8719.0
12587.535,8802.9
12683.153,8865.6
12748.699,8888.5
12915.938,8986.6
12962.462,9035.0
12965.916,9090.7
13060.679,9181.6
13099.901,9265.1
13203.977,9291.5
13321.109,9335.6
13391.249,9363.6
13366.865,9349.6
13415.266,9351.0
13324.600,9267.7
13141.920,9195.3
12925.410,9209.2
12901.504,9189.0
12990.341,9256.0




Wednesday, August 22, 2012

Kolon Degerleri Arasinda Harfleme (Spelling) Hata Farki Var mi?

Diyelim ki bir adres kolonundaki (cadde, numara, apartman) degerleri girilirken hata yapilip yapilmadigini kontrol etmek istiyorsunuz. Acaba tabanda birbirine benzeyen ve arasinda sadece harfleme hatasi kadar fark olan iki adres var mi? Kontrol etmek icin onceki yazida gordugumuz levenshtein uzakligini kullanabiliriz. Isin guzel tarafi bu fonksiyonu direk Postgresql icinden kullanabiliriz.

Aktive etmek icin, tabana baglanin ve

# CREATE EXTENSION fuzzystrmatch;

Test etmek icin

# select levenshtein('elma','alma');

Sonuc

 levenshtein
-------------
           1
(1 row)

Yani elma ve alma arasindaki fark 1 'degisimdir'. Levenshtein uzakligi her turlu degisime bakar, harf eklemek, silmek gibi operasyonlar hep uzakligi arttirir.

Sorguya donelim. Once ilgilendigimiz kolonu ve onun tablosunu kendisiyle birlestiririz (join), yani tum adresleri tum diger adreslerle yanyana getirmeye ugrasiyoruz, bunu yapmanin en kolay yolu da SQL'deki join operasyonudur. Bilindigi gibi iliskisel teoride join bir kartezyen birlesimidir, iki tablo birlestirilince her satir, her diger satirla yanyana gelmis olur, yani tum mumkun kombinasyonlari elde ederiz. Yeni ANSI SQL icinde bunu ozellikle belirtmek gerekiyor, bunun icin cross join adli komut var.

select adres, sub1.adres
from tablo
cross join (
 select adres from tablo
 ...
) as sub1
where levenshtein(adres, sub1.adres) between 1 and 3
...


Bu komutla arasinda 1 ila 3 fark olan adresleri bulmus olacagiz. 0 uzakligi kullanmadik, bu iki adresin ayni olmasi demek olurdu. Onlarla ilgilenmiyoruz. 3'ten fazla uzaklik ise herhalde o adresin hakikaten degisik bir fiziki adres oldugu anlamina gelirdi. 

Matriste Bos Degerleri Yakin Degerle Doldurmak (Interpolation)

Eger icinde nan yani "tanimsiz" ve "bos" degerler olan bir vektorumuz var ise, bu tanimsiz degerlerin yerine, yine ayni vektorde, ve o bos degerin iki yanindaki degere yakin olan bir degerle doldurmak isteyebiliriz.

Mesela vektor

1, nan, nan, 2, 2, nan, 0

olsun, ve nan diyen yerlerde 1 ve 2 arasi, sonraki nan yerine 2 ve 0 arasi degerler olmali.

data = np.array([1, nan, nan, 2, 2, nan, 0])
print data

bad_indexes = np.isnan(data)
good_indexes = np.logical_not(bad_indexes)
good_data = data[good_indexes]
interpolated = np.interp(bad_indexes.nonzero()[0], good_indexes.nonzero()[0], good_data)

data[bad_indexes] = interpolated

print data


Sonuc

[ 1.          1.33333333  1.66666667  2.     2.     1.        0.    ]

Peki islemi bir matris uzerinde, ve her kolon icin ayri ayri yapmak istersek?

def pad(data):
    bad_indexes = np.isnan(data)
    good_indexes = np.logical_not(bad_indexes)
    good_data = data[good_indexes]
    interpolated = np.interp(bad_indexes.nonzero()[0], good_indexes.nonzero()[0], good_data)
    data[bad_indexes] = interpolated
    return data

A = np.array([[1, 20, 300],
              [nan, nan, nan],
              [3, 40, 500]])

A = np.apply_along_axis(pad, 0, A)


Sonuc

[[   1.   20.  300.]
 [   2.   30.  400.]
 [   3.   40.  500.]]


Kaynak

Tuesday, August 14, 2012

OpenCV 2.4.1 Hareket Vektorleri, Kenarlar

OpenCV 2.4.1'de guzel gelismeler var; demo kodlari daha temiz. Mesela samples/python2/opt_flow.py kodu alttaki goruntuyu verir, ikinci resim edge.py orneginden. Bu kodlar, cagrilar ve onlarin geri dondurdugu veriler biraraya konarak ilginc uygulamalar gerceklestirilebilir. Mesela ilk cikti biz kafayi yana kaydirinca o hareketin vektorlerini hesapladi. Ikinci resim her karede hizli bir sekilde kenar hesaplamasi yapiyor. Bunlar biraraya konarak algilayici birlestirimi (sensor fusion) ile ekranda hareketin tetikledigi / onu baz alan obje tanimlamasi, takibi gerceklestirilebilir. Hareket vektorleri ekranda sadece belli bir bolgede var, yine ayni bolgeler icin ikinci algilayicidan kenar bilgileri geliyor...




Monday, August 13, 2012

Gaussian Dagilimi, Contour Plot

3 boyutlu Gaussian dagilimi yukaridan cevrit (contour) olarak cizebilen kod parcasi.

# Multivariate gaussian, contours
#
import scipy.stats
import numpy as np
import matplotlib.pyplot as plt

def norm_pdf(b,mean,cov):
   k = b.shape[0]
   part1 = np.exp(-0.5*k*np.log(2*np.pi))
   part2 = np.power(np.linalg.det(cov),-0.5)
   dev = b-mean
   part3 = np.exp(-0.5*np.dot(np.dot(dev.transpose(),np.linalg.inv(cov)),dev))
   dmvnorm = part1*part2*part3
   return dmvnorm

x = np.arange(55., 80., 1)
y = np.arange(80., 280., 1)
X, Y = np.meshgrid(x, y)

Z = np.zeros(X.shape)
nx, ny = X.shape
mu = np.array([  65.89350086,  193.21741426])
sigma = np.matrix([[    7.84711283,    25.03111826],
                    [   25.03111826,  1339.70289046]])
for i in xrange(nx):
    for j in xrange(ny):
        Z[i,j] = norm_pdf(np.array([X[i,j], Y[i,j]]),mu,sigma)
       
levels = np.linspace(Z.min(), Z.max(), 10)
plt.contour(X, Y, Z, colors='b', levels=levels)
plt.show()



Friday, August 10, 2012

OpenCV 2.4

Ubuntu 12.04 LTS icin en son OpenCV kurulusu.

http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/

Basit "resim cekmek" icin (t tusuna basilinca ekran goruntusu diske jpg olarak yazilir),

import cv

class Capture:
   
    def save(self, pic):
        cv.SaveImage('deneme' + str(self.i) + '.jpg', pic)
   
    def __init__(self):
        self.i = 1
        self.capture = cv.CaptureFromCAM(0)
        cv.NamedWindow( "CamShiftDemo", 1 )

        print( "Keys:\n"
            "    ESC - quit the program\n"
            "    t - take picture\n"
            "To initialize tracking, drag across the object with the mouse\n" )


    def run(self):
        while True:
            frame = cv.QueryFrame( self.capture )
            cv.ShowImage( "CamShiftDemo", frame )

            c = cv.WaitKey(7)
            if c == 27:
                break
            elif c == ord("t"):
                frame = cv.QueryFrame( self.capture )
                self.save(frame)
                self.i += 1

if __name__=="__main__":
    demo = Capture()
    demo.run()


Video kaydetmek icin

import cv
import cv2

class Capture:
   
    def __init__(self):
        self.capture = cv.CaptureFromCAM(0)
        cv.NamedWindow( "CamShiftDemo", 1 )

        print( "Keys:\n"
            "    ESC - quit the program\n"
            "    t - take picture\n"
            "To initialize tracking, drag across the object with the mouse\n" )

    def run(self):
        fps =  30
        frame = cv.QueryFrame( self.capture )
        frame_size = cv.GetSize (frame)
        writer=cv.CreateVideoWriter('movie.avi',cv2.cv.CV_FOURCC('F', 'M', 'P', '4'),fps,frame_size)
        while True:
            frame = cv.QueryFrame( self.capture )
            cv.ShowImage( "CamShiftDemo", frame )
            c = cv.WaitKey(7)
            cv.WriteFrame(writer,frame)
            if c == 27:
                break
           
        cv.ReleaseVideoWriter (writer)
 
if __name__=="__main__":
    demo = Capture()
    demo.run()

Thursday, August 9, 2012

Klavye Tusunu Mouse Tiklamasi Haline Getirmek

Diyelim ki bazi makinalarda olan "Windows" dugmesine (ya da herhangi bir dugmeye) baska bir is yaptirmak istiyoruz, mesela bu tusa basinca sol mouse tiklamasi olmasini istiyoruz. xmodmap bu tur degisimleri cok rahat yapar.

Once tusun kodu lazim; xev programini baslatin, ve tusa basin, konsolda kodu gozukecek. Diyelim ki kod 133, o zaman soyle bir script yazilir (diger kodlari da ogrendikten sonra)

xmodmap -e "keycode 133 = Pointer_Button1"
xmodmap -e "keycode 108 = Pointer_Button1"
xmodmap -e "keycode 135 = Pointer_Button3"
xkbset m


Bu script'i kaydedelim, ve Applications | System Tools | Preferences | Startup Applications'a giderek bilgisayar her basladiginda isletilmesini istedigimizi belirtelim, sh /dizin/ismi/script.sh gibi mesela, bunu ekleyelim. Artik bilgisayar her basladiginda windows tusu mouse tiklamasi yapabilecek.

Ek bir puruz, sistem uykudan (suspend) uyandiktan sonra ortaya cikiyor - ustteki ayarlar kayboluyor. Bu ayarlarin uyanma sonrasi islemesi icin, mesela  /etc/pm/sleep.d/99_remap adinda bir dosyayi sudo ile yaratin, uzerinde chmod +x yapin, ve icine

#!/bin/sh
case "$1" in
        thaw|resume)
                DISPLAY=:0.0 ; export DISPLAY
                su - [KULLANICI] -c /dizin/ismi/script.sh
                ;;
esac


komutlarini yazin, [KULLANICI] sizin Unix kullanici isminiz olacak. Ayrica script.sh dosyasini u+x ile chmod'lamayi unutmayin.

Kaynak

Tabanlar Arasi Buyuk Veri Transferi, pg_dump

Bir projemiz icin birkac tabanin icindeki (ayni semaya sahip) tablolarin icerigini nihai, bir baska taban icinde birbirine ekleyerek yeni, birlesmis tablolar olarak yaratmamiz gerekti. Bunun icin basta dblink kullandik fakat hafiza kullanimiyla alakali bazi hatalar ortaya cikti.

Biz de dblink yerine pg_dump kullanmaya karar verdik.

Diyelim ki taban1,taban2,taban3 icinde her tabanda ayni semaya sahip tablo1,tablo2 var. Script soyle:

TABLES="-t tablo1 -t tablo2"

pg_dump $TABLES -f /tmp/xfer.db -c taban1
psql -f /tmp/xfer.db sonuc
pg_dump $TABLES -f /tmp/xfer.db -a taban2
psql -f /tmp/xfer.db sonuc
pg_dump $TABLES -f /tmp/xfer.db -a taban3
psql -f /tmp/xfer.db sonuc

Dikkat edelim, ilk pg_dump -c ile veri aliyor, mevcut tablolari silecek komutlari da urettiriyoruz boylece. Daha sonraki pg_dump komutlari sadece veriyi aliyor, -a ile. Yani ilk basta tablolari, semasi ile yaratip ilk veriyi ekliyoruz, sonra sadece veri ekliyoruz. Boylece birlestirme islemini otomatik olarak gerceklestirmis oluyoruz. Surekli ayni veri dosyasini kullandik, xfer.db adinda, yer israfi olmamasi icin.

pg_dump kullaniminin bir avantaji daha var. Uretilen xfer.db icine bakarsaniz, set komutlari ve analyze ibarelerini goreceksiniz. Postgresql analyze komutu bir tabanin "ic istatistiklerini" guncellemeye yarar, boylece sorgulayici daha guncel veriye sahip olur. Ozellikle buyuk veri transferlerinden sonra bunun yapilmasi tavsiye edilir. Eh pg_dump bunu kendiliginden yapiyor iste.

Sunday, August 5, 2012

Ubuntu 12.04 LTS ve Acer Aspire S3

Acer Aspire S3 laptop uzerinde Ubuntu 12.04 LTS kullanmaya basladik.

Bu laptop 250 GB boyutunda solid state disk'e sahip. Solid state teknolojisi ucucu bellek (RAM) teknolojisini sabit diskler icin kullanan bir teknolojidir, eskiden pahaliydi, son zamanlarda dizustu bilgisayarlarda gorulmeye basladi. Bazi yorumlara gore solid state disk erisimi normal disklere oranla 10 kat daha hizlidir. SS manyetik disk olmadigi icin oynayan bir okuyucu kafaya ihtiyaci yok, hata payi daha az. Manyetik diskler olmadigi icin daha hafif. Mekanik islem olmadigi icin ayrica daha az isiniyor. Her bakimdan tercih edilebilecek bir teknoloji.

Solid state disk'e sahip bir dizustu bilgisayarlarin etiketinde satildiklari dukkanlarda "SSD" ibaresi kullanilir genelde. Acer Aspire'in parakende fiyati 1000 EUR'luk alet Internet erisim paketi eklenince daha ucuza 500 EUR'a dusuyor (Berlin Saturn fiyati).

Ubuntu kurulusuna donelim: Kurmak icin USB flash disk / stick kullandik, artik cogu laptop CD okuyucu dahil etmiyor. Aslinda boylesi daha iyi, CD okuyucu kurulus haricinde baska bir ise yaramiyordu zaten, fakat USB disk pek cok baska is icin de kullanilabilir.

Bilgisayari alinca Windows ile gelecek, tabii onu bir USB boot edilebilir Ubuntu diski yaratmak haricinde baska bir sey icin kullanmayacagiz, hemen silinecek [2] (baska bir Ubuntu uzerinden USB'ye iso yakmak icin suraya bakilabilir). Once gerekli iso dosyasini indirin (Aspire'in 64 bit kullanan bir makina oldugunu unutmayalim, 32 bit versiyonu degil 64'u indirin). Simdi hem USB'den direk kullanilabilir bir Ubuntu 12 yaratacak hem de istenildigi zaman Ubuntu'nun sabit diskinize yazilmasini saglayacak. Not: USB'den Ubuntu yuklemek icin BIOS'unuzda araclarin "yuklenis sirasini" degistirmeyi unutmayin. Cogunlukla ilk sirada sabit disk olur, siz bunu degistirerek USB'yi en tepeye gonderin. Windows ile USB yaratmak icin

http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

Ozellikler

Acer Aspire uzerinde Ubuntu 12, touchpad uzerinde tek dokunus (tap) sol fare dugmesi, iki parmak ile dokunus sag fare dugmesi tiklamasi anlamina geliyor.

Programlar

Ubuntu hala Unity denen absurt bir GUI yapisinda israr ediyor. O yuzden sisteme girer girmez

apt-get install gnome-shell

Logout edip tekrar girmeden once kullanici isminin girildigi kutunun ustundeki tekerlek resmine tiklanir, ve Gnome Classic (No Effects) secilir. Bu bizi klasik Gnome masaustune goturur ve rahat nefes alinir.

Eger ust sag kosedeki mail ikonunu yoketmek istiyorsak

sudo apt-get remove indicator-messages

Eger gnome panelden ikon silmek istiyorsak, Alt Super + sag mouse tiklamasi yapilir ve "Remove from Panel" secilir. Ya da $HOME/.config/gnome-panel altinda ikona tekabul eden dosya silinir.

Emacs uzerinde Alt-Space cok kullaniyoruz, fakat bu kombinasyon Ubuntu tarafindan "kapilmis". Bu kombinasyonu Ubuntu seviyesinde iptal etmek icin System Tools | System Settings | Keyboard ve Shortcuts | Windows bolumunde "Activate the window menu" icin Alt+Space secilmis, bu satira gidip cift tiklama yapin ve Silme (backspace) dugmesine basin.

Dil seciminde bazi hatalar var. Her ne kadar ne zaman sorulsa English US secsek te, birden bire en ust sol kosedeki Applications diyen yer ve Firefox ikonu (her nedense bunlar) bir Uzakdogu diline geciyor. Bu hatayi duzeltmek icin /etc/default/locale sudo gedit ile acilir ve

LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"

yazilir. Tekrar sisteme girildiginde problem duzelmis olacaktir.

Eger alt-tab ile pencereler arasi gecis yapilamadigini farkederseniz, 

sudo apt-get install compiz compizconfig-settings-manager

Sonra Applications | System Settings | Preferences | Combiz Settings Manager

oradan Window Management ve Application Switcher secilir.

Pek cok kez Ubuntu kurduktan sonra bazi paketlerin surekli kurdugumuzu farkettik, gelistirme, analitik, veri isleme icin gerekli bu paketler sunlar (sudo apt-get ile)

build-essential emacs python-dev python-setuptools  python-numpy python-scipy python-matplotlib ipython-notebook texlive emacs-goodies-el preview-latex dvipng openjdk-7-jdk  libavformat-dev ffmpeg postgresql-contrib octave octave-image recoll libatlas-base-dev liblapack-dev gfortran python-sympy r-base-dev r-base python-rpy2 imagemagick gimp python-qt4 pdftk pdfjam gsl-bin xkbset python-pip nautilus-open-terminal nautilus-open-terminal python-markdown python-jinja2 wvdial mplayer vlc xkbset git cmake chromium-browser calibre

texlive-latex-extra [very large]

ubuntu-restricted-extras

sudo pip install pyzmq tornado

Skype icin

sudo apt-get install libasound2 libqt4-dbus libqt4-network libqt4-xml libqtcore4 libqtgui4 libqtwebkit4 libstdc++6 libxss1 libxv1 libssl1.0.0

Ses Efektleri

Eger konsol icine mesela gidilemeyecek durumda bile backspace yapilinca cikan bip, tan, tun seslerini kapatmak istiyorsak System Tools | System Settings, oradan Sound ve Sound Effects. Bir ses kontrol ayari var, onun yaninda Mute secilirse artik uyarici sesleri cikmaz.

Ubuntu baslayinca calan davul sesinden kurtulmak istiyorsaniz

sudo rm /usr/share/sounds/ubuntu/stereo/system-ready.ogg

Clickpad

Acer Aspire S3 bir clickpad ile geliyor. Clickpad hem dokunus (tap) hem de asagi yukari inebilen mekanik dugme gibi islev gorebilen bir mekanizma. Bu clickpad'i kullanmanin farkli yollari var, paketten cikan hali ile hem dugme olarak hem de tek, iki dokunuslar mouse tiklamasi yapabiliyor. Klavyeyi kullanirken yanlislikla dokunusun tiklama yapmasi rahatsizlik yaratiyorsa (mouse isareti baska bir pencereye kaymis mesela, ve yazi yazarken yanlislikla tiklama odagi istemeden o pencereye kaydiriyor), ve "klavye kullanirken clickpad'in iptal edilmesi" secenegi ise yaramiyorsa, o zaman tum clickpad'i bir mouse gibi isler hale getirebilirsiniz. Once System Tools | System Settings | Mouse and Touchpad yapin ve "Enable mouseclicks with touchpad" secenegini iptal edin. Simdi, alttaki cagrilari her bilgisayar acildiginda cagrilacak bir yere yazin, mesela rc.local ya da .bashrc gibi

synclient ClickPad=1
synclient RightButtonAreaLeft=1500
synclient RightButtonAreaRight=2846
synclient RightButtonAreaTop=101
synclient RightButtonAreaBottom=1771


Ustteki komutlar clickpad'i bolgelere ayirarak o bolgelerde olan dokunuslari sag mouse tiklamasi gibi algilanmasini sagliyor. Ustteki bolge sag tiklama icin tanimli. Ayrica dokusun tiklama olmasini iptal ettik, boylece clickpad mouse gibi isler hale geldi.

Balon tavsiyelerini yoketmek icin

sudo mv /usr/share/dbus-1/services/org.freedesktop.Notifications.service /usr/share/dbus-1/services/org.freedesktop.Notifications.service.disabled

Klavye Tusunu Mouse Tiklamasi Haline Getirmek

OpenCV

Google arama sonuclarindaki URL'lere Google kendi eklerini yapiyor, bu sebeple kopyala, yapistir ile bu sonucu baska bir yere tasidiginizda karmakarisik bir URL ortaya cikiyor. Google eklerini yoketmek icin Firefox uzerinde Google / Yandex search link fix adli eklentiyi kurun. Bu eklenti arama sonuclarinizdaki URL'leri temizleyecektir.

Almanya'da USB Modem ile T-Mobile Internet Baglantisi

GPU

Eger GPU ile ilgili bir hata ortaya cikiyorsa,

sudo gksu gedit /etc/default/apport

ile ustteki dosya edit edilir, ve "enabled" diyen yer '1' degerinden '0' degerine getirilir ve dosya kaydedilir.

Ust sag kosede olan Bluetooth ikonu Bluetooth iptal edilmis olsa bile orada gozukmeye devam ediyor, ve kalabalik yaratiyor. Bu ikonu tamamen yoketmek icin

gksu nautilus /etc/xdg/autostart

ile dizini aciniz, ve bu dizindeki bluetooth-applet.desktop ve bluetooth-applet-unity.desktop dosyalarini siliniz. Makina tekrar baslatilinca ikon silinmis olacaktir.

Chrome Uzerinde Flash

Flash, mesela youtube gibi sitelerde, islemiyor ise, suradaki tavsiye takip edilir,

http://askubuntu.com/questions/449103/chromium-34-and-later-cannot-detect-flash-plugin

Komut satirindan

sudo apt-add-repository ppa:skunk/pepper-flash
sudo apt-get update
sudo apt-get install pepflashplugin-installer

Simdi

sudo gedit /etc/chromium-browser/default

ile dosyayi acin ve sonuna

. /usr/lib/pepflashplugin-installer/pepflashplayer.sh

ekleyin. Chrome'u tekrar baslatin (birkac kez f5 ile refresh yapmak gerekebilir), flash isleyecektir.

Ubuntu 13

sudo apt-get install gnome-session-fallback

Caps control yapmak icin

setxkbmap -option ctrl:nocaps

Bu yaziya eklemeler olacak.

Kaynaklar

[1] http://askubuntu.com/questions/153016/apport-gpu-error-intel-py-crash 

[2]  Eger Windows'u silmiyorsaniz, o zaman bolum (partition) araci size bir ekranda diski tekrar bolmeniz ve yeni Unix disk bolume yaratmaniz icin yardim eder. Fakat bir problem bu ekran hangi tarafin Win hangi tarafin Unix oldugunu acikca soylemiyor. Soldaki kisim Windows.

Wednesday, August 1, 2012

Yeni Bir Sanal Makina Kodu ve Derleyicisi - LLVM

Ismindeki VM harfleri cogunlukla insanlara bu urunun JVM gibi sanal bir makina oldugu intibaini veriyorsa da aslinda kendilerinin de soyledigi gibi LLVM bir "derleyici ve alakali araclardan olusan bir alet cantasidir". Degisik olan tarafi LLVM'in kendisinin tanimladigi temiz, sade bir sanal makina koduna derleme yapiyor olmasi, ve bilinen, taninan mikrociplerin kodlarina bu genel koddan sonra gecilmesi. Bazi yeni yaklasimlar kullanarak bu ortak makina kodu hizli, optimal bir hale getirmek icin kullanilmis, boylece nihai makina kodu da daha hizli hale getirilmis oluyor. Bundan sonra artik herhangi bir bilgisayar dili LLVM ile bu genel makina koduna derlenirse, bu optimizasyonlari bedava elde etmis olacak. JVM'den farki burada, sadece bu temel islere odakli, bu yuzden bir cop toplayici (garbage collector'a) sahip degil mesela.

LLVM'in beni en cok ilgilendiren kismi Python'un istenen parcalarinin hizli bir koda derlenebilmesine ihtimal vermesi ve diller arasi iletisim. Mesela artik kullanmadigim Java dili ile yazilmis bir kodu Python ile genisletebilmeliyim (Jython ile degil), bu da eger her iki dil icin LLVM derleyicisi mevcut ise mumkun olabilir, ve iki taraf ta normal kullanim sekillerinden feragat etmek zorunda olmazlar (Python'u Jython ile kullanirsak, boyle yapmis oluyoruz mesela, Numpy, Scipy gibi yerel Python'da yani cython ile calisan bir suru ozellik kaybediliyor).

Pek cok yerden dillerin LLVM'e gecirildigini duyuyoruz. Mesela Google Python'un ana cython derleyicisi, yorumlayicisini Unladen Swallow diye bir proje ile LLVM'e gecirme cabasi surada

http://code.google.com/p/unladen-swallow/

Yine Python (ve ozellikle Numpy icin) Numpy'in yaraticisinin baslattigi yeni sirket ContiuumIO'dan Numba

http://numba.github.com/numba/

Rubinius Ruby'nin LLVM'e gecirilme cabasi

http://rubini.us/

LLVM'in VM olmadigini soylemistik, ama tabii ki LLVM kullanan bir VM gayet mantikli, mesela cop toplayici vs burada eklenebilir, ki VMkit bunu yapmis

http://vmkit.llvm.org/

Bunun gibi pek cok diger proje var, bunlarin bir listesi surada bulunabilir

http://llvm.org/ProjectsWithLLVM/

Bitirirken sunu belirtmek iyi olur, LLVM JVM ile degil, GCC ile rekabet etmekte.