JAX-RS (@QueryParam&@DefaultValue)

     Herkese merhaba.Bu yazımızda @QueryParam ek açıklamasını öğreneceğiz.Bir önceki yazılarımızda belirttiğimiz @PathParam açıklamasının yetersiz olduğunu düşünmüşler ki böyle bir açıklama daha ekleme ihtiyacı duymuşlar :)Ya da kullanıcıya daha geniş bir kullanım alana sunmak.
GET/api/bagiscilar diye yapılan bir istekte bize bağışçıların tümünün döneceğini öğrenmiştik.Fakat kullanıcının bunu daha fazla sınırlayabildiğini de biliyoruz.Örneğin 3 id numarasına sahip bagışcı.Peki ya biz Hatay'daki AB+ kan grubuna sahip bağışçıları istiyoruz.Aklınıza GET/api/bagiscilar/Hatay/ABRH+ gelmis olabilir.Fakat bu isteği çok daha fazla uzatabilir.Mesela Hatay'daki 25 yaşüstü erkek ve A RH+ kan grubuna sahip bagışçıları getir deyince kaç türlü kombinasyon çıktığını düşünün :)İşte bu durumlarda yardımımıza @QueryParam yetişiyor.Yazdığımız query string'e göre istenilen veriyi çekiyor.Şimdi örneğimize geçelim.Örneğimizdeki sorgu GET/api/order?startPage=10&&pageSize=20 gibi.Bu çok daha fazla uzayabilir.Herzamanki gibi ApplicationConfig classımız aynı şekilde görevine hazır bir şekilde projemizde yerini almış durumda :)Daha sonra yazdığımız orderService classımızda kullandığımız @QueryParam ve @DefaultValue açıklamalarına dikkat edelim.@DefaultValue belirtilen isime ait her hangi bir veri girilmezse o alanın hangi değere sahip olacağını belirtiyor.Kodlarımızı inceleyip uygulamamızı çalıştıralım.



Bir sonraki yazımızda görüşmek dileğiyle.İyi çalışmalar.

JAX-RS (@ApplicationPath,@Path,@PathParam)

     Bu yazımızda kendi rest servislerimizi java ile nasıl kodlayacağımızı öğreneceğiz.İlk projemiz olduğu için herşeyi göstermek istiyorum.

    Java da iki tür web servis bulunur.

1)JAX-RS (JAVA API FOR RESTful SERVICES)
2)JAX-WS(JAVA API FOR XML WEB SERVICES)

Bizler RESTful web servisleri yazacağızBu servislerimiz  yazarken kullanabileceğimiz kütüphaneler ise

1)Jersey
2)RESTEasy
3)ApacheCXF
4)Restlet

Bizler rest servislerimizi yazarken Jersey kütüphanesinden faydalanacağız.İleride diğer kütüphaneleri de kullanıp hangisinin nerede daha avantajlı olduğuna hep birlikte karar vereceğiz.Hadi başlayalım.


    Projelerimizi Apache Maven kullanarak yazacağız.İleride birçok kütüphane kullanacağız ve bu kütüphaneleri tek tek indirip projemize jar dosyası olarak eklemek yerine, eklemek istediğimiz kütühanenin bağımlılığını (dependencies) buradan bulup pom.xml dosyasına ekleyeceğiz .Maven bu kütüphaneleri projemize ekleyecek.Daha sonra bir web servisi yazdığımız için bir server'a ihtiyacımız var.Herhangi bir local server işinizi görecektir.Ben payara server kullanıyorum.Ben projelerimi NetBeans üzerinde geliştiriyorum.Sizler Eclipse,Intellij,NetBeans veya dilediğiniz bir IDE üzerinde geliştirebilirsiniz.

İlk olarak bir maven web application oluşturuyoruz.

Projemize isim verip hangi server üzerinde çalışacağını belirledikten sonra projemizi oluşturmuş oluyoruz.

      

Daha sonra Project Files klasöründe bulunan pom.xml dosyasına Jersey bağımlılıklarını ekliyoruz.

ApplicationConfig adında bir java sınıfı oluşturuyoruz.Bu sınıf yazdığımız servisin yolunu gösterecek ve yazdığımız servisi buradan kontrol edeceğiz.Birden fazla web servisi yazmanız gerekiyor olabilir ve bu servisler birbiri ile bağlantı halinde olabilir.Bu sınıfımızda @ApplicationPath ek açıklamasını(annotation) kullanacağız.Burada bizim root path'imiz bulunacak ve Application sınıfını extend etmeliyiz.Bu şekilde...

