buradaki yazımda 2000spamı devirdiğimi yazmıştım. Şimdi olmuş toplam spam sayısı 4000, ikiye katlandıkça tekrar bir girdi yazmayı düşünüyorum :) 8000. spamda buluşmak dileğiyle :P
Blogs
Linux, Paralel Port ile 2x16 LCD Ekran Kullanımı
Çalıştığım projede linuxta paralel port ile lcd ekran kullanmam gerekti. Neredeyse internetin altını üstüne getirdim ama işime yarar çok birşey bulamadım. Sonunda DOS için yazılmış bir kod buldum. Bu kodu biraz inceleyip, gerekli püf noktaları bulunca kodu linux’a uydurmak çok zor olmadı. Hatta neredeyse sadece kullanılan fonksiyonun adını ve parametre yerlerini değiştirdim :)
Aslında olay çok basitmiş, lcd ekrandan çıkan 14 bacaktan, 8tanesini data ve komut göndermek için kullanıyoruz. 1 bacak enable, 1 set - reset seçimi için, 1 bacakta read/write seçimi için kullanılıyor. Geri kalan 3 bacak güç bağlantısı ve kontrast için kullanılıyor. Burdaki şemaya göre bağlantıları yapabilirsiniz. Ayrıca örnek aldığım kodda aynı sayfada bulunmakta.
Yorum satırları pek çok şeyi açıklıyor. Ama birkaç noktaya değinmekte fayda var. Data bacaklarına gerekli inputları verdikten sonra, enable bacağını 1’den 0’a düşürerek lcd’nin data bacaklarında sinyali alıp işleme sokmasını sağlıyoruz. init array’i içinde lcd’nin temizlenmesi ve çalışmaya uygun hale gelmesi için gerekli komutlar tutuluyor. 0x378 paralel portun adresi.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
int main()
{
if (ioperm(DATA , 3, 1)) {perror("ioperm"); exit(1);}
char string[] = {"Testing 1,2,3 "
"It' Works ! "};
char init[10];
int count;
int len;
init[0] = 0x0F; /* Init Display */
init[1] = 0x01; /* Clear Display */
init[2] = 0x38; /* Dual Line / 8 Bits */
outb(inb(CONTROL) & 0xDF, CONTROL); /* Reset Control Port - Make sure Forward Direction */
outb(inb(CONTROL) | 0x08, CONTROL); /* Set Select Printer (Register Select) */
for (count = 0; count < = 2; count++)
{
outb(init[count], DATA);
outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe (Enable)*/
usleep(20); /* Larger Delay for INIT */
outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe (Enable)*/
usleep(20); /* Larger Delay for INIT */
}
outb(inb(CONTROL) & 0xF7, CONTROL); /* Reset Select Printer (Register Select) */
len = strlen(string);
for (count = 0; count < len; count++)
{
outb(string[count], DATA);
outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe */
usleep(2);
outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe */
usleep(2);
}
return 0;
}
Linke birşey olması durumunda bu adresten gerekli şemayı indirebilirsiniz.
Java ile server socket yapımı
Bir proje için server sockete ihtiyaç duydum. Öncelikli dilim python olmasına rağmen, sunucu solaris olunca java ile yazmak daha cazip geldi. Öncelikli olarak test amaçlı birkaç satır kod yazdım. Akla gelen ilk örnek echo server oluyor :) aşağıda multi thread çalışan, birden fazla kullanıcıya cevap verebilecek bir echo server var:)
Daha fazla oku »Saçmalayan konsol ekranını temizleme
Bir binary dosyayı cat ile görüntüleyince konsol ekranı sapıtabiliyor :) Böyle bir durumda konsolu adam etmek için
reset
komutunu kullanabiliriz. Her seferinde komutu unutup neydi neydi diye düşünüyorum. Buraya yazıyorum ki bir daha unutursam hemen bakıp bulayım :)
Emacs ile bul değiştir / find and replace
M-x
replace-string RET aranan_string RET yerine_konulacak_string
Bunu regexli yapmak için replace-string yerine replace-regex kullanabilirsiniz. Birde buna kısayol eklesek tadından yenmez.
.emacs dosyamıza aşağıdaki satırı ekliyoruz.
;; Find and Replace
(global-set-key (kbd "C-q") 'replace-string)
C-q kombinasyonuna bastığımıza işlem başlamış oluyor.
BusyBox - date ile saat ve tarihi ayarlamak
BusyBox içinde gelen date komutunun kullanımı biraz daha farklı. Saat ayarlamada bir değişiklik yok fakat tarihi ayarlamak biraz daha farklı. Saat ayarlama:
date -s "23:59:59"
Tarih ve saati ayarlama
date -s AAGGSSDDYYYY
date -s 123123592010
12-31-2010 23:59’a karşılık geliyor.
Genius!
Scp ile sembolik linkleri takip etmeden indirme işlemi yapmak için araştırma yaptığımda, aşağıdaki kodu buldum. Böyle bir kullanım 40 yıl düşünsem aklıma gelmezdi.
cd /destination/directory
ssh user@remote.host "cd /original/directory; tar cf - ./" | tar xvf -
Java ile Oracle Veritabanına bağlanmak.
Python, Fonksiyona Parametre Olarak Fonksiyon Geçirmek
Bu yazıyı asıl yazma sebebim parametre olarak geçirilen fonksiyona geçirilecek parametreler :)
Parametre olarak geçireceğimiz fonksiyonlar belli bir sayıda parametre alıyorsa yapacağımız iş basit,
Mesela:
def Merhaba(isim):
print "Merhaba %s" % isim
Bunun gibi sadece tek parametre alan bir fonksiyon için aşağıdaki gibi bir fonksiyon yeterli olacaktır.
def BuyukAbi(func, param):
func(param)
BuyukAbi(Merhaba, "kelebek")
Merhaba kelebek
Bu fonksiyon parametre olarak aldığı func fonksiyonuna param parametresini geçirecektir.
Eğer fonksiyonun aldığı parametre sayısı belirsiz ise, yani farklı sayıda parametre alan fonksiyonlarla uğraşmak gerekiyorsa yanına birkaç ekleme daha yapmamız gerekiyor.
def BuyukBuyukAbi(func, param):
func(*param)
param parametresi bir liste olmak durumunda. Geçirilen fonksiyon kaç parametre alıyorsa listenin uzunluğu okadar olmalı.
BuyukBuyukAbi(Merhaba, ["kelebek"])
Merhaba kelebek
def HepinizeMerhaba(isim1, isim2):
print "Merhaba %s, merhaba %s" % (isim1, isim2)
BuyukBuyukAbi(HerpinizeMerhaba, ["kelebek", "Aşkın"])
Merhaba kelebek, merhaba Aşkın
C ile Nesne Yaratmak
Evet kışkırtıcı bir başlık attım :) Aslında yapacağımız olay bir structı nesne gibi kullanmak. Buna benzer bir kodu yıllar önce görmüştüm. O günden bu güne sürekli böyle bir şeyi nasıl yaparım diye araştırdım. Anca bugün çözebildim olayı ;) Kodu aşağıda yorum satırıyla beraber veriyorum. Yorumlarda gerekli açıklamaları yaptım.
Bu yazıyla C-3PO nun ne lakası var diyebilirsiniz. C ile resim ararken karşıma bu çıktı, bende boş durmasın dedim :)
/*
* Sınıfımızı yaratıyoruz
*/
struct _myobject {
// alt alanlar
int a, b;
/*
* Metod
* Burada fonksiyon pointerı tanımlıyoruz
*/
int (*add)(struct _myobject*);
};
// struct ön ekinden kurtuluyoruz
typedef struct _myobject MyObject;
/*
* Asıl işi yapacak fonksiyonu tanımlıyoruz
* MyObject structını parametre olarak alıyor
*/
int realAdd(MyObject* a) {
return a->a + a->b;
}
int main ( void ) {
/*
* Nesnemizi oluşturuyoruz.
* add pointerına fonksiyonu atıyoruz
*/
MyObject mo = {1, 2, realAdd};
printf("A + B = %d\n", mo.add(&mo));
return 0;
}
Kodun başına stdio.h headerını eklemekte fayda var. WP sıkıntı çıkarttığı için silmek zorunda kaldım. Kodun düzgün halini burada bulabilirsiniz.