27 Mayıs 2010 Perşembe

Java

Kariyer.Net'de hiç “java, spring, hibernate” gibi anahtar kelimeleri yazarak iş ilanlarında arama yaptınız mı? Karşınıza java teknolojileri ile ilgili kaç tane ilan geliyor? Peki bu ilanların kaçı yeni mezunlara aradıkları fırsatı sunmaya istekli? İşte size iş ilanlarında aranan özelliklerle ilgili birkaç örnek;

  • Üniversitelerin Bilgisayar, Elektronik Mühendisliği, Matematik ve İstatistik bölümlerinden mezun,

  • Java ve J2EE platformuna hakim, J2EE üzerinde proje geliştirmiş,

  • Java teknolojilerini öğrenme konusunda istekli olduğunu gösteren,

  • IT deneyimi ve Java/J2EE programlama bilgisi gerekli,

  • Nesneye yönelik yazılım geliştirme bilgisi,

  • Açık kaynak kodlu projelerle çalışmış,

  • JSF, Struts, Spring, Hibernate, EJB konularına hakim,

  • Spring, Hibernate ve ORM konularında bilgi sahibi,
Aranan nitelikler benzer ifadelerle uzayıp gidiyor. Ülkemizdeki pek çok yazılım firması projelerini kurumsal Java teknolojileri ile geliştirmektedir. 

İşte yazın kendizi geliştirmenizin bir yolu...
Daha detaylı ayrıntı için buradan bakabilirsiniz...

3 Mart 2010 Çarşamba

Web Services

Bu makalemde geleceğin anahtar terimlerinden biri olan ve iş potansiyelinin hafiflenmesine büyük katkısı olan "web servisleri" ne değineceğim. Giriş yapmadan önce beni bu konudan haberdar eden daha doğrusu bu bitirme tezimi veren Yrd.Doç.Dr. Muammer Akçay hocama teşekkülerimi sunarım.

Web servisleri haziran 2004 tarihinde yeni yeni çıkmaya başladı ve günümüzde hızlı bir şekilde yerini alıyor. Ve uygulamanın geliştirmesinde Microsoft, Oracle, Hp, Sun, IBM ve daha bir çok firma katkıda bulunmakta ve geliştirilmesinde yeni yeni gelişticilere olanak sağlamaktadır. Web servisleri XML tabanlı mesajlaşan ve platformlardan bağımsız olarak çalışabilen internet uygulamalarıdır.Yani Linux ortamında Java ile çalışan bir web servisi  ile Windows ortamında .Net ile çalışan bir web servisi sorunsuz bir şekilde birbirleri ile haberleşebilir ve bilgi alış verişinde bulunabilir.Web üzerinde verilen bu servisler standart HTTP protokolü ile sağlanmaktadır.

Bir kullanıcın HTTP üzerinden bir web servisini kullanmasına RPC(Remote Procedure Call) denir. HTPP üzerinden yapılan bu çağrımlara karşı SOAP(Simple Obect Access Protocol) dediğimiz protokol XML çıktıları üretir. Ve bu sayede standart bir veri paylaşım aracı olan XML ile istediğimiz verileri alıp kullanırız.

Web servisi uygulamasını çağıran istemcinin kullandığı teknoloji ne olursa olsun SOAP ile HTTP üzerinden bu isteğini iletebilmektedir. Daha önceden uzaktan veriye erişim için birtakım standartlar mevcuttu, bunlar küçük ağlarda veya internetlerde uygun sonuçlar verebiliyordu, DCOM, CORBA ve J2EE 'nin RMI standartları bunlara örnek verilebilir.

Kısaca Web Servisler:  
  • Web Servisler uygulama bileşenidir
  • Web Servisler açık protokolleri(open protocols) kullanarak haberleşir.
  • Web Servisler kendi kendine yetebilen ve kendinden tanımlıdırlar.
  • Web Servisler UDDI kullanılarak keşfedilebilir.
  • Web Servisler diğer uygulamalar tarafından kullanılabilir.
  • Web Servisler XML tabanlı bir teknolojidir.
Web Servisleri Standartları:
 
Web servisine ulaşmak isteyen bir istemci ile bu servisi sunan sunucu arasında bilgi alış verişi yani haberleşmesi XML formatında olmaktadır. Bu formatı sağlayan standart ta SOAP tır. SOAP standartlarını belirleyen de W3C standartlar komitesidir.
SOAP standartları dışında bir çok standart bulunmaktadır. Bunlar XML, WSDL, DISCO ve UDDI dir. Kısaca özetlersek: XML(eXtensible Markup Language.), sunucunun veriyi sunmak için kullanıdığı standarttır. DISCO(Dıscovery Protocol) sayesinde ise bir sunucuda paylaşıma açılmış bütün web servislerinin organizasyonu sağlanır.

XML((eXtensible Markup Language):
Bağımsız bir kuruluş olan W3C (World Wide Web Consortium) organizasyonu tarafından tasarlanan ve herhangi bir kurumun tekelinde bulunmayan XML (eXtensible Markup Language), kişilerin kendi sistemlerini oluşturabilecekleri, kendi etiketlerini tanımlayarak çok daha rahat ve etkin programlama yapabilecekleri ve bu belirlenen etiketleri kendi yapıları içerisinde standardize edebilecekleri esnek, genişleyebilir ve kolay uygulanabilir bir meta dildir. 

  • XML bir document'in(belgenin) yapısını ve görünümünü tanımlamak için kullanılan uluslararası bir standartdır.
  • XML (Extensible Markup Language - Genişletilebilir İşaretleme Dili) yapılandırılmış belge ve verilerin evrensel formatıdır
  • XML text tabanlı markup dilidir ve data alış verişinde kullanılan bir standard'ır
  • XML bilginin yapısını tanımlamak için kullanılan bir teknolojidir.
  • XML bilgiyi tanımlayan ve web'te bilgi alış verişi için kullanılan standard bir biçimdir.
  • XML markup dillerini tanımlayan bir metadilidir.
  • XML verinin yapılandırılması ve tanımlanması için kullanılan bir teknolojidir.
  • XML herhangi bir verinin biçimlenmesi,tanımlanması için kullanılan bir teknolojidir.
 

SOAP(Simple Object Access Protocol):
SOAP, XML tabanlı uygulamalarda HTTP üzerinden bilgi değişimine izin veren protokoldür. Basitçe SOAP, Web Servis erişimi için protokoldür. RPC (Remote Procedure Call), DCOM, IIOP (Internet Inter-ORB Protocol) ve Java RMI bu çözümlerden bazılarıdır.
  • SOAP,  mesaj göndermek için bir formattır.
  • SOAP, Internet üzerinden iletişim kurmak amacıyla tasarlanmıştır.
  • SOAP, platformdan ve programlama dilinden bağımsızdır.
  • SOAP, firewall(güvenlik duvarına) gelebilmeye izin verir.
  • SOAP W3C standardıdır.
WSDL(Web Services Description Language):
WSDL, XML tabanlı web servisleri tanımlamak ve yerini belirtmek için tanımlanmış dildir. WSDL, W3C standardıdır. Bir anlamda dağıtık programlamada kullanılan IDL’e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:
  • Types: mesajlarda kullanılacak veri tiplerini belirtir.
  • Message: İletişimde kullanılacak measjları tanımlar.
  • PortType : Web servisinin içerdiği işlemleri (methods) ve ilgili mesajları tanımlar.
  • Binding : İşlem ve mesajlarda kullanılacak veri formatlarını tanımlar.
  • Port: Binding ve web adresinden oluşan servis noktasını tanımlar. Web adresi servisin çalıştırılacağı URL’dir.
  • Service: Kullanılan port’lar kümesidir.
UDDI(Universal Description, Discovery and Integration):
UDDI, şirketlerin web servisler için kayıt edebildiği ve arayabildiği dizin servisidir. UDDI Kurum Kayıt Servisi (UDDI Business Registry) kurum ve web servisleri bilgilerini saklayan sunuculardır. Bu sunucular servis sağlayıcılarından gelen bilgilerini kendi veritabanlarına kayıt ederek diğer kurumların erişimine açar. Şu anda aktif olarak çalışan kurum kayıt sunucularından http://live.capescience.com/wsdl/GlobalWeather.wsdl,  http://test.uddi.microsoft.com/visualstudio/  gibi siteler örnek verilebilir.
  • UDDI, web servisler hakkında bilgi depolandığı dizinlerdir.
  • UDDI, WSDL tarafından tanımlanmış web servis arayüz(interface) dizinidir.
  • UDDI, SOAP üzerinden iletişim kurar.
  • UDDI, Microsoft .NET platformu üzerine kurulmuştur.
 
Web Servisi Modeli
Web servisi modeli üç ana birimin etkileşimine dayanır.  

1.     1-Servis Sağlayıcı (Servis Provider): İstemcilerin sağlayıcıda bulunan servislere erişimini sağlar. Kendi sitesinde bulunan Web servisleri tanımını servis kayıt birimine (service registry) kaydederek bu servisinin nasıl çağırılacağını belirtir.

2.     2-Servis İstemcisi (Service Requester): Servis sağlayıcısında bulunan Web servislerini çağırarak kullanan istemci uygulamalardır. Web servisinin nasıl çağırılacağını ve ilgili parametreleri servis kayıt biriminden arayarak bulur ve çağırır.

3.     3-Servis Kayıt Birimi (Service Registry): Servis sağlayıcılarının yayınladıkları Web servisi tanımlarını saklar ve aranıp bulunmasını sağlar. Servis sağlayıcıları, servis kayıt birimini tarayarak istediği servisler hakkında bilgi alabilir. Servis kayıt birimi her servisin nasıl çağırılacağı konusunda tanım bilgileri içerir.





Web servisi istemcisinin bir servis sağlayıcıdan bir servisi çağırması aşamasındaki temel adımları şöyledir;

1.     1- Web Servisi İstemcisi (SOAP Client) servis kayıt biriminden (UDDI) Web servisini bulur.

2.     2- İstemci bir SOAP mesajı hazırlar. Bu SOAP mesajı bir XML belgesidir.

3.     3- İstemci SOAP mesajını Web sunucu veya uygulama sunucusunda çalışan SOAP istek dinleyicisine gönderir. İstek dinleyiciler gelen isteklere cevap veren sunucu programlardır. Bir JSP, ASP, CGI veya ISAPI programı olabilir.

4.     4- SOAP sunucu, gelen SOAP mesajını ayrıştırır ve gerekli parametreleri göndererek istenen nesnenin istenen yöntemini çağırır.

5.     5- Çağırılan nesnedeki yöntem çalışır ve sonuçları SOAP sunucusuna gönderir. SOAP sunucusu gelen sonucu SOAP mesajı formatında biçimlendirerek istemciye gönderir.

6.     6- İstemci gelen SOAP mesajının içindeki bilgileri alarak istekte bulunan programa gönderir.
  

Web Servislerini Kaydetmek

    Diyelim illerin hava durumunu bildiren güzel bir Web Servisi hazırladık. Fakat bunu pazarladığımız kişiler dışında daha geniş bir kitleye ulaştırmak istiyoruz. O halde Web Servislerinin Google'ı olarak tanımlayabileceğim www.uddi.org a gidip Web Servisimizi kaydetmemiz gerekiyor. UDDI ( Universal Description Discovery Integration ) , Ariba, IBM ve Microsoft 'un oluşturduğu bir Web Servislerinin daha büyük kitleler tarafından bulunup kullanılmasını amaçlayan bir oluşumdur.


Kaynaklar:
http://www.csharpnedir.com/articles/read/?id=49
http://www.w3schools.com/xml/default.as
  http://www.ias.com.tr/enterprise/articles/20070816-web-service.html 
  http://www.bidb.itu.edu.tr/?d=715
http://www.rssnedir.com/xml_nedir.php


7 Ocak 2010 Perşembe

C/C++

Merhabalar,
Bu bölümde dosya işlemleri üzerinde duracağım.Bilindiği gibi dosya işlemleri verilerin yada kayıtların .txt, .dat gibi uzantılı dosyalarda saklanması , eklenmesi ve güncellemesi işlemleri yapılır. Bu örneğimizde yeni bir müsterinin kayıtlarını alır ve bu kayıtlar uzerınde ekle, silme,güncelleme gibi işlemleri yapar. Bu projede bir
örgencinin adı, yaşı, no’su, notu ve şehri  alınarak .txt dosyasına kaydedilir. Bu kayıt üzerinde silme, ekleme ve güncelleme işlemleri yapıldı. 
Tüm kayıtlar içerisinde yaşı 22 den küçük olanları listeleme ve notu 70 den büyük olup Kütahyalı olan öğrencinin şehri Ankara yapan  fonksiyonlarda içerir. Tüm kayıtları listeleyen fonksiyonu da içermektedir.

Normalde işlemleri tek tek yayınlayacaktım ama belki ödeviniz de kolaylık sağlar diye hepsini birde yayınladım.
BİLGİ PAYLAŞTIKÇA ÇOĞALIR.



#include
#include   //sayıları yazılara, yazıları sayılara cevıren fonksıyonların prototıplerını tutar.
#include   //strıng ıslemlerı ıcın.

void ekle()
{
                       FILE *ekle;                                                                     //ekle=ogrenci.txt dosya gosterıcısı.
                       char ad[15];
                       int yas;
                       char no[20];
                       int not;
                       char sehir[15];
                                              
                       if((ekle=fopen("ogrenci.txt","a"))==NULL)                        //dosyaya yazım ıcın dosyayı olusturuyor ve işletim sistemi dosyayı acmazsa uyarı mesajı verir.
                                                                      printf("Dosya Yazim Icin Acilamadi!!!\n");
                       else
                       {
                                                                      //Ogrencı Bilgilerinin Girisi.
                                               printf("Ogrenci Adi Girin   : ");
                       scanf("%s",ad);
                                               printf("Ogrenci Yasi Girin  : ");
                       scanf("%d",&yas);
                                               printf("Ogrenci No Girin    : ");
                       scanf("%s",no);
                                               printf("Ogrenci Not Girin   : ");
                       scanf("%d",&not);
                                               printf("Ogrenci Sehri Girin : ");
                       scanf("%s",sehir);
                                               //verılerı dosyaya yazdır.
                       fprintf(ekle,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,yas,no,not,sehir);
                                               //dosyayı kapat
                       fclose(ekle);

                       }
}
 

void listele()
{
                       FILE *oku;
                       char ad[15];
                       int yas;
                       char no[20];
                       int not;
                       char sehir[15];
                      
                       if((oku=fopen("ogrenci.txt","r"))==NULL)  //dosyayı okumak ıcın ac.
                                               printf("Dosya Okumak Icin Acilamadi!!!\n");
                       else
                       {
                                               printf("%s\t\t%s\t%s\t\t\t%s\t%s\n\n","AD","YAS","NO","NOT","SEHIR");
                                               while(!(feof(oku)))//dosyayı sonuna kadar oku
                                               {
                                                                      fscanf(oku,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,&yas,no,&not,sehir);                   //dosyadan bır kayıt okur.
                                                                      printf("%s\t\t%d\t%s\t\t%d\t%s\n",ad,yas,no,not,sehir);                                     //kaydı cıktı olarak verır.
                                               }
                       fclose(oku);
                       }
}
 


void listele_22()
{
                       FILE *oku_22;
                       char ad[15];
                       int yas;
                       char no[20];
                       int not;
                       char sehir[15];             
                       if((oku_22=fopen("ogrenci.txt","r"))==NULL)                 //dosyayı okumak ıcın ac.
                                               printf("Dosya Okumak Icin Acilamadi!!!\n");
                       else
                       {
                                               printf("%s\t\t%s\t%s\t\t%s\t%s\n\n","AD","YAS","NO","NOT","SEHIR");
                                               while(!(feof(oku_22)))//dosyayı sonuna kadar oku
                                               {
                                                                      fscanf(oku_22,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,&yas,no,&not,sehir);          //dosyadan bır kayıt okur.
                                                                      //yası 22 den kucuk kayıtları yazdır.
                                                                      if(yas<22)
                                                                      {
                                                                                              printf("%s\t\t%d\t%s\t\t%d\t%s\n",ad,yas,no,not,sehir);                                     //kaydı cıktı olarak verır.
                                                                      }
                                               }
                       fclose(oku_22);
                       }
}
 
void sil(char numara[20])
{
                       FILE *oku,*yaz;
                       char ad[15];
                       int yas;
                       char no[20];
    int not;
                       char sehir[15];
                       oku=fopen("ogrenci.txt","r");
                       yaz=fopen("ogrenciSon.txt","w");

                       while(!(feof(oku)))                             //dosyayı sonuna kadar oku
                       {
                                               fscanf(oku,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,&yas,no,&not,sehir);                   //dosyadan bır kayıt okur.
                                               if(strcmp(numara,no)!=0)
                                              
                                               fprintf(yaz,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,yas,no,not,sehir);
                       }
                       printf("Kayit Basariliyla Silindi\n\n");
                       fclose(oku);
                       fclose(yaz);
                       remove("ogrenci.txt");
                       rename("ogrenciSon.txt","ogrenci.txt");

}
 


void sehir_duzenle(char sehir_duzen[15])
{
                       FILE *oku,*yaz;
                       char ad[15];
                       int yas;
                       char no[20];
                       int not;
                       char sehir[15];
                       oku=fopen("ogrenci.txt","r");
                       yaz=fopen("ogrenciSon.txt","w");

                       while(!(feof(oku)))
                       {
                                               fscanf(oku,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,&yas,no,&not,sehir);
                                               //Notu 70 ten kucuk kayıtlar ıcın ıslemler .
                                               if(not<=70)
                                               {
                                               printf("Notu 70 ten Kucuk Olan (Kutahyali) Ogrencinin Sehrini Degistir : ");
                                                                      scanf("%s",sehir);
                                               }
                                              
                                               fprintf(yaz,"%s\t\t%d\t%s\t\t%d\t%s\n",ad,&yas,no,&not,sehir);
                       }
                       fclose(oku);
                       fclose(yaz);
                       remove("ogrenci.txt");
                       rename("ogrenciSon.txt","ogrenci.txt");
                      
}
 

int main()
{
                       int secim;
                       char no[20];
                       char sehir[15];

                       printf("\nIslem Yapmak İstediginiz Menuyu Secin\n\n");
                       printf("\t1- Kayit Ekle\n");
                       printf("\t2- Kayit Listele\n");
                       printf("\t3- Kayit Sil\n");
                       printf("\t4- Sehir Duzenle\n");
                       printf("\t5- Kayit 22 Yas Kucuk Listele\n");
                       printf("\t6- Cikis\n\n");
                       printf("Seciminiz>>>>> : ");
                       scanf("%d",&secim);

                                               switch(secim)
                                               {
                                               case 1: ekle();
                                                                      break;
                                               case 2: listele();
                                                                      break;
                                               case 3: printf("Kaydi Silinecek Ogrencinin Numarasini Girin : ");
                                                                      scanf("%s",&no);
                                                                      sil(no);
                                                                      break;
                                               case 4: sehir_duzenle(sehir);
                                                                      break;
                                               case 5: listele_22();
                                                                      break;
                                               case 6:        printf("Programdan Cikiliyor.....\n");
                                                                      return 0;
                                                                      break;
                                               default:
                                                                      printf("Yanlis Secim Yaptiniz\n");
                                                                      break;
                      
                       }
                       return secim;