Bu aşamadan sonra web servisimizi yazmaya başlayabiliriz.Burada dikkat etmenizi istediğim yerler olacak.Bunlardan ilk'i servisimizin yaptığı işi path'ler ile yazarken isimlendirmeye çok dikkat etmeniz.Bu isimlendirmeleri yaparken örneğin http://localhost:8080/api/orders tüm siparişleri göstermesi.http://localhost:8080/api/orders/{orderId}(buraya herhangi bir id değeri gelecek) dediğinde ise girilen id numarasına ait sipariş gelmelidir.Anlatmak istediğim şey siz RESTful ile bir web servisi yazacağınızda bu servisi kullanacak olan insanın herhangi bir dokümantasyon olmadan çok rahat bir şekilde kullanabilmesi gerekiyor.Bu yüzden isimlendirmelere çok dikkat etmeliyiz.Şimdi servisimizi yazmaya başlayalım.Başlangıç olarak böyle bir servis yazalım.http://localhost:8080/api/me/gokhan dediğimizde bize cevap olarak Hoşgeldin GOKHAN desin.Hadi başlayalım.ApplicationConfig sınıfının bulunduğu package'a MerhabaService adında bir sınıf oluşturalım.Sınıfımızı oluşturduktan sonra @Path("/me") açıklamasıyla sınıfımızın yolunu belirliyoruz.Bu aşamadan sonra fonksiyonlarımızı yazmaya başlayacağız.Bir önceki yazımızda HTTP request metodlarından bahsetmiştik.Şimdilik sadece @GET açıklamasını kullanacağız.String değer döndüren getMerhaba adında bir fonksiyon yazalım.Bu fonksiyona @GET methodu ile erişilecek ve @Path("/{name}") kullanıcı tarafından girilecek.Sınıfımızın yolunu belirlerken herhangi birşey kullanmadığımız için GET isteğinde direkt me diye geçmeli
http://localhost:8080/api/me/kullanıcı-tarafından-girilen-isim daha sonra fonksiyonumuz Merhaba girilen isim şeklinde bir değer döndüreceği için bu değeri parametre olarak almamız gerekiyor bunun içinde @PathParam("name") açıklmasını kullanıyoruz.Geriye aldığımız string değerini toUpperCase() fonksiyonuyla büyütüp döndürmek.





İYİ ÇALIŞMALAR


UYGULAMALI JAVASCRIPT-2

   Arkadaşlar merhaba.JavaScript dünyasını  tanımaya devam ediyoruz.Anlamadığınız yer olursa (yorum olarak) sorabilirsiniz.

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
    <title>Project-2</title>
    <script>
        var scope="global scope";
        function checkscope(){
           var scope="local scope";
            function nested(){
                var scope="nested scope";
                return scope;
        }
        return nested();
    }
        document.write("1- "+checkscope()+"|||");
       //--------------------------------------
        function test(o){
            var i=0;
            if(typeof o=="object"){
                var j=0;
                for(var k=0;k<10;k++){
                    document.write(k);
                }
                   document.write(k);
               
            }
            document.write(j+"|||");//undefined !
        }
       
        test("object");
        //---------------------------------
       
        var a=[1,2,3,4];
        for(var i=0;i<a.length;i++)document.write(a[i]);document.write("|||"+a.length+"|||");
        delete a[3];
        a[4]=5;
        for(var i=0;i<a.length;i++)document.write(a[i]);document.write("|||"+a.length+"|||");
        //----------------------------------
        try{
          sadfasdfasd
        }catch(ex){document.write("|||ERROR!!!");}
        finally{
            document.write("|||Kodlamak Guzel...|||");
        }
        //--------------------------------------------
       
        //Bu özelliği çok kullanışlı.JavaScript cahili olduğum için
        //bunu bilmiyordum :) neyse bilmemek ayıp değil öğrenmemek ayıptır...
        var book={
                "man title":"JavaScript",
                'sub-title':"The Definitive Guide (source :) )",
                "for" : "all audiences",
                author : {
                    firstname:"David",
                    surname:"Flanagan"
                }
        }
        var name=book.author.firstname;
        var title=book["man title"];
        document.write(name+"|||"+title+"|||");
        //------------------------------------------------
        var customer=[1,2,3,4];
        var addr = "";
        for(i = 0; i < 4; i++) {
            addr += customer["address" + i] + '\n';
        }
        //-------------------------------------------------
        //inheritance
        var o={};
        o.x=1;
        var p=inherit(o);
        p.y=2;
        var q=inherit(p);
        q.z=3;
        var s=q.toString();
        //-------------------------------------------------
        var o = { x: 1 }
        o.hasOwnProperty("x");//true
        o.hasOwnProperty("y");//false
        o.hasOwnProperty("toString");//false
        //--------------------------------------------------
        function keys(o){
                if(typeof o!="object") throw TypeError();
                var result=[];
               
                for(var prop in o){
                    if(o.hasOwnProperty(prop))
                        result.push(prop);
                }
                return result;
        }
        //--------------------------------------------------
        //getter && setter
        var random={
            set octet(n){this.n=n;},
            get octet(){return Math.floor(Math.random()*366);}
        }      
    </script>
   
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

