13 Aralık 2010 Pazartesi

Tüm Ayarlar Bir Arada

Oluşturacağınız bir kısayol ile Windows 7'nin tüm ayarlarına tek bir noktadan ulaşabilirsiniz.

Masaüstü veya herhangi bir klasör içerisinde yeni bir klasör oluşturun ve ismini aşağıdaki gibi değiştirin.

Ayarlar.{ED7BA470-8E54-465E-825C-99712043E01C}

Klasörün simgesi Denetim Masası şeklinde olacaktır. Çift tıklatıp açtığınızda Windows 7'nin tüm ayarlarına kolayca ulaşabileceksiniz.

E-postalarınızı Görev Çubuğundan Okuyun

Küçük bir yazılım ile e-postalarınızı Windows 7 görev çubuğu üzerinden kontrol edebileceğinizi biliyor musunuz?

Microsoft, Windows 7 ile birlikte sunduğu zıplayan listeleri ve uygulamaların görev çubuğundan kontrol edilmesini sağlayan özelliği yeni çıkardığı yazılımlarında kullanıyor. Bu geliştirmeyi sadece Microsoft uygulamıyor elbette. Tarayıcı yazılımlarından, medya oynatıcılara kadar pek çokyazılım artık görev çubuğunu etkin bir şekilde kullanıyor.


Arayüz bu kadar.

Gmail Notifier Plus ise biraz daha farklı. Uygulama sadece görev çubuğunda gözüküyor. Üzerine geldiğinizde gelen kutunuzdaki e-postaları gösteriyor ve sırayla okuyabiliyorsunuz. Ayarları değiştirmek, e-posta hesabı eklemek ve e-posta oluşturmak için ise zıplayan listeler kullanılıyor. Yine bu liste üzerinde de e-posta başlıklarını görmek mümkün.

E-posta kutunuzun kontrol edilme sıklığını değiştirme seçeneği sunan yazılım ayrıca isterseniz yeni e-posta alındığında sesli bildirimde de bulunabiliyor.

Windows 7 ile tam manasıyla entegre.

İpucu: Görev çubuğu ayarlarında büyük simgeler seçeneğini kullanırsanız, yeni gelen e-posta sayısını Gmail Notifier Plus simgesi üzerinde görebilirsiniz.


Oldukça pratik bir özellik.

Gmail Notifier Plus uygulamasını buraya tıklyarak indirebilirsiniz. Türkçe dil desteğine sahip olduğunu da belirtmekte fayda var.

17 Nisan 2010 Cumartesi

Veeeeee Mysql

Uzun senelerdir olmasada program yazmaya başlayalı 4-5 sene oldu. Bu geçen zaman zarfında farklı diller farklı veritabanları kullandım belkide daldan dala atladım durdum. Önce her acemi gibi access ten başladım sonra sql server cazip geldi ve bunu kullandım. Taaki 2 gün öncesine kadar. Kaymakamlık için geliştirdiğim vakıf programında veriler biraz artınca access şişmeye başladı ve program açılmaz oldu. Sonra sql server a çevirdim veritabanını e tabii haliyle bi dünya iş tekrardan. Bi kaç gün sonra yine aradılar ve veritabanı yine çok yavaş.. Kara kara düşünmeye başladım, işim zordu ama çaresiz değildim. Mysql i mercek altına aldım forumlarda yorumları incelemeleri tespitleri okudum. Kararımı verdim mysql ücretsiz ama arayüzleri ücretli neyseki paylaşanlar saolsun buldum bi tane crackli (Navicat for Mysql) arayüz. Tabi birde delphi için arayüz lazım malum delphinin içinde mysql eklentisi direkt gelmiyor. Delphi içinde bir mysql bağlantısını sağlayacak paketi buldum(mydac). Şu an verileri yükledim ve program da sql server ve access in nerdeyse 10 katı hızlı işliyor verileri Bu yüzden I Love You Mysql diyorum ve şiddetle tavsiye ediyorum.

