Cumartesi, Eylül 08, 2007

OpenBSD 4.2 ön siparişleri


1 Kasım'da çıkacak OpenBSD 4.2 için ön siparişler başladı. En sevdiğiniz işletim sistemini desteklemek ve CD'lere herkesten önce kavuşmak için iyi bir fırsat :)

4.2 ile gelen yeniliklerden bazılarını sıralamak gerekirse ...

  • Platform desteği: sparc64, hppa ve alpha platformlarında daha çok donanım desteği önemli iyileştirmeler var. Çeşitli teknik problemler nedeniyle sgi platformu ise bu sürümde yer almıyor.
  • Daha çok ve gelişmiş donanım desteği: Yeni SATA sürücüleri, 10Gb Ethernet sürücüleri, Daha çok donanım sensörü. Daha çok İşlemci için işlemci hızı ayarlama desteği
  • Ağ ve trafik filtreleme (pf) performansında önemli artışlar.
  • FFS2 dosya sistemi desteği.
  • CARP için IP yük dengeleme özelliği.
  • Donanım sensörleri için gelişmiş izleme özellikleri.
  • ...
Henüz 4.2 tema müziği açıklanmadı. Yayınlanana kadar bu sayfadan önceki sürümlerin müzik ve sözlerine ulaşabilirsiniz.

Çarşamba, Eylül 05, 2007

Sandık Sonuçları, 3. bölüm

Önceki bölümde koordinatları olan bir metin dizisi haline getirdiğim sandık sonuç formlarını işlemek için yazdığım C programına bu linklerden erişebilirsiniz: [C] [HTML].

Bu programın açık ve erişilebilir olması, yaptığım analizlerin güvenilirliği açısından büyük önem taşıyor.

Programın nasıl çalıştığını kısaca özetlemek gerekirse, öncelikle tüm metni satırlara bölüyorum. Y koordinat aralığı çakışan tüm kelimeler aynı satırda olacak şekilde. Ardından, sandık sonuçlarının başladığı (başlık satırı) ve bittiği (toplam ve genel toplam satırları) satırları tespit edip, bu aralıktaki tüm satırları benzer bir algoritma ile kolonlara bölüyorum. Satır ve kolon kesişimlerinden tablo hücrelerini oluşturuyorum. Son olarak tüm sayfalardaki toplamı ve en sondaki genel toplamı bu hücrelerdeki değerleri kullanarak hesaplayıp doğruluğunu kontrol ettikten sonra sonucu bir metin dosyasına yazdırıyorum.

Diğer detayları ve sonuçları bir sonraki yazıda inceleyeceğim.

Program OpenBSD altında derlenmektedir. Diğer işletim sistemlerinde derlemek için ağaç ve liste başlık dosyalarına ihtiyaç duyabilirsiniz.

Salı, Eylül 04, 2007

Sandık Sonuçları, 2. bölüm

Önceki bir yazımda YSK'nın yayınladığı sandık sonuçlarının analiz edilmesi zor bir PDF rapor formatında yayınlandığından bahsetmiştim. Bu PDF dokümanları bilgisayarda işlenebilir hale getirmek için yaptığım çalışmayı ise burada anlatacağım.

Öncelikle PDF dokümanları metin formatına çevirmek için bir yazılım arayışına girdim. Bir PDF dokümanı içerisinde metinler okunuş sırasına göre değil, rastgele dağnık olarak bulunabilirler. Her metin "nesnesi" koordinatları ve yönü ile birlikte saklandığı için örneğin her kelime hatta her harf dosya içerisinde farklı bir dizilişte bulunabilir. Bu nedenle, tabloları düz metne çevirmeye çalıştığınızda ortaya bir harf çorbsı çıkabilir.

Denediğim yazılımlardan birincisi xpdf paketi içerisindeki pdftotext programı oldu. Ancak elde ettiğim sonuç pek başarılı değildi...

pdftotext -enc UTF-8 yenimahalle1-P.pdf
298/108 Kanun M;2839/32,Geçici 5.

MİLLETVEKİLİ SEÇİMİNDE İLÇE SEÇİM KURULLARINCA DÜZENLENECEK SİYASİ PARTİLERİN VE BAĞIMSIZ ADAYLARIN ALDIKLARI OYLARIN SAYISINI GÖSTEREN BİRLEŞTİRME TUTANAĞI
SİYASİ PARTİ/BAĞIMSIZ ADAY GÖZLEMCİLERİ Partinin Adı CHP SP MHP Gözlemcileri Soyadı TOKER ÖZTÜRK TÜRKEL ÜNSAL EROL ALİ İHSAN Adı SİYASİ PARTİ/BAĞIMSIZ ADAY GÖZLEMCİLERİ Partinin Adı Gözlemcileri Soyadı Adı SİYASİ PARTİ/BAĞIMSIZ ADAY GÖZLEMCİLERİ Partinin Adı Gözlemcileri Soyadı Adı
...
...
Tüm içerik mevcut olmasına rağmen bunları ayırmak ve hatasız olarak bir tablo haline getirmek mümkün değil.