</body>
</html>


//Çıktımız

REST MİMARİSİ VE RESTful WEB SERVİSLERİ

     REST (Representational State Transfer) Türkçe anlamıyla Temsili Durum Transferi olarak adlandırılan,web protokolleri ve teknolojilerini kullanan bir dağıtık sistemdir.Peki dağıtık sistem nedir ? Dağıtık sistem,bilgisayarın veya sunucuların birbirleriyle bir bütün olarak çalışmalarına denir.REST,bir veri transfer yöntemidir.HTTP üzerinden çalışan REST,basit sorgular ile verilere kolay erişim sağlamakla beraber hızlıdır.REST,bu verileri XML veya JSON formatında taşır.Çoğu zaman JSON tercih edilir.Bunun nedeni JSON'un XML'e göre insanlar tarafından daha basit okunabilmesi ve verileri daha küçük boyutlarda tutabilmesidir.


   RESTful web servisleri ise REST standartlarına uygun olarak yazılan web servislerine denir.Bu yazımızdan sonra JAX-RS ile kendi web servislerimizi nasıl yazacağımızı öğreneceğiz.REST standartlarına uygun yazılan web servislerine RESTful demiştik.Peki nedir bu web servisleri ? Web servisleri,HTTP protokolü ile hizmet veren uygulamalardır.Yazılan metodlar bir sunucu üzerinde çalıştırıldıktan sonra bir response mesajı üretir.Yani siz bir request mesajına karşılık bir response mesajı alırsınız.Biz bu servisleri yazarken istemcinin verilere hızlı ve kolay bir şekilde ulaşmasını sağlarız.Örnek olarak ben size RESTful bir web servisi yazarım.Bu servis size güncel hava durumu bilgilerini  sunar.Sizde yaptığınız HTTP request mesajları ile bu verileri anlık olarak çekersiniz.4 tip HTTP istek metodu vardır.Bunlar GET,POST,PUT ve DELETE.RESTful servislerde 


  1. GET=veri getirme
  2. POST=veri ekleme
  3. PUT=veri güncelleme
  4. DELETE=veri silme 
olarak kullanılır.Siz bu isteklerden birini yaparsınız ve size bir response mesajı döner ve bu response mesajlarının birer durum kodu olur.Bu durum kodları ise client'ı bilgilendirmek içindir.HTTP durum kodlarını buradan inceleyebilirsiniz.Wireshark uygulaması ile HTTP request ve response paketlerinin yapılarını şekilde görüldüğü gibidir.

       Elimizde kan bağışı yapmak isteyen insanların bulunduğu bir veritabanımızın olduğunu varsayalım.Bu bilgilerin bir RESTful web servisi ile erişime açık olduğunu varsayalım.Biz bu servise yapacağımız bir HTTP isteği ile kan bağışçılarının isimlerini çekebiliriz.Bu bağışçılara yenilerini ekleyebilir,silebilir veya güncelleyebilir.Örneğin bu şekilde yapılan bir istek
"GET/bagisci/3" (URI-Uniform Resource Identifier) şekilinde 3 numaralı id'ye sahip bağışçının bilgilerini getirir veya GET/bagisci?sehir=Ankara(QueryString) gibi bir sorgu Ankarada bulunan bağışçıların listesini getirir.Gördüğünüz gibi çok esnek,genişletilebilir,rahat ve hızlı bir kullanıma sahip.REST ve RESTful kavramlarını kısaca öğrenmiş olduk.



İYİ ÇALIŞMALAR...












UYGULAMALI JAVASCRIPT-1

       Herkese merhaba.Bu yazımızda javascript'e çok hızlı bir giriş yapacağız.Değişkenler,bazı kütüphanelerinin fonksiyonlarının kullanımı,döngüler,diziler vb.İlk yazılarımı bu şekilde,bir projenin içinde,birçok şeyi öğrenebileceğimiz gibi yapmak istedim.Buyrun ilkine bir göz atın.Bir önceki yazımızda da belirttiğim gibi bir programlama dilini orta düzeyde biliyorsanız,aşağıdaki kodları çok rahat anlayacaksınızdır.

