21 Aralık 2012 Cuma

Shell Geliştirmeye Giriş

Shell,terminal üzerinde yazdığınızı işlemleri(bu bir ekrana bastırma işlemi de olabilir,klasörün içindeki dosyaları harf sırasına göre sıralamakta olabilir) gerçekleştiren kod parçasıdır.
Sheller fiziksel olarak .sh uzantılı dosyalardır.Unixin kendi shell dili olduğu gibi,C,Perl gibi dillerde de shell yazılabilmektedir.

Terminal açılır.
gedit <dosyanızınadı>.sh 
olacak şekilde metin düzenleyicisi açılır.


Açılan metin düzenleyicisinde shellimizde yaptırmak istediğimiz kodlar yazılır.İlk shell kodumuz olduğundan kullanıcıdan iki giriş alan ve ekrana çıktı bastıran shell yazdıracağız.
echo "Merhaba Dünya"
echo "Ad:"
read ilkAd
echo "Soyad:"
read soyAd
echo "Benim adım $ilkAd $soyAd"
echo,ekrana yazdırmak istediğimiz metni gönderen bir komuttur.
read,kullanıcıdan aldığı veriyi bir değişkene atan bir komuttur.
echo komutunda read komutundan aldığımız parametreyi yazdırmak için yazdırmak istediğimiz değişkenin başına $ işareti getirilir.
Gördüğümüz gibi echo ve read komutuyla shell dosyamızı hazırlamış olduk.Şimdi nasıl çalıştıracağız ona bakalım

Düzenleyici(gedit) kapatıldıktan sonra terminale dönelim ve
sh shell01.sh
komutunu yazalım

Entera bastıktan hemen sonra kodumuzdaki ilk iki echo komutu vazifesi gereği aldığı stringleri ekrana bastırmakta ve read komutu sizden giriş yapmanızı beklemektedir.


9 Aralık 2012 Pazar

Windows 8 "Windows" Dosyalarında Değişiklik İzni Alma

Windows 8 ' de karşılaşacağımız sorunlardan biri de Windows dosyalarında değişiklik yapmasına izin vermemesidir.Aslında normal kullanıcılar için güvenlik açısından faydalı olsa da geliştiriciler açısından ister istemez sıkıntı yaratan bir durum olmaktadır.

Örnek olarak Windows\System32\drivers\hosts dosyasını kullanalım

"hosts" dosyasına sağ tık Özellikler menüsü açılır ve bu menüden Güvenlik sekmesine tıklanır.


Güvenlik sekmesinden Gelişmiş tıklanır ve kullanıcı adının yazdığı seçenek seçilir "İzinleri Değiştir" e tıklanır.


Öncekinde olduğu gibi profil ismi belirtilecek şeklinde seçilir ve "Ekle" düğmesine basılır.İsterseniz erişim izni engellemek dosya da değişikliğin yapılmasına izin vermemek için "Kaldır" veya "Düzenle" düğmelerine tıklayabilirsiniz.


Buradan "Sorumlu seçin" yazısı tıklanır.


Sırayla Gelişmiş ---> Şimdi Bul tıklanır. Arama sonuçlarında çıkan listede bilgisayarınızın kullanıcı adı seçilir ve tamam a basılır.



Bu işlemden sonra iki işlem öncede aktif olmayan "Temel İzinler" aktifleşir ve buradan istediğiniz izni verebilirsiniz.


6 Aralık 2012 Perşembe

Java Thread

Thread,bir programı oluşturan iş parçacıklarıdır.Bildiğimiz gibi programlar küçük küçük iş parçacıkları(thread) tarafından oluşturulmaktadır.Gerçek hayata örnek verirsek yolda yürümek bir thread,yolda yürüken müzik dinlemek ayrı bir thread,yolda yürüyüp müzik dinlerken etrafı izlemek ise başka bir thread dir.
Burada size giriş olarak en basit anlamda bir thread JAVA platformunda nasıl oluşturulur,oluşturulan thread nasıl geçici bir süreliğine durdurulur -ki biz buna literatürde uyku(sleep) diyoruz- onu anlatacağım.

import java.util.Random;                              
public class Olay implements Runnable {
String isim;
int zaman;
Random r = new Random();            
public Deneme(String i){
isim=s;
zaman=r.nextInt(10);
}
public void run(){
try{
System.out.printf("%s uyudu %d ms \n", isim,zaman);
Thread.sleep(zaman);
System.out.printf("%s tamamlandı\n", isim);
}
catch(Exception e){
}
}

}
Threadlerimizin çalışması için Runnable arayüzünü oluşturduğumuz Olay sınıfına ekliyoruz.
java.util.Random: Random,rastgele bir değer üreten bir sınıftır.
zaman=r.nextInt(10) : Buradaki "r" Random sınıfının bir objesi olup nextInt(10) metodu,zaman türündeki bir değeri giriş olarak zaman değişkenine atmaktadır.
public void run() : Fonksiyon başlığından belli olduğu gibi run() metodu threadimizi çalıştırdığımız fonksiyondur.Bu fonksiyonun içine biz hangi kodları yazarsak threadimiz ona göre çalışacaktır.Biz basit anlamda threadlerin rahat anlaşılması için ekrana çıktı veren fonksiyonları yazdık.
Thread.sleep() : Sleep metoduyla giriş değeri olarak "zaman" değişkeninden aldığımız değeri milisaniye cinsinden aktarır.Alınan değer oluşturduğumuz thread i uykuya geçirir.Örneğin Thread.sleep(1000) demek, 1000 milisaniye boyunca thread uykuya geçecek demektir.


public class anaFonksiyon{
public static void main(String[] args){
Thread t1 = new Thread(new Deneme("Bir"));
Thread t2 = new Thread(new Deneme("İki"));
Thread t3 = new Thread(new Deneme("Üç"));
t1.start();
t2.start();
t3.start();
}

}

Main kodumuzda Olay.java oluşturduğumuz sınıfları tek tek çağırıyoruz. 

Konsol ekranımız Şöyle olur:

İki uyudu 5 ms 
Üç uyudu 4 ms 
Bir uyudu 8 ms 
Üç tamamlandı
İki tamamlandı
Bir tamamlandı

Gördüğümüz gibi "Bir" 8 ms boyunca durdurulduktan sonra tamamlanmıştır.Aynı şekilde "İki" 5 ms, "Üç" 4 ms boyunca.En kısa "Üç" uyuduğu için "Üç" işini en erken sonlandırmıştır.Ondan sonra "İki" ve en son "Bir" işini sonlandırmıştır


10 Ağustos 2012 Cuma

APPCRASH hatası ve üzerine

APPCRASH hatası windows'da başınıza gelebilecek en karışık hatalardan birisidir.

İnternette bir sürü bu sorunun çözümüyle alakalı yöntemler bulunmaktadır.Birincisi belki de en çok bilinen DEP yöntemi.Yanlız bunun çözümü için programınızının hata günlüğünde,hata modülü .dll uzantılı bir dosyayı göstermesi lazım
"Bilgisayarım" sağ tıklanıp özellikler açılarak "Gelişmiş Sistem Ayarları" tıklanır.

"Gelişmiş"sekmesinden "Performans" paneli altındaki "Ayarlar"düğmesi tıklanır.

Veri Yürütme Engellemesi(DEP) sekmesi açılarak "Seçtiklerim dışında  kalan tüm Windows programları ve hizmetleri için DEP'i aç" tıklanır ve APPCRASH hatası verilen programın exe uzantılı dosyası seçilir.

Eğer sorunununz çözülmediyse büyük ihtimal hata modülünün .dll değilde .exe türü dosyayı göstermesinden dolayıdır.

Bunun çözümü; programınızı direk Program Files içine atarak çözebilirsiniz.


7 Mart 2012 Çarşamba

if( fork() ) ????

if(fork()) nedir? if( fork() ) aslında if( fork() != 0 ) yani fork komutunun geri dönüş değerine göre child mi yoksa parent mi döndürecek onu göstermektedir.Bildiğimiz gibi sıfır dönerse child,sıfırdan farklı dönerse parent olduğunu gösterir.Eğer -1 döndürürse hata verir bunuda unutmayalım


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>




int main()
{
pid_t cocuk_pid;
printf("Parent process id = %d\n", (int)getpid() );
cocuk_pid=fork();


if (cocuk_pid!=0)
{
printf("burası parenttir , process id =%d\n",(int)getpid());
printf("child process id = %d\n",(int)cocuk_pid);
}
else
{
printf("burası child processdir, process id=%d\n", (int)getpid());
}
return 0;
}


fork() komutu ve C diliyle network e giriş

Bildiğimiz gibi çalıştırdığımız programların arkaplanda nelerin döndüğünü baktığımızda karşılaştığımız kavramlardan biride processlerdir.Process tam olarak program değildir.Programlar processlerin işlemesiyle çalışır.Processlerde çalıştırılan programın kodları,değişkenleri,işlemcinin bayraklarının durumları gibi işletim sisteminin programla çalıştırılan programla haberleşmesini sağlayan durumlar bulunur. fork() komutu ise bir process ten başka bir process kopyalamak için üretilmiştir
 Öncelikle her processin unique dediğimiz nev-i şahsına münhasır id leri bulunur.Bunu c dilinde şu komutlarla gösterebilir.
#include <stdio.h>
#include <unistd.h>
int main() 

 printf("process id : %d\n",(int)getpid()); 
 }
Gelelim fork() komutuna.fork() komutu process kopyalamaya yarar.Kopyalanan process e child process,kopyalandığı process e parent process denir.Child process,parent process id sinden bir fazlası verilecek şekilde kopyalanır.
Burada dikkat etmemiz gereken husus return nun iki defa gerçekleşmesidir.  Parent process e ve child process e aynı anda dönüş yapılır.
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int forkResult;
printf("process id = %i\n",getpid());
forkResult=fork();
printf("process id = %i - result %d\n",getpid(),forkResult);
return 0;
}






Gördüğümüz gibi 2289 parent processimizn id sidir(PPID) 2290 ise child processimizin id sidir.
process id:2289 - result 2290(parent process)
process id:2289 - result 0(child process)

5 Mart 2012 Pazartesi

Ubuntu'da .rar dosyasını açmak

1.Adım
Uygulamalar(Applications)>Donatılar(Accessories)>Uçbirim(Terminal)
Karşımıza çıkan komut satırına
sudo apt-get install rar yazılır

2.Adım
Mevcut .rar uzantılı dosyamıza sağ tıklanıp Buraya çıkart kısmına basılarak aynı isimli dizinde dosyamız rardan dışarı çıkartılır.Hayırlı olsun :D

3 Mart 2012 Cumartesi

Ubuntu'da C kodu yazmak ve çalıştırmak

1.Adım
Uygulamalar(Applications)>Donatlar(Accessories)>Uçbirim(Terminal) açılır
2.Adım
Karşımıza çıkan konsola gedit deneme.c yazılır
deneme kısmına dosyanın adı yazılır örnek olsun diye deneme yazdım.

3.Adım
Kodu yazdıktan sonra karşınıza editör çıkacak.Burası C kodumuzu yazacağımız yerdir.Örnek olarak basit bir C kodu yazılmıştır.
4.Adım
Kodumuzu yazdıktan sonra kaydedip kapatıldıktan sonra konsola geri dönülür.Yanlız kaydetmeyi unutmayın yoksa dosyanız yazdığınız gibi derlenip çalışmaz.
Konsola gcc -c deneme.c yazılır.Yazdıktan sonra deneme.c nin bulunduğu dosyanın içinde deneme.o adında bir dosya oluşur
5.Adım
Konsol satırına gcc deneme.o -o deneme yazılır
Burada gcc kullandığımız c derleyicimizin adı.deneme.o object dosyası dediğimiz deneme.c dosyasından türetilmiş makine kodlarını barındıran dosyadır. -o komutu object dosyasını çalıştırılabilir bir programa dönüştüren koddur.deneme ise çalıştırılabilir C programımızın adıdır.
Yazdıktan sonra konumda çalıştırılabilir deneme adında çalıştırılabilir dosya oluşacaktır.
6.Adım
Konsol satırına ./deneme yazılarak C programımız çalıştırılır.

THE END