Yaşasın Spam

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


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:)


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 -

Kaynak


Java ile Oracle Veritabanına bağlanmak.

Öncelikle http://www.oracle.com/technetwork/database/enterprise-edition/jdbc101040-094982.html adresinden classes12.jar dosyasını indiriyoruz. Bu dosyayı bir dizine atıp, içeriğini bu dizine çıkartıyoruz. Bu dizini classpath değişkeninde belirtip kodlamaya başlıyoruz. import java.io.*; import java.sql.*; public class OraThin { public static void main(String[] args) { try { Connection con = null; Class.forName("oracle.jdbc.driver.OracleDriver"); con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:dbname", "username", "password"); Statement s = con.createStatement(); ResultSet rs = s.executeQuery("SELECT * FROM KISI"); String name; String surname; while(rs.next()) { name = rs.getString("AD"); surname = rs.getString("SOYAD"); System.

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.