<!DOCTYPE html>
<html>
    <head>
    <title>
           JAVASCRIPT-1
    </title>
    <script>
        function deneme(){
            return true;
        }
        var a=Math.sqrt(16);
        var b=Math.random();//0,1 arası bir sayi seçiyor.. Örneğin 0.243563
        var c=Math.pow(3,3);
        b=(b*100)%10;
        var d=new Date(2010,0,1,13,09,70);
        var e="Hello World";
       
        var f="Black";
        var k="15";
        var sayi=parseInt(k);
        var yeniDeger=5+sayi;
        var o={x:1};
        o.x=4;
        o.y=3;
        var a=[1,2,3,4,5];
        a[0]=4;
        a[5]=1; //diziye yeni bir değer ekler.Javada hata !
       
        var i=10;
        i="ten"; // :) Bu yanını çok seviyorum.PHP'de de aynı şekilde :) bence
                 //tüm dillerde olması gereken bir özellik :)
       
        if((a==4 && b>=5) || (a!=2 && b==3)){
            f="White";
        }
        else if(a!=4)
            f="Black & White";
       
        for(var i=0;i<4;i++){
            a--;
        }
       
        while(b>0){
            //...
        }
        do{
            if(c<=0)
                break;
                   // ...
        }while(c>=0)
       
        document.write("a:"+a+"|b:"+Math.ceil(b)+"|c:"+c+"|dsaat :"+d.getHours()+" |dsaniye:"+d.getSeconds()+" |e0:"+e.charAt(0)+"|ebuyut:"+e.toUpperCase()+"|efontColor:"+e.fontcolor()+"

|eRepeat"+e.repeat(2)+"|f:"+f+"|denemeFunction:"+deneme()+"
|parseYeniDeger"+yeniDeger);
    </script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
<!--<button onclick="alert('Thank you')">Click Me</button>-->
</body>
</html>


//Çıktımızda bu şekilde




     İYİ ÇALIŞMALAR...

JAVASCRIPT DÜNYASINA İLK ADIM

JAVASCRIPT'E GİRİŞ
      Herkese iyi çalışmalar.Bugünden başlayarak,bir hafta içerisinde bir programlama dilini orta düzeyde bildiğinizi varsayarak birsürü örnek paylaşmaya çalışacağım.Böylece javascript'e hızlı uyum sağlayacak ve frameworklerini kullanarak web projelerimize güç katacağız.Bu örneklerin yeterli olduğunu düşündüğümde ise javascript'in heryerde duyabileceğiniz o meşhur frameworkler'i ile çalışacağız.Bu paylaşımlarıma başlarken,javascript hakkında çok az bir bilgim olduğunu belirtmek isterim.İlk yazımızda JavaScript'in ne olduğuna bir göz atalım.

JAVASCRIPT NEDİR ?
      JavaScript,web tarayıcılarında kullanılmakta olan dinamik bir programlama dilidir.JavaScript'i HTML kodlarımıza gömeriz.Web sitemizin daha dinamik ve daha güzel görünmesini sağlarız.JavaScript client tarafından yorumlanır,örneğin bir web browser.Daha sonra sunucu tarafında çalışan node js'ye de değineceğiz.Değişkenleri tiplerine göre ayırmaz(int,string vb).JavaScript'i <script>.......</script> taglar'ı arasına yazabiliriz veya başka bir dosyada yazdığımız javascript kodunu projemize dahil edebiliriz. 

<script type="text/javascript" src="code.js"></script>

JavaScript'in ne olduğunu kısaca öğrenmiş olduk.Bir sonraki yazımızdan itibaren uygulamalarımıza başlayıp hızlı bir şekilde uyum sağlamaya,programlama gücümüze güç katacak frameworkleri kullanmaya başlayacağız.



İyi çalışmalar...

















JAVA-SOKET İLE BASİT BİR İSTEMCİ-SUNUCU UYGULAMASI

  Bu uygulamamızda Java'nın soket nimetinden faydalanacağız.Localhost üzerinden istemci-sunucu mimarisini kullanarak basit bir uygulama yapacağız.İstemciden alınan sayının(request),server'da faktöriyel'ini alıp sayıyı istemciye geri (response) döndüreceğiz.İlk olarak istemci tarafını kodluyoruz.

client.java
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
    public static void main(String [] args) throws IOException{
        int number,temp;
        Scanner sc1=new Scanner(System.in);
        Socket s=new Socket("127.0.0.1",496);
        Scanner sc2=new Scanner(s.getInputStream());
        System.out.println("Faktöriyeli alınacak sayi : ");
        number=sc1.nextInt();
        PrintStream ps=new PrintStream(s.getOutputStream());
        ps.println(number);
        temp=sc2.nextInt();
        System.out.println(number+"! ="+temp);
    }
}

Soket sınıfından nesnemizi türettik.Bu sınıfımızın yapılandırıcısına 2 parametre girdik.İlki cihazımın ip adresi(şimdilik localhost).İkincisi de iletişimin hangi port üzerinden olacağı.sc1 istemciden alınacak sayi.sc2 ise sunucuya konsol'a yazılacak değeri okuyup sunucu ile iletişime geçecek.InputStream ve OutputStream hem istemci hemde sunucuda yazılmalı.Çünkü haberleşme iki taraflı oluyor.İstemci bir istekte bulunuyor,sunucu gelen isteğe cevap veriyor.İstemci de gelen cevabı alıyor.