Denediğim ikinci yazılım bir perl modülü olan CAM::PDF oldu. Bu paketin içerisindeki örnek betiklerden olan renderpdf.pl bana değişik ama kullanılabilir bir çıktı üretti:

renderpdf.pl yenimahalle1-P.pdf 1
( 0.00, 595.00) ( 0.00, 595.00)
( 139.43, 563.76) ( 139.43, 563.76) MİLLETVEKİLİ SEÇİMİNDE İLÇE SEÇİM KURULLARINCA DÜZENLENECEK SİYASİ PARTİLERİN VE BAĞIMSIZ ADAYLARIN ALDIKLARI
( 298.72, 552.91) ( 298.72, 552.91) OYLARIN SAYISINI GÖSTEREN BİRLEŞTİRME TUTANAĞI
( 30.00, 569.27) ( 30.00, 569.27) 298/108
( 30.00, 561.87) ( 30.00, 561.87) Kanun M;2839/32,Geçici 5.
( 784.00, 568.27) ( 784.00, 568.27) Örnek 90
( 33.33, 409.98) ( 33.33, 409.98) KÖY VE MAHALLE
( 50.83, 403.73) ( 50.83, 403.73) ADI
( 90.40, 379.74) ( 104.74, 344.60) Sandık Kurulu Numaraları
( 108.40, 358.20) ( 101.20, 344.60) Seçmen Listesinde Yazılı Seçmenlerin Sayısı
( 126.40, 372.65) ( 133.65, 344.60) Oy Kullanan Seçmenlerin Sayısı
( 141.52, 366.96) ( 145.96, 347.48) İtiraz Edilmeksizin Geçerli Sayılan Oy
( 147.77, 386.27) ( 165.27, 341.23) Pusulalarının Sayısı
( 159.52, 366.96) ( 163.96, 347.48) İtiraz Edilen Fakat Geçerli Sayılan Oy
( 165.77, 386.27) ( 183.27, 341.23) Pusulalarının Sayısı
( 180.40, 371.68) ( 186.68, 344.60) Geçerli Oy Pusulalarının Toplamı
( 480.82, 454.22) ( 480.82, 454.22) SİYASİ PARTİLER
( 192.31, 537.22) ( 192.31, 537.22) SİYASİ PARTİ/BAĞIMSIZ ADAY GÖZLEMCİLERİ
( 183.49, 522.22) ( 183.49, 522.22) Partinin Adı
( 282.50, 527.22) ( 282.50, 527.22) Gözlemcileri
( 259.66, 517.22) ( 259.66, 517.22) Soyadı
Her metin bloğu koordinatları ile birlikte verildiğinde, tabloyu yeniden oluşturmak için tahminlerde bulunmak gerekmeyecekti. Tek sorun, bu betiğin çok yavaş çalışması ve çok bellek tüketmesiydi. Bu nedenle çareyi pdftotext programına benzer bir çıktı üretecek bir yama yapmakta buldum. Bu yama pdftotext programına -dump anahtarı ekleyerek her metin nesnesini koordinatları ile yazdırmayı sağlamaktadır. Bu sayede pdftotext ile metin koordinatlarını almak mümkün oldu:
pdftotext -enc UTF-8 -raw -dump yenimahalle1-P.pdf
139 25 199 33 MİLLETVEKİLİ
201 25 251 33 SEÇİMİNDE
254 25 274 33 İLÇE
276 25 305 33 SEÇİM
307 25 377 33 KURULLARINCA
379 25 452 33 DÜZENLENECEK
455 25 484 33 SİYASİ
487 25 540 33 PARTİLERİN
542 25 554 33 VE
557 25 600 33 BAĞIMSIZ
602 25 653 33 ADAYLARIN
656 25 702 33 ALDIKLARI
299 36 338 44 OYLARIN
341 36 379 44 SAYISINI
381 36 432 44 GÖSTEREN
434 36 494 44 BİRLEŞTİRME
497 36 542 44 TUTANAĞI
30 21 52 27 298/108
30 29 47 34 Kanun
49 29 96 34 M;2839/32,Geçici
Dikkat ederseniz, xpdf metin bloklarını da bölerek her kelime için ayrı bir çıktı oluşturuyor. Bu sonraki işlemleri biraz güçleştirse de hız avantajı ve her kelimeyi çevreleyen kutuyu doğru olarak hesaplaması büyük fayda sağladı.

Bu çıktıyı işleyerek tablo haline getirmek amacıyla yazdığım programı da bir sonraki bölümde anlatacağım.