Multi platform C

Bir proje kapsamında hem windows hemde linux dağıtımlarında çalışabilecek bir uygulama yazmamız gerekiyordu, bu nedenle C yada C++ düşündük. C daha kolay bir başlangıç olacağından C ile başladık. IDE olarak Codeblocks kullandık. Windows tarafında derleyici ve debugger olarak Mingw nin paketlerinden GCC kullandık. Windows kısmında bellek taşmaları konusunda uyarı yapmadığından çok zorlandık. Linux ortamında bellek taşmaları için daha çok yardım alabilmeniz mümkün.Linux ortamında derlediğiniz C kodu glib versiyonunuza bağlı olarak derlendiğinden, gelib versiyonu farklı dağıtımlarda çalışmayacaktır, bu durumda projenizi derlerken linker options kısmından -static parametresini verirseniz programınız kullandığı kütüphanleri kendi içinde taşıyacaktır, dosya boyutunuz büyüsede sorun çıkarmama açısından değer. Windows ortamında bir ayrım göremedim.

Optik okuma programı nasıl yapılabilir?

Öncelikle şunu yapın. Sağ kenar yada sol kenarda bulunan siyah diktörgen kareler varya bunların yerini tespit edin. Şöyleki, kullanıcı form tanımlarken bir formu kendi cihazı ile tarasın, resim ekrana gelsin. Bu ekranda iki tane kutuyu üstten, iki tane kutuyu alttan içine alacak şekilde iki ayrı dikdörtgen çizsin (dikgörtgenler biraz büyük olsun). Ayrıca bu siyah dikdörtgenlerden birinin tam boyutunu pixel olarak girsin (genelde 150 dpi tarama yaparız). Siz okuma yaparken tahmini alan olarak bu bölgede resmi siyah beyaz yaptıktan sonra siyah diktörgenleri arayın. İki diktörgen arasındaki mesafe yardımıyla satırlar arası uzaklığı bulmuş olacaksınız. Zaten sütunlar arası boşluklar standartır. Sanırım sütunlar 1/6″ aralıkla olacaktır, satır aralıkları ise değişken olabilir. Birde kullanıcıya ilk dairenin yerini işaretlettirin, yada herhangi bir daireyi işaretleyip buranın kordinatını girsin. Buna göre tüm dairelerin yerini kestirebilirsiniz. Aşağıdaki siyah diktörgenler ile yukarıdaki siyah diktörgenlerin X eksenindeki farkından kağıdın ne kadar yamuk tarandığını  hesaplayarak dairelerin yer değişimlerini hesaplayın. Daire alanındaki siyah pixellerin, beyaz pixelere oranından (%80 gibi kullanıcıya seçme hakkı verebilirsiniz) alanın işaretli olup olmadığını anlayabilirsiniz. Yanlız daire içinde zaten semboller olduğundan sizi yanıltabilir, bu nedenle kullanıcı tarafından ilk tanımlama işleminde gösterilen formdaki ilgili dairenin siyahlık oranına bakabilirsiniz.

Israrla en üstte durmaya çalışan programlar

Outlook gibi açılırken ısrarla en üstte durmaya çalışan programlar beni rahatsız ediyor. Bundan kurtulmak için Microsoft’un TweakUI programına ihtiyacınız olacak. Programı kurduktan sonra çalıştırın ve soldaki listede General ‘ın altında Focus seçeneğini bulacaksınız. Bu ekranda Prevent applications from stealing focus seçeneğini işaretlemeniz yeterli olacaktır.

Youtube yeni sunucu IP adresleri

Youtube yeni sunucular açmıştı. Bazı videolar erişilemez hatası vermeye başladığında host dosyamı güncellemeye başladım. Sonradan bu sunucuların bazılarının IP adresi tekrar değişti. Yeni eklenen sunucuların düzenli hali aşağıda yer alıyor. (more…)

Acrobat 8 pro yüklemesi çalışmıyor

Nedenini anlayamadım ama yükleme pakatini açması gereken program kapanıyor. Manuel olarak yükleme dosyalarının açılmasını şu şekilde komut isteminden sağlayabilirsiniz.

AcroPro80_efg.exe -nos_ne -nos_o”D:\FEAD_Extracted”I can’t recognize it but installer which is extract orginal installer files can’t work. You can extract original installer files using above command in command promt.

http://www.schooltechnician.co.uk/knowledge_base/general/netopsystems_-_fead_optimizer_-_command_line.html

Kendi proxy server’ınızı oluşturun

Son dönemde firmalarda ve devlet kuruluşlarında bir çok siteye giriş engellenmiş durumda. Ancak rapidshare gibi bazı siteler lazım oluyor, bu durumda yana yakıla bir proxy server arıyorsunuz. Proxy siteleride koruma kapsamında engelleniyor yada bulduğunuz proxy hizmeti üzerinden çalışmıyor.Bu durumda kendi proxy serverınızı kurabilirsiniz. Eğer bir hostinginiz varsa (php ve phyton destekliyorsa tabi) phpproxy programını kullanabilirsiniz. Cgi versiyonlarıda bol miktarda bulunuyor.