Şimdi de sunucu tarafını kodlayalım..


server.java

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
        public static int factorial(int num){
             if (num == 1)
                return 1;
                    return num*factorial(num-1);
          }
    public static void main (String [] args) throws IOException{
        int number,temp;
        ServerSocket s1=new ServerSocket(496);
        Socket ss=s1.accept();
        Scanner sc=new Scanner(ss.getInputStream());
        number=sc.nextInt();
        temp=factorial(number);
        PrintStream p=new PrintStream(ss.getOutputStream());
        p.println(temp);
    }
}


accept() fonksiyonu ile server 496 nolu soketi dinlemeye alıyor.Sonra getInputStream ile değeri okuyor. number=sc.nextInt(); gelen değerin integer tipinde olduğunu söylüyor.Daha sonra yazdığımız recursive fonksiyona parametre olarak yolluyoruz.Bize dönen değeri temp değişkenine atıp bu değeri istemciye yolluyoruz.Benzer şekilde swing,awt kütüphanelerini kullanarak basit chat,karşılıklı online oyunlar programlayabilirsiniz...

İYİ ÇALIŞMALAR




ASENKRON SAYICILAR ÖRNEK-1-

Örnek-1
   
          4'ten başlayıp 14'e kadar sayan negatif kenar tetiklemeli asenkron yukarı sayıcı devresini T flip flop'ları ile tasarlayınız.

Çözüm-1
 
   

Yaptığımız adımları tek tek gözden geçirelim.Sayıcımız 4'ten başlayacağı için 4'e ön kurma yaptık.(0100).Daha sonra bu sayıcımız 14'e kadar sayacağı için (15'i saymayacak) 1111', nand kapısı ile bağlayıp devremizin sırası ile R-R-S-R girişlerine bağladık.Artık devremiz 4-15 arası sayacak.Negatif kenar tetiklemeli ve yukarı sayıcı olduğundan bir sonraki flip flop'un clok girişi bir öncek flip flop'un Q değerinden alınacaktır.Ve dikkat edeceğimiz başka bir kısım ise T tipi FF'umuzn 0 ile aktif hale geldiği bu sebeble ABCD'nin 1111 olduğu durumlar nand kapısına bağlandığıdır.



İYİ ÇALIŞMALAR

SIFIRLAMA VE ÖNKURMA DEVRELERİ

Flip floplardaki set ve reset girişlerini kullanarak devrelerimizi kurup sıfıralayacağız.Yerine göre

kur,yerine göre de sıfırla işlemini uygulayacağız.Bir sayma işlemini bir değerden başlatırken kurma

işlemi yaparız.Örnek verecek olursak 6'dan başlayıp 30' a kadar sayan devreyi tasarlarken devremizi

6 ya kurmamız lazım kurma ve sıfırlamayı nasıl yapacağımıza bakalım.



Sıfırlamalı asenkron yukarı sayıcı devresine bakalım.Burada 4 FF olduğundan bu sayıcı 0 ile 15 arası

sayacaktır.Sıfırlama her flip-flop'un clear(reset) girişlerine sıfırlama devresinin çıkışı bağlanır.



Yukarıda gördüğünü asenkron yukarı sayıcı devre 2 den başlayarak 15 e kadar sayan bir sayıcı

devresi.(0010) Sırası ile ABCD.Burada 2 sayısana kurmak istediğimizden C flip flopumuzun set'ine

diğer flip floplarımızın reset'ine kurma devremizi bağlıyoruz.Böylece devremiz 2 sayısına kurulmuş

oldu.

DURUM İNDİRGEME

      Durum indirgemesi flip flop sayısını azaltmak için kullanılır.Bu sayede hem maliyet azalacak hem de karmaşıklık ortadan kalkacaktır.Şimdi aşağıdaki örnek üzerinde görelim




Bakın ilk tablomuzu olduğu gibi de kullanabiliriz.Fakat 5 durumumuz olduğundan en az 3 FF kullanmamız gerekir.Burada gelecek durumları aynı olan şimdiki durumlarımıza bakalım.A ve D.
A ve D den birini yok etmemiz gerekiyor.Biz örneğimizde D'yi yok ettik.Bu işlemi gerçekleştirirken D hangi durum ile eşleşmiş ise(A) geriye kalan tüm D'lerin yerine A yazıyoruz.Bunun sebebi D'yi tamamen yok etmemizdir.Bu işlemler tamamlandıktan sonra geriye 4 durumumuz kalıyor.Görüldüğü üzere bu durum tablosunun devresinde bize 2 tane FF yetecektir.Bu da 1 FF kar yaptığımızı gösteriyor.Ya bütün bu işlemleri 1 FF'tan kar etmek için mi yaptık ? dediğinizi duyar gibiyim :)Ya bu devreden binlerce,yüzbinlerce üretecekseniz ?


