jQuery’den AngularJS’e

Bundan 9-10 sene evvel jQuery ile büyük bir sıçrama yaşayan web dünyası , sanırım AngularJS ile de benzer bir sıçrama yaşayacak. Biliyorsunuz , jQuery , JavaScript ile yazılmış  ve DOM Manipülasyonunda vazgeçilmez bir kütüphane halini almıştı. Öncesinde saf JavaScript ile yapılan işlemler oldukça kısalmış ve yazılımcılara büyük kolaylık sağlanmıştı. jQuery hala yazılım geliştiriciler tarafından sürekli kullanılan bir kütüphane. Dün gece daha önce defalarca duyduğum AngularJS’ye bakma fırsatım oldu. Sonuç: Hayretler içerisindeyim.

Web uygulamalarına baktığımızda bugün hemen hemen her uygulama MVC modeline dayanarak üretiliyor. Bu model farklı işlerin birbirinden ayrılması mantığına dayanarak , yazılımcıların bir arada çalışmasını kolaylaştırıyor. İşte aynı modelin kullanıcı kısmında da vücut bulmuş hali AngularJS.

JavaScript ile yazılmış , ve bir anlamda MVC modellemesini benimsemiş bir kütüphane. Bir kaç araştırma ile gördüm ki geliştiriciye sağladığı kolaylıklardan test unitlere ve dökümantasyonlarına kadar profesyonelce hazırlanmış. Çok fazla met ettik , tabi ki bende yeni yeni araştırmaya başlıyorum burada sizlere extreme örnekler sunamam.  Önce şu , jQuery ile AngularJS arasındaki farklardan ufacık bir kısmını gösteren videoyu göstermek isterim.

 

 

Etkileyici öyle değil mi ?

MVC modellemesinden söz etmiştik , tabi videodaki tam olarak bu değil. Gelin bunu bir tık öteye taşıyalım.

Aslında AngularJS.org a baktığınızda , sizden çalışmalara başlamadan önce bir http server kurmanızı istiyor. Ama yapacağımız bu örnek için buna ihtiyacımız yok.
Buraya tıklayarak önce angularjs kütüphanesini indirelim. Daha sonra bunu html dosyamıza import edelim.

<!doctype html>
<html>
<head>
    <meta charset="utf8">
    <script type="text/javascript" src="lib/angular/angular.min.js"></script>
</head>
    <body>
       <h1>Öğrenciler</h1>
        Search : <input type="search">
        <ul>
            <li>Uğur</li>
            <li>Buğra</li>
            <li>Burak</li>
            <li>Zeliha</li>
        </ul>
        <p>Toplam öğrenci sayısı: 4</p>
    </body>
</html>

Gördüğünüz gibi burada sadece saf html kullandık. Şimdi buna AngularJS’in getirdiklerini ekliyoruz.

<!doctype html>
<html ng-app="firstApp">
<head>
	<meta charset="utf8">
    <script type="text/javascript" src="lib/angular/angular.min.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
</head>
    <body ng-controller="firstCtrl">
       <h1>{{baslik}}</h1>
        Search : <input type="search" ng-model="query">
        <ul>
            <li ng-repeat="ogrenci in ogrenciler| filter:query">
                {{ogrenci.name}}
            </li>
        </ul>
        <p>Toplam Öğrenci sayısı: {{ogrenciler.length}}</p>
    </body>
</html>

Alışkın olduğumuz html dünyasına aykırı bir sürü saçmalık ekledik sanırım. Şimdi bu saçmalıklara index.js ile bir anlam kazandıralım.

 var firstApp = angular.module('firstApp',[]);



firstApp.controller('firstCtrl',function($scope){
    $scope.ogrenciler=[
        {'name':'Uğur'},
        {'name':'Buğra'},
        {'name':'Burak'},
        {'name':'Zeliha'}
    ];
    $scope.baslik = 'Öğrenciler';
});

İşte bu kadar. Gördüğünüz gibi html’den ayrı bir javascript dosyam var. Bunun içerisinde controller nesnemi yaratıyorum. Ve elementlerimi yerleştiriyorum. Yeni yeni öğrenmeye başladığım bu AngularJS hakkında , daha bir çok şey yazacağım sanırım.

Python Soket Programlama

Arkadaşlar bugün Python ile farklı bir alana değinmek istiyorum. Python çok yönlü bir dil ve biz Python ile soket programlama da yapabiliyoruz. Nedir soket programlama , en basit tabirle network programlamadır arkadaşlar , iki sistem arasında haberleşme, veri alışverişi kontrollerini programlama dersek çok yanlış olmaz.

En temel olarak bir server betiği , bir de client betiği yazarak başlayacağız . Pythonda soket programlama yapmak için gerekli kütüphanemiz , “socket”.

İlk olarak server betiğini yazmakla başlayalım. Bunu en basit olarak web serverlarını düşünebilirsiniz arkadaşlar. Tarayıcınızı açtınız , http://www.google.com yazdınız. Sunucu otomatik olarak sizi sitemizin dosyalarının oldugu makineye yönlendiriyor. Tabi ki tam olarak böyle değil ama ben sadece kafanızda bir şablon oluşması için şekillendirmek için böyle söylüyorum. Şimdi bu yönlendiğimiz makine aslında bizi kapıda bekliyor. Siz linke tıkladığınız anda sizi içeri davet ediyor. İşte ilk olarak biz kapıda bekleyen o programı yazmaya çalışacağız.

Tabi ki ilk olarak “socket” kütüphanesini import edeceğiz.

import socket

Python’da socket programlamaya başlamak için bir socket nesnesine ihtiyacınız vardır arkadaşlar. Hemen bunu nasıl oluşturacağımızı görelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

