|
|
Bu makalenin farklı dillerde bulunduğu adresler: English Deutsch Francais Russian Turkce |
Bob Smith <bob/at/linuxtoys.org> Yazar hakkında: Bob, Linux programcısıdır ve hobisi elektroniktir. Onun en son projelerini www.runtimeaccess.com'dan ve www.linuxtoys.org ana sayfasından öğrenebilirsiniz. Türkçe'ye çeviri: Özcan Güngör <ozcangungor(at)netscape.net> İçerik: |
Çalışan Bir İşlem ile KonuşmakÖzet:
Çalışma Anında Erişim(Run Time Access), programınızdaki veri yapılarını PostgreSQL'de tablolar olarak ya da sanal dosya sisteminde (/proc benzeri) bir dosya olarak almanızı sağlayan kütüphanedir. ÇAE kullanarak artalan sürecinize (daemon) ya da hizmetinize çeşitli yönetim arayüzleri ekleyebilirsiniz. Örneğin web, kabuk, SNP ya da çerçeve belleği.
|
Yapı katarlarında verilerinizin olduğu bir programınız olsun. Yapı ve katar şu şekilde tanımlanmıştır:
struct mydata { char note[20]; int count; } struct mydata mytable[] = { { "Lable note", 100 }, { "Music note", 200 }, { "No note", 300 }, }; |
Eğer programınızı ÇAE ile yazarsanız, programınızın iç verilerini sanki PostgreSQL veritabanındaymış gibi komut satırından ya da başka bir programdan değiştirebilir ve inceleyebilirsiniz. Aşağıdaki örnek, progarmınızdaki verileri Bash ve psql (PostgreSQL komut satırı aracı) ile nasıl okuabileceğinizi ve değiştirebileceğiniz gösterir:
# myprogram & # psql -c "UPDATE mytable SET note = 'A note' LIMIT 1" UPDATE 1 # psql -c "SELECT * FROM mytable" note | count ------------+------- A note | 100 Music note | 200 No note | 300 #
Bu makale, ÇAE gibi bir şeye neden gereksinim duyulduğunu, RTA kütüphanesinin nasıl kullanılacağını ve ÇAE kullanarak ne gibi avantajlar sağlanacağını açıklayacaktır.
Var olagelen UNIX, bir hizmet ile ayar verilerini /etc/hizmet.conf dosyasına koyarak iletişirdi ve hizmetin oluşturduğu çıkış /var/log/hizmet.log dosyasına yazılırdı. Bu kabul edilmiş yaklaşım, cihazlar üzerinde çalışan ve eğitimsiz sistem yöneticileri tarafında ayarlanan günümüz hizmetleri için büyük olasılıkla yanlıştır. Bu var olagelen yaklaşım işe yaramıyor çünkü artık çeşitli, aynı anda çalışan kullanıcı arayüzleri istiyoruz ve her arayüzün hizmet ile ayaları, durumu ve istatistikleri, hizmet çalışırken değiştirebilmesini istiyoruz. Gereken şey, çalışma anında erişim.
Yeni hizmetler, çok çeşitli kullanıcı arayüzlerine gereksinim duyuyorlar ve biz geliştiriciler, en çok hangi arayüze gereksinim duyulacağını önceden kestiremeyebiliriz. Yapmamız gereken, ortak protokolleri kullanarak, kullanıcı arayüzlerini hizmetten ayırmalıyız ve ortak protokolleri kullanarak arayüzleri oluşturmalıyız. Gereksinim duyulduğunda yeni arayüz eklemek böylece daha kolay olur ve ayırma testleri kolaylaştırır çünkü her parça ayrı ayrı test edilebilir. Şuna benzer bir yapı istiyoruz:
Arayüz çeşitleri şunlar olabilir: web, komut satırı, çerçeve belleği, SNMP, tuştakımı ve LCD, LDAP, doğal Windows ve diğer isteğe bağlı arayüzler. Açıkça bütün kullanıcı arayüzlerine tek ortak API ve protokol iyi olurdu ama hangi çeşit API ve protokol?
ÇAE, ortak API ve protokol olarak PostgreSQL'i kullanmayı seçmiştir. Ayarlama, durum ve istatistikler, API üzerinde PostgreSQL veritabanındaki tablolar olarak görünen yapı dizilerine konur. Kullanıcı arayüzü programları, bir PostgreSQL veritabanına bağlanan istemciler olarak yazılır. Bu yaklaşımın iki büyük faydası vardır:
ÇAE kütüphanesi, dizileri, bağlı listeleri ya da veri yapılarını PostgreSQL istemcilerine bağlayan bir yapıştırıcıdır. ÇAE kullanan uygulamanın mimarisi şuna benzer...
Bunu yönetim arayüzü olarak adlandırıyoruz çünkü durumu, istatistikleri ve ayarları göstemesi beklenmektedir. Sadece bir arayüzün görümesine rağmen, daha çok arayüzün olabileceğini unutmayın ve hepsi aynı anda uygulamaya erişebilir.
PostgreSQL, ulaşım protkolü olarak TCP'yi kullanır. Uygulamanız bir TCP portuna bağlanabilmeli ve çeşitli kullanıcı arayüzlerinden bağlantıları kabul edebilmelidir. Kabul edilmiş bir bağlantıdan gelen bütün baytlar dbcommand() ile ÇAE'ye aktarılır. Bir istemciye dönecek olan veriler, dbcommand()'dan dönen bir tampondadır.
ÇAE, hangi tabloların kullanılabilir olduğunu nereden biliyor? Bunu söylemek zorundasınız.
ÇAE'ye veri yapıları olan tablolarınız hakkında rta_add_table() fonksiyonu ile bilgi verirsiniz. TBLDEF veri yapısı, bir tablo tasvir eder ve COLDEF yapısı, bir sütun tasvir eder. Aşağıda ÇAE'ye nasıl bir tablo ekleyeceğinizi gösterir:
Uzunluğu 20 karakter olan bir katara sahip bir veri yapısına sahipsiniz ve bu yapıda olan 5 tabloyu dış ortama taşımak istiyorunuz.Yapıyı ve tabloyu şu şekilde tanımlarsınız:
struct myrow { char note [20]; int count; }; struct myrow mytable[5];
myrow veri yapısındaki her alan, veri tabanı tablosundaki bir sütundur. ÇAE'ye, sütunun ismini, hangi tablo içinde olduğunu, veri tipini, satırın başlangıcını refarans alarak yerini, salt-okunur olup olmadığını bildirmeliyiz. Bir de sütun yazıldıktan sonra ve/ve ya okunmadan önce çağrılacak olan geriçağırım rutinini eklemeliyiz. Bizim örneğimizde, count salt-okunurdur ve do_note() fonksiyonu, note sütununa her yazma işlemi olduğunda çağrılıyor. TBLDEF'e eklenmiş olan COLDEF dizisini oluşturduk. Her yapı üyesine bir COLDEF karşılk gelir.
COLDEF mycols[] = { { "atable", // SQL'deki tablo adı "note", // SQL'deki sütun adı RTA_STR, // sütun/alan için veri tipi 20, // sütunun byte olarak genişliği 0, // satırın başlangıçtan uzaklığı 0, // boolean bayrakları için bit olarak OR (void (*)()) 0, // okuma'dan önce çağrılır do_note(), // yazma'dan sonra çağrılır "Sütun tanımlamasının son alanı, sütunu tanımlayan bir katarıdır." "Burada isterseniz sütundaki verinin ne olduğunu ve tipini açıklayabilirsiniz."}, { "atable", // SQL'deki tablo adı "count", // SQL'deki sütun adı RTA_INT, // sütun/alan için veri tipi sizeof(int), // sütunun byte olarak genişliği offsetof(myrow, count), // satırın başlangıçtan uzaklığı RTA_READONLY, // boolean bayrakları için bit olarak OR (void (*)()) 0, // okuma'dan önce çağrılır (void (*)()) 0, // yazma'dan sonra çağrılır "Eğer tablolarınız, kullanıcı arayüzü ile hizmet arasında bir arayüz ise " "sütun ve tablo tanımlamalarınız projrniz için işlevsel bir özellik olur ve geliştiriciler için en iyi dokümantasyondur. };
Yazma geriçağırımları, uygulamanızı süren gerçek motorlar olabilirler. Bir tablo değişikliğinin başka bir değişikliği ya da uygulamanızın yeniden ayarlanmasını tetiklemesini isteyebilirsiniz.
ÇAE'yi tablo ismini, her satırın uzunluğunu, sütunları tanıtan COLDEFS dizisini, sütun sayısını, eğer bazı sütunların kaybolmasını istemiyorsanız sütunun kaydedileceği dosyayı ve tabloyu tanıtan bir katarı vererek tablo hakkında bilgilendirirsiniz. Eğer tablo yapıların durağan bir dizisi ise başlama adresini ve satır sayısını vermelisiniz. Eğer tablo bağlı listeler şeklinde uygulanıyorsa ÇAE'ye bir satırdan diğerine geçmeye yardımcı olacak fonksiyonu vermelisiniz.
TBLDEF mytableDef = { "atable", // tablo ismi mytable, // tablonun adresi sizeof(myrow), // her satırın uzunluğu 5, // satır sayısı (void *) NULL, // iterasyon fonksiyonu (void *) NULL, // iterasyon geriçeğırım verisi mycols, // sütun tanımı sizeof(mycols / sizeof(COLDEF), // # sütunlar "", // kayıt dosyası "Tablonun tam bir tanıtımı." };
Normal olarak, SQL tarafından görünen tablo ismi ile programda kullanılan tablo isminin aynı olmasını istersiniz. Örnekte, mytable atable olarak, tablo isimlerinin aynı olmak zorunda olmadıklarını gösterebilmek için değiştirildi.
Şimdi ÇAE'ye kendi tablonuzu tanıtabilirsiniz.
rta_add_table(&mytableDef);
Hepsi bu. ÇAE'yi kullanabilmek için, iki veri yapısını (COLDEF ve TBLDEF) ve iki fonksiyonu (dbcommand() ve rta_add_table()) nasıl kullanacağınızı öğrenmelisiniz.
Yukarıdaki kod, ÇAE'nin nasıl çalıştığını gösterebilmek amacıyla verilmiştir. Tam bir bilgi kaynağı veya tamamen çalışam bir örnek olarak verilmemiştir. ÇAE API'si ile ilgili tamamen çalışan örnek ve tam açıklamalar, ÇAE ana sayfasındadır.
Kendi uygulamanızda kullanağınız tabloları tanımladıysanız, ÇAE, kendi iç tablolarını tanımlamıştır. Bunlardan en ilginç olanları, listelenecek tablolar ve tanımladığınız tabloları tanıtan rta_tables ve tra_columns tablolarıdır. Bunlara genellikle sistem tabloları denir. Sistem tabloları,ls bir dosya sistemi için ne yapıyorsa, getnext SNMP için ne yapıyorsa, bir veritabanı için onu yapar.
ÇAE ile birlikte gelen programlamlardan biri küçük bir PHP programıdır. Bu program ile sistem tablolarını web tarayıcısı ile ekranda görebilirisiniz. Tablo adları köprülenmiştir ve bir tablo adı tıklandığında o tablonun ilk 20 satırı görülebilir. Eğer satır değiştirilebilir ise o satır tıklanarak düzenleme penceresi yardımıyla bilgi değiştirilebilir. Bunların hepsi sistem tablolarındaki tablo ve sütun bilgileri yardımıyla olmaktadır. Veri akışı aşağıda gösterilmiştir.
ÇAE örnek uygulaması için tablo düzenleyecisinin en üst seviye görüntüsü aşağıdadır.
ÇAE Tablo Düzenleyici
|
Eğer bu makaledeki herşey doğru gittiyse, yukarıda verilen tablo isimleri, Santa Clara'daki ÇAE' ewb sunusu üzeinde çalışan köprüler olarak günmelidir. Takip edilecek en iyi köprü mytable köprüsüdür.
ÇAE, PostgreSQL istemci kütüphanesiyle (libpq) yazılmış kullanıcı arayüzü ya da yönetim programlarını, sizin uygulamalarınıza ya da artalan programlarınıza bağlayan bir kütüphanedir. ÇAE, bir arayüzdür, veritabanı değil. Sadece, SELECT ve UPDATE SQL komutlarına gereksinimi vardır.
SELECT ifadesi için gerekli yazım şekli:
SELECT column_list FROM table [where_clause] [limit_clause]
column_list, virgülle ayrılmış sütun isimleri listesidir. where_clause, AND ile ayrılmış karşılaştırma listesidir. Karşılaştırma işaretleri =, |=, >=, <=, >, ve <. limit_clause, [LIMIT i] [OFFSET j] şeklindedir. i, geri döndürelecek maksimum satır sayısıdır ve j kadar satırı göstermeden atlarız. Yazımı anlamak için birkaç örenek verelim:
SELECT * FROM rta_tables SELECT notes, count FROM atable WHERE count > 0 SELECT count FROM atable WHERE count > 0 AND notes = "Hi Mom!" SELECT count FROM atable LIMIT 1 OFFSET 3
LIMIT'i 1 yapma ve belirli bir satırı alabilmek için OFFSET belirleme. En son örnek C'deki (mytable[3].count) ifadeye benzer.
UPDATE ifadesinin yazımı:
UPDATE table SET update_list [where_clause] [limit_clause]
UPDATE atable SET notes = "Not in use" WHERE count = 0 UPDATE rta_dbg SET trace = 1 UPDATE ethers SET mask = "255.255.255.0", addr = "192.168.1.10" WHERE name = "eth0"
ÇAE, örneklerde hep büyük harf kullanılmasına rağmen, küçük/büyük harf ayrımı yapmaz.
ÇAE'yi kendi anasayfası www.runtimeaccess.com (LGPL lisanslıdır)'dan indirebilirsiniz. ÇAE'nin hangi sürümünü indireceğinize dikkat edin. ÇAE'nin son sürümü, PostgreSQL'in 7.4 sürümü ile çalışır. Çoğu Linux dağıtımı 7.3 sürümü ile birlikte gelir. Başlangıç için ÇAE'nin eski sürümlerini kullanabileceğiniz gibi iyileştirilmiş ve hatalardan arındırılmış sürümü için en son sürümünü kullanmalısınız.
Paketi açtığınızda aşağıdaki dizinlerin oluşması gerekir:
./doc # ÇAE ana sayfasının bir kopyası ./empd # ÇAE ile oluşturulmuş bir prototip artalan süreci ./src # ÇAE kütüphanesinin kaynak dosyaları ./table_editor # Tablo düzenleyicinin PHP kaynağı ./test # Örnek bir uygulamanın kaynağı ./util # ÇAE'yi yazarken kullanılan yardımcı programlar
Graham Phillips'e teşkkürler, ÇAE'nin 1.0 sürümü autoconf desteğine sahiptir. Graham, ÇAE'yi Linux'tan Mac OS X'e, W,ndows'a ve FreeBSD'ye uyarlamıştır. 1.0 sürümünü kullanarak, ÇAE'yi sıradan komutlarla yükleyebilirisiniz.
./configure make make install # ( root olarak)
Yükleme, librtadb.so ve ilgili dosyaları /usr/local/lib sizinine koyar. ÇAE'yi kullanabilmek için bu dizini /etc/ld.so dosyasına yazmalı ve ldconfig komutunu çalıştırmalısınız ya da dizini yükleme yoluna şu şekilde eklemelisiniz:
export LD_LIBRARY_PATH=/usr/local/lib
Yükleme, ÇAE başlık dosyasını, rta.h, /usr/local/include dizinine koyar.
make, bir test programını test dizininde oluşturur ve yüklemenizi test etmek için test dizinine gidin ve ./app & komutunu çalıştırın. netstat -nat komutu size 8888 nolu portu dinleyen bir program olduğunu söyleyecektir. Artık psql komutunu çalıştırabilir ve SQL komutlarını test programı ile kullanabilirsiniz.
cd test ./app & psql -h localhost -p 8888 Welcome to psql 7.4.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit # select name from rta_tables; name ------------- rta_tables rta_columns rta_dbg rta_stat mytable UIConns (6 rows)
Bir veritabanına bağlıymışsınız gibi görünmenize rağmen aslında bağlı değilsiniz. Unutmayın: Kullanabileceğiniz iki komut SELECT ve UPDATE'dir.
Kullanıcı arayüzü programlarını artalan sürecinden ayırmanın avantajı, geniş dizayn, kodlama, hata ayıklama ve yapılabilik kategorlerine girer.
Dizayn açısından bakarsak, bu ayrım, arayüzün nasıl gösterileceğini dert etmeden, dizayna en başında karar vermeye zorlar. Tabloların dizaynını düşünme aşaması, uygulamanızın gerçek dizaynını düşünmeye zorlar. Tablolar, uygulamanızın iç işlevsel özelliklerini şekillendirir.
Kullanıcı arayüzü ve artalan süreçlerinin ayrımı, kullanıcı arayüzü uzmanlarını ve artalan uzmanlarını ayrı ayrı işe alabilirsiniz ve bu kişiler kodlarını bağımsız olarak yazarlar ve daha sonra bu kodlar pazarlama için hemen birleştirilebilirler, demektir. PHP, Tcl/Tk, Perl ve C için Postgres bağlantıları olduğundan, işiniz için uygun olanını seçersiniz.
Hata ayıklama daha kolay ve daha hızlı olur çünkü her iki taraf da diğerini kolaylıkla simüle edebilir. Örneğin, arayüz mühendisleri, porgramlarını, aynı tablo izinlerine sahip gerçek bir Postregs veritabanıyla çalıştırabilirler. Artalan sürecini test etmek daha kolay ve daha eksizdir çünkü bir arayüzün yaptıklarını yapan betik yazmak kolaydır. Ve bir test çalışırken, iç durumu ve istatistikleri kontrol etmek kolaydır. Bir iç durumu ya da şartı zorlayabilmek, uç durumları test etmeye yardımcı olur. Laboratuar ortamında böyle durumları test etmek genelde zordur.
Ürününüzün yeteneklerini, ÇAE ile genişletebilirsiniz. Müşteriniz , program çalışırken, ayrıntılı durum raporunu ve istatikleri görebilmeyi gerçekten taktir edecektir. Kullanıcı arayüzü ile artalan programını ayırmak, birden fazla arayüzünün olabilir, demektir: SNMP, comut satırı, web, LDAP vs. Bu esneklik, eğer müşteriniz isteğe bağlı arayüzler isterse çok önemli olacaktır.
ÇAE, bu tip bir paket içinde olamasını isteyebileceğiniz bir çok özellik sunar:
Bu makalede ÇAE kütüphanelerine ve yeteneklerine kısa bir giriş yapıldı. ÇAE anasayfası, SSS ve API'nin tam bir tanıtımını ve birçok örnek istemci programını içerir.
ÇAE sizin veri yapılarınızı bir veritabanında tablolar olarak olarak gösterebildiği gibi, sanal dosya sistemindeki dosyalar olarak da gösterebilir ( Miklos Szeredi'nin yazdığı Kullanıcı alanında Dosya Sistemi (FUSE) paketi). ÇAE anasayfası, dosya sisteminin nasıl kullanılacağı hakkında fazlasıyla bilgi içermektedir.
|
Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Bob Smith , FDL LinuxFocus.org |
Çeviri bilgisi:
|
2004-06-26, generated by lfparser version 2.46