İYİ ÇALIŞMALAR...

SWING İLE BULMACA YAPIMI



import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
import javax.swing.event.*;
/**
 *
 * @author Gökhan
 */
public class Bulmaca extends JFrame  implements ActionListener {
   static JTextField[] txtField = new JTextField[28];
   JButton jbtn;
   static  JLabel[] s=new JLabel[7];
   String deger="X";
   Dimension panel=new Dimension(610,610);
   JLabel sorular=new JLabel();
    int kazanc;
    int kayip;
    Random r=new Random();
    int secilen=r.nextInt(10);
    String []a=new String[27];
    JLabel sa;
   public void karala(int[]k)
   {
     
       for(int i=0;i<k.length;i++)
       {
              txtField[k[i]].setBackground(Color.black);
              txtField[k[i]].setEnabled(false);
              txtField[k[i]].setText("X");
       }
   }
   public void sonuc(){     
          kazanc=JOptionPane.showOptionDialog(null,
                        "Devam etmek istiyor musunuz ?",
                        "KAZANDINIZ", JOptionPane.YES_NO_OPTION,
                        JOptionPane.PLAIN_MESSAGE, null, null, null);
   
                   if(kazanc==JOptionPane.YES_OPTION)
           {
               
                new Bulmaca();
           }
            else {
                System.exit(1);
            }
        }
   public JPanel soruEkle(JLabel [] s){
        JPanel soru=new JPanel();
        soru.setPreferredSize(panel);     
       for (JLabel item : s) {
           soru.add(item);
       }
        return soru;
 
   }
   public  void kotuSonuc(){
     kayip = JOptionPane.showOptionDialog(null,
                        "Devam etmek istiyor musunuz ?",
                        "KAYBETTİNİZ", JOptionPane.YES_NO_OPTION,
                        JOptionPane.PLAIN_MESSAGE, null, null, null);
            if(kayip==JOptionPane.YES_OPTION)
           {   
            new Bulmaca();
           }
            else {
                System.exit(1);
            }
   }
   public void kontrolEt(String durum){
         for(int i=0;i<28;i++){
               deger=deger+txtField[i].getText();
           }
   if(deger.equals(durum)){
       sonuc();
           }
   else{
      kotuSonuc();
   }
   }
   public JButton butonEkle(){
        jbtn=new JButton("Cevapları Göster");
        jbtn.addActionListener(this);
        jbtn.setActionCommand("cevapgoster");
        return jbtn;
   }
    public Bulmaca(){   
        Random renk=new Random();
        int renksec=renk.nextInt(3);
        this.setDefaultCloseOperation(3);
        this.setSize(630,375);
        this.setLayout(new FlowLayout());
        Dimension jtSize =new Dimension(40,40);
        JPanel jpn1=new JPanel();
        jpn1.setPreferredSize(new Dimension(320,190));
        if(renksec==0)jpn1.setBackground(Color.yellow);
        if(renksec==1)jpn1.setBackground(Color.red);
        if(renksec==2)jpn1.setBackground(Color.ORANGE);
   for (int i = 0; i < 28; i++) {
     txtField[i] = new JTextField(Integer.toString(i+1));
    txtField[i].setHorizontalAlignment(JTextField.CENTER);
     jpn1.add(txtField[i]);
     txtField[i].setPreferredSize(jtSize);
   }
   if(secilen==0){
        int[] t1={1,6,15,20,21,27};
        karala(t1);
   s[0]=new JLabel("1)PHP'de form metodu (1-15)");
   s[1]=new JLabel("2)PHP'de rastgele sayı seçmek istediğimizde kullanacağımız fonksiyon (3-6)");
   s[2]=new JLabel("3)Bir metni istediğimiz karakterden parçalara ayırabileceğimiz PHP fonksiyonu(8-14)");
   s[3]=new JLabel("4)PHP'de sayfaya yazı basmak için kullanılan komut(17-20)");
   s[4]=new JLabel("5)PHP'de bir değişkenin var olup olmadığını test eden fonksiyon(23-27)");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
   if(secilen==1){
        int [] t2={6,7,12,19,21,22,23};
        karala(t2);
   s[0]=new JLabel("1)HTML'de oluşturulan bir tablonun kalınlığını ayarlayan anahtar kelime(1-6)");
   s[1]=new JLabel("2)HTML'de eklediğimiz JPEG dosyasının yerini belirttiğimiz anahtar kelime (14-28)");
   s[2]=new JLabel("3)HTML'de girdi girmenizi sağlaya tag(8-14)");
   s[3]=new JLabel("4)CSS'te bir list type.                   (25-28)");
   s[4]=new JLabel("5)HTML sayfasını parçalara ayırmamızı sağlayan tag.(15-19)");
   s[5]=new JLabel("6)HTML sayfasındaki bir CSS dosyasının linkini belirten anahtar kelime(9-12)");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
   if(secilen==2){
        int [] t3={0,13,15,16,17,24};
        karala(t3);
   s[0]=new JLabel("1)T-SQL'de tablo veya veritabanı oluştururken kullandığımız anahtar kelime(2-7)");
   s[1]=new JLabel("2)T-SQL'de kayıtları göstermek için kullandığımız anahtar kelime(14-28)");
   s[2]=new JLabel("3)T-SQL'de 10 değerden en büyüğünü getirmek için kullanılan fonksiyon(19-21)");
   s[3]=new JLabel("4)T-SQL'de 10 değerden en küçüğünü getirmek için kullanılan fonksiyon (22-24)");
   s[4]=new JLabel("5)T-SQL'de 10 değerin ortalamasını döndüren foksiyon(25-27)");
   s[5]=new JLabel("6)T-SQL'de 10 değerin toplamını döndüren fonksiyon (8-22)");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
      if(secilen==3){
        int [] t4={0,2,13,14,16,20,21,22};
        karala(t4);
   s[0]=new JLabel("1)C#'ta bir sınıftan nesne türetileceği zaman kullanılan anahtar kelime (2-16)");
   s[1]=new JLabel("2)C#'ta geriye herhangi bir değer döndürmeyen fonksiyon tipi (4-7)");
   s[2]=new JLabel("3)C#'ta bir String değişkeninin uzunluğunu bulmaya yarıyan anahtar kelime(8-13)");
   s[3]=new JLabel("4)C#'ta herzaman kullanılan çok önemli bir döngü     (18-20)");
   s[4]=new JLabel("5)C#'ta oluşturduğumuz bir dizinin boyutunu bulmak için kullanılan anahtar kelime(24-28)");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
         if(secilen==4){
        int [] t5={6,7,8,17,18,20,25,27};
        karala(t5);
   s[0]=new JLabel("1)C++'ta çok geniş bir erişim belirleyici (1-6)");
   s[1]=new JLabel("2)C++'ta bir sayıyı alta yuvarlayan math. fonksiyonu(10-14)");
   s[2]=new JLabel("3)C++'ta dışarıdan girilen değeri oluşturduğumuz değişkene atan anahtar kelime(15-17)");
   s[3]=new JLabel("4)C++'ta ekrana yazı basmak için kullanılan anahtar kelime(6-27)");
   s[4]=new JLabel("5)C++'ta girilen bir sayiyi üste yuvarlayan math. fonksiyonu(22-25)");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
     if(secilen==5){
        int [] t5={0,6,12,13,14,26,27};
        karala(t5);
   s[0]=new JLabel("1)CSS'te bir sınıf yazarken sınıfın önüne getirilen işaret (2-6)");
   s[1]=new JLabel("2)CSS'te bir id yazarken önüne getirilen işaret(10-14)");
   s[2]=new JLabel("3)CSS'te tanımlanmış sınırların dışında boşluk oluşturmak için kullanılır.(8-12)");
   s[3]=new JLabel("4)CSS'te bir font'un türünü seçmek için kullanılan alt anahtar kelime style(21-27)");
   s[4]=new JLabel("");
   s[5]=new JLabel("");
   s[6]=new JLabel("");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
 if(secilen==6){
        int [] t5={0,14,15,19,20,25,26,27};
        karala(t5);
   s[0]=new JLabel("1)Çevremizdeki ortam (sıcaklık, basınç,vb) değişikliklerini algılayan cihazlar(2-7)");
   s[1]=new JLabel("2)Çok sayıda devre elemanlarından tek bir devreyi oluşturan yapı(8-14)");
   s[2]=new JLabel("3)Sayısal tasarımda birden çok çıkışı tek çıkışı aktarır(17-19)");
   s[3]=new JLabel("4)Bir bitlik veriyi tutmak için kullanılan flip flop devresi(22-25)");
   s[4]=new JLabel("");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
  if(secilen==7){
        int [] t5={0,7,8,12,14,17,18,19,27};
        karala(t5);
   s[0]=new JLabel("1)Ağ öğelerinin birbirlerine bağlanmasına olanak veren ağ donanımı(2-7)");
   s[1]=new JLabel("2)Ağ öğelerinin birbirlerine bağlanmasına olanak veren ağ donanım aygıtı(7-14)");
   s[2]=new JLabel("3)Bir bilgisayar ağında, bir cihazın ağ donanımını tanımaya yarayan adres(10-12)");
   s[3]=new JLabel("4)Ağ üzerinden birbirleri ile veri alışverişi yapmak için kullanılan adres(16-17)");
   s[4]=new JLabel("5)Aynı ağ iletişim kurallarını kullanan iki bilgisayar ağı arasında veri iletimini sağlar(22-27)");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
   if(secilen==8){
        int [] t5={7,14,19,20,21,22,23};
        karala(t5);
   s[0]=new JLabel("1)Birden fazla işin aynı anda çalışması halinde birbirlerini beklemesini sağlayan bir mekanizma(1-7)");
   s[1]=new JLabel("2)Türkiye'de TÜBİTAK tarafından geliştirilen bir Linux dağıtımı olan işletim sistemi(9-14)");
   s[2]=new JLabel("3)İşletim sistemlerinde bir işlem oluşturmak için kullanılan fonksiyon(16-19)");
   s[3]=new JLabel("4)Process'ler arası iletişim için kullanılan bir fonksiyon(25-28)");
   s[4]=new JLabel("");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);
   this.add(soruEkle(s));
 }
   if(secilen==9){
        int [] t5={14,19,20,27};
        karala(t5);
   s[0]=new JLabel("1)Mobil uygulama geliştirme platformu ....... studio (1-7)");
   s[1]=new JLabel("2)Bir PHP framework'u (8-14)");
   s[2]=new JLabel("3)Basit Nesne Ulaşım Protokolü,dağınık uygulamalarda bilgi taşımaya yarayan protokol.(16-19)");
   s[3]=new JLabel("4)JSP'nin çalıştığı yer uygulama sunucusularından biri (25-28)");
   s[4]=new JLabel("");
   s[5]=new JLabel("");
   s[6]=new JLabel("-----");
   this.add(butonEkle());
   this.add(jpn1);

   this.add(soruEkle(s));
 } 
   this.setVisible(true);
    }   
    public static void main(String[] args) {
       new Bulmaca();
    }
   @Override
    public  void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("cevapgoster")){
       if(secilen==0){
           String cvp="XGXRANDXEXPLODETXECHOXXISSETX";
           String cevaplar="1)GET2)RAND3)EXPLODE4)ECHO5)ISSET";
           s[6].setText(cevaplar);
           kontrolEt(cvp);//php
         
    }
       if(secilen==1){
           String cvp="XBORDERXXHREFXSINPUTXRXXXDISC";
           String cevaplar="1)BORDER 2)SRC 3)INPUT 4)DISC 5)DIV 6)HREF";
           s[6].setText(cevaplar);
            kontrolEt(cvp);       //html
    }
       if(secilen==2){
          String cvp="XXCREATESELECTXUXXXMAXMINXAVG";
          String cevaplar="1)CREATE 2)SELECT 3)MAX 4)MIN 5)AVG 6)SUM";
          s[6].setText(cevaplar);
            kontrolEt(cvp);//SQL
       }
       if(secilen==3){
          String cvp="XXNXVOIDLENGTHXXWXFORXXXCOUNT";
          String cevaplar="1)NEW 2)VOID 3)LENGTH 4)FOR 5)COUNT";
          s[6].setText(cevaplar);
            kontrolEt(cvp);//C#
       }
       if(secilen==4){
           String cvp="XPUBLICXXXLOORCINXXUXCEILXTX";
           String cevaplar="1)PUBLIC 2)FLOOR 3)CIN 4)COUT 5)CEIL";
            s[6].setText(cevaplar);
            kontrolEt(cvp);//C++
       }
       if(secilen==5){
         String cvp="XXSHARPCSTYLEXXXMARGINNOKTAXX";
         String cevaplar="1)NOKTA 2)SHARP 3)MARGIN 4)STYLE";
        s[6].setText(cevaplar);
            kontrolEt(cvp);//CSS
       }
       if(secilen==6){
          String cvp="XXSENSORENTEGREXXMUXXXDATAXXX";
          String cevaplar="1)SENSOR 2)ENTEGRE 3)MUX 4)DATA";
         
         s[6].setText(cevaplar);
            kontrolEt(cvp);//TASARIM
       }
       if(secilen==7){
          String cvp="XXSWITCHXXMACXUXIPXXXBXROUTERX";
          String cevaplar="1)SWITCH 2)HUB 3)MAC 4)IP 5)ROUTER";
          s[6].setText(cevaplar);
            kontrolEt(cvp);//Ağ
       }
       if(secilen==8){
           String cvp="XXSEMAFORXPARDUSXFORKXXXXXPIPE";
           String cevaplar="1)SEMAFOR 2)PARDUS 3)FORK 4)PIPE";
           s[6].setText(cevaplar);
            kontrolEt(cvp);//işletim sistemleri
       }
       if(secilen==9){
         
           String cvp="XANDROIDLARAVELXSOAPXXTOMCATX";
           String cevaplar="1)ANDROID 2)LARAVEL 3)SOAP 4)TOMCAT";
           s[6].setText(cevaplar);
            kontrolEt(cvp);
       }
    }
    }
}







Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...