30 Nisan 2016 Cumartesi

nginx ile özel bir endpoint (url)'den http auth özelliğini kaldırmak

Nginx server ile http auth yaparken bazı durumlarda spesifik endpoint'ler için auth kontrolünü kaldırmak isteyebiliriz, http auth özellğini belirlediğimiz bir endpoint'ten kaldırmak için nginx conf dosyası içinde server sectionu içinde bu endpoint için

location = /no_http_auth {
auth_basic off;
allow all; # Allow all to see content
}

ayarını ekleriz ve böylece bu endpoint için http auth kontrolünü kaldırmış oluruz.

22 Nisan 2016 Cuma

PostgreSQL Mac "No password provided" hatası çözümü

PostgreSQL'i mac üzerinde boş şifre kullanmak istiyorsanız eğer bir konfigürasyon yapmaz iseniz "No password provided" hatası veriyor ve postgresql'i dmg ile kurduysanız ayar dosyasını bulmak işkence haline gelebiliyor.

PostgreSQL 9.5 dmg üzerinden yüklerseniz El Capitan versiyonunda /Library/PostgreSQL/9.5/ klasörü içine yükleniyor ve veritabanı verilerini ve ayar dosyalarını /Library/PostgreSQL/9.5/data klasörü içinde saklıyor.

Eğer boş şifre kullanmak istiyorsanız data klasörü içindeki pg_hba.conf dosyasını açıp içine

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                md5
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

ayarını kaydedip, PostgreSQL'in konfigürasyonunu yeniden okumasını sağlamanız gerekiyor. Konfigürasyonu okuması için /Applications/PostgreSQL/ içinde reload configuration isimli bir uygulama var çift tıklamanız yeterli.

4 Mayıs 2014 Pazar

maven testlerini atlamak

Maven'i eğer konsoldan çalıştırıyor isek ve projemizde unit testlerimiz var ise bazen bu unit testleri atlamak isteyebiliriz, bu testleri atlayabilmek için konsolda komut verirken "-Dmaven.test.skip=true" parametresini eklememiz yeterli olacaktır.
Örnek :
mvn clean install -Dmaven.test.skip=true

1 Haziran 2012 Cuma

Spring Framework

Spring Framework'u Java geliştirme dünyasında yer alan herkesin mutlaka duyduğu bir frameworktur. Spring Framework'u Enterprise Java alanında Java'nın resmi platformu J2EE kadar güçlü ve belki ondan daha popülerdir.

Peki nedir Spring Framework'unu bu kadar popüler yapan ? Öncelikli nedeni Spring'in kullanımı çok basit ve geliştiricilerinin başından sonuna kadar framework'u hafif ve basit tutma düşüncesi sayesinde genel olarak apileri çok basit ve kullanışlı. Spring Framework, yaratıcısı Rod Johnson'ın bu basit tutma mantalitesini çok iyi uyguladı ve bu kadar popüler olmayı başardı.
Spring Framework, Web, Data Access, Integration, Mobile, Social ve Security gibi 6 ana parçaya ayrılmıştır, bu parçalardan istediğinizi kullanıp istediğinizi kullanmamakta serbestsiniz.
Web : Web adından da anlaşılacağı gibi Spring Framework ile web applikasyonları geliştirmekte kullanılıyor. Web parçası Spring MVC adı verilen bir web geliştirme framework'une sahip. Spring MVC ile en oturmuş web geliştirme yapısı olan MVC mantığına uygun şekilde web applikasyonları geliştirebilirsiniz.
Data Acccess : Data Access veritabanına erişmek için geliştirilen kapsayıcı sınıflardır. Spring'e özel bir ana veritabanı nesnesi ve onu destekleyen arka planda veritabanına erişim kodları sayesinde Spring içinde genelleştirilmiş bir veritabanı işleme mekanizmasına sahip oluyorsunuz.
Integration : Integration birden fazla farklı projenin bir arada çalışmasını sağlamak için geliştirilen bir katmandır. Daha çok mesajlaşma (message queue) ile ilgilidir ve farklı projelerin mesajlaşma yöntemi ile birbirlerine mesajlar göndermelerini sağlar. Böylece aynı dilde olsun farklı dilde olsun bu şekilde farklı projeler birbiri ile entegre şekilde çalışabilirler.
Mobile : Spring Framework mobil uygulama geliştirmeyi de desteklemektedir. Fakat bu destek native application bazında değil mobile uygun web uygulamaları geliştirme bazındadır, yani sonuçta oluşan proje bir web uygulamasıdır.
Social : Social parçası Spring Framework'un sosyal entegrasyon parçasıdır, sosyal entegrasyon facebook, twitter gibi popüler sosyal ağlara kolayca post yapmaınızı sağlar.
Security : Security parçası geliştirdiğiniz uygulamaları çalıştıracak kişi veya grupları ayarlamanızı sağlayan özelliklere sahiptir. Spring Framework bu basitliğini ve kullanışlılığını koruduğu sürece daha bir çok projede kullanılacaktır. Bu yüzden Java geliştirme dünyasında yer almayı düşünüyorsanız mutlaka öğrenmenizde fayda var.

linkler : Spring Framework

6 Nisan 2011 Çarşamba

Eclipse maven projesi "cycle detected" hatası

Eğer birden fazla projeden oluşan ve maven desteği ile geliştirdiğiniz projeleriniz var ise birbirine bağımlı olan projeler aynı aynda açıldığı zaman "cycle detected" hatası alınabilir.
Bu çok can sıkıcı bir durumdur çünkü "cycle detected" hatasından sonra eclipse projeleri derlemez ve dolayısı ile projeleriniz ayaklanmaz.

Bu can sıkıcı durumu gidermek için window->preferences->java->compiler->building yolu ile açılan ayar ekranında yer alan "Circular dependencies" ayarını "Error" durumundan "Warning" durumuna çekin ve "OK" butonuna basarak ayarı uygulayın. Bu ayar bütün projelerin yeniden build edilmesine neden olacak eğer build olmazsa eclipse'i kapatıp yeniden açın ve project->build all projects seçeneği ile projeleri build edin.


Üstteki dialog kutusunda yer alan ayarı değiştirdiğiniz zaman sorun çözülecektir.

28 Şubat 2011 Pazartesi

Java 7 önizleme sürümü yayınlandı



Java dünyasının sabırsızlıkla beklediği Java 7 en sonunda beta testlerine başladı. Java 7 Preview Edition'u indirmek için : http://jdk7.java.net/preview/ sitesine gidip sisteminize uygun sürümü indirmeniz gerekmekte.
Unutmadan ekleyeyim bu Java 7 değil Java 7 Önizleme sürümü yani bir nevi beta sürümü hatalar olacaktır.

16 Şubat 2011 Çarşamba

Java Annotasyonları - Java Annotations

Java Annotasyonları Java 5 ile gelen ve bir sınıfa meta data (özlük bilgisi diyebiliriz) eklememizi sağlayan özelliktir. Annotasyonlar sayesinde bir sınıf içine çalışma anında veya bilgi amaçlı kullanmak için çeşitli değerler saklayabiliriz.
Örnek bir annotasyon şu şekildedir :


public @interface TestAnno {
int age();
String name();
}


Annotasyonlar birer interface sınıfıdır fakat interface tanımlamadan farklı özellikleri de vardır.
Yukarıdaki örnekte oluşturulan interface sınıfının kullanımına bir örnek aşağıdadır :

public class Person {
@TestAnno(age = 10, name="Tayfun")
public String name;
}


Annotasyonlar metodlara, değişkenlere ve sınıflara uygulanabilirler. Annotasyonları sınıf içinde yazarken illaki içini doldurmanız gerekmez, sadece annotasyon adını da kullanabiliriz :

public class Person {
@TestAnno
public String name;
}


Tabi bu şekilde yapabilmemiz için TestAnno annotasyon sınıfındaki alanlara default değerler vermemiz gerekir çünkü bir annotasyon tanımlandığında eğer annotasyon değişkenlerine default bir değer vermez isek Java annotasyonları sınıf içinde yazarken değişkenlerini mutlaka doldurmamızı bekler. Aşağıdaki örnekteki gibi default değerler verirsek bu değişkenleri tanımlamadan annotasyonu sınıf içinde kullanabiliriz.


public @interface TestAnno {
int age() default 0;
String name() default "";
}


Annotasyonlar Java Reflection kullanan kodlar içinde çok işe yararlar örneğin şöyle bir senaryo düşünün, bir sınıfın içini reflection ile doldurmaya çalışıyorsunuz ve bir alana varsayılan bir değer atamak gerektiğinde bu varsayılan değeri annotasyondan okuyabiliriz.

Annotasyonlar spring, jsf 2 gibi frameworklerin temelini oluşturmaktalar ve annotasyonlar sayesinde xml dosyalarına gerek duymadan da konfigurasyon yapılabilir hale geldi.

15 Kasım 2007 Perşembe

Tomcat URL UTF 8 encoding problemi

Tomcat sunucuları ile çalışıyorsanız ve bir form üzerinden GET metodu ile türkçe karakter içeren veri yollarsanız, yolladığınız veri sunucu iç lojiğinde tam olarak UTF-8'e dönüşmüyorsa bu sorunun çözümü basit :
Tomcat Dizini/conf/server.xml dosyasını açın ve çalışan sunucunun <Connector port=.. şeklinde giden xml yaprağına URIEncoding="UTF-8" parametresini ekleyin ve tomcati yeniden başlatın.
Bu ayar ile URL üzerinden giden verileri (utf-8'e uygun encode edilmiş veri) sunucu düzgün şekilde dönüştürür.
Anlayamama ihtimaline karşı örnek ayar :

<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />

Çeşitli Javascript sınıfları

StringBuffer : Javascript'teki String nesneleri immutable yani daha sonradan büyütülemez özelliktedir ve siz 2 Stringi '+' işareti ile birleştirirseniz sonraki adımda javascript ile ilgili hafızada 2 kullanılmamış 1i yeni 3 tane String nesnesi yer alır eğer bu birleştirmeyi 5 tane String ile yaparsanız 2şer 2şer birleştirilir ve hafiza String çöplüğüne döner.
Bunu engellemek için StringBuffer sınıfını kullanarak String birleştirmesi yapmamız daha iyidir.

function StringBuffer(){
  this.__strings__ = new Array;
}
StringBuffer.prototype.append = function(str){
 this.__strings__.push(str);
 return this;
}
StringBuffer.prototype.toString = function(){
 return this.__strings__.join("");
}



onLoad Loader : Eğer sayfanın onload olayına birden fazla fonksiyon referansı atamak istiyorsanız, yani onload olayı için 1den fazla fonksiyonunuz var ise Loader sınıfı işinize yarayabilir. Yapmanız gereken onload olayı sırasında çağrılacak fonksiyonunuzu Loader.addOnLoad(fonk_adi) fonksiyonunu çağırarak eklemek.


var Loader = {
 loaded: false,
 addOnLoad: function(fn) {
  if (this.loaded) fn();
 else {
   var oldonload = (window.onload) ? window.onload : function () {};
   window.onload = function () { oldonload(); fn(); };
  }
 },
 init: function() {
  this.loaded = true;
 }
};
Loader.addOnLoad(Loader.init);


Vector : Java dili ile çalışanların mutlaka aşina olduğu bir sınıftır ve verileri saklamayı kolaylaştıran bir sınıftır. Alışkanlıktan olsa gerek bene javascriptte eksikliğini hissettim, Array tabanlı basit bir sınıf, tek sorunu prototype kütüphanesine ihtiyaç duyması fakat javascripte alışkın kişiler kolayca kendilerine uyarlayabilirler.



var Vector = Class.create();
Vector.prototype = {
 initialize : function(){
  this.array = new Array;
 },
 add : function(obj){
  this.array[this.array.length] = obj;
 },
 get : function(index){
  return this.array[index];
 },
 removeByIndex : function(index){
   this.array[index] = null;
 },
 size : function(){
  return this.array.length;
 },
 clear : function(){
   this.array = new Array;
 },
 getAsArray : function(){
  return this.array;
 }
}

 

11 Kasım 2007 Pazar

Ajax ile oluşturulan sayfaya javascript eklemek

Ajax ile dinamik olarak oluşturduğunuz sayfaya (bir div içine aldığnız form vs) dinamik olarak javascript eklemek istiyorsanız yapmanız gereken şudur :

var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'javascript_dosyasi.js';
headID.appendChild(newScript);

yukardaki kodu ajax ile alınan sayfanın içinde <script></script> blokları arasına koyun.
Bundan sonra javascript_dosyasi.js içinde yer alan fonksiyonlar dinamik olarak oluşturduğunuz nesnelerden çağırabileceksiniz.
Böyle bir şeye ne gerek var derseniz, örneğin bir ajax dialog kutusu yazdınız ve içine form gömeceksiniz ve form için bir sürü javascript fonksiyonu gereklidir, siz bu fonksiyonları içerecek javascript dosyasını önceden alabilirsiniz, eğer dialog kutusu her zaman çağrılmayacak ise gereksiz yere javascript dosyasını indirmiş olursunuz.
Javascript dosyasını dialog kutusu açıldığı zaman indirmek daha mantıklıdır işte bu noktada javascript fonksiyonlarının tanınmama ihtimali var bunun üstesinden gelmek için sayfanın head bloğuna dışarıdan alınacak javascript dosyasını dinamik olarak ekleriz.
Dialog kutusu ajax ile otomatik olarak oluşturulurken yukardaki kodları da çağırırsanız javascript dosyanız sayfaya eklenmiş olur ve sayfadaki her nesne o javascript dosyasındaki fonkiyonlara vs lere erişebilir.

7 Kasım 2007 Çarşamba

Appletten Javascript fonksiyonu çağırmak

Appletten Javascript fonksiyonlarını çağırmak için JSObject nesnesini kullanmalıyız.
JSObject nesnesi jre_dizini/lib klasörü içindeki plugin.jar içinde yer almaktadır. Yani JSObject nesnesini ve apilerini appletinizde kullanmak istiyorsanız projenizin kütüphanesine bu plugin.jar’ı da eklemelisiniz.
appletin init() metodu içinde tarayıcının JSObject nesnesine referansını almalıyız.


public void init(){
  jso = JSObject.getWindow(this);
}


jso referansını appletin herhangi bir yerinde kullanabiliriz. JSObject nesnesi ile javascript fonksiyonlarını çağırmak için applet içinden, aşağıdaki gibi bir fonksiyon çağrısı yapmalısınız.


if(jso != null )
try {
  jso.call(”fonksiyon_adi”, new String[] {parametreler,…});
}catch (Exception ex) {
  ex.printStackTrace();
}
}


Yukarıdaki 2 gösterim applet içinde JSObject nesnesine nasıl referans alınacağı ve JSObject referansı ile nasıl javascript fonksiyonu çağrılacağını göstermektedir. Appletimizde JSObject nesnesine referans alabilmemiz için html kodunda mayscript parametresinin true değerini alması gerekmektedir. Aşağıda örnek bir html kodu yer almaktadır.


<object type=”application/x-java-applet;version=1.4.1″ width= “800″ height= “600″ name=”jsap” id=”jsap”>
<param name=”codebase” value=”applet/”>
<param name=”archive” value=”applet.jar,plugin.jar”>
<param name=”code” value=”com.test.AppletMain”>
<param name=”mayscript” value=”yes”>
<param name=”scriptable” value=”true”>
<param name=”name” value=”jsapplet”>
</object>

 

MySQL UTF 8 Problemi

MySQL varsayılan karakter saklama (encoding) metodu olarak latin alfabesini kullanmaktadır. Bunu utf-8 olarak değiştirmek için linux’ta mysql konfigurasyon dosyasında bazı değişiklikler yapmamız gerekmektedir.
MySQL konfigurasyon dosyası genelde /etc/my.cnf dir bazı sistemlerde (örneğin ubuntu) /etc/mysql/my.cnf ‘dir. Bu dosyayı açıp [mysqld] yazan satırı bulup alt o kısıma default-character-set=utf8 parametresini eklemeliyiz, daha sonra [client] satırını bulup onun altına da “default-character-set=utf8″ satırını eklemeliyiz.
Bu parametreler ile veri tabanımızın dosyasını değiştirmiş olduk fakat veritabanı henüz değişikliklerden etkilenmedi, veritabanının bu değişikliklerden etkilenmesi için yeniden başlatılması gerekli bunun için root hakları ile /etc/init.d/mysql restart komutunu vermemiz yeterli. /etc/init.d/mysql scripti mysql sunucusun sciptidir eğer mysql sunucunuz farklı şekilde başlatılıyorsa o yöntemi kullanmalısınız ya da en son çare bilgisayarı yeniden başlatırsınız.
Bu dosyaya eklenen satırlar bazen nedense sunucuya etki etmiyor, eğer böyle bir durumla karşılaşırsanız mysql sunucusunu (mysqld) başlatan scriptte bir değişiklik yaparak çözüme ulaşabilirsiniz. /etc/init.d/mysql scriptini bir metin editörü ile açıp en altlarda yer alan case blounda ’start’) ile başlayan satırlarda /usr/bin/mysqld_safe komutunun olduğu satırı bulun ve /usr/bin/mysqld_safe komutunun yanına –character-set-server=utf8 parametresini ekleyin, dosyayı kaydedin ve mysqli yeniden başlatın. Bu adım ile büyük ihtimalle utf-8 problemi ortadan kalkacaktır.

Java Sanal Makinesi başlangıcı ve Classpath ayarları

**Bu yazı daha önce wordpressteki blogumda idi kapanma hadisesinden sonra yararlı gördüğüm için buraya aldım.

Java, Java Sanal Makinesi (JVM) ve bu makinenin içine alınan kütüphanelerden (bizim kodlarımız ve ana kütüphaneler vs.) oluşur. Java Sanal Makinesi (JVM) java kütüphaneleri 3 adımda bulur ve sanal makine içine alır.

1. Bootstrap classes (başlangıç sınıfları) : bu kütüphaneler Java Sanal Makinesinin ana kütüphaneleridir. Bu tür kütüphaneler bizim en temel olarak kullandığımız sınıfları barındırır (mesela java.lang.Object, java.lang.String vs vs). Genellikle jre_dizini/lib içinde yer alan jarlar bu tür kütüphanelerdir. En temel kütüphane rt.jar’dır. java.lang.Object sınıfı bu kütüphane içinde yer alıyor.
2 . Extension classes (Uzatılmış sınıflar) : bu kütüphaneler bizim 3.parti kütüphane olarak kullandığımız kütüphanelerdir. Genellikle jre_dizini/lib/ext klasörü içinde yer alan jar’lardır.
3. User classes (Kullanıcı sınıfları) : Bu tür kütüphaneler bizim kendi yazdığımız ve java programına yerlerini parametre olarak aktardığımız kütüphanelerdir. Eğer bir java programı yazdıysanız ve bu program 2 jardan oluşuyorsa ve 2 jarın içinde de birbirine ihtiyaç duyan sınıflar var ise bizim java programına bu jar’ların yerlerini başlangıçta parametre olarak belirtmemiz lazım ki java programı bu classları bulabilsin.

Java Sanal Makinesi başlarken İlk olarak ilk 2 adımdaki sınıf yüklemelerini gerçekleştirdikten sonra varsa bizim parametre ile yollarını belirttiğimiz sınıflar yüklenir.

JVM ‘ye kendi kütüphanelerimizin yolunu -classpath parametresi ile belirtiyoruz. Bunu bir örnekle daha iyi anlatabiliriz : /home/tayfun/javaTest klasörü içinde test.jar ve aynı dizinde çalıştırmak istediğim Test.class sınıfı yer alsın. Test.class sınıfı test.jar içindeki sınıflara ihtiyaç duyuyor olsun. Test.class’ı konsoldan çalıştırmak için şu komutu vermeliyiz : java -classpath /home/tayfun/javaTest/test.jar:. Test . Bu şekilde test.jar ve Test.class’ın yollarını JVM’ye belirtmiş oluyoruz ve JVM bu sınıflara ihtiyaç duyduğunda yükleyebilir.

Eğer yazdığınız kodlar bir klasör içinde yer alıyorsa o kodların başlangıç klasörünün yolunu göstermeliyiz. mesela kodlarınız /home/tayfun/javaTest/classlar altında yer alıyor olsun ve o klasörün içinde de com/mytest/… diye giden kodlarınız yer alsın bu durumda java -classpath /home/tayfun/javaTest/classlar:. Test şeklinde ana klasörün yolunu göstermeniz yeterlidir.

Bu classpath karmaşası ile uğraşmamak isterseniz 2.adımdaki yükleme aşamasını kullanabilirsiniz. oluşturduğunuz jarı jre_dizini/lib/ext klasörü içine atın ve çalıştırmak istediğiniz class’ı direkt çalıştırın. bir önceki örnekteki test.jar’ı bu şekilde 2.adımda bakılan klasörün içine atmış olsaydık java -classpath . Test komutunu vermemiz yeterli olurdu.

Daha ayrıntılı bilgi için :
Java.exe parametreleri
Finding Classes

6 Kasım 2007 Salı

SWT Programlama 2 - IDE seçimi

SWT programlarını yazmak için başlangıçta uygun bir IDE (yani geliştirmeyi yapacağınız program) bulmanız gerekli.
SWT programlama için en uygun IDE kuşkusuz Eclipse IDE'dir.
Neden Eclipse IDE'si diye sorarsanız öncelikle Eclipse, SWT ile yazılmış bir IDE'dir, 2. olarak Eclipse ile SWT programlama yaparken library path vs ayarlama ile uğraşmazsınız, direkt SWT sınıflarını oluşturup programlama yapmaya başlarsınız.
Ayrıca SWT programlamayı kolaylaştırmak için Visual Editor Project adı verilen SWT programlarını Visual Basic gibi görsel ve kolayca programlamanızı sağlayan bir eklentisi vardır. Visual Editor eklentisini SWT programlama yapacaksanız kesinlikle kurmalısınız çünkü işlerinizi inanılmaz kolaylaştırıyor ve hızlandırıyor. Visual Editor Project eklentisi Eclipse 3.2 sürümünde update seçeneği ile kolayca yüklenebiliyordu fakat Eclipse 3.3 sürümünün alt yapısındaki çeşitli değişikliklerden etkilenmiş olacak ki 7 Kasım 2007 itibari ile Eclipse 3.3 için uyumlu değil fakat 1-2 ay içinde uyum süreci biter diye tahmin ediyorum.
Eğer düzgün şekilde kurulabilen bir Visual Editor sürümü çıkarsa burada anlatmaya çalışacağım.

5 Kasım 2007 Pazartesi

Linux komutları

Linux komutları linuxa ilk başlayanların (eğer konsolu sık kullanmak zorunda ise) baş ağrısıdır. Peki nedir bu linux komutları.
Çoğu acemi linuxçu, linux komutlarını konsoldan çağrılan ve linuxun işlediği komutlar zanneder (yani arka planda nasıl işlediğini bilmeden komutları çağırırlar) aslında çağırdığınız komutlar hepsi olmasa da birer programdır.
Örneğin linux shellde (bash, sh vsye shell deniyor) sıklıkla kullandığınız "ls" komutu aslında bir programdır, ve yerini öğrenmek istiyorsanız "whereis ls" derseniz size bu programın diskinizdeki lokasyonunu gösteririr.
Büyük ihtimalle şunu merak ediyorsunuz bu komutlar program ise nasıl çalışıyorlar. Sorunun cevabı shell (konsol ya da kabuk) denen şeyin kendisinde saklı çoğu kişi shell denen olayı linuxun kendisi zannediyor aslında shell firefox, openoffice gibi normal bir programdır fakat kullanıcıdan bir girdi alıp bu girdiyi işlemek üzere tasarlanmıştır. Yani siz "ls" yazıp entera bastığınızda shelliniz "ls" adını PATH değişkeni ile gösterilen dizinler içinde arar eğer bulursa çalıştırır, bulamazsa "komut bulununamadı" vs gibi bir hata verir, yani programı PATH içinde bulamadığı için hata verir.
Eğer linux acemisi iseniz ve konsolda (yani shell) sık çalışacaksanız ya da meraktan konsol ile uğraşıyorsanız komutları öğrenmek için en güzel yol "/usr/bin", "/usr/sbin" gibi dizinler içinde yer alan programların adlarını alıp bu adlardan yararlanarak internette bilgi edinmektir. En azından program adlarını bilmek sizin komut denen olaya alışmanıza yardımcı olur.