http://idea.hosting.lv/a/phpproxy/

Ayarlarını nasıl yapılacağınız Readme dosyasından okuyabilirsiniz. Aslında phpproxy’i kurmanız web tabanlı bir proxy server elde etmenizi sağlıyor, anca başka programları bu proxy üzerinden kullanamak isterseniz yine vermiş olduğum adresteki phpproxy.py.exe-0.6.zip programını yine readme dosyasındaki ayarları yaparak çalıştırığınızda gerçek bir proxy server elde edeceksiniz.Unutmayın bu sistem kendi hostunuzdaki kotadan yiyecektir.

Not: kodlar global değişken koruması olmadığı varsayılarak yazılmış, phpproxy.php dosyasında yer alan $REQUEST_METHOD değişkenini $_SERVER[‘REQUEST_METHOD’] olarak düzeltebilirsiniz.

VBS (VBScript) Dosyaları isimlendirmek

Bazen bilgisayar ortamında halletmeniz gereken basit ancak çokluğu nedeniyle insanı üşendiren bir durumla karşılaşabilirsiniz. Bu durumda genelde bilgisayar programı yazarız. Kullanabileceğimiz bir çok dil var ancak bu editörleri açmak bazen sıkıcı oluyor, bazende fazlaca vakit alıyor. Ayırca yeni birşeyler eklemek için tekrardan açıp derlemek işkenceye dönüşüyor.

ADF (automatik document feeder – otomatik döküman besleyici) ile taramış olduğum bir sürü evrak için dosya isimlendirmesi yapmam gerekiyordu. Evraklar arkalı önlüydü. Bu nedenle bir yüzünü taradığımda sayfa numaraları 1-3-5 şeklinde giderken sırasını bozmadan kağıtları çevirip tekrar cihaza koyduğımda sayfa numaraları tersten 12-10-8 gibi ilerliyordu. Total Commander ile bu şekilde bir numaralandırma yapmak imkansızdı. Elimin altında bulunan Delphi ve VS C# bu iş için biraz büyük kalacaktı. Bende Excel ve Word içinde bol bol kullandığımızdan VBS ile yapmaya karar verdim.

Tek numaraları sıralayan kod aşağıda:

Dim fso, folder, files, NewsFile,sFolder
Set fso = CreateObject("Scripting.FileSystemObject")
currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
sFolder = currentDirectory
Set folder = fso.GetFolder(sFolder)
Set files = folder.Files

Set sFiles = CreateObject("System.Collections.ArrayList")
For each folderIdx In files
If Right(folderIdx.Name, 3) = "JPG" then
sFiles.Add folderIdx.Name
End If
Next
SFiles.Sort()

iSayac = 1
Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True)
for each file in sFiles
sYeniIsim = sFolder & "Sayfa-" & String(3 - Len(Cstr(iSayac)), "0") & Cstr(iSayac) & ".JPG"
iSayac = iSayac + 2
NewFile.WriteLine(sYeniIsim & " " & file)
fso.MoveFile sFolder & file, sYeniIsim
Next
NewFile.Close

Tersten giden çift numaralar için ise:

Dim fso, folder, files, NewsFile,sFolder
Set fso = CreateObject("Scripting.FileSystemObject")
currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
sFolder = currentDirectory
Set folder = fso.GetFolder(sFolder)
Set files = folder.Files

Set sFiles = CreateObject("System.Collections.ArrayList")
For each folderIdx In files
If Right(folderIdx.Name, 3) = "JPG" then
sFiles.Add folderIdx.Name
End If
Next
SFiles.Sort()
SFiles.Reverse()

iSayac = 2
Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True)
for each file in sFiles
sYeniIsim = sFolder & "Sayfa-" & String(3 - Len(Cstr(iSayac)), "0") & Cstr(iSayac) & ".JPG"
iSayac = iSayac + 2
NewFile.WriteLine(sYeniIsim & " " & file)
fso.MoveFile sFolder & file, sYeniIsim
Next
NewFile.Close

Bu kodların çalışabilmesi için sisteminizde .Net Framework kurulu olması gerekiyor. Çünkü Set sFiles = CreateObject(“System.Collections.ArrayList” komutu ile oluşturmuş olduğum sFiles nesnesi .net içinde yer alıyor.Bunu yapma nedenim dosya isimlerini sıralamak istememdi. Sıfırdan bir metin sıralama fonksiyonu yazmak yerine SFiles.Sort() komutunu kullanmak daha kolay geldi. Metin listesini tersten sıralamak içinse SFiles.Sort() komutundan sonra SFiles.Reverse() komutunu kullanmak yeterli.

iSayac değişkeninin başlangıç değerini değiştirerek istediğiniz rakamdan başlamasını sağlayabilirsiniz.

Kodlarda görebileceğiniz NewFile nesnesi FileList.txt dosyasına dosyaların yeni adlarını ve eski adlarını kaydetmektedir. Böylece bir yanlışlık olduğunda geri gönebilmemizi sağlayacaktır.

Bu kodları bir metin editörüne yapıştırdıktan sonra vbs uzantılı olarak kayhdetmeniz yeterli olacaktır.