Monthly Archives: June 2009

Findstr komutu ile Text Arama İşlemleri

Windows işletim sistemi kullanıcısı olarak neden Unix tabanlı işletim sistemlerindeki Grep gibi bir aracın bulunmayışından şikayet etmişimdir.Sık sık geliştirdiğiniz bir projede herhangi bir kod satırını, herhangi bir nesnenin hangi sınıflarda, dosyalarda kullanıldığını görmek isteyebilirsiniz.Kısacası kod üzerinde arama yapmak yazılımcıların olmazsa olmaz günlük aktivitelerindendir.

Bu yüzden eğer benim gibi aynı anda .NET, Java gibi birkaç platformda geliştirme yapıyorsanız, bu kod arama işlemini IDE üzerinden yapmak bazen oldukça zahmetli olabiliyor. Hatta bazen geliştirdiğiniz eski kodunuzun IDE’si bile bilgisayarınızda bulunmayabiliyor. Tekrar IDE kurmakda benim gibi üşengeç biri için büyük eziyet.

Buna benzer Windows ortamında kullanabileceğim özellikle komut satırından çalışan bir araç ararken ilk olarak Cygwin aracına rastladım. Bu araç sayesinde Linux ortamını ve araçlarını neredeyse birebir Windows ortamında komut satırı üzerinden kullanabiliyorsunuz. Dolayısıyla Grep gibi faydalı birçok Linux aracı Windows ortamında kullanıma hazır hale geliyor. Cygwin kurulumu biraz uzun olsada getirdiklerine değecek bir araç.

Uzun süre önce bilgisayarımı formatladığım ve açıkcası tekrar Cygwin kurulumuna üşendiğim için başka bir araç arayışına gittim. Bulduklarımdan biri Windows ortamında zaten bulunan Findstr komutuydu.Bu komut ile basit olarak text arama işlemlerini kolaylıkla yapabiliyorsunuz.Grep gibi tamamen Regular Expressions gücünü kullanarak arama yapamasanız da basit olarak Regular Expressions, ve birçok faydalı seçeneği ile text dosyalar üzerinde arama  yapabilmenize izin veriyor.

Findstr ile bu aralar benimde en çok kullandığım aşağıdaki arama ifadesi gibi ifadeler yazabilirsiniz.

Findstr /s /i "import java.util.Date" *.java

Yukarıdaki komutda bulunan “/s” parametresi ile bulunduğunuz dizin ve bütün altdizinler dahil, “/i” parametresi ile büyük,küçük harf farklılığını önemsemeyerek bütün java dosyaları içinde java.util.Date sınıfının kullanıldığı dosyaları arıyoruz.Ardından bulduğu satırları herhangi bir dosyaya ya da ekrana yazdırabilirsiniz. Yazılımcı olarak işimizin büyük çoğunluğu Text üzerine olduğu için Text dosyalar ile oynamayı iyi bilmek işimizi oldukça hızlandırıyor. Bu tarz araçların bütün yazılım geliştiriciler için de faydalı olacağına inanıyorum.

Ant ile Versiyon Numaralandırması

Geliştirdiğiniz uygulamanın sık sık yeni sürümünü çıkarıyorsanız, çıkardığınız sürüme versiyon numarası vermek oldukça faydalı olabiliyor. Özellikle uygulamanız aynı anda birden fazla versiyonu bulunabilecek bir uygulama ise(Desktop uygulaması,….) kullanıcılardan farklı versiyonlara ait farklı hatalar gelebilmektedir. Bu yüzden kullanıcının gönderdiği hatanın hangi versiyonda olduğunu bilmek işinizi oldukça kolaylaştırır.

Java ile geliştiridiğiniz projelerde sürüm otomasyonunu Ant ile yapıyorsanız versiyon numaralarını el ile vermektense bu versiyonlama işleminide otomatikleştirebilirsiniz. Özellikle bunu merkezi bir CI,build server üzerinde bu işlemi yapmak oldukça işinizi kolaylaştırır.

Ant scriptiniz içine aşağıdaki gibi satırları ekleyip numaralandırma işlemizi ant’a devredebilirsiniz.

buildinfo.properties

build.user=Administrator
build.num=0098
build.date=22.06.2009 10\:23

default.properties

name.build.info          = buildinfo.properties
name.build.referer       = ProjectVersion.java
name.build.prefix        = PROJEADI-
        <loadproperties srcfile="${basedir}/default.properties"></loadproperties>
	<loadproperties srcfile="${basedir}/buildinfo.properties"></loadproperties>

	<propertyfile file="${name.build.info}"
	 comment="Build Information File - DO NOT CHANGE">
	    <entry key="build.num"
	     type="int" default="0000"
	     operation="+" pattern="0000"/>
	    <entry key="build.date"
	     type="date"
	     value="now"
	     pattern="dd.MM.yyyy HH:mm"/>
		<entry key="build.user"
			type="string" value="${user.name}"/>
		
	</propertyfile>
	
	<replaceregexp file="${name.build.referer}"
	 match="@\(#\).*@"
	 replace="@(#)${name.build.prefix}-${build.num} (on:
	${build.date}) Built by : ${build.user}@"/>

Yukarıda gördüğünüz propertyfile Ant komutu içerisinde name.build.info yani buildinfo.properties dosyasının içerisine her defasında versiyon numarasını arttırarak yazmaktadır. Ardından replaceregexp komutu içerisinde name.build.referer yani ProjectVersiyon.java dosyasının içeriğine yukarıda arttırılan versiyonu ve diğer faydalı bilgileri buildinfo.properties içerisinden alıp yazmaktadır.

Ardından sizde projenizde uygun bir yere ProjectVersiyon.java içerisindeki bilgileri yazdırarak kullanıcıya hangi versiyonu kullandığını gösterebilirsiniz.