KOD DÜNYAM
kod dünyam

Her Küçük Projenin Kalbinde Doğmayı Bekleyen Büyük Bir Proje Vardır.. (KodDünyam)

14 Aralık 2017 Perşembe

0 MICROSERVICES

MICROSERVICES


Mikroservis sadece bir işi yapan, bir fonksiyonaliteyi gerçekleştiren çok küçük kod parçacıkları. Geliştirme süreçleri, bağımlılıkları, boyutları olabildiğince küçük olan atomik servislerdir diyebiliriz.
Bu servisler herhangi bir dil ile geliştirilebilir. java, c#, ruby, phyton vb. diller kullanarak geliştirme yapabilirsiniz.
Microservisler stateless’dir. Herhangi bir nesnenin state’ini tutmaz.
Microservisler WSDL’daki XSD kontraktları yerine Consumer Driven Contract’lar oluşturarak servis sağlayanın bir kod değişiminin hangi servis tüketicilerini etkilediği , ilgili servis tüketicilerin testleri çalıştırılarak gerçekleştiriliyor.
Ekip ve Şirket yapısının değişmesi gerekiyor. Ayrı ayrı çalışan ekip elemanlarının (Arayuz, Spring, Veritabanı ve Sistemci) olacak şekilde ekipler haline getirilmesi gerekir ki, bu da çok maliyetli bir iştir. Bunun yerine son dönemde Full Stack Developer kavramı popülerleşmeye başlamıştır. Uygulama yükleme ve geliştirme araçlarının giderek gelişmesi Bulut/Container Servislerinin giderek artması, Yazılım kısmında frameworklerin artması (Spring, Hibernate, AngularJS). Artık uygulama geliştiricilerinin Full Stack Developer olmasına imkan tanımaktadır.
MicroServislerin faydaları mimarinin en baştan kurulmaya çalışmaması, Ürün geliştikçe mimarinin gelişmesi. Ekibe sonradan katılan bir kişinin bu kadar büyük bir yapıya, mimariyi öğrenmesi yerine, bu kişinin hangi dilde ve hangi DB ortamında işi yapmasını biliyor ise bu ortamda bu ufak iş mantığını geliştirme imkanı vermesi. Aynı zamanda bu atomik yapıların sırasını ve hiyerarşini değiştirme imkanı vermesi, uygulamanın daha esnek, daha reusabe ve daha scalable olmasına imkan vermesi diyebiliriz.
SOA mimarisinde merkezde orchestration mekanizması(ESB) ile tüm business flow’lar merkezdeki yapı tarafından organize ediliyor. Giderek merkezin yükünü arttırmaya başlıyor. Hem network , hemde çalışan sorumluluğu açısından bu servisleri orkestra eden kişilere bağımlılık inanılmaz boyutlara ulaşıyor.
Microservislerin çok ufak şekilde hızlı bir şekilde gerçekleştirebilmeniz için sistem içerisinde aşağıdakine benzer mircroservislerinizin hazır olması gerekiyor.
Bu kadar çok servisin bir sürü sanal makineye kurulumunun manual olarak yapılması imkansız. Bunun için “Infrastructure As a Code” IAC kavramını geliştirmişler. Infrastuctrure’ları kod ile ayağa kaldırıp uygulamaların bu infrastructure’lar üzerine hızlıca çalışmasını sağlıyorlar.
Continues Integration ve Continues Delivery kavramlarının çok iyi oturması gerekiyor. Herhangi T anında belirlenen X sunucularına, Y,Z Feature set değişikliklerini deploy edebilme yeteneğidir.

MicroService Mimarisinin Getirdiği Bazı Faydalar

MicroService yapısı sürekli ve plansız bir şekilde büyüyen monolithic yapıdaki servislerin, beraberinde getirdiği karmaşıklığı ve yönetim zorluklarını çözmeye odaklanmaktadır. SOA’ya alternatif bir model değildir kesinlikle. Geleneksel SOA yaklaşımı yerine yenilikçi SOA yaklaşımı ile beraber, biraz önce de bahsettiğimiz gibi karmaşıklığı ve yönetimi pratikleştirmeye çalışan bir kavramdır diyebiliriz.

Dilerseniz bazı avantajlarına bir bakalım:
  • Servisler farklı dillerde ve farklı framework’lerde geliştirilebilir
  • Birbirlerinden bağımsız olarak her bir servis değişebilir, kolay test ve build yapılabilir
  • Continuous delivery’e olanak sağlar ve hızlı deployment’lar gerçekleştirilebilinir
  • Her bir servisi birbirinden bağımsız olarak scale edebilme olanağı sağlar
  • Her bir servis birbirinden bağımsız olacağı için, code base’i sade ve maintenance’ı kolay olacaktır
  • Versiyonlama kolay bir şekilde yapılabilecektir
Peki her şey kulağa güzel ve hoş geliyor. Hani olur ya her oyunun bir de bölüm sonu canavarı vardır. Peki MicroService yaklaşımının getireceği bölüm sonu canavarı yani dezavantajları nelerdir de derseniz:
  • Birbirlerinden bağımsızlaşan farklı servisler aynı business objelerini kullanacaklarından dolayı kaçınılmaz bir kod tekrarı meydana gelecektir
  • Servisler farklı platform ve ortamlarda çalışabileceklerinden dolayı yönetim ve monitoring maliyeti ortaya çıkacaktır
  • Birden çok database ve transaction’ların yönetimi zor olabilir
gibi maddeleri sıralayabiliriz. Fakat bu maddelerin zaten bir çoğu adreslenmiş durumda ve otomasyon araçları ile yönetilebilmektedir. Bunlara ek olarak da zaten ihtiyaçlar doğrultusunda MicroService yaklaşımının getirileri göz önüne alındığında ise bu dezavantajlar görmezden de gelinebilir. Yönetim kısmında ise DevOps kavramı ile kolay bir şekilde ele alınabilmekte. Transaction yönetimi işlemlerinede DTC(Distrubuted Transantion Manager) ile çözüm bulunabilmekte.

🔴Microservices >> Microservices nedir ?     




  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

30 Ocak 2017 Pazartesi

0 EVENTS - Olay Güdümlü Programlama (JAVA)

EVENTS (Olay)

GUI bileşenlerinin nasıl kullanacağınızı anlayabilmek için olay mekanizmasının iyi kavranması gerekiyor. 




Olay(Events) nedir ? 
Bilgisayarınızda yaptığınız her bir etkileşim , her işlem , farenize her tıklamanız, fareyi sürüklemeniz, klavyenizin bir tuşuna basmanız vb. her eylem programlamada olay (event) olarak tanımlanır. 
Bilgisayar (programınız) olayları işleyerek kullanıcıya cevap verir. Bu nedenle oluşturduğunuz GUI bileşenleri
, doğru olay mekanizması kurulmadığı sürece yalnızca görüntüden ibarettir. Olay mekanizmasının çalışma prensibini kısaca açıklayacak olursak : 

- Programcı oluşturduğu bileşenlere birer dinleyici atar. 
- Dinleyici (Listener) denilen özel thread'ler program boyunca atamalarının yapıldığı nesne üzerinde, ilgili oldukları olayların oluşup oluşmadığını denetler. Olay meydana geldiğinde dinleyici tetiklenmiş olur. 
- Tetiklenen dinleyici, olay işleyicisi (handler) denilen bir metodu çalıştırır. Böylece olaya karşılık gerekli işlemler dizisi başlatılmış olunur. 

Olay 4 temel parça ile işlenir;


1. Olay nesnesi (Event object) 
2. Olay kaynağı (Event source) 
3. Olay dinleyicisi (Event Listener) 
4. Olay işleyicisi (Event Handler) 


Java'da olay mekanizması için gerekli metodlar AWT kütüphanesi içinde bulunur.


ÖRNEK:
 
   
  public JButton buton = new JButton("Tıkla"); 
   
  buton.addActionListener(new ActionListener() 
  { 
   
   public void actionPerformed(ActionEvent e) 
   { 
    JOptionPane.showMessageDialog(null , "Selam !"); 
   } 
   
  }); 
   


Yukarıdaki örnekte bir buton oluşturduk ve tıklandığında ekrana "Selam !" mesajının çıkmasını sağladık. 

Olay nesnemiz e isimli ActionEvent nesnesi. Olay kaynağımız ise tabiki buton'un kendisi.Olay kaynağı bileşene ihtiyaç duyarsanız olay nesnesi üzerinden getSource() metodunu kullanarak çağırabilirsiniz. Örneğin bu program parçası için : 

(JButton) e.getSource(); 

komutu ile butonumuzun referansına erişebiliriz. 

addActionListener() metodu ile butonumuza bir dinleyici atadık. Bu komut sayesinde programın arkaplanında sürekli u dinleyici buton için tetikte bekleyecek ve olay oluştuğunda yani butona tıklandığında devreye girerek olay işleyicisi metodu çalıştıracak. Olay şileyici metodumuz ise bu programcıkta actionPerformed() metodu. 

Yani size düşen tek iş oluşturduğunuz nesneye bir dinleyici atamak ve bu dinleyici sınıfın içindeki implement edilmemiş abstract handler metodların gövdelerini yazmak. Bu örnekte listener'ı argüman olarak metod parantezleri içinde yazdık. Daha sade ve anlaşılır olarak isterseniz listener sınıfını ayrıca yazabilirsiniz.(Listener'lardan sınıf olarak bahsetsemde bu ağız alışkanlığında ileri geliyor. Listener'lar aslında birer interface 'dir. ) 

Gerekli listener arayüzünü yazdığınız sınıfa implement edip bileşenlerinize listener olarak bu sınıfları atayabilirsiniz. Örnekten daha iyi anlaşılacaktır. 


 
   
  public class dinleyici implements ActionListener 
  { 
   
   public dinleyici() 
   { 
   
   } 
   
   @Override 
   public void actionPerformed(ActionEvent) 
   { 
    JOptionPane.showMessageDialog(null , "Selam !"); 
   } 
   
  } 
   


Dinleyici sınıfımızı yukarıdaki gibi yazdıktan sonra geriye bu dinleyiciyi ilgili nesneye atamak kalıyor : 

 
   
  public JButton buton = new JButton("Tıkla"); 
   
  buton.addActionListener(new dinleyici()); 

Tabiki önemli bir noktada hangi işte hangi interface gerekli bilinmelidir. Örnekte kullandığımız ActionListener, daha çok butonlarla kullanılan bir dinleyici. 
Fare ile ilgili olaylarda MouseListener , MouseMotionListener vs. 
Klavye ile ilgili olaylarda KeyEvent ..vs. 
Pencere olaylarında FocusEvent ..vs. çeşitli dinleyici arayüzleri kullanılmaktadır. 





KOLAY GELSİN.






  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

0 JFrame Pencere Oluşturma (JAVA)

JAVA JFrame
       
Java swing kütüphanesinde bir pencere oluşturmak için kulanılacak ana sınıf JFrame'dir. 
Genel tasarım tarzı bir frame - üzerine istenilen sayıda panel - ve paneller üzerine gerekli bileşenler eklenerek yapılır.


JAVA JFrame Pencere açma
 

Öncelikle kısa bir kod verilsin. Altında satır satır açıklaması yapılacaktir. 


 
   
  import javax.swing.JButton; 
  import javax.swing.JFrame; 
   
  public class FrameDemo extends JFrame 
  { 
   
   public FrameDemo() 
   { 
    this.setTitle("FrameDemo Test"); 
    this.setSize(640 , 480); 
    this.setLayout(null); 
    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
   } 
   
    
    
   public static void main(String[] args) 
   { 
    new FrameDemo(); 
   } 
   
  } 
  

Oluşturulan sınıf JFrame sınıfından türetilmiş olduğu için bir frame 'e ait tüm özellik ve metodları miras alır. Böylece kurucu metod çağrıldığında yeni bir penceremiz olur. 

setTitle(String) metodu pencere başlığını , 
setSize(int,int) metodu pencere boyutunu , 
setLayout(Layout) metodu pencere yerleşim düzenini ayarlar.  

setVisible(boolean) true parametresi ile pencereyi görünür kılar. 
setDefaultCloseOperation() metodu ise varsayılan pencere kapanış davranışını ayarlar. 

JFrame sınıfı daha birçok metoda sahiptir. Bu metodlar kurucu tarafından varsayılan parametrelerle çağırılır. Örneğin setVisible() metodunun varsayılanı false 'dır. Yani biz true olarak değiştirmezsek sınıf üretilse dahi pencere görünmez. Başka bir örnek ise setLocation() metodu olarak verebilirim. Biz bu metodu çağırmadığımız halde penceremizin varsayılan başlangıç koordinatları (0,0) dır. 

Şimdi yukarıdaki örneğin daha ayrıntılı bir analizini yapalım. FrameDemo sınıfımız JFrame'den , JFrame'in ise Container sınıfından türediğini biliyoruz. Bu nedenle ayrıyeten bir Container nesnesi üretme ihtiyacı duymadık. Pencereye bir bileşen eklemek için kod aşağıdaki biçimde de tasarlanabilirdi.




 
   
  import javax.swing.JButton; 
  import javax.swing.JFrame; 
   
  public class FrameDemo extends JFrame 
  { 
          JButton buton1; 
         
   public FrameDemo() 
   { 
    this.setTitle("FrameDemo Test"); 
    this.setSize(640 , 480); 
    this.setLayout(null); 
   
                  buton1 = new JButton("Buton 1"); 
                  this.add(buton1);   // veya this.getContentPane().add(buton1); 
                  buton1.setBounds(10,20,100,40); 
   
   
    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
          } 
     
   public static void main(String[] args) 
   { 
    new FrameDemo(); 
   } 
  } 
  


Yukarıdaki kod pencereye bir buton nasıl eklenir sorusunun da cevabı. Fakat değinilecek asıl nokta butonun eklendiği konteyner. 

this.add() metodu pencereye bir bileşen eklemek için kullanılır. Object tipinde bir parametre alır. Daha ayrıntılı dökümantasyon için docs.oracle sitesini ziyaret edebilirisiniz. 
Bu metod ile aslında pencerenin top-level konteyner'ına bir bileşen eklenir. Bu konteyner'ın referansına erişmek için getDefaultContentPane() metodu kullanılabilir. 

Sınıfı JFrame sınıfından extend etmek zorunda değilsiniz. JFrame sınıfından bir nesne üreterek de pencerenizi oluşturabilirsiniz. 

Örnek : 

 
   
  import javax.swing.JButton; 
  import javax.swing.JFrame; 
   
  public class FrameDemo 
  { 
          JFrame pencere; 
          JButton buton1; 
         
   public FrameDemo() 
   { 
                  pencere = new JFrame("FrameDemo Test"); 
     
    pencere.setSize(640 , 480); 
    pencere.setLayout(null); 
   
                  buton1 = new JButton("Buton 1"); 
                  pencere.add(buton1);   // veya pencere.getContentPane().add(buton1); 
                  buton1.setBounds(10,20,100,40); 
   
   
    pencere.setVisible(true); 
    pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
          } 
    
   public static void main(String[] args) 
   { 
    new FrameDemo(); 
   }  
  } 
  


Artık this operatörünü kullanmadığımıza dikkat edin. 

Butonlar ayrı bir konu olarak incelenecektir. Ayrıca setLayout() metoduna null parametresini verdik. Yani herhangi bir yerleşim düzeni kullanmak istemediğimizi, bileşenlerin konumlandırmasını kendimizin yapacağını bildirdik.




KOLAY GELSİN.




  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

29 Ocak 2017 Pazar

0 SWING MİMARİSİ (JAVA)

SWING MİMARİSİ

Java , program geliştirmede MVC Yapısını (Model-View-Controller) kullanır. Yani programın hesap-kitap-işlem kısmına dair model kısmı ve GUI'ye dair view kısmı birbirinden ayrılmıştır. Bu yaklaşım program geliştirilmesinde programcılara büyük kolaylık sağlamaktadır. Controller tarafında ise bu iki birim birbiri ile entegre olarak çalıştırılır. Fakat Javada model ile controller arasındaki sınır kesin olarak birbirinden ayrılmaz. 

Java mimarisi 2 temel üzerine kurulmuştur;

1) Components (Bileşenler)

2) Containers  (Konteynerler)

Bileşen seti gerekli tüm görsel araçları içerir. Yazı, resim içerikleri için labellar, yazı kutuları, kaydırma çubukları, menüler, pencere bileşenleri vb. tüm bileşenler component sınıfından türemiştir. 

Konteyner ise bileşenlerin üzerinde tutulacağı veri modelleridir. Tüm bileşenler bir konteyner üzerinde tutulmak zorundadır. Bu nedenle her GUI uygulaması en az bir konteynera sahip olmak zorundadır. 

 Components (Bileşenler), Containers (Konteynerler), JAVA, SWING, MVC

Java'da konteynarlar içiçe tanımlanabilir. En dıştaki konteyner tüm bileşen ve iç konteynerları tutan top-level konteynerlardır.Bunun altında bulunanlar ise kapsayıcı konteyner olarak anılır. 
Tüm bileşenlere ait sınıf diyagramı aşağıdadır. 

 Components (Bileşenler), Containers (Konteynerler), JAVA, SWING, MVC






KOLAY GELSİN.



  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

0 JAVA ve GUI nedir? (JAVA)

                                              GUI Nedir ? 

GUI (Graphical User Interface) , grafiksel kullanıcı arayüzü , program ile kullanıcı arasında görsel, sezgisel, kullanıcı dostu (user friendly) ,kolay ve pratik bir ilişki kuran , kullanıcıyı bilgisayar hakkında teknik bilgi sahibi olma zorunluluğundan kurtaran, bilgi giriş/çıkışının sağlandığı arayüze denir.Her işletim sistemi kullanıcısına en iyisini sunabilmek için hem görsel açıdan zevk sahibi, hem de kullanıcı dostu bir arayüz sunmak ister.Bir programcının , ürettiği programın iyi bir arayüze sahip olabilmesi için GUI programlamaya hakim olması gerekmektedir.Programı yazdığınız dil işletim sisteminin çekirdeğinde saklı GUI sınıflarını-API'leri kullanabilir veya daha profesyonel çalışarak kendi çizim prosedürlerinizi kullanabilir, kendi arayüz sisteminizi oluşturabilirsiniz.


Kısacası, Bilgisayarlarda işletilen komutlar ve bunların çıktıları yerine simgeler, pencereler, düğmeler ve panellerin tümünü ifade etmek için kullanılan genel addır.


ÖRNEK: 
JAVA, GUI, SWİNG, AWT

Bir programlama dili olan Java, GUI için AWT (Abstract Window Toolkit) ve SWING kütüphanelerini kullanır. Java'da arayüz ihtiyacı için oluşturulmuş ilk kütüphane AWT 'dir. Fakat AWT'nin bazı yetersizliklerinden dolayı yeni bir bileşen setine ihtiyaç duyulmuştur. Ortaya çıkan bu yeni bileşen seti SWING 'tir. AWT'nin geliştirilmesinin durdurulmasının ana sebebi Java 'nın temel politikası olan "Bir kere yaz , her yerde çalıştır" mantığına uygun olmaması idi. Java dilinde yazılan uygulamalar derlenmeden önce bir interpreter ile .class uzantılı dosyalara çevrilir.Bu dosya bir arakoddur ve her sistemde aynı sonucu üretecek biçimde çalışması amaçlanmıştır. Yani aynı kodu Windows işletim sisteminde de Linux işletim sisteminde de çalıştırabilirsiniz.Fakat AWT ile yazılan programlar farklı sistemlerde tutarsız sonuçlara sebep oluyor hatta bazı durumlarda çalışma hatalarına kadar uzanıyordu. Swing kütüphanesi hem taşınabilir uygulamalar yazmak için hemde GUI 'de gerekli tüm araçları sağlaması için gerekli tüm bileşenlere sahip devasa boyutta bir pakettir. 

Aslında Swing kütüphanesi sıfırdan oluşturulmuş değildir. AWT üzerine kurulmuş bir kütüphanedir ve awt'ye ait bir çok sınıfı halen kullanmaktadır. AWT'nin eksik yönlerini kapatır ve artılarını da kendine katar.Örneğin olay yakalama mekanizması için java'da halen awt.event paketleri kullanılır. Java 'nın 1.2 versiyonuyla birlikte kullanılmaya başlanana wing'te her widget, platforma bağımlı olarak değil , swing'e bağlı olarak çalışır. 
AWT işletim sistemine ait API leri kullanmasına karşın swing tamamen java tarafından render edilen arayüzü kullanır. Bu nedenle her sistemde aynı sonucu görebilirsiniz. Tabiki bu durum uygulamanın nasıl görüneceğine karar veremeyeceğiniz manasına gelmiyor.




KOLAY GELSİN.





  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

0 Metin Kriptolama Programı (C#)

Merhaba değerli arkadaşlar;

 Bugün Kod Dünyamın Geliştirdiği MD5 şifreleme algoritmasıyla, girilen metni şifreleyen ve tekrar şifreyi kullanarak metne çeviren bir program tanıtılıcak. Ama öncesinde MD5 'in ne olduğuna kısaca bir bakalım..

MD5
 Veri bütünlüğünü test etmek için kullanılır. 1991 yılında geliştirilmiş tek yönlü şifreleme algoritmadır Girdi verinin boyutundan bağımsız olarak 128 bitlik hexadecimal karakterde şifreler üretir.


MD5 Kullanım Alanları

Md5 asıl olarak dosya bütünlüğünü korumak için kullanılsada çeşitli programlama dilleri bile md5 fonksiyonunu kullanıcılara sunar bu sayede yazılımcı md5 algoritmasının güvenilirliği ile programlama yapabilir. Md5 en çok yazılım da bir değişiklik yapılıp yapılmadığını anlamak için kullanılır örneğin bir is uzantılı dosya indirdiniz diyelim. Dosyayı md5 algoritmasından geçirip ardından orjinal md5 hash ile karşılaştırırsanız eğer dosya orjinalse aynı değerleri verecektir. Aksi taktirde dosyada değişiklikler yapıldığı ortaya çıkar.

Nasıl Kırılır?


MD5 bir şifreleme algoritması olduğuna göre, eğer algoritmayı tersen okursanız MD5 arkasındaki şifreye ulaşabilir. Yani böyle düşünebilirsiniz. Ama yanlış düşünürsünüz. MD5, şifrelenecek metni şifreler ve işi biter. Geri dönülemez. İzi sürülemez. Ama eğer o metin daha önceden veri tabanına kayıtlıysa yani a harfine karşılık gelen
Og7GvtLxFWwuz9fhpVRL0Q dizisi veri tabanında 
Og7GvtLxFWwuz9fhpVRL0Q = a gibi belirtilmişse şifreyi eşler ve size a harfini çıktı olarak verir. 

Şimdi Geliştirilmiş Programa bir göz atalım.




Programın Menü arayüzü yukarıdaki gibidir ve 3 adet Buton bulunur. ŞİFRELE, ŞİFRE ÇÖZ ve PROGRAM HAKKINDA 

ŞİFRELE butonuna basılması durumunda;


Yukarıdaki arayüz açılır ve şifrelenecek metin girilir ardından Şifrele butonuna basılıp girilen metin şifrelenir. Elde edilen şifre kesinlikle metni geri çevirmede çok önemlidir, değiştirilmesi veya kaybedilmesi durumunda girilen metin çevrilemez. 


Bir metin girip şifreledik ardından şifremizi Kopyalayalım.


Şifrenin Kopyalanmasının ardından şifremizi metine çevirmek için Menu bölümünden ŞİFRE ÇÖZ bölümüne gidiyoruz 


Açılan ŞİFRE ÇÖZ bölümünde şifremizi yapıştırıyoruz ve ŞİFRE ÇÖZ butonuna tıklıyoruz.


Görüldüğü gibi Girilen ilk metni şifremiz sayesinde tekrardan elde ettik.

Programın Kullanılması Kolay ve Güvenlidir. Aşağıdaki Linkten indirebilirsiniz Kötü amaçlı kullanmamak şartıyla.


PROGRAMI İNDİR

*Programı Kötü amaçlarla kullanmak yasaktır. Kullanılması durumunda tüm sorumluluk size aittir.

*Projemiz %100 çalışmaktadır.

*Programın kod içeriği için yorum kısmından yorum yazabilir - iletişime geçebilirsiniz.


KOLAY GELSİN. 




  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Freelance Programcı (Yazılımcı)

Serhat Şos

Profesyonel bir yaklaşım ve uygun fiyatlarla hizmet vermekteyim. Projelerinizi geliştiriyorum. Web App - Mobil App

TEKLİF VER

Popüler Yayınlar

Blogger tarafından desteklenmektedir.

TEKNOLOJİ HABERLERİ

Etiketler

Dikkat! Sitemiz Tüm Hızıyla Yenilenmektedir.

Yararlı Bilgilerden Sizde Yararlanın.
Takipte Kalın...

Yorum ve Görüşleriniz Bizim için Değerlidir.