Mayıs 2009 Arşivi

TIdHTTP Partial Download(Parça Parça Download)

// 30 Mayıs 2009 // 20 Yorum » // Delphi, Internet, Programlama

Hemen hemen hergün internetten birşeyler indirip duruyoruz. Kimi zaman çeşitli resim dosyaları, kimi zaman videolar kimi zamanda işimizle alakalı yada değil başka materyaller. Bu dosyaları bilgisayarımıza indirirken çoğu zaman indirme yönetici programlarından istifade ediyoruz. FlashGet, GetRight gibi. Bu programların indirilecek dosyayı bir kaç parça halinde indirme özellikleri olduğu gibi, herhangi bir bağlantı sorununda kaldıkları yerden devam edebilme gibi akıllı özellikleri var. Bizlerin onları tercih etmesindeki yegane neden de bu zaten. Peki hiç düşündünüz mü, internetten bir dosya bir kaç parça halinde nasıl indirilebiliyor ? Yada indirme işleminde sorun olduğunda kalınan yerden indirmeye nasıl devam edilebiliyor ?

Bir önceki makalemde BITS konusunu ele almıştım. BITS’de dosyalarımızı sessiz sedasız indirme yeteneğine sahipti. Aynı zamanda kaldığı yerden devam da edebiliyordu. Ancak arka planda ne gibi bir teknoloji kullandığı hakkında hiçbir fikrimiz yok. Nasıl yapıyor da internet üzerindeki bir dosyayı belirli bir yerinden okumaya başlayabiliyordu.. Aynı sorular diğer indirme yöneticileri için de sorulabilir elbette. İşte bu makalemizde bu konuya biraz ışık tutmaya çalışacağız. Ben sizlerle paylaşacağım örneğimde aşağıda göreceğiniz resim dosyasını bilgisayarıma indirmeye çalışacağım. Siz başka bir kaynak üzerindeki herhangi bir dosyayı deneyebilirsiniz. İşte indireceğimiz dosya ;)

turboman
(more…)

BITS(Background Intelligent Transfer Service) ile sessiz sedasız download ;)

// 27 Mayıs 2009 // 12 Yorum » // Delphi, İşletim Sistemi, Programlama

Açılımı Background Intelligent Transfer Service olan BITS, arka planda dosya indirmeye yarayan bir windows servisidir. Windows 2000′den sonra ve daha ziyade Windows XP’ler ile tanınmış ve daha sıklıkla kullanılmıştır. Windows’un arka planda updatelerini yaptığı servisin adıdır aynı zamanda. Bu servisin en önemli özelliği network’ün bandwith’ini en uygun şekilde kullanmasıdır. Bundan sonra yazacaklarımızı deneyebilmeniz için öncelikle bu servisin makinanızda çalışıyor olduğundan emin olmalısınız.

bits_background_intelligent_transfer_service

BITS servisinin en önemli özelliğinin sizin internet trafiğinize pek zarar vermemesi olduğunu söylemiştik. C ve C++ kullanıcıları için geliştirilmiş olan BITS, kendisine verilen indirme emirlerini yerine getirmek için network’ün en az kullanıldığı zamanları takip eder(Idle). Bu zamanı tespit edebilmek için de ethernet kartını sürekli izler. Network’ün yeterince kullanılmadığını anladığında arka planda indirim işlemine başlar. Ancak network kullanımının artması durumunda hemen transfer hızını düşürür ve mevcut network sistemine zarar vermez. Tüm bu özelliklerinden dolayı Windows, kendisi için gereken update’leri bu sistem vasıtası ile karşı bilgisayardan sizin bilgisayarınıza indirebilmektedir.

Biz de bu makalemizde, mevcut ağımızı yormayan basit bir indirme yöneticisi yazmaya çalışacağız. Ancak kendi indirme yöneticimizi yazmaya başlamadan evvel BITS’i biraz daha tanımakta fayda var. BITS, mevcut ağ performansına zarar vermeden, iletişimi sekteye uğratmadan dosya indirmeleri için son derece uygundur. Yazdığımız programların internet üzerinden bir yerlerden güncellenmiş sürümlerini yada bazı dosyaları indirmesi gerektiğinde kullanılabilecek mükemmel bir yardımcıdır.
(more…)

TThread & TQueue işbirliği..

// 26 Mayıs 2009 // 4 Yorum » // Delphi, Programlama

Kısa bir aradan sonra tekrar merhaba, bu makalemde iki önemli sınıfın birbirleri ile iletişiminin nasıl olacağını ve yaptıkları işbirliğinin getirilerini izah etmeye gayret edeceğim.

Malumunuz odur ki, hemen hemen her programcı time-critical kod parçacıklarında TThread nesnesine en azından bir kere müracaat etmiştir. Thread’ler programlama dünyasında işimizi kolaylaştıran son derece faydalı yapılardır. Ancak faydaları olduğu gibi, dikkatle kodlanmalarını gerektirecek pek çok neden de var. Bu nedenleri dilim döndüğünce daha evvel izah etmiştim. İlgilenen arkadaşlarımın öncelikle thread’ler hakkındaki makalemi okumasında yarar olduğunu düşünüyorum.

Bu noktadan sonra thread’ler hakkında bir fikre sahip olduğunuzu varsayarak ilerleyeceğim. Makalemize konu olan yararlı işbirliğinin diğer tarafındaki sınıfımız ise TQueue sınıfı. Bu sınıf, ilk giren ilk çıkar(first in first out) prensibine göre tasarlanmış bir Delphi sınıfı. Bu sınıfın tam zıttı olan TStack sınıfı ise tahmin edeceğiniz gibi son giren ilk çıkar(last in first out) mantığına göre tasarlanmış bir sınıf. Lâkin şimdi bizim konumuz TQueue.
(more…)

Exception Handling :)

// 23 Mayıs 2009 // 3 Yorum » // Genel

try_finally_except

Bitsin bu Tarih/Saat işkencesi(TDateTime tipleri ile oynamak..)

// 23 Mayıs 2009 // 2 Yorum » // Delphi, Programlama

Hemen hemen hepimiz yazdığımız projelerde tarih/saat verilerini kullanır, bunlar üzerinde çeşitli maniplasyonlar yaparız. Kimi zaman belli bir tarihe bir değer eklemek , kimi zamanda çıkartmak isteriz. Kimi zaman muhasebe/finansman uygulamalarında vade gün ve tarihlerini hesaplarken tarih/saat hesaplama rutinlerine ihtiyaç duyarız. Bazen de daha spesifik tarih/saat hesaplarına ihtiyacımız olur, artık yıl ile başımızı derde sokarız.

Tabii ki her modern programlama dilinin bu sorunları aşmak için hazır fonksiyon/kütüphaneleri vardır. Delphi’nin de var. Ancak bizim makalemize konu olacak gibi değil ;)
Genellikle, kullanıcılarımıza tarih ve saat verilerini girebilmeleri için, veri biçimlendirme denetimleri kullanırız. Bunların başında sanıyorum ki hepimizin kullandığı TDateTimePicker gelir. Ancak TDateTimePicker bileşeni bile tarih saat girmek için aslında meşakkatli bir bileşendir. Bu bileşenle uğraşmak istemeyenler TMaskEdit’in tarih saat formatındaki maskelerini kullanarak giriş işleminin yapılmasını sağlamak isterler. Ancak bu bileşen TDateTimePicker’dan bile daha yorucudur. Bu bileşenlerin birbirlerine göre güzel tarafları bulunmakla birlikte her ikisi de tam manası ile kusursuz tarih/saat girişleri için yeterlidir denilemez. TDateTimePicker’ın hem tarih hem saat gösterme ve değiştirmesine yarayan format harici bir property’si yokken, Format kullanıldığında da çeşitli garipliklerle karşılaşırız. TMaskEdit’in ise geçersiz tarih formatı hatalarından hem size hemde kullanıcılara eminim gına gelmiştir.

Herhangi bir tarihe 07 ay 25 gün 06 saat 05 dk 48 saniye eklemek istesek, bahsedilen bileşenler ile bunu yapmamız son derece zor olacaktır. Evet tüm bu zorlukları yaşadığınızı, yada siz yaşamasanız bile yazdığınız programın kullanıcılarının yaşadıklarını biliyorum. Belki artık onlar daha iyi bir alternatife rastlamadıkları için bu durumu kanıksamış olabilirler ama biz şimdi tarih/saat girişlerindeki kalıplaşmış yapıyı kırmaya hazırlanıyoruz.. Nasıl mı ?
(more…)

Blog yazmak böyle bir şeymiş..

// 22 Mayıs 2009 // 16 Yorum » // Genel

Bir blog sahibi olmanın hem güzel, hem de üzücü yanları varmış. Sitenize birilerinin geldiğini yazdıklarınızı okuduklarını bilmek güzel olan tarafı, ancak insanların bir kaç saniyelerini alacak bir yoruma dahi meyil etmemeleri üzücü olan kısmı.

Demek blog yazmak böyle birşeymiş.. Zaman zaman blog yazanların tartışmalarında rastladığım cümleler bana şimdi daha anlamlı gelmeye başladı. Acaba gerçekten de havaya mı yazıyoruz ?

Debugger Fault Notification Delphi 2007/Delphi 2009

// 22 Mayıs 2009 // Yorum Yok » // IDE

Eğer sizde boş bir proje dahi açsanız her iki denemeden bir tanesinde kesinlikle projenizin kaynak kodunda bir breakpoint varmış gibi kalıyorsanız, ardından CPU ekranına düşüp “Debugger fault Notification” hata mesajını alıyorsanız ve makinanızda Logitech firmasına ait bir webcam bulunduruyorsanız ya Delphi ile çalışırken görev yöneticisinden LVPrcSrv.exe isimli dosyayı sonlandıracaksınız, yada benim gibi Logitech driver’larını temelli kaldıracak ve rahat bir nefes alacaksınız. Buyurun bu da video‘lu anlatımı..

Bir Kiosk ve CreateDesktop macerası..

// 20 Mayıs 2009 // 36 Yorum » // Delphi, Programlama

Bu yazıma gecenin bu saatinde başladığıma göre büyük ihtimalle yarın işe geç kalacağım. Ama tamamlandığında da bu konuyu 3 gündür makaleleştirememenin verdiği sıkıntıdan da kurtulmuş olacağım. Sanırım bu kafi derecede haz verir bana.

Hayatının herhangi bir anında herhangi bir husus hakkında birşeyler karalamış olanlar bilirler ki, bir şeyi biliyor olmak ile anlatabiliyor olmak cidden farklı. Bunlar farklı kaabiliyetler sanıyorum. Ve yine yazmaya gönlü kaymış kişiler bilir ki; bazen bir konuyu layıkı ile anlatamama endişesi “acaba hiç mi yazmasam” düşüncesine hayat verir. Bende böyle gitgeller yaşadım bu makale için ama elimden geldiğince kendi üslubum gereği aklıma gelen tüm detaylara da inerek bir cesaretle ya Allah diyip başlıyorum makaleye. Şimdiden okuyanların gözlerini ve zihinlerini yoracağım için helallik diliyorum.

Aslında anlatacaklarım tam bir kiosk uygulaması değil elbette. Ancak bir ucundan dokunuyor. Daha ziyade Unix türevli işletim sistemlerinin popüler KDE, Gnome gibi arayüzlerinde görmeye alıştığımız multi-desktop meselesini anlatmaya çalışacağım. Pek çok kullanıcı bazen muzurluk adına ve bazen de gerçekten işi gereği çoklu masaüstlerine ihtiyaç duyar. İşyerinde çalışırken, başkalarından gizlemek istediği programları başka bir masaüstünde barındırmak isteyen insanların sayısı gerçekten de az değildir. Hatta irili ufaklı pek çok uygulamada vardır sevgili patron ve müdürlerin gözlerinden sizleri korumak için :)
(more…)

CLR Stored Procedure (Socket)

// 18 Mayıs 2009 // 6 Yorum » // C#, Delphi, Veritabanı

CLR DESTEKLİ STORED PROCEDURE İLE SOCKET HABERLEŞMESİ

SQL Server 2005 ve .Net 2.0 ile birlikte gelen yeniliklerden biriside CLR destekli stored procedurelerdir. Bu özellik; mevcut database sistemleri adına tam anlamıyla bir devrim niteliğindedir. Peki nedir bu devrim biraz açıklayalım;

Bu güne kadar sql server ile yapılabilecekler sadece sql dilinin özellikleri ve sql serverın becerileriyle sınırlı iken, Microsoft amcamız .Net 2.0 teknolojisini kullanarak, Visual Studio 2005 üzerinden (ki biz burada C# kullanacağız), herhangi bir programı yazarken kullandığımız kod yapımızı stored procedure içine gömebilmeyi ve stored procedureleri adeta bir uygulama haline döndürebilmeyi bize sunuyor. Nasıl kafanız biraz karıştımı..!! Uzun bir cümle oldu biliyorum ama sözü daha fazla uzatmadan, başlıkta da belirttiğim gibi bir stored procedure aracılığı ile socket bağlantısını kısa bir örnekleme ile anlatıp olayı detaylandırmaya çalışacağım.
(more…)

Paranoyaklar için :)

// 17 Mayıs 2009 // 5 Yorum » // Delphi, Programlama

Muhtemelen başlığa bakıp kimse bu yazının ilerleyen satırlarını okumak istemeyecektir, çünkü insan psikolojisi gereği bilinçaltı başlığın kendisine uygun olmadığını düşündürecektir. Ama kimbilir belki yanılırım okuyanlar olur, ne de olsa tüm dünya üzerinde for Dummies serisi makale ve kitaplar nerede ise yok satıyor :)

Siz değerli okuyucularıma paranoyak demiyorum ama benim bazen paranoyakça davrandığım ve meyvesini bu makale haline getiren bazı olaylar oluyor. Bu makalenin tohumlarının atılmaya başladığı zaman, tam olarak işletim sistemimde bazı gariplikleri hissetiğim zamana tekabül ediyor. Bir müddet önce makinamda bir kısım yavaşlık hissettim, yazdığım yazılar sırasında bu yavaşlığı hissetmem beni hemen keylogger olma ihtimali üzerinde düşündürmeye başlamıştı. Bu bağlamda, Startup, registry’de çalışan uygulamalar listelerini incelemiş, ardından servisleri de gözden geçirmiştim. Gereksiz olduğuna inandığım belki de gerekli olduğu halde sildiğim pek çok program oldu :) Ancak insanın içine şüphe girdimi bir kere imkan yok çıkmıyor :)
(more…)