Delphi de kodlama standartları

Delphi ile geliştirdiğim bir program ın çok fazla ram kullanması ve yavaş çalışması üzerine yaptığım araştırma sonucu kodlar hazırlanırken uyulması gereken standartlar. Umarım işinize yarar.


BORLAND KODLAMA STANDARTLARI


Bu doküman Delphi kod yazma standartlarını anlatmaktadır. Borland tarafından oluşturulan ve birçok Delphi programcısı tarafından benimsenen standartlar. Object Pascal çok güzel dizayn edilmiş bir dildir, bu standartların temel amacı da kodu daha okunabilir kılmaktır. Daha sonra yazdığınız bir koda baktığınız zaman kolayca okuyabilmelisiniz veya birlikte proje geliştirdiğiniz bir takım arkadaşınız kodlarınızı kolayca anlayabilmelidir.

GENEL KURALLAR
Hizalama

* Eğer kodda hizalama yaparsanız, kodları okumak ve takip etmek çok daha kolay olacaktır. İlk hiza başlangıçtan itibaren 2 boşluk bırakarak, ikinci hiza başlangıçtan itibaren 4 boşluk bırakarak, üçüncü hiza başlangıçtan itibaren 6 boşluk oluşturarak ve sonrasında her hiza için iki boşluk (8, 10, 12, 14... boşluk) bırakarak devam edilmelidir.

* Tab karakterlerini kod dosyalarına kaydetmeyin. Çünkü Tab karakterinin belirttiği boşluk miktarı kullanıcıdan kullanıcıya ve çeşitli kod uygulamalarında farklı algılanmaktadır.

Tools -> Editor Options -> Source Options kısmındaki Use Tab Character seçeneğini iptal ederek Tab karakterinin kod dosyalarına kaydolmasını engelleyebilirsiniz. Bu seçeneği kapattığınızda, Tab'a bastınığız zaman Tab karakteri yerine boşlukla doldurulur.

* Kod editöründe düşey bir çizgi vardır. Kod yazarken bu çizgiyi geçmezseniz kodunuz hem daha kolay okunur, hem de çıktıları daha iyi gözükür.

* Birbiriyle ilişkili begin ve end, birbiriyle aynı hizada ve ayrı satırlar şeklinde yazılmalıdır.

Yanlış : for i := 0 to 10 do begin // begin, for'la aynı satırda

Doğru : for i := 0 to 10 do

begin
if Şart then
begin
...
end
else
begin
...
end;

Yorum Koyma

* Yorum için //, {} ve (* *) kullanılır.

* // tek satıra yorum yazmak için kullanılır.

{} ve (* *) ise blok olarak yorum koymak için kullanılır, başlangıç ve bitiş arasındaki her şey yorum kabul edilir. Bunlardan {} yorum yazmak, (* *) de çalışma anında geçici olarak bazı kodları devre dışı bırakmak için kullanabilirsiniz.

* Koda ne fazla, ne de az, anlamanız için yeterli olacak kadar yorum ekleyin.

* Eğer düzeltmek istediğiniz bir koda geçici olarak yorum ekliyorsanız, yorumun başına ??? eklemek iyi olacaktır. Daha sonra kolayca bu satırları bulup, gerekli düzenlemeleri yapabilirsiniz.

//???:diğer procedure’u hazırlayınca sıralama kısmını da düzeltmek gerek.

Lisans Bilgisi Ekleme

Yazdığınız unit’e lisans bilgileri eklemek istiyorsanız, unit’in en üstüne aşağıdaki yapıda eklenmelidir. Gerekirse araya aynı formatta yeni satırlar eklenebilir.

{*******************************************************}
{ }
{ Üretim Modülü }
{ }
{ © 2010, oguzdelice.blogspot.com }
{ }
{*******************************************************}

OBJECT PASCAL

Boşluklar

Object Pascal boşlukları göz ardı eder. Object Pascal çok güzel bir dizayna sahip olduğu için çok fazla boşluk bırakmanız gerekmeyecek, ancak;

* Rutin (procedure, function) tanımları arasında bir satır boşluk bırakmalısınız.

* Açma parantezi ile bir sonraki karakter ve kapama parantezi ile bir önceki karakter arasında boşluk bırakmayın.

Yanlış : CallProc( AParameter )

Doğru : CallProc(AParameter)

* Kod içerisinde gereksiz yerlerde ekstra parantezler kullanmayın.

if (i = 15) then // yanlış, burada paranteze gerek yok.

if (i = 15) or (j = 5) then // doğru, parantezler gerekli

* Noktalı virgülden önce boşluk bırakmayın.

* Köşeli parantezlerden önce ve sonra boşluk bırakmayın.

Yanlış : MyInteger := MyIntegerArray [ 3 >;

Doğru : MyInteger := MyIntegerArray[3>;

Ayrılmış Kelimeler (Reserved Words)

Object pascal'a ait ayrılmış kelimeler (for, if, begin, end gibi kod içinde özel manası olan kelimeler) tamamen küçük harflerle yazılmalıdır. Bu kelimeler varsayılan olarak editör içinde koyu yazı tipi ile gösterilirler.

Procedure ve Function’lar (Rutinler)

* Rutinlere yaptıkları işi anlatan manalı isimler verilmelidir. Genelde iyi isimler; bir isim ve bir fiilden oluşur.

DosyaBul, ProgramiKapat gibi.

* Rutin isimlerini daha kolay okuyabilmek için kelimelerin baş harfleri büyük yazılmalıdır.

yanlış : procedure bubiruzunokumasizorrutinismi;

doğru : procedure BuOkumasiKolayBirRutinIsmi;

* Rutin isimlerinde alt çizgi kullanılmamalıdır.

Yanlış : procedure Bu_Yanlis_Bir_Procedure_Ismi;

Parametreler

* Mümkün olduğu kadar, aynı tipteki parametreler tek bir ifadede toplanmalıdır.

yanlış : procedure Ornek(Parametre1: string; Parametre2: string; Parametre3: string);

doğru : procedure Ornek(Parametre1, Parametre2, Parametre3: string);

* Parametrelere manalı isimler verilmelidir.

* Eğer kategorisel bir sıralama olabiliyor ise parametrelerin sıralamasını ona göre yapın.

BirProc (Ulke, Bolge, Il, Ilce : string); gibi.

* Böyle bir kategori yok ise çok kullanılan parametreden, az kullanılan parametreye doğru yazın. Bir istisna olarak eğer Sender parametresi varsa daima ilk sırada yazılır.

İsim Çakışmalarını Önleme

Eğer bir rutin birden fazla unitte tanımlı ise uses kısmında bu unitlerin ikisinin de kullanımı durumunda oluşabilecek karışıklıkları önlemek için bu rutinleri unit ismi ile kullanmak gereklidir.

Örnek : FindClose rutini 2 unitte tanımlıdır.

SysUtils.FindClose(SR); veya Windows.FindClose(Handle);

Değişkenler

* Değişkenlere anlamlı isimler verilmeli.

* Döngü değişkenleri için genelde i, j, k harfleri kullanılır.

* Boolean değişkenler tanımlanırken isimleri (True, False) değerlerini tam manasıyla anlatacak bir isim olmalı.

* Birden fazla aynı tipte değişkeni ayrı ayrı satırlarda tanımlamak yerine, tek satırda tanımlanmalı.

var
i: integer;
j: integer;

yerine

var
i, j: integer;

* Eğer gerekli ise lokal değişkenlere hemen rutinin girişinde ilk değerler atanmalıdır.

* Mümkün olduğu kadar global değişkenler kullanılmamalı, sadece gerçekten gerekli olduğu durumlarda kullanılmalıdır. Global değişkenlere tanımlama aşamasında ilk değer ataması yapılabilir. Eğer gerekli ise bu atamaları tanımlama kısmında yapabilirsiniz. Ancak atayacağınız değerler 0, nil, ... sıfırlama değerleri ise bu atamaları yapmayın. Bu atamalar en uygun biçimde Delphi tarafından zaten sıfırlanmaktadır.

Real Tipini Kullanmayın

* Real tipi geriye doğru uyumluluk için bulunmaktadır. bunun yerine Double tipini kullanın.

Variant ve OleVariant

Çalışma esnasında tipi belli olmayan verileri tutmak için kullanılırlar ve genelde COM ve veritabanı programlarında lazım olurlar, bunların dışında pek kullanmayın. Variant'lar diğer tiplere göre çok daha yavaş çalışırlar.

Variant stringleri Delphi tipinde tutarken, OleVariant bu stringleri Ole string'lere çevirir (WideChar). Bunun için COM-based uygulamalarda ve ActiveX geliştirirken OleVariant kullanın.

if İfadesi

* if/then/else şeklinde kullanılan ifadelerde, gerçekleşmesi daha muhtemel olay then kısmında, daha az muhtemel olan ise else kısmında yer almalıdır.



* if ifadelerinin okunması daha zor olduğundan, mümkün olduğu kadar case ifadesi kullanın.



* iç içe if ifadelerini en fazla 5 seviyeye kadar yapın. Daha fazlasına ihtiyacınız varsa, yapınızı gözden geçirip daha uygun bir yapıya çevirin.



* Eğer birden fazla şartı test ediyorsanız, şarları hızlı çalışandan yavaş çalışana doğru dizmeniz daha iyidir. Mesela şart1 daha hızlı hesaplanıyor ve şart2 biraz daha yavaş hesaplanıyorsa



if Şart1 or Şart2 then // şart1 True ise, Şart2'ye bakılmaz.


* Birden fazla şartı test ediyorsanız ve şart ifadeleri uzunsa, her şartı bir satıra yazmak daha iyi olacaktır.

if Şart1 and

Şart2 and

Şart3 then

case İfadesi

* case'de ifadeler nümerik veya alfabetik sıralamada yazılmalıdır.

* her ifadenin uzunluğu 4-5 satırı geçmemesi iyi olur. Eğer bir ifadenin uzunluğu çok fazla ise bunu ayrı bir procedure veya fonksiyon olarak yazmak daha iyi olacaktır.

* her ifade begin..end blokları arasına yazılmalıdır.

case İfade of
ifade1 :
begin
...
end;
ifade2 :
begin
...
end;
else
...
end; {case}

with ifadesi

with ifadesi yazımda kolaylık sağlaması açısından kullanılır. Ancak with ifadesini gerekli yerlerde kullanmalı ve birden fazla nesne ile kullanmamalısınız.

Yanlış : with Record1, Record2 do

böyle bir kullanım hem kodu okuyan kişiyi şaşırtır, hem de hata tespitlerini zorlaştırır.

EndIf, EndCase, EndWith

Object Pascal’da bu ifadeler yoktur. Bu ifadeler begin..end blokları arasına yazılırlar. Bu ifadeleri kullanırken, başlangıç ve bitiş bloklarını belirlemek için yorum kullanmalısınız :

if i > 5 then
begin
...
end; {if} // if bloğunun bitişi
with Query1 do
begin
....
end; {with} // with bloğunun bitişi

Enumerated Type

Her elemandan önce enumarated type’i belirten harflerin eklenmesi gerekir. Aşağıdaki örnekte, her elemandan önce bk harfleri eklenmiştir ve bunlar ButtonKind ifadesinin baş harfleridir.

Yalnız sadece L veya 1 eklemekten kaçının. Bunlar gösterimde ve bazı yazıcılarda problem çıkartabilir.

TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,
bkClose, bkAbort, bkRetry, bkIgnore, bkAll);

Exception Handling

Delphi'de genel kural nesneyi oluşturan yok eder. Eğer bir form veya bir nesne oluşturmuşsanız onu yok etme görevi de sizindir. Aldığınız kaynakları geri sisteme vermelisiniz. Bunun için bol bol try..finally bloğu kullanmanız gerekir.

SomeClass1.Create; // oluştur
try
... // bir şeyler yap
finally
SomeClass1.Free; // SomeClass1 mutlaka yok edilir.
end; {try}

Eğer bir hata oluştuğu zaman bir işlem yapmak istiyorsanız (genelde hatayı gösterme veya kaydetme gibi) try..except bloğu kullanmalısınız.

try
....
except
.... // hata oluşursa bu blok çalışır
end; {try}

Class İsimleri

* Her zaman olduğu gibi mantıklı isimler verilmelidir. Delphi'de classların başına T harfinin konulması bir gelenektir. Yani Her class(sınıf) ismi T ile başlamalıdır.

type
TMusteri = class(TObject);

Fields ve Property Access

* Field’ların başına F harfi eklenmelidir. FYukseklik gibi.

* Tüm fieldlar private kısmında tanımlanmalıdır.

* property erişimi için kullanılan metodların başına get ve set kelimeleri eklenmelidir.

property Yukseklik: Integer read GetYukseklik write SetYukseklik;

* Methodlar alfabetik sırada sıralanmalıdır. Yani : private – protected – public - published

DOSYALAR

* Projelere anlamlı ve açıklayıcı isimler verilmelidir. Mesela sistem bilgilerini gösteren bir program için : SystemInfo.dpr gibi.

* Form isimlerine anlamlı ve açıklayıcı bir isimden sonra Frm karakterleri ile biten bir isim verilmedir. Mesela Stok formu için StokFrm.pas gibi.

* Data Modüllere yine açıklayıcı bir isimden sonra DM karakterleri ile biten bir isim verilmelidir. Mesela müşteri tabloların yer aldığı data module ise : MusteriDM.pas gibi.

FORMLAR

* Form isimleri açıklayıcı bir ön isim ve Form kelimesinin birleşmesinden oluşmalıdır. Mesela Stok formunun ismi : StokForm, müşteri bilgilerinin girişinin yapıldığı formun ismi : MusteriGirisForm

* Sadece çok gerekli formlar auto-create yapılmalıdır. Auto-Create formlar program çalıştığı anda otomatik olarak oluşturulur ve hafızada yer kaplarlar. Çok gerekli formlar dışındaki diğer formlar Project Options kısmından Avaible Forms kısmına alınmalıdır.

* Data modullere açıklayıcı bir ön ekten sonra DataModule kelimeleri eklenmelidir. Mesela müşteri tablolarının yer aldığı data module için MusteriDataModule gibi.

31 Mart 2010 Çarşamba

Fireworks ün Sevdiğim bir özelliği...

Biz Yüksekova Milli Eğitim Camiası olarak Kaymakam Bey in de telkinleri ile YOKAP(Yüksekova Okul Eğitim Kalitesini Artırma Projesi) çalışması yapıyoruz. Bu işte öğretmenlerimiz yaptığı her etkinliği belgelendirmek için fotoğraf çekiyorlar. Ay sonu geldiğinde bu fotoğraflarderleniyor ve mmbuilder adında saçma bir programla birleştiriliyor. Evet ne alaka mmbuilder ve fotoğraf dediğinizi duyar gibiyim ama malesef. Çekilen fotoğrafların belirlenen pixel e dönüştürülmesi lazım 500 tane fotoyu tek tek dönüştürmek çok yorucu ve zahmetli olur. Bu sebepten adobe fireworks ile (toplu işleme) batch process olayını kullanmak en mantıklı ve kesin çözüm.
fireworks ekranında File patch precess a tıklıyoruz.












Karşımıza çıkan pencereden resimlerimizin olduğu klasörü seçip next diyoruz.









sonra açılan pencere scale (boyut) seçeneğini karşı tarafa
ekliyoruz..












Alt tarafta bulunan boşluklara resimlerimizin hangi boyutta
olmasını istiyorsak onu bi zahmet yazıyoruz ve next diyoruz.












Karşımıza gelen pencereden hangi resimleri
dönüştürmek istiyorsak seçiyoruz.
Seçimden sonra ok diyoruz. veeeee

İŞLEM TAMAM. korkmayın orjinal resimleriniz
silinmiyor. onlarıda başka bi klasör e ekliyor..

21 Mart 2010 Pazar

HANE ZİYARET BİLGİ FORMU PROGRAMI


Yine boşladık blogu. çok mu çalışıyoruz vakit mi bulamıyoruz bilinmez ama arada yazmak iyi geliyor. son 12 gündür Yüksekova Kaymakamlığı bünyesinde faaliyet gösteren Sosyal Yardımlaşma ve Dayanışma Vakfı'na bir program geliştiriyorum. İlk başladığım da okuldan 1 hafta izin aldılar, bence gerek yoktu çünkü ilk istedikleri program 3-4 günde biterdi ama bilindiği gibi istekler azalmıyo sürekli artıyo ve tam tamına 12 gündür bu işle ilgileniyorum. Daha önce yapılmamış mı diye sordum kağızman da yampışlar (çalmışlar) ama bizim işimizi görmüyor çünkü onda sadece form kaydı ve resim ekleme olayı var. benim geliştirdiğimde ise adres, form, resim, yardım ekleme menüleri excel e aktarma ve raporlama seçenekleri var. Aslında bugün son kısma geldim yardım seçeneklerinin yazdırılması ve çok sıkıldım yapmak gelmiyor içimden. Bi insan sql komutları yazmaktan bu kadar mı sıkılır evet sıkılırmış. Ha gayret bitecek tabi yeni bişeyler istemezlerseee...

16 Şubat 2010 Salı

Eskiden

Üniversite yıllarında yaptığım bir çalışma buldum nette bende yoktu ama sağolsun atanesa da varmış rastgele ulaştım linkleri paylaşayım dedim.. basit anlamda html in temeli konu alınmıştı...


http://atanesa.atauni.edu.tr/AtaNesADosya/dosya/11774/sablon.swf

16 Ocak 2010 Cumartesi

Yüksekova (Gewer)

Yeni bir serüven yine uzak diyarlar. Türkiye' de çok şükür görmediğim plaka (30) kalmayacak :) . 2009 aralık atamasında 21. tercihten Hakkari/Yüksekova/5 Mayıs İlköğretim Okulu'na Kadrolu atandım. 14 ocak ta patnos taki görevimi bitirip 15 ocak ta buradaki görevime başladım. Dün haliyle göreve başlama yazısı almak için okuluma gittim. Müdür iyi bi adama benziyo ama zaman gösterir tabi. Benim yerimde Görevlendirme bi bayan çalışıyomuş ne dese beğenirsiniz müdür; Seni başka bi okula gönderebiliriz, ya da buradaki bilgisayarcının çalıştığı köy okuluna. başta tepki verdim gitmem diye ama sonra dedim ki gideceksem eğer bi daha bu okula gelmem hep o okulda kalırım die. tabi onlar nasıl bi cevher kaybettiklerinin farkında bile olamayacaklar...:) Yüksekova büyük bi yer bu kadar lüks arabaları bi arada izmir de istanbul da bile görmedim. Geneli 4*4 jep. Tabi bizim gibiler burada gariban muamelesi görüyor.:) Bakalım neler olacak.... Yüksekovanın resmini ekliyim dedim ama inan ki düzgün bi resmine rastlamadım nette.. :(

http://yuksekova.meb.gov.tr/resimler.asp