Şimdi karmaşık gibi geliyor olabilir. Hani dedik ya bizi kapıda bekleyen biri var. O sizi görür görmez içeriye almayacaktır tabi ki , arada belli protokoller olmak zorunda. Burada argüman olarak verdiğimiz AF_INET , SOCK_STREAM gibi ifadeler aslında bu protokollerdir arkadaşlar. Bağlantımız sırasında hangi protokolü kullanacağımızı burada belirliyoruz. Bunları internette araştırarak daha ayrıntılı bilgi alabilirsiniz. Şu an konuyu çok saptırmadan devam etmeye çalışıyorum. Şimdi bir nesneye sahibiz. Bu nesne ile server oluşturacağız.

Server oluşturmak için bir makineye ihtiyacımız var , biz bu makineyi “localhost” , yani betiği yazmış olduğumuz makine olarak seçelim. Şimdi misafiri için evimiz var ama kapımız yok , kapımız ise portumuz olacak arkadaşlar. Herhangi bir port numarası uydurabilirsiniz , ancak 4 haneli rakam seçmeniz , sık kullanılan port numaralarıyla karışmaması açısından daha elverişli olacaktır. Makineyi localhost , port numarasını ise 8000 olarak seçtim ben.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000

Hala bunun bir servera benzer tarafı yok , client da yazıcak olsak aynı şekilde başlayacaktık. Gelin bunu bir server haline getirelim artık. Bir makine ve o makine de bir port oluşturmak için “bind” methodu kullanılır arkadaşlar.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)

Burada lütfen parantezlere dikkat edin arkadaşlar. Şimdi bind methodu ile bir makine oluşturduk ve bir port açtık. Sıra geldi misafir beklemeye. Bunun içinde listen methodunu kullanıyoruz arkadaşlar.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)

Burada listen içerisine verilen argüman , kaç tane misafirin kuyrukta bekleyeceğini belirliyor diyebiliriz. Şimdilik tek misafir için çalıştığımızdan bunu 1 olarak yazdım ben. Ayrıca programı bu şekilde çalıştırdığınızda program listen methodunu gördüğü anda beklemeye başlıcaktır arkadaşlar. Tıpkı input() methodunu yazdığınızda klavyeden entera basmanızı beklediği gibi. Bunun anlamı serverın kullanıcıyı içeriye almaya hazır olduğudur. Diyelim ki bir misafir geldi kapımızı çaldı. Şimdi bağlantıyı kabul edip , misafiri tanımlamalıyız.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”,adres

Evet şimdi accept methodu çıktı karşımıza. Şimdiye kadar kullandığımız bütün methodlar zaten ingilizce ,accept ise burada onaylamak anlamında ve gerçekten ne işe yaradığını ele verir nitelikte. Şimdi accept methodu bir tüp döndürür arkadaşlar. Bu tüpün birinci elemanı bağlantı nesnesini – daha sonra veri alışverişi yapmamızı sağlayan nesne- , ikinci eleman ise , kapımıza gelen misafirin kim olduğunu saklar.
Bağlantıyı aldık madem, eve gelen misafire ilk söylenen şey nedir ?
“Hoşgeldiniz efendim , hoşgeldiniz.”

Hemen söyleyelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”,adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)

Artık burada send methodunun ne işe yaradığını söylemek ayıp olur diye düşünüyorum. Herşey basit değil mi ?

Şimdi biz hoşgeldiniz dediysek , onlarda bir cevap verecektir. Verdikleri cevabı almamızı sağlayan method ise , recv() methodu. Hemen görelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”, adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)
data = baglanti.recv(1024)
print data

Burada recv methoduna verdiğimiz 1024 argümanı , veri büyüklükleriyle ilgili bir durumdur. Şimdilik kafanıza takmanıza gerek yok. Bu konuda daha ileri seviye programlar yazmak isterseniz araştırabilirsiniz.

Şimdi misafir geldi , ağırladık ettik derken uğurlamamız gerek. Bunun içinde close methodunu kullanabilirsiniz arkadaşlar. Basit olarak;

server.py ###############################################################

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”, adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)
data = baglanti.recv(1024)
print data
soket.close()

şeklinde yazabilirsiniz.

İşin sunucu / server tarafını kafanızda birşeyler oluşsun diye böyle anlatmak istedim. Client kısmını daha rahat anlayabilirsiniz şimdi.

client.py
#######################################

import socket
soket = soket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.connect((HOST,PORT))
data = soket.recv(1024)
print data
soket.send(“Hoşbulduk!!”)
soket.close()

Kodların gerçekten anlaşılır olduğunu düşünüyorum. Ancak yine de üstünden geçelim. İlk olarak yine bir soket nesnesi oluşturduk ve server bilgilerimizi girdik. Burada server bilgilerinin her iki betikte de aynı olması gerekmektedir. Daha sonra bu server bilgilerini ve soket nesnesini kullanarak , connect methodu yardımıyla servera bağlanmak istedim. Ve serverdan gelen veriyi recv methodu ile alıp data isimli değişkene atadım. Bu değişkeni ekrana yazdırıp , aynı şekilde send methodu ile bir cevap yolladım.

Elimizde iki ayrı program oldu. Bunlardan birisi server öteki client. Öncelikle serverımızı çalıştırıp hazır hale getiriyoruz. server.py listen komutunu çalıştırdığında kendini beklemeye alacaktır. O öyle çalışır durumdayken, biz client.py betiğini çalıştırıyoruz ve yaptığımız işleri gözlemliyoruz.

Host bilgilerini 192.168.2.x şeklinde ayarlayarak isterseniz aynı modem üzerindeki iki ayrı makinede bunu deneyebilirsiniz. Bu sayede ağdaki diğer makineler üzerinde backdoor yazabilirsiniz.