Sayı 2 , İndir - FİL : PHP ve Teknoloji Dergisi - PHP-TR

Transkript

Sayı 2 , İndir - FİL : PHP ve Teknoloji Dergisi - PHP-TR
FİL:PHP ve Teknoloji
fil.php-tr.com
Kasım 2013
Sayı 2
(Ücretsizdir)
MAGENTO - E-TİCARET YAZILIMI
p
h
p
?
TORTOISESVN KURULUMU VE KULLANIMI
<
BİR YAZILIMCI ŞİRKETTEN NEDEN AYRILIR
fo
re
PHP İLE MEMCACHED KULLANIMI
ac
h
PHP İLE REGULAR EXPRESSION (REGEX)
fopen(
“http:
//www.
exampl
e.com/
”,
“r”);
PHP5-FPM + NGINX ile COUCHBASE NOSQL DATABASE KULLANIMI
ANGULARJS
1
FİLLER GEZİYOR
KÜNYE
Yayıncı
: PHP-TR.com
Editör
: Ayhan Barış
Tasarım
: Tolga Dedebek
Logo
: Emin Zeybek
Yazarlar
: Ayhan Barış
Baran Sakallıoğlu
Berk Çekişbaş
Ceyda Anıl
Fatih Demirel
Musa Avcı
Uğur Eski
Mobil Uygulamalar
: Ahmet Ertekin
Ali Çetin
Seyhan Yılmaz
Facebook
: groups/tr.developers
Twitter
: @php_tr
/
#phptr
https://play.google.com/store/apps/details?id=com.phptr.dergi&hl=tr
Android uygulaması e-dergi sayılarının listesini veren ve e-dergiyi indirmenizi
sağlayan bir arayüz sunar.
1
http
://fil
.php
-tr.c
om
.php-tr.com
m
http://foru
http://www.php-tr.com
MAGENTO - E-TİCARET YAZILIMI
Fatih Demirel
2
[email protected]
Bu yazımda size Magento’nun kurulumu ve sunduğu
avantajlardan bahsedeceğim. Başlangıç seviyesinde
bir yazı olacak fakat diğer sayılarda çok daha detaylı
çalışmalar yapacağız. Yazı dizimizin sonunda Magento
hakkında tüm ayrıntıları öğrenmiş ve ayriyeten bir
e-ticaret platformunu tamamlamış olacağız. Birçok
Magento projesinde karşılaştığım ve yanıtlarını
bulamayacağınız problemleri çözüm yollarıyla sizlerle
paylaşıp, güzel bir kaynak oluşturmak amacı ile bu
yazıma başlıyorum.
olamaz diyebilirim.
Magento, açık kaynak kodlu bir e-ticaret platformdur.
Bu platformun çok gelişmiş özelliklere sahip ücretli
sürümü de bulunmaktadır. Ücretli ve ücretsiz birçok
eklentiyi kolayca entegre edebilirsiniz. Açık kaynaklı
oluşundan dolayı sürekli güncellenerek yeni sürümleri
çıkmaktadır. Ücretli sürümleri Magento Enterprise ve
Magento Enterprise Premium olarak adlandırılmıştır ve
bu sürümler güvenlik, eklentiler, mobile web mağaza, 7
/ 24 destek ve kişisel eğitimler içermekte olup çok daha
büyük projeler için düzenlenmiştir. Eğer daha küçük
projeler geliştirmek için e-ticaret sisteminizi kurmak
istiyorsanız, ücretsiz sürümü size yeterli olacaktır.
Dünya üzerinde birçok ünlü e-ticaret sistemi Magento
alt yapısını kullanmaktadırlar ve bu alanda kullanım
yüzdesi oldukça yüksektir. Bu ünlü firmalar arasında
Nokia ve Lenovo olduğunu belirtsem belki biraz daha
ilginizi çekebilir. Hatta EBAY gibi bir devin arkasında
olması ile diğer platformlar arasındaki uçurumun
sebeplerini anlamanıza yardımcı olabilirim. Türkçe
kaynak sıkıntısı olsa da diğer dillerde oldukça geniş
içerik ve eklenti bulabilirsiniz. Yapacağınız tasarımı
kolay bir şekilde entegre edebilecek ve hızlı bir şekilde
geliştirebileceksiniz. Sunduğu olanaklara bakaraktan ve
diğer platformları kullanmam ile karşılaştırma yapacak
olursam eğer birçok platform Magento’ya rakip dahi
Mobil mağazaların tercihi de yine Magento olmaktadır.
Mobil uygulama entegrasyonu çok iyi bir platform
olduğunu da söyleyebilirim. Bunu avantajlar kısmına
yazabiliriz.
Magento ile projeler geliştirenler bilirler ki, Magento
biraz daha fazla kaynak tükettiğinden ve geniş bir
yapıya sahip olduğundan, sunucu seçimlerinizde hıza
önem vermeniz gerektiğini belirtmem gerek. Bunu
dezavantaj olarak saymıyorum. Çünkü Magento daha
büyük çaplı projelere odaklanmış durumda olduğu için
bu konu hedef kitlesi doğrultusunda eksi sayılacak bir
durum teşkil etmiyor.
Kurulumu
İlk önce kurulumu yapmak için kayıt olmamız ve
dosyaları indirmemiz gerekmektedir.
ht tp://w w w.magentocommerce.com/download
linkinden en son sürümün zip dosyasını indiriyoruz.
Tabi bu arada indirmek için tıkladığımızda kayıt olmamız
gereklidir. İndirmeyi tamamladıktan sonra kurulumu
yapmak için dosyalarımızı ftp ‘den atıp, veri tabanımızı
oluşturup, kuruluma geçebiliriz.
• Magento PHP 5.2.0 ve yukarısını desteklemektedir.
O yüzden sunucunuzda PHP 5.2.0 ve üzeri yüklü
olmalıdır.
• İlk adımda lisans sözleşmesini okuduğumuzu
ve
kullanım
şartlarına
razı
olduğumuzu
(I agree to the above terms and conditions) işaretleyip
Devam’a (Continue) tıklıyoruz.
• Bu kısımda döviz kuru, dil ve saat kısımlarını
belirliyoruz.
• Daha önceden oluşturduğumuz veritabanımızın
bilgilerini giriyoruz.
• Kurulumun sonunda verilen şifreleme anahtarını
bir yere not alınız çünkü bu anahtar daha sonra size
lazım olacaktır.
Eğer sunucunuzda pdo_mysql, mcrypt, curl ve gd
adlı php eklentileri aktif değilse php.ini dosyasında
değişiklikler yapmalısınız;
pdo_mysql aktive etme işlemi için pdo eklentisini aktif
hale getirmelisiniz. Bunun için php.ini dosyasında;
;extension=php_mcrypt.dll
;extension=php_curl.dll
;extension=php_gd2.dll
satırlarının
başlarındaki
kaldırmalısınız.
• Burada ise yönetim panelinde çizelgelerin
gösterilmesi (Enable charts), Url onaylanması, Web
sunucu üzerine yazma ve eğer SSL kullanacak isek
(Use Secure URLs (SSL)) kısımlarını işaretleyip,
kuruluma devam ediyoruz.
noktalı
virgülleri
(;)
pdo_mysql Must Be Loaded Hatası
Kurulumda bu hata ile karşılaşırsanız eğer, public_html
klasörü içerisine bir php.ini dosyası içerisine aşağıdaki
komutları girmeniz gerekecektir.
extension = pdo.so
extension = pdo_mysql
extension = pdo_mysql.so
Türkçe Dil Paketinin Yüklenmesi
İlk önce yönetim paneline giriş yapıp aşağıda belirttiğim
adımları izlemeniz gerekmektedir;
Sistem >> Magento Connect >> Magento Connect Manager
3
• Daha sonraki kısımda ise giriş için belirleyeceğimiz
kullanıcı adı ve şifre bilgilerimizi girip devam
(continue) butonuna basarak diğer adıma geçiyoruz.
Bu yolu izledikten sonra giriş yapınız.
İlk seçenekteki “Search for modules via Magento
Connect” linkine tıklayınız. Daha sonra Languages /
Locales kısmına geliniz. Burada türkçe dil eklentisi için
diğer sayfaya geçiniz.
Magento Community Modules - Turkish (Turkey) Language
Pack linkine tıklayınız ve;
Get Extension Key butonuna tıklayıp, lisans sözleşmesini
kabul ettiğinizi bildiren kutucuğu doldurup GET
EXTENSION KEY butonuna basınız. Açılan kutuda bize
lazım olacak olan eklenti anahtarını (extension key)
kopyalayabilirsiniz.
Kodu kopyaladıktan sonra tekrar Magento Bağlantı
Yöneticisi (Magento Connect Manager) ekranına
gelerek ikinci seçenek olan “Paste extension key to
install:” bölümüne, kopyalamış olduğumuz eklenti
anahtarını (extension key) yapıştırıp, Install butonuna
tıklayınız.
kolay eklenebilmesi,
• Birçok mühendis tarafından düzenli olarak
kodlarının incelenip düzenlenmesi ile birlikte
Google Arama Motoru Optimizasyonu kurallarına
uyumunun yüksek olması ve Google servisleri ile
entegrasyonu.
Bu yazımda size basit kurulum ve Magento’nun bize
sunduğu avantajlardan kısaca bahsettim. Diğer yazımda
daha detaylı bir şekilde karşılaşacağımız problemleri,
dezavantajlarını ve daha derinlere inip teknik detaylarını
anlatacağım.
Kaynaklar:
http://www.magentocommerce.com/
Eğer aşağıdaki hatayı alıyorsanız;
Failed to download Magento-community/Locale_Mage_community_
tr_TR within preferred state “stable”, latest release is
version 1.0.19870.4.12, stability “beta”, use “channel://
co n n ec t.M a ge n to co m m erce.co m/co m m u nit y/Lo cale _ M a ge _
community_tr_TR-1.0.19870.4.12” to install
Cannot initialize ‘channel://connect.Magentocommerce.com/
community/Locale_Mage_community_tr_TR’, invalid or missing
package file
Install Errors
Package
“channel://connect.Magentocommerce.com/community/
Locale_Mage_community_tr_TR” is not valid
PEAR ERROR: install failed
“Paste extension key to install:” kısmına uzantı
anahtarını
(Magento
community/Locale_Mage_
community_tr_TR-1.0.19870.4.12) yazın Install butonuna
basınız;
Artık Magento’yu Türkçeleştirmiş bulunmaktayız.
Genel Olarak Bize Sunduğu En Önemli Avantajlar
• Büyük bir topluluk ürünü olmasından dolayı,
destek ve düzenli olarak güncelleme konusunda
çok iyi ve problemlerinizin çözümlerini kolaylıkla
bulabilirsiniz,,
• Esnek bir yapıya sahip olması,
• Bir e-ticaret platformundan beklediğiniz birçok
özelliğin ücretli ve ücretsiz olarak sunulması ve çok
fazla modül olması,
Fatih Demirel
• Mobil ticaret uyumu,
• Açık kaynaklı bir sistem olduğu için güvenlik
konusunda kontrol imkânınız bulunmakta,
4
• Kolay entegre edilebilen ödeme sistemleri,
• Kod yapısının çok temiz olması ve yeni özelliklerin
[email protected]
Degen Ltd. (Bulgaristan)
İş Geliştirme Müdürü
TORTOISESVN KURULUM VE KULLANIMI
Berk Çekişbaş
[email protected]
Tortoise SVN Giriş
Subversion; “Tigris.org: Açık Kaynak Yazılım
Mühendisliği Araçları” sitesi ve CollabNet şirketi adı
altında http://subversion.tigris.org/ internet adresinde
yayınlanan açık kaynak kodlu bir Sürüm Kontrol
Sistemi’dir. Ve komut satırından çalışmaktadır. Belirli bir
proje üzerinde çalışırken ekip halinde hızlı bir şekilde
projenin en güncel haline ulaşmak ve dosyalardaki
tüm değişiklikleri kaydederek dosyanın istenilen
zamanda istenilen haline ulaşılmasını, kimlerin ne tür
değişiklikler yaptığını belirlemek ve ortak bir çalışma
alanı oluşturmak için kullanılır. Subversion 2000 yılından
beri geliştirilmektedir. Tortoise SVN Projesi yine aynı
ekip tarafından yürütülen açık kaynak kodlu subversion
sistemini Windows ortamında daha kolay bir kullanım
sunmak için geliştirilmiş bir araçtır. TortoiseSVN
Windows ortamında birkaç tıklama ile bizim
komutlarımızı subversion a göndererek işlemlerimizi
kolayca yapmamızı sağlamaktadır. TortoiseSVN’i uzak
bir makinede ya da kendi bilgisayarımız üzerinde bir
depo oluşturarak kullanabiliriz.
5
TortoiseSVN Kurulumu
TortoiseSVN’i
http://tortoisesvn.net/downloads.html
adresinden download edebiliriz ve yazılımın Türkçe
dil paketi bulunmaktadır. Programın kurulumunu
gerçekleştirdikten sonra varsayılan olarak C:\Program
Files\TortoiseSVN dizini altına kurulmaktadır.
Visual SVN Server Kurulumu
Tortoise SVN için bir SVN sunucusunu Linux makine
üzerinde de yapabiliriz ama Windows platformu
üzerinde kullanımından bahsettik ve sunucu için de
yine Windows üzerinden devam edelim. Windows
subversion sunucusu için VisualSVN Server kullanacağız.
VisualSVN Server lisans olarak iki seçenek sunmakta biri
ücretsiz basit yönetim arayüzü, Windows oturum açma
desteği sunmakta. Ücretli versiyonu ise Active Directory
ile entegre olma gibi yeteneklere sahip fakat ücretsiz
versiyonu da gayet iyi çalışmakta ve ofis içerisinde ya da
farklı bölgelerde çalışan ekip arkadaşları için ortak bir
depo alanı sunmakta gayet başarılı. Visual SVN Server ı
http://www.visualsvn.com/server/licensing/ adresinden
temin edip kurulumunu yapabiliriz. Şimdi kurulumu ve
bir proje için kısaca ayarlarını inceleyelim.
tutacağı dizin, sunucunun çalışacağı portu belirliyoruz.
Standart ayarlarında bırakıp devam edelim dilersek
kendi sunucumuza göre düzenleyebiliriz. İlerliyoruz ve
Install diyerek kurulumu bitiriyoruz.
Burada kurulumda bizim ihtiyacımız olan Visual Server
and Management Console seçeneğini seçiyoruz ve
bize SVN sunucusu ile birlikte bir yönetim konsolu
arayüzü sağlıyor. Eğer subversion u komut sistemi ile
de çalıştırmak istersek Add Subversion command-line
tools seçeneğini de işaretleyebiliriz.
Kurulum tamamlandıktan sonra VisualSVN Server
Manager uygulamasını çalıştırıyoruz ve karşımıza bu
ekran geliyor. Sol menüde Repositories, Users, Groups
olarak menü geliyor. İstersek açık bir erişim ya da
kullanıcı veya gruplara şifre ile erişim sağlayabiliriz.
Biz şifreli bir erişim sağlayarak ilerleyelim. Bunun için
ilk olarak bir kullanıcı tanımlıyoruz. Bunun için users
kısmına sağ tıklayarak bir username ve password
belirliyoruz.
Burada standart seçeneğini seçerek devam ediyoruz.
6
Daha sonra Repositories kısmına sağ tıklayarak create
new repository kısmına tıklıyoruz ve ilk olarak bizden
bir repository ismi istiyor. Buraya proje ismini girerek
devam edelim. Daha sonraki ekranda bize boş bir
projemi oluşturacağımızı ya da otomatik olarak
trunk, branches, tags dizinlerini standart olarak
oluşturacağımızı mı soruyor. Biz boş bir proje diyerek
devam ediyoruz.
Burada programın kurulacağı standart dizin ve dosyaları
Kurulum tamamlandıktan sonra TortoiseSVN Windows
un sağ klik menüsüne SVN Checkout ve Tortoise SVN
şekline iki seçenek olarak kendisini ekliyor.
SVN Checkout
Son olarak depo için erişim ayarlarını yapmamızı istiyor.
İlk seçenekte erişim kısıtlaması yok. İkinci seçenekte tüm
ekli kullanıcılara depo için okuma ve yazma izni veriyor. 3.
Seçenekte ise belli kullanıcı veya gruplara spesifik yetkiler
verebiliyoruz. Biz oluşturduğumuz test kullanıcımıza
custom butonunu tıklayarak add seçeneği ile ekli
kullanıcıları görüyoruz ve test kullanıcımızı seçiyoruz.
Okuma ve yazma izni veriyoruz ve tamam diyerek
kullanıcı işlem menüsünü kapatıyoruz. Daha sonra crate
diyerek depo oluşturma işlemini tamamlıyoruz. Son
olarak bize proje adını, web üzerinden ve TortoiseSVN
üzerinden ulaşabileceğimiz bir link, ekli kullanıcılar ve
yetkilerini gösteren bir ekran geliyor Tamam diyerek
depo oluşturma işlemimizi tamamlıyoruz. Visual SVN
Server bir Apache web sunucusu ile birlikte kuruluyor.
Bu yüzden tarayıcı üzerinden de bize verdiği adresi
kullanarak dosyalara erişim imkânı sağlayabiliyoruz.
Uzak sunucuda kullanacaksak eğer makine ismi yerine
IP adresi belirmemiz yeterli olacaktır.
Bir dizinimizi proje dizini olarak belirledikten sonra
depo ile dizinimizi eşitlemek için belirlediğimiz dizine
sağ klik ile SVN Checkout diyoruz, Url of repository
kısmına sunucumuzu kurarken belirlediğimiz repository
adresini giriyor ve devam ediyoruz. Daha sonra bize
kullanıcı adı ve şifre soracak.
Kullanıcı adı ve şifremizi girdikten sonra bize bir çalışma
kopyası oluşacak. Artık oluşturduğumuz bu dizin bizim
çalışma kopyamız oluyor. Klasörün sol at köşesinde
yeşil bir çentik belirmesi gerek Artık çalışma kopyamızı
oluşturduk.
SNV Commit
Basit olarak VisualSVN Server üzerinde bir depo
oluşturma ve kullanıcılara yetkilendirmeyi öğrenerek
kurulumumuzu yaptık. Artık TortoiseSVN’i kurarak
devam edebiliriz.
Tortoise SVN Kurulumu
7
TortoiseSVN’in kurulumu oldukça basit. Öncelikle
TortoiseSVN’i
http://tortoisesvn.net/downloads.html
adresinden download ediyoruz. Standart Windows
kurulumu Next Next Next diyerek kurulumu bitiriyoruz.
Kurulumda bize seçenekler sunacak. Yine burada
subversion u komut satırından kullanmak istersek
kurulum seçeneklerinde command line tools seçeneğini
seçerek komut satırı desteğini de kullanabiliyoruz.
Şimdi projemizi başlatıyor ya da mevcut proje
dosyalarımızı oluşturduğumuz bu dizin içerisine
kopyalıyoruz. Daha sonra belirlediğimiz dizine
sağ tuş tıklayıp Commit diyerek dosyaları depo ya
gönderme işlemine başlıyoruz. Üst kısımda yaptığımız
işlem hakkında bir mesaj yazabiliriz. Aslında proje
gidişatı açısından yapılan her işlemde gerekli notların
bırakılması gerek. Alt kısımdan depodaki dosyalardan
sizin değişiklik yapmış olduklarınız gösterilir ve hangisini
depo ya göndermek istediğiniz seçersiniz. All diyerek
tüm dosyaları depo ya gönderiyoruz.
SVN Update
Projemiz üzerinde çalışmaya başlamadan önce diğer
proje çalışanlarının yaptıkları değişiklerle çalışma
kopyamızı güncellemek için SVN Update butonuna
tıklıyoruz. Böylece diğer güncellemeler çalışma
kopyamıza indiriyor ve projeye bize ait kısmında
kaldığımız yerden devam ediyoruz.
Show Log
vermeyebilir. Bu gibi durumlarda çalışmayı temizleyip
yenidne başlayabiliriz. Bunun için çalışma kopyası
dizinimize sağ tuş tıklayarak TortoiseSVN menüsü
altından clean up diyoruz.
Çakışmaları Düzeltmek (Resolving Conflicts)
Eğer aynı projede çalışan iki kişi bir dosyada aynı satırları
değiştirirse çalışma olayı ortaya çıkar. 1. Geliştirici test.
php de ilgili satırları değiştirir ve depoya gönderir. Aynı
anda depodan güncelleme yapdan aynı dosya üzerinde
değişiklik yapan diğer geliştirici depodan güncelleme
yapmadan aynı satırları değiştirmiş ise dosyaları depoya
göndermek istediğinde çakışma durumu meydana gelir.
Çalışmalar dosyada aşağıdaki şekilde işlenir.
your changes
=======
code merged from repository
>>>>>>> revision
filename.ext.mine :
<<<<<<< filename
Bu dosya çalışma olmadan önce depoda mevcut olan
dosyadır. Bu dosyada çalışma mimleri yer almaz ve en
son güncelleme yapılmadan önceki halini barındırır.
filename.ext.rOLDREV :
Çalışma kopyası dizinimize sağ tuş tıkladığımızda
TortoiseSVN Menüsü altında Show log seçeneğini
seçtiğimizde karşımıza log messages penceresi açılır.
Pencerenin en üstünde tarih kutucuklarından görmek
istediğimiz tarihi seçerek o iki tarih aralığına ait proje
ile ilgili işlemleri görebiliriz. Yine üstteki arama kutusu
ise bir kullanıcı adı, dosya başlığı ya da bir metin ile ilgili
işlemin arama yapılmasını sağlamaktadır. Ortadaki
kutuda yapılan işlemler, alttaki kutuda ise işlemin
üzerine tıkladığımızda değişiklik yapılan dosyalar
görüntülenmektedir.
Dosyada son düzenlemeleri yapmadan önce depodan
aldığımız dosyadır.
filename.ext.rNEWREV :
Çalışma dosyasını güncellediğimiz sırada subversion un
sunucudan aldığı dosyadır.
Dosya üzerindeki çakışmalar kontrol edilip orijin dosya
gerektiği gibi güncellendikten sonra çalışma kopyası
dizinine sağ klik yaprak TortoiseSVN tıklanır ve Resolve
komutu çalıştırılır.
Son
Tortoise SVN in en basit hali ile kullanımı bu şekildedir.
Tabii ki de sadece bu kadar la kalmayan bir sürü özelliği
bulunan yazılımı kısaca en temel kullanım biçimi ile
özetlemeye çalıştım. Herhangi bir sorunuz olursa bana
Facebook grubundaki PHP-TR grubundan ulaşabilirsiniz.
Örnek olarak değişiklik yapılmış bir işleme tıklıyoruz ve
aşağıdan test.php dosyasına sağ tuş tıklayarak Show
changes diyoruz ve karşımıza kullanıcının bu dosya
üzerinde ne gibi değişiklikler yaptığını gösteren bir
ekran geliyor. Değişiklik yapılan kısımlar sarı olarak
işaretleniyor.
8
Çalışma Kopyasını Temizlemek
Sunucu
taraflı
tamamlanmayan
subversion
komutlarından dolayı çalışmamız bazen tutarsız
hale gelebilir ya da komutlar istediğimiz sonuçları
Bir dahaki makalede görüşmek üzere.
Berk Çekişbaş
[email protected]
İOSOB
Yazılım Uzmanı & Sistem Yöneticisi
BİR YAZILIMCI ŞİRKETTEN NEDEN AYRILIR?
Ceyda Anıl
Hangi sektörde çalışıyor olursanız olun, IT departmanı şirketin en değerli departmanlarından biridir. Özellikle
internet sektöründe faaliyet gösteren bir şirkette çalışıyorsanız, yazılımcılar çok daha değerlidir. Dinamikliğin
oldukça yoğun olduğu, her gün farklı teknolojilerin geliştiği günümüzde, bir web sitenin neden ne olursa olsun
açılmaması ya da kod hatası ile çalışmaması, şirkette negatif enerjinin yayılmasına neden olur. Bu durumda
sorumluluk yazılımcıların üzerine yüklenecektir.
İnsanoğlu önyargıda bulunmayı çok sever. Sık iş değiştirmiş bir yazılımcı ile karşılaşıldığında “ya hemen giderse?”
şüphesi uyanır. Aidiyet duygusu yaratmak ve çalışılan atmosferi keyifli kılmak yönetimin elindedir. Çalışana değer
verilmiyor ve motivasyonu sağlanmıyorsa yazılımcıyı o şirkette daha fazla tutamazsınız.
Peki, bir yazılımcı işinden neden ayrılır? :
• Esnek çalışma saatlerinde, gecesini gündüzüne katıp çalışırken, “sabah erken gelmelisin” ya da “geç
kaldın” uyarısını duyuyorsa
• Projeleri tamamladığında olumlu tepki vermeyip, eksik ya da hatalı çalışmalarında negatif eleştiriyle
karşılaşıyorsa,
• Rahat ve verimli çalışmasına neden olan kıyafetlerine karışılıyorsa,
• Verilen proje veya çalışmayı yaparken farklı departmandaki bir çalışma arkadaşı işine karışıyorsa,
9
• Bağlı olduğu yöneticisinin ya da ekip liderinin agresif ve negatif tepkilerini görüyorsa,
• Takım Lideri olmayı ya da projeyi yönetmeyi beklerken hiç beklemediği bir anda üstüne bir yönetici
getiriliyorsa,
• Yaptığı çalışmalar monotonlaşmışsa,
• Çalıştığı
şirkette
kendisini
daha
geliştirebileceğini düşünmüyorsa,
fazla
• İnisiyatif almak isteyen biriyse ve yapmak
istedikleri yaptırılmıyorsa,
• Fikirlerini dile getirirken önemsenmediğini ya da
alay edildiğini düşünüyorsa,
• Huzurlu bir çalışma
hissetmiyorsa,
• Şirketin vizyonu ile
örtüşmediğini görüyorsa,
ortamında
kendi
olduğunu
vizyonunun
• Maddi kazancı tatmin etmiyorsa,
• Bulunduğu konumdan daha
düşündüğü bir teklif aldıysa
iyi
olduğunu
Unutmamalı, sık iş değiştirmek, yazılımcının başarılı ya
da başarısız olduğunu göstermez. Yapılan araştırmalara
göre bir şirkette verimli çalışma süresi ortalama 3 yıldır.
Çünkü uzun yıllar çalışmak çalışanın yeteneklerini köreltir
ve bakış açısını daraltır, kısa süreli çalışma ise güvensizliğe
neden olur. Ancak internet sektöründe IT departmanı
için böyle bir varsayımda bulunmak oldukça güçtür. Startup kültüründeki çalışma ile kurumsal şirketteki çalışma
farklılık gösterir. Bu nedenle deneyim yılı baz alınarak
değerlendirme yapmak yerine, çalışılan şirketlere ve
yapılan projelere bakmak çok daha sağlıklı olacaktır.
Ceyda Anıl
10
www.ceydaanil.com
E-nerjik
PHP ile
MemCached
Ayhan Barış
MemCached (http://memcached.org) 2003 yılında
LiveJournal (http://livejournal.com/) için yazılmış
ve geliştirilmesi devam eden açık kaynak kodlu,
yüksek performanslı, dağıtık mimaride çalışabilen bir
önbellekleme sunucu sistemidir.
MemCached ile sürekli ihtiyacınız olan dizileri, program
ayar verilerini, uzun süren MySQL sorgu sonuçlarını
önbellekleyerek yazılımınızın çok daha hızlı çalışmasını
sağlayabilirsiniz.
MemCached kullanan büyük oyuncular;
•
•
•
•
•
•
•
•
•
•
•
•
Kullanımı
[email protected]
Limango
LiveJournal
Wikipedia
Flickr
Bebo
Twitter
Typepad
Yellowbot
Youtube
Digg
WordPress.com
Craigslist
MemCached ‘in depolama stili key-value (anahtar kelime
– yüklenen değer) şeklindedir. Hafızada durmasını
istediğiniz değere bir key tanımlarsınız ve bu key’e
değer set edersiniz.
Örnek key-value;
kullanmasında kullanılır.
MemCache ise PHP’nin MemCached sunucusuna
bağlanan, değer set eden, anlık durum bilgisi
gösteren yani MemCached üzerinde işlemler yapan
kütüphanesidir.
Linux’da Kurulum
MemCached sunucuyu yum veya apt-get ile kurabilirsiniz.
İşletim sisteminiz 32bit ise 32bit versiyonunu kurun.
# yum install memcached.x86_64
yada
# apt-get install memcached
MemCache client kütüphanesini PECL ile kurabilirsiniz.
# pecl install memcache
Linux’da MemCached Sunucuyu Başlatmak
# memcached -d -m 512 -l 127.0.0.1 -p 11211 -u
nobody
key : iller
value : Türkiyedeki tüm il listesi (İstanbul, Ankara, İzmir …)
(d = daemon, m = memory (512MB), u = user, l = IP adresi, p = port)
key : BanlanmisIpler
Windows’da Kurulum
value : array(‘1.1.1.1’,’2.2.2.2’,’3.3.3.3’)
Öncelikle Win32 binary versiyonunu http://code.jellycan.
com/files/memcached-1.2.6-win32-bin.zip adresinden
indirin. Dosyayı c:\memcached dizinine açın.
key : user5
11
value : user5’in tüm session verisi.
MemCached TCP/IP üzerinde çalışan bir sunucudur.
Sunucuya farklı programlama dilleri ğie bağlanılabilir.
Örneğin PHP ile değer set edip, JAVA yada başka bir
programlama dili ile bu değeri okuyabilirsiniz. Bu
yöntem genellikle hibrit sistemlerin ortak Session
c:/memcached/memcached.exe -d install
ile MemCached sunucuyu Windows’a servis olarak
kurabilirsiniz.
Windows’da MemCached Sunucuyu Başlatmak
Kurulumları tamamladıktan sonra Apache’yi restart
edin,
phpinfo()’da
MemCache
kütüphanesini
göreceksiniz.
c:/memcached/memcached.exe -d start
yada
net start “memcached Server”
Windows’da default olarak MemCached sunucu 64MB
ile çalıştırılır. Ama 64MB az ve bunu değiştirmek için
Registry Editörden;
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/
Services/memcached Server
Artık hazır sayılırız. Bir cache sunucumuz var ve
cache sunucusunda işlemler yapabileceğimiz bir
kütüphanemiz.
Artık MemCached 512MB ile çalışacak.
memcache_ornek.php
Kısmını bulun ve “ImagePath” kısmını şu şekilde
değiştirin.
12
Windows’da WAMP kullanıyorsanız, PHP’nin MemCache
client kütüphanesi için php_memcache eklentisini açın.
Bu işlemi manuel olarak php.ini’yi düzenleyerek de
yapabilirisiniz.
<?php
$memcache = new Memcache;
$memcache->connect(‘127.0.0.1’, 11211) or
die (“MemCached servera baglanilamiyor!”);
$cachelenecekVeri = “istanbul,ankara,izmir”;
/*
* MemCached’e veri gönder.
* iller = key
* $cachelenecekVeri = veriler
* false = 3. parametre sıkıştırma
* parametresidir, true olduğunda
* veriler sıkıştırılarak saklanır
* 100 = 4. parametre saniye
* olarak cachleme süresidir
*/
$memcache->set(‘iller’,
$cachelenecekVeri, false, 100);
/*
* MemCached’den veri al.
*/
$cachedekiDeger = $memcache->get(‘iller’);
var_dump($cachedekiDeger);
?>
Genel Memcache Kullanım Algoritması:
$data[] = $sira->ad;
}
# db’den gelen veriyi cache’e yaz , 3600
= 1 saat
$memcache->set(‘iller’, $data, false,
3600);
}
else {
echo “data cacheden geliyor...<br>”;
}
# veriyi kullan
print_r($data);
?>
Dikkat Edilmesi Gerekenler
• Memcache bir cache sistemidir. Verilerinizin
kaybolabilir!
• Memcache’de key (anahtar kelime) en fazla 250
karakter olabilir.
• Cache’lenen veri en fazla 1MB olabilir. 1MB
üzerinde veri saklayacaksanız sıkıştırma
parametresini “true” yapın. Sıkıştırılan veri
önbellekten okununduğunda açılması gerekir
ve bu sıkıştırma/açma işlemi CPU maliyeti
oluşturur, unutmayın.
Senaryo 1:
İlk ziyaretçide cache boş olacak. Sayfa ziyaretçisi “Evet”
adımından devam edecek ve asıl kaynağından veriyi alıp
sistemde cache verisini oluşturtacak.
Senaryo 2:
İkinci ziyaretçide cache dolu olduğu için “Hayır”
adımından ilerler ve verileri asıl kaynağından değil
cache’den alır.
• Memcache’de cache için ayrılan alan hiçbir
zaman dolmaz. Eğer sürekli veri set ediyorsanız
ve yer kalmadı ise otomatik olarak en eski
verinin üzerine yazılacaktır (LRU).
•
x86 ve x86_64 farkı: x86 mimaride cache için
ram’de en fazla 4GB ayırabilirsiniz. x86_64
mimaride 16.8 milyon terabyte’a kadar
desteklemektedir.
Kaynaklar
http://www.php.net/memcache
http://memcached.org/
http://en.wikipedia.org/wiki/Memcached
13
memcache_sql_ornek.php
<?php
# MemCached’e baglan
$memcache = new Memcache;
$memcache->connect(‘127.0.0.1’, 11211) or die
(“MemCached servera baglanilamiyor!”);
# cache’den veriyi almaya calis
$data = $memcache->get(‘iller’);
if ($data === false) {
# eger donen deger FALSE ise cachede veri
yoktur
# db’den veriyi al ve cache’e yaz
echo “data asıl kaynaktan geliyor...<br>”;
mysql_connect(“localhost”,”root”,””);
$data = array();
$SQL = “SELECT ad FROM iller”;
$sorgu = mysql_query($SQL);
while ($sira = mysql_fetch_object($sorgu))
{
Ayhan Barış
[email protected]
PHP İLE REGULAR EXPRESSION (REGEX)
Musa Avcı
Regular expression (regex) Türkçesiyle düzenli ifadeler
metinlerde bir biçimsel dil kullanarak tarif edilen
kısımları seçip ayırmamıza yarayan bir programdır.
Neredeyse bütün programlama dillerinde kullanılan
regex ile metinlerde ayrıştırmak istediğiniz her şeye
ulaşabilirsiniz.
Örneğin günümüzde en çok içerik çalma botlarında
kullanılır. Fakat yazı düzeni sağlamak ya da metinlerde
aranan ifadelere ulaşıp onları manipüle etmek için de
kullanabilirsiniz.
Bu yazıda öncelikle regex desenlerini denemek için
bir kaç kullanışlı site paylaşacağım, sonrasında temel
ihtiyaçları karşılayacak ve en çok kullanılan regex
desenlerinden ve bunları PHP ile nasıl kullanacağımızdan
bahsetmeye çalışacağım.
14
Giriş
Yazı boyunca göstereceğim desenleri deneyebilmek
için anlık işlemler yapabilen ve her regex çalışmamızda
tarayıcımızın bir tabında açık olması gereken bu siteleri
mutlaka yer imlerinize ekleyin.
Regex101
http://regex101.com/ (Favorim)
Rubular
http://rubular.com/
Gethifi Regexp Tool
http://www.gethifi.com/tools/regex
RegExr
http://gskinner.com/RegExr/
Hoşunuza giden bir tanesini açın ve verilen örnekleri
canlı bir şekilde deneyerek d2aha iyi kavrayın.
Bir Kelime Aramak
Regex ile yapılabileğimiz en basit işlem kelime
aramaktır, bunun için direkt aramak istediğimiz
kelimeyi yazmak yeterli. Örnek olarak düzenli ifademize
“elma” yazıyoruz. Ve elde edeceğimiz sonuçta elma
kelimelerinin seçildiğini görebilirsiniz.
Örnek düzenli ifade:
elma
Metin ve sonuç:
Bu deneme amaçlı yazılmış ve içerisinde elma geçen öylesine bir metin.
Yukarıda kırmızı renkle işaret edilen kelime, yazdığımız ifadenin yakaladığı kelimenin göstergesidir. Bundan sonraki
örneklerde de elde ettiğimiz sonuçları böyle göstereceğim.
Özel Karakterler
Düzenli ifadelerde bolca anlam ve ifade içeren özel karakterler vardır. Asıl yapmak istediklerimizi bunlarla ifade
edip istenilen sonuca ulaşırız. Öncelikle bu karakterlerin ne olduklarına bakalım, sonrasında da nasıl kullanıldıklarını
örnekler ile deneyelim.
Düzenli İfadelerde Kullanılan Özel Karakterler:
Karakter
Açıklaması
\d
Herhangi bir rakamı ifade eder
.
Satır başı hariç herhangi bir karakteri ifade eder
\w
Herhangi bir harfi, rakamı veya alt tireyi ifade eder
\s
Herhangi bir görünmez karakteri ve boşluğu ifade eder. (Boşluk, tab, satır başı gibi)
^
Başlangıcı ifade eder
$
Sonu ifade eder
*
Kendinden önce yazılmış karakterin;
sıfır veya daha fazla tekrar etmesini ifade eder
+
Kendinden önce yazılmış karakterin;
bir veya daha fazla tekrar etmesini ifade eder
?
Kendinden önce yazılmış karakterin;
olsa da olur olmasa da olurunu ifade eder
{123}
Kendinden önce yazılmış karakterin;
parantez içerisine yazılan sayı kadar tekrar etmesini ifade eder
{1, 2}
Kendinden önce yazılmış karakterin;
parantez içerisinde yazılan iki sayı arasında tekrar etmesini ifade eder
(…)
Parantez içerisine yazılan ifadeleri gruplamaya yarar
(…|…)
[ ... ]
\
Parantez içerisine yazılan “|” dik tire işareti ya da anlamına gelir, içerisine yazılan
ve dik tire ile ayrılan ifadelerden herhangi birisinin eşleşmesini ifade eder
Köşeli parantez içerisine yazılan karakterlerden bir tanesini ifade eder
Kaçış karakteri. Yukarıda yazdığımız karakterleri normal olarak yazmak istediğimizde
başına kaçış işaretini koyarız. Örneğin noktayı ifade etmek için \.
\D
Rakam olmayan herhangi bir karakteri ifade eder
\S
Görünmez ve boşluk olmayan karakteri ifade eder
\W
Harf, rakam veya alt tire olmayan karakteri ifade eder
\b
Kelimenin başını veya sonunu ifade eder
[^ ... ]
Üç nokta yerine yazılan karakterler haricindeki karakterleri ifade eder
[a-z]
A dan z’ye olan harflerden birisini ifade eder
15
Regex Ayarları
Regex desenleri iki “/” (bölü) işaretinin arasına yazılır. Sondaki bölü işaretinden sonra isteğe bağlı olarak regex ayar
karakterleri girilir.
Ayar karaktleri:
Karakter
Açıklaması
i
Büyük küçük harfe duyarsız olur
g
İlk eşleşmede durmaz, kapsamlı tarama yapar
s
Satır başı hariç her şeyi ifade eden nokta karakterinin satır başını da ifade etmesini sağlar
m
^ ve $ karakterlerinin her satırın başını ve sonunu ifade etmesini sağlar
Örnek Kullanımı:
/elma/i
Bu örnekte büyük ELMA, küçük elma ya da ElMa şeklinde yazılanları da büyük küçük harfe aldırmadan yakalar.
Yukarıdaki örnek selma, elmas gibi kelimelerin içerisindeki “elma”ları da bulacaktır. Eğer sadece elma kelimesini
aramak istiyorsak kelime başı ve sonunu ifade eden \b kullanacağız.
/\belma\b/gi
Şimdi sadece elma kelimesini bulacağız, selma, elmas gibi diğer elma içeren kelimeleri yakalamayacaktır.
Sayıları Yakalamak
Gelelim şimdi yukarıdaki tabloda listelediğimiz karakterlerin örnek kullanımına. Girilen içerikte sadece sayıları
bulmak için “\d” ve “+” karakterlerini kullanacağız.
/\d+/g
Bu örnek sadece 1234, 321 789 sayılarla eşleşir. “g” ayarı ile de bir kere değil kapsamlı aramasını ifade ettik.
Bir veya daha fazla tekrarı ifade eden “+” karakterinin başına herhangi bir rakamı ifade eden “\d” yazdık. Daha işe
yarar bir örnek için girilen içerikteki tarih formatında yazılmış ifadeyi yakalayalım.
/(\d{2}\.\d{2}\.\d{4})/g
İfadenin karışık görünmesi sizi korkutmasın, ilgili yerlerden inceleyerek ayıkladığınızda ne olduğunu daha rahat
özetleyebilirsiniz. \d{2} 2 rakamı, sonrasında \. kaçış karakteri ile noktayı, son kısımda ise 4 rakamı ifade ettik.
Böylece 10.08.2013 gibi bir içerikle eşleşecektir.
Kelimeleri Yakalamak
Yukarıdaki örnekle benzer bir ifade ile yapabiliriz.
16
/(\w+)/g
\w ifadesi herhangi bir harfi ifade ettiğini söylemiştik fakat Türkçe karakterlerin bu ifade için istisna olduğunu
bilmeniz gerekiyor. Eğer Türkçe bir içerikle çalışıyorsak yapmamız gereken ifade şöyle olmalı;
/([a-zA-ZÇŞĞÜÖİçşğüöı]+)/g
Bu ifade ile Türkçe kelimeleri de yakalayabiliriz
Küçük ve büyük a’dan z’ye harlerin yanına Türkçe’de olan küçük ve büyük harfleri ekledik. Bir diğer örnek olarak da
içerikten sadece istenilen bir kelimeyi almayı deneyelim.
/benim adım (\w+)/gi
Merhabalar benim adım Musa!
Başlangıç Ve Sona Göre Yakalama
^ ve $ karakterleriyle başının ya da sonunun nasıl olacağını ifade edebiliriz. Örnek olarak sadece selam ile başlayan
içeriği ayıklamayı deneyelim.
/^selam/
Bu örnek metin selam ile başlamadığı için hiç bir şeyle eşleşmeyecektir
selam! bu örnek daha samimi olduğu için eşleşecektir
Selam ile başlayan ve hoşçakal ile biten metnin arasında geçenleri yakalayacak bir örnek daha;
/^selam(.+)hoşçakal$/
selam buralar yakalanacak hoşça kal
Düzenli İfadeleri Php İle Kullanmak
Gelelim bu faydalı işlemleri PHP üzerinde kullanmaya. Bunun için bir kaç faydalı fonksiyon ile tanışacağız.
İfadenin Eşleşip Eşleşmediğini Kontrol Etmek
preg _ match() fonksiyonu ile yazdığımız ifadenin verdiğimiz içerikle eşleşmediğini kontrol edebiliyoruz. Örnekte
girdinin geçerli bir saat formatı olup olmadığını kontrol edeceğiz.
$pattern= ‘/^([01][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]$/’;
$content = ‘23:15:59’;
if(preg_match($pattern, $content))
{
echo ‘Doğru bir saat girilmiş’;
}
else
{
echo ‘Yanlış bir saat formatı girilmiş’;
}
Eğer ifade metin içerisinde eşleşirse true aksi halde false döner.
17
Yazdığımız ifadenin açıklamasını da merak ediyorsanız; öncelikle ^ ile metnin başını ifade ettik, yani tam olarak
bizim istediğimiz gibi başlamalı. Sonunda da $ kullandık, bu sayede tam olarak bizim istediğimiz başlangıca ve sona
sahip olan bir içeriği aradığımızı ifade ettik.
Sonrasında ([01][0-9]|[2][0-3]) 2 ifadeyi gruplandırdık. Çünkü saat ya 01 den 19’a kadar ya da 20 dan 23’e kadar
olabilir. Eğer [0-9]{2} şeklinde 0 ile 9 arasında 2 sayı ile eşleş deseydik, 99 gibi 23’den büyük sayılara da eşleşirdi.
Yakalanan İçerikleri Almak
Düzenli ifadelerde yakalamak ve ayırmak istediğimiz içeriklerin ifadelerini parantez içerisinde yazarız. Parantez
içerisine yazılan ifadelere eşleşen içeriklere preg_match_all fonksiyonu sayesinde ulaşacağız. Bu fonksiyon tüm
içeriği taramasını sağlayan “g” ayarını içerir, yani preg_match_all kullanırken “g” (global) ayarını yazmanıza gerek
yok.
Teorik bilgi ve örneklerin haricinde biraz gerçek hayattaki kullanımlarına bakarak daha iyi kavrayabileceğimizi düşünüyorum. Bir sitenin kayak kodundan title etiketi arasında yer alan site başlığını yakalamak için şöyle bir ifade
yazabiliriz.
$pattern = ‘/<title>(.+)<\/title>/i’;
$content = file_get_contents(‘http://www.phpr.org’);
preg_match_all($pattern, $content, $results);
print_r($results);
Ekran çıktısı şöyle olacaktır;
Array
(
[0] => Array
(
[0] => <title>php serüvenleri - PHP dersleri, PHP örnekleri, PHP kodları</title>
)
[1] => Array
(
[0] => php serüvenleri - PHP dersleri, PHP örnekleri, PHP kodları
)
)
$results değişkenindeki dizinin ilk elemanı; girilen ifade ile eşleşen içeriklerin dizisini verir. Sonraki elemanları ise
parantezler ile grupladığımız ifadelere eşleşen içeriklerin dizisini verir. Yani bizim asıl ihtiyacımız olan title etiketleri
arasında parantez içerisine aldığımız karakterleri almak için 2. elemana bakacağız.
İkinci elemanda kendi içerisinde bir dizi, yani eğer birden fazla eşleşme olursa onları da sırayla verecektir.
Düzenli ifadeleri kullanarak içeriği değiştirme
Yine kullanışlı bir örnek ile açıklayalım. Girilen metin içerisine düz bir şekilde yazılan URL’leri HTML formatında link
yapalım. Bunun için öncelikle bir URL’yi ifade edecek olan desen lazım. Ben internette hazır örneklerden birisini
seçtim, dilerseniz siz de diğerlerine http://regexlib.com/Search.aspx?k=URL adresinden bakabilirsiniz. preg_replace
fonksiyonu ile eşleşen ifadelerde yine parantez içinde grupladığımız ifadeleri istediğimiz şekilde değiştirebiliriz.
// URL’leri yakalayan desen
$pattern=‘(https?:\/\/(([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}
[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\/?[^\b\s]+))’;
$content = ‘Diğer PHP serüvenlerine http://www.phpr.org adresinden bakabilirsiniz’;
$replace = ‘<a href=”$0”>$1</a>’;
echo preg_replace($pattern, $replace, $content);
18
Ekranda düz yazı ile yazdığımız URL’nin link olmuş hali yazar;
Diğer PHP serüvenlerine www.phpr.org adresinden bakabilirsiniz
Daha Fazlası
İfade Gruplarını Yakalamamak
Yukarıda özellikle yakalamak istediğimiz ifadeleri parantez içine almamız gerektiğini söylemiştim. Fakat her
parantez içine aldığımızı yakalamak istemeyebiliriz. Bunun için parantezleri (?: ... ) şeklinde kullanabiliriz.
Böylece bu parantezin yakaladığı içerik sadece çalışırken kullanılır, sonuçta gösterilmez.
/(\w+@\w+(?:\.\w+)+)/
E-mail adresini ifade eden desende iki grubumuz var, fakat içerideki grubu sonuçta almamıza gerek yok. İfadeyi
çalıştırdığımızda sadece mail adreslerini veren bir dizimiz olacak.
İfade gruplarını isimlendirme
Yukarıdaki örnekte gereksiz parantezleri almayıp elde ettiğimiz sonucu biraz daha düzene sokmuş olduk. Şimdi ise
bu gruba isim vererek daha da düzeni sağlayabiliriz.
Grupları /(?<grupismi>ifade)/ şeklinde isimlendirebilirsiniz.
$pattern = ‘/(?<email>\w+@\w+(?:\.\w+)+)/i’;
$content = ‘Bir kaç adres: [email protected], [email protected], [email protected]’;
preg_match_all($pattern, $content, $results);
print_r($results[‘email’]);
Çıktı:
Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
)
Hiç dizi elemanlarının hangisi benim ihtiyacım olandı diye uğraşmadan direkt isim verdiğimiz grubun yakaladığı
içeriklere ulaşabiliriz.
Hava Durumu
Yine pratik bir örnek ile meteoroloji sitesinden İstanbul için günlük hava durumunu yakalayan bir desen hazırlayalım.
Bu tür işlerin püf noktası aradığımız içeriği çevreleyen eşsiz desenleri görmek.
İstanbul için günlük hava durumunu veren sayfa;
http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL
19
Sayfanın kaynağını açıp aradığımız sıcaklığın hangi HTML etiketleri arasında olduğuna bakıyoruz.
$content = file_get_contents(‘http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL’);
// Derece
preg_match_all(‘/<em class=”renkMin zemimeZ”>(.+)C<\/em><\/td>/si’, $content, $results);
// İlk eşleşeni alıyoruz
$degree = $results[1][0];
// Hava durumunun ikonu ve açıklaması
preg_match_all(‘/”([\wÇŞİĞÜÖöçşğüı ]+)” rowspan=”2”><img
src=”\.\.([\w\/\.-]+)”/si’, $content, $results);
$description = $results[1][0];
$image = ‘http://www.mgm.gov.tr‘ . $results[2][0];
echo $degree . ‘ ‘ . $description;
echo ‘<img src=”’ . $image . ‘” />’;
Ekranda hava durumunu görürüz.
Musa Avcı
Daha yeni başlıyoruz.
Aşağıdaki faydalı kaynakları da inceleyip kurcalamanızı
öneriyorum.
@musa_avci
www.phpr.org
regexlib.com
Wikipedia
http://en.wikipedia.org/wiki/Regular_expression
regular-expressions.info
30 dakikalık Regex öğretisi
http://www.codeproject.com/Articles/9099/The-30Minute-Regex-Tutorial
Regex için 30 kullanışlı araç
http://www.hongkiat.com/blog/regular-expressiontools-resources/
Uzun bir yazı oldu ama neresinden dalarsanız dalın
faydalanabileceğinizi düşünüyorum. Ben de yazıyı
hazırlarken bir çok yeni şey öğrendim bu nedenle size
teşekkür ediyorum.
Big Data*
* Burayı okuduğuna göre büyük işlerle uğraşmak istiyorsun. Eğer buna bir adım
20
daha yaklaşmak istersen [email protected] adresinden bize ulaşabilirsin.
SOCIAPlus
PHP5-FPM + NGINX ile COUCHBASE NOSQL DATABASE
KULLANIMI
[email protected]
İçerik
Bu yazıda sizlere sıfırdan Couchbase kurulumu, Nginx
kurulumu ve PHP5-FPM kurulumunu ve Couchbase PHP
SDK kurulumunu anlattıktan sonra PHP SDK kod örneği
ile Couchbase’de neler yapabileceğimizden kısaca
bahsedeceğim.
Couchbase Nedir
Couchbase nedir diye tanımlamak isteyecek olursak,
Couchbase JSON döküman yönelimli key-value NoSQL
veritabanı sistemidir. Projenin tarihçesi ise şöyle:
Apache CouchDB Damien Katz tarafından geliştirilen
açık kaynaklı veritabanı sistemiyken Chris Anderson
ve Jan Lehnardt ile beraber CouchOne Inc. firmasını
kurarlar. O sıralarda başka bir key-value veritabanı
sistemi olan Membase de popülerlik kazanır ve 2011
Şubat ayında CouchOne ve Membase Inc. birleşerek
şu anki Couchbase fikri ortaya çıkar. CouchDB’nin
döküman tabanlı data modeli, indexleme ve sorgulama
yetenekleriyle, Membase’in kolay ölçeklenebilirlik ve
her zaman online olma özellikleri bu şekilde bir araya
gelmiş olur. Şu anda da Couchbase hem open source
hem de enterprise olmak üzere iki şekilde dağıtıma
sunulmaktadır.
21
Couchbase Kimler İçin Uygundur
Couchbase interaktif web uygulamaları için üretilmiş
NoSQL döküman veritabanıdır. Esnek data modeline
sahiptir, kolaylıkla ölçeklenebilir ve yüksek performans
sağlar. Dağıtık sistemi sayesinde her zaman online
servis verebilecek şekilde dizayn edilmiştir. Siteniz
veya uygulamanız yüksek hit alyorsa, klasik relational
database sistemleri bu yükü kaldırmaya yetmiyorsa
Baran Sakallıoğlu
(MySQL gibi) veya Memcache cache de kullanıyorum
ama buna güzel bir web arayüzle ulaşabilsem
istatistikleri anlık görebilsem diyorsanız Couchbase
sizin için güzel bir çözüm olacaktır. Dezavantajı veriyi
öncelikle RAM’de saklama şeklinde çalıştığı için hosting
maliyeti klasik sistemlere göre biraz daha fazla olacaktır.
Couchbase Veri Yapısı ve Mimarisi
Couchbase’de objeler ve onların ilişkilerini saklamak için
JSON döküman formatı kullanılır. Böylece veri şeması
değişiklikleri kolaylıkla yapılabilir. Aynı tür objeler için
bile farklı veri yapıları kullanılabilir. Başlangıçta bir
kullanıcı için sadece kullanıcı adı alanı tutarken sonra
JSON field olarak ad soyad eklemek gibi.
Couchbase cluster’a yeni bir makine eklemek ve
çıkarmak oldukça basit bir işlemdir. Aynı zamanda
clusterlar arası yedekleme ile herhangi bir lokasyonda
problem olduğu zaman başka bir lokasyondaki
cluster kullanılmaya devam edilebilir. Veriyi dağıtma
işlemini Couchbase otomatik olarak yapar. Uygulama
seviyesinde herhangi bir ekstra efor sarfedilmez. Veri
ön planda kullanılan Memcache ile RAM’de tutulduğu
için oldukça hızlı bir sistemdir.
Couchbase kurulu olan her bir makine node olarak
tanımlanır. Node fiziksel bir makine olabileceği gibi VPS
veya bir Amazon Cloud instance da olabilir. Clusterdaki
tüm node’lar birbirine eştir, aynı fonksiyonaliteyi sağlar
ve aynı bileşenlere sahiptir. Master-slave ilişkisi yoktur.
Her yeni eklenecek makine ile beraber Couchbase lineer
olarak RAM ve disk kapasitesini artırır.
Couchbase’de veriler bucket ismi verilen yapılarda
tutulur. Bunları MySQL’deki veritabanı gibi düşünebiliriz.
İki tür bucket bulunur, biri Couchbase bucket öbürü
ise Memcached bucket. Memcached bucketlar
alışık olduğumuz cache sistemiyle birebir aynıdır.
Couchbase bucketlar ise Memcached bucketlara ekstra
olarak veriyi kalıcı olarak diskte saklar, node’lar arası
replication sağlar ve bu özelliğiyle herhangi bir node
işlem görmediğinde rebalance denilen işlem ile beraber
veri kaybını önler. Couchbase bucketlarda key başına
saklanabilecek maksimum veri miktarı 20 mb.
Couchbase ön planda veri yazma ve okuma işlemlerini
için Memcache katmanını kullanırken, her bir node
üzerindeki birden fazla thread ile veriyi aynı zamanda
diske yazar. Böylece cluster’a yazılan herhangi bir veri
client’ı bloklamadan önce yazma kuyruğuna atılır ve
sırası geldiğinde diske kalıcı olarak yazılır. Couchbase
client’dan istek gelmedikçe veya key geçerlilik süresi
geçmediği sürece veriyi kesinlikle diskten silmez. Olası
bir makine reset durumunda veriler tekrar diskten
RAM’e aktarılır. Warm-up ismi verilen bu süreçten
sonra node tekrar aktif olarak işlev görmeye devam
eder. Couchbase sık kullanılan verileri RAM de tutarken
LRU algoritmasıyla (en nadir kullanılan) veriler RAM’den
diske yazılır. Bu otomatik işlem Ejection olarak geçer.
Eğer sadece memcached bucket kullanılır ve ram
yetersiz gelmeye başlarsa bu aynı işlem devam eder
ve memcached bucketlarda kalıcı olarak veri saklama
olmadığı için veri kaybı oluşur. Bu işleme ise Eviction
denir.
Genel olarak Couchbase mimarisi ve kavramları
anlattığımıza göre basit bir uygulama örneği ile bu
kavramları canlı olarak görmenin vakti geldi :)
Couchbase Kurulumu
Couchbase’i Linux (Debian, Centos, RHEL, Ubuntu),
Windows (32-64 bit) MacOSX işletim sistemlerinden
herhangi birine kurabilirsiniz.
22
Bu yazıda DigitalOcean cloud hostingden alınan iki adet
VPS makine üzerinde (512mb ram 1 çekirdek) Ubuntu
12.04LTS 64 bit ve Couchbase Community Edition kurup,
bir tanesini aynı zamanda web server (nginx + php5
fpm + couchbase php extension) olarak kuracağım.
Eğer siz farklı bir linux dağıtımı, Windows veya MacOSX
kullanıyor iseniz kaynakçada bulunan linklerden
installation tutoriallara ulaşabilirsiniz.
bir makine ile 16gb ramli bir makineyi aynı clustera
eklediğimizde kota olarak maksimum 6-7gb kadar ram
verebileceğimiz için 16gb ramli makinenin çoğu boşa
gitmiş olacaktır.
İki adet sanal makineyi DigitalOcean üzerinde
oluşturduk. Benim konfigürasyonda makine isimleri ve
ipler şöyle
Couchbase1 ipsi 192.241.146.89
Couchbase2 ipsi 192.241.151.198
İki makineyi de ssh ile bağlandıktan sonra
apt-get
update ile repository’leri güncelliyoruz.
Bu esnada continue y/n şeklineki sorulara y basıp
enterlıyoruz.
Daha sonra apt-get dist-upgrade ile sistemi
güncelliyoruz. Karşınıza pembe bir ekran çıktığında
install the system maintainers version seçeneğini (en
üstteki) ok tuşları ile seçip enter’a basıyoruz
apt-get upgrade son upgradeleri yapıyoruz.
Şimdi sıra couchbase kurmaya geldi. Couchbase ssl
istediği için kurulumdan önce libssl yüklüyoruz.
apt-get install libssl0.9.8
http://www.couchbase.com/download
adresinden
community edition 2.1.1 i indiriyoruz. 32bit veya 64
bit versiyona dikkat etmeyi unutmayın. 21 Eylül 2013
itibarıyle Ubuntu 12.04 64bit versiyonu indirmek için şu
komutu çalıştırın
wget
http://packages.couchbase.com/
releases/2.1.1/couchbase-server-community_
x86_64_2.1.1.deb
Kurulumu Başlatmak İçin
Daha sonrasunda ufak bir kod yazıp, couchbase
cluster’a php ile bağlanma, temel methodları kullanmayı
göstereceğim.
dpkg
-i
x86_64_2.1.1.deb
Herhangi bir production senaryosu için Couchbase’in
önerdiği en düşük konfigürasyon 4 çekirdekli işlemci
ve 8gb RAM olduğunu unutmayın Makinelerin aynı ağ
üzerinde bulunmaları da performans artışında önemli
bir etken. Hatta hard disk olarak SSD kullanırsanız diske
yazma ve okuma işlemlerinde önemli bir performans
artışı sağlayabilirsiniz.
komutunu çalıştırıyoruz. Böylece debian package
manager bizim için kurulumu gerçekleştiriyor. Herhangi
bir hata ile karşılaşmadıysanız ‘You have successfully
installed Couchbase Server’ yazısını görmeniz gerekiyor.
Bu yazıyı gördükten sonra tüm işlemleri ikinci makine
için de yapıyoruz.
Couchbase’de ilk kurulum esnasında cluster RAM
kotası soracağı için, makinelerin aynı konfigürasyonda
olmasına dikkat etmek gerekiyor çünkü 8gb ramli
couchbase-server-community_
İki makinemiz de hazır olduğuna göre cluster kurma
işlemine başlayabiliriz. Burdan sonraki kurulumu
tamamen web panel üzerinden yapacağız. Couchbase
8091 portundan bir web erişimi sağlıyor.
http://192.241.146.89:8091 adresinden ilk makineye
bağlanıyoruz. Bu makinede start clusterı başlatıp ikinci
makinede join cluster işlemini yapacağız.
Buradaki setup tuşuna basıyoruz. Databases path ve
indices path alanını isterseniz değiştirebilirsiniz fakat
ben default olarak bırakıyorum. Hostname makinenizin
ipsi olsun, Start a new cluster seçili olduktan sonra RAM
quota default olarak Couchbase sistemdeki toplam
ramin %60ını hesaplayarak seçiyor. Bu alanı da yanda
yazan (256 - 393) maksimum kadar değiştiriyorum çünkü
couchbase kendi önlem mekanizması olarak verilen RAM
kotasının her zaman %80i kadarını kullanıyor. Böylece
maksimum rami kullanabiliriz fakat başka uygulamalar
da olacak ise kabaca sisteme ne kadar ram ayıracağınızı
siz belirleyip dilediğiniz miktarı ayarlayabilirsiniz. Nexte
basıp ilerliyoruz
Create default bucket adımında bucket type kendi
sistem gereksiniminize göre belirleyebilirsiniz. Eğer sırf
memcached olarak kullanayım veriler yedekli durmasın
makine reset olduğunda veri kaybının benim için bir
önemi yok diyorsanız memcached bucket seçin. Ama
tavsiyem couchbase bucket seçmeniz olacaktır. Per
node ram quota’yı ilk adımda belirlediğimiz Cluster
quota olarak seçin. Eğer daha sonra başka bucketler
da açarım (aynı cluster üzerinde iki application için ayrı
bucket. MySQL’deki veritabanı gibi düşünebilirsiniz.)
RAM miktarını indirebilirsiniz. İki uygulamam olacak ve
bunlar aynı yer seçsin diyorsanız Toplam ramin yarısı
kadar bir değer girebilirsiniz.
Şu anda tek uygulama olacağı için ben o değeri 393
olarak seçiyorum. Enable replica eğer data birden fazla
node’da kopyalar halinde tutulsun istiyorsanız işaretli
olsun. İleride çok daha fazla makine clusterda olabilir
ve ekstra önlem almak istiyorum diyorsanız 3 ve üzeri
makineli cluster yapılarında replication 2 olarak da
seçebilirsiniz.
23
Şu anda 2 makine olduğu için replicayı işaretleyip 1 olarak
bırakıyorum. Provision number of workers default
3 olarak bırakabilirsiniz. En alttaki flush’ı seçerseniz
admin panelden bucket içindeki tüm verileri tek seferde
silmek gibi bir opsiyona sahip olabilirsiniz. Ben test
ortamı olduğu için bu seçeneği de işaretliyorum.
Sample Data ve Sample Map Reduce ekranından
dilerseniz kendi test bucket ve viewlarını sisteme
kurabilirsiniz fakat ben bunları yüklemeden next ile
ilerliyorum.
Eğer updatelerdan haberdar olmak istiyorsanız son
adımdaki tiki işaretli bırakıp alttaki forma email ad
soyad ve firma bilgilerinizi girebilirsiniz. Ben hiçbirşeyi
doldurmadan bu ekranı atlıyorum.
Son adımda sistem bizden web panel için admin
şifresi isteyecek. Test ortamı olduğu için ben “phpfil”
olarak belirleyip geçiyorum. Alfanümerik zor bir şifre
belirlemeyi unutmayın. Bu adımı da tamamladıktan
sonra panelde şöyle bir ekran belirecek.
Couchbase cluster’a her makine ekleme veya çıkarmada
rebalance işlemi mutlaka yapılması gerekiyor. Rebalance
kısaca clusterdaki verilerin içeride bulunan tüm
makinelere yeniden dengeli bir biçimde dağıtılması. Sağ
üstteki rebalance tuşuna basıyoruz.
Rebalance işleminin bitmesini bekliyoruz. Ekrandaki
gibi her bir node’un % olarak ne kadar işi kaldığını
görebilirsiniz.
Şimdi sıra ikinci makinemizi de cluster’a eklemeye geldi.
Üstteki menüden server nodes’a tıklıyoruz. Add server
butonuna basıyoruz. Server ip address kısmına ikinci
makinenin ipsini yazıyoruz (Bu örnekte 192.241.151.198)
password alanına ilk makinede belirlediğimiz “phpfil”
şifresini giriyoruz. Siz tabi ki başka şifre belirttiyseniz
onu girmeyi unutmayın. Confirm ekranını onaylayın.
Sunuculuk kısımları bitirdikten sonra artık php ile bu
sisteme nasıl bağlantı kullanabiliriz onun hazırlıklarına
başlayabiliriz.
Bunun için Couchbase1 makinesini webserver yapıyoruz.
Nginx Webserver ve PHP5-FPM Kurulumu
Önce nginx kurulumu ile başlayalım. En son sürümleri
takip etmek için ubuntu launchpad repositorylerini
kullanacağız bu yüzden python software properties’i
kurmamız gerekiyor. SSH’dan aşağıdaki komutları
çağırıyoruz.
apt-get install python-software-properties
Nginx ppa’sını sisteme ekliyoruz.
add-apt-repository ppa:nginx/stable
24
Repo güncelleme ve nginx kurulumunu başlatıyoruz.
Eklenen makine üzerinde eğer daha önceden bir
couchbase kurulu ve üzerinde veri varsa hepsi silinir.
Bizde sıfır makine olduğu için bu durum bir problem
teşkil etmemekte. Eğer firewall veya kurulum
problemi yaşamadıysanız ekranda pending rebalance
göreceksiniz.
apt-get update & apt-get install nginx.
nginx –v ile sürümünüzü onayladıktan sonra (1.4.1
olmalı)
service
nginx
start ile web sunucunuzu
başlatabilirsiniz. http://192.241.146.89/ adresinden
(tabi ki siz kendi ipnize bakın) nginx karşılama ekranını
gördüyseniz php5-fpm kurulumuna geçebiliriz.
Nginxdeki gibi son sürüm php5 kullanmak için gene ppa
ekliyoruz.
FTP veya shell yolu ile /usr/share/nginx/html klasörü
altına ilk php dosyamızı kaydedelim. İçerisine sadece
<?php phpinfo(); ?> olan phpinfo.php dosyamızı
kaydedip DigitalOcean’da root bilgilerimizle FileZilla
yardımı ile sftp kullanarak makinemize direk erişebiliriz.
add-apt-repository ppa:ondrej/php5
Sonrasında repo güncelleme ve php install için
apt-get update & apt-get install php5-fpm
Şimdi sıra geldi php.ini dosyamızdaki cgi.fix_pathinfo
değerini 0’a çekmeye.
nano
/etc/php5/fpm/php.ini
ile
cgi.fix_
pathinfo = 1 yazan kısmı 0a çevirip ctrl+x ve y basıp
enterlıyoruz(kullanımı kolay olduğu için bundan sonraki
dosya editlemeleri hep nano ile yapacağım. Tercihen
vim’i de kullanabilirsiniz. ).
/etc/php5/fpm/pool.d/www.conf
komutunu
çalıştırarak listen = 127.0.0.1:9000 satırını listen=
/var/run/php5-fpm.sock olarak değiştirip üstteki
nano
örnekteki gibi kaydediyoruz. Eğer ayarlarda problem
yok ise hiçbir değişiklik yapmadan devam edebilirsiniz.
service php5-fpm restart ile phpyi tekrar çalıştırıyoruz.
Sıra geldi web
düzeltmeye.
nano
sunucumuzun
nginx
http://192.241.146.89/phpinfo.php
adresinde
php
konfigürasyonumuzu gördüysek Web sunucu kurma
işimiz de bitti demektir. Şimdi couchbase php sdk
yükleme işlemlerine başlayabiliriz.
Couchbase PHP SDK Kurulumu
Bunun için önce couchbase c library yüklüyoruz.
ayarlarını
/etc/nginx/sites-available/default. Ayarları
resimdeki gibi yapabilirsiniz.
wget
list
-O/etc/apt/sources.list.d/couchbase.
http://packages.couchbase.com/ubuntu/
couchbase-ubuntu1204.list
ile c library repository listemize ekliyoruz.
GPG keyi de sunucumuza ekliyoruz.
wget -O- http://packages.couchbase.com/ubuntu/
couchbase.key | sudo apt-key add
apt-get update & apt-get install libcouchbase2libevent libcouchbase-dev ile c library kurulumu
tamamlıyoruz.
php library için de aşağıdaki 4 komutu sırayla
çalıştırıyoruz.
25
Servername example.com yerine localhost veya varsa
yönlendireceğiniz site onun ismini domainadiniz.com
şeklinde yazabilirsiniz. Ayarları kaydettikten sonra
service nginx restart ile nginx yeniden başlatalım.
apt-get install php-pear
apt-get install build-essential
apt-get install php5-dev
pecl install couchbase
php.ini
dosyamıza
extension=json.so,
extension=couchbase.so satırlarını bu sıra ile ekliyoruz.
bu yüzden aşağıdaki komutu çalıştırıp düzenlemeleri
yapıyoruz
nano /etc/php5/fpm/php.ini ve kaydediyoruz.
php ve nginxi tekrar başlatıyoruz değişikliklerin geçerli
olması için
service php5-fpm restart
service nginx restart.
Eğer başarılı kurulduysa http://192.241.146.89/phpinfo.
php adresinde couchbase sekmesi resimdeki gibi
gözükmesi gerekiyor.
Couchbase::SERIALIZER_JSON);
//tüm keylerimizin başına phpfil_ ekliyoruz.
$cb->setOption(Couchbase::OPT_PREFIX_KEY,
“phpfil_”);
//herhangi bir option değerini çekiyoruz. prefix
key bize phpfil_ dönüyor.
var_dump($cb->getOption(Couchbase::OPT_PREFIX_
KEY));
echo “<br/>”;
//operasyonların timeout süresini 5 sn olarak
ayarlıyoruz.
$cb->setTimeout(5000);
//timeout süresini ekrana bastırıyoruz. demin
5000 set ettiğimiz için şimdi de 5000 dönecek.
echo $cb->getTimeout();
echo “<br/>”;
//client versiyonunu ekrana bastırıyoruz.
echo $cb->getClientVersion();
echo “<br/>”;
//a keyine 101 değerini yazıyoruz
$cb->set(“a”, 101);
//a keyindeki değeri alıp ekrana basıyoruz.
int(101)
var_dump($cb->get(“a”));
echo “<br/>”;
Şimdi de phpinfo.php ile aynı dizin altına gelecek
couchbase.php dosyasını oluşturalım. Bu php
dosyasında couchbase cluster’a bağlanıp, clusterda
kaç makine var, bunların versiyonları nedir, obje
yazarken serialize method olarak neyi kullanacağız,
operasyonlarda timeout süremiz ne olacak, ve her
script çalıştığında çoğul hiti sayacak şekilde increment
işlemini yapacağız.
<?php
ini_set(‘display_errors’,’on’);
//ilk parametre couchbase adresi, ikinci
parametre kullanıcı adı, ikinci parametre şifre,
üçüncü parametre bucket ismi.
try {
$cb = new Couchbase(“192.241.146.89:8091”, “”,
“”, “default”);
//bağlı olan serverları ekrana bastırıyoruz.
var_dump($cb->getServers());
echo “<br/>”;
26
//sunucuların versiyonlarını bastırıyoruz
var_dump($cb->getVersion());
echo “<br/>”;
//obje serializer olarak json seçiyoruz.
$cb->setOption(Couchbase::OPT_SERIALIZER,
//testler bitti şimdi her sayfaya ziyareti
kaydeden scriptimize başlayalım
$dosya_adi = $_SERVER[‘SCRIPT_NAME’];
//key değerini 1 artırıyoruz, son parametredeki
true eğer key daha önce yaratılmamışsa yaratmak
için. increment bize +1 eklenmiş değer ne ise
onu döndürüyor.
var_dump($cb->increment($dosya_adi, 1, true));
echo “<br/>”;
} catch(CouchbaseException $ce) {
var_dump($ce);
}
?>
Sizin de admin panelini görmeniz için bir süreliğine bu
iki makineyi açık tutacağım. Yazıdaki ip adresleri ve php
dosyalarını sizler de çalıştırıp çıktıları inceleyebilirsiniz.
Bir sonraki yazıda php sessionları couchbase’de
tutma ve view ile bunlar üzerinde sorgu yapabilmeyi
anlatacağım.
O zamana kadar herhangi bir sorunuz olursa
[email protected]
adresinden
bana
ulaşabilirsiniz.
KAYNAKLAR:
http://www.couchbase.com/couchbase-vs-couchdb
http://couchdb.apache.org/
http://docs.couchbase.com/couchbase-manual2.2/#couchbase-getting-started-prepare
http://nginxlibrary.com/ubuntu-latest-nginx/
http://www.couchbase.com/
communities/php/getting-started
https://www.digitalocean.com/community/
articles/how-to-install-linux-nginx-mysqlphp-lemp-stack-on-ubuntu-12-04
http://www.couchbase.com/
communities/c/getting-started
http://www.couchbase.com/
communities/php/getting-started
http://docs.couchbase.com/couchbasesdk-php-1.1/#php-method-summary
Baran Sakallıoğlu
27
[email protected]
linkedin.com/profile/view?id=128193862
ANGULARJS
[email protected]
Uğur Eski
Bu yazıda AngularJS’den giriş seviyesinde bahsedeceğim. AngularJS nedir, hangi durumlarda kullanmamız doğru
olur gibi sorulara cevap vereceğim. Ve daha anlatımlarla birlikte örnekler sunacağım.
AngularJS nedir?
AngularJS Google tarafından desteklenen ve geliştirilen javascript kütüphanesidir. AngularJS yapı olarak MVC
kullanır ve diğer javascript kütüphanelerinden ekstra olarak “Data Binding”, “Routing” ve “Templates” gibi özellikler
barındırır. DOM manipülasyonlarının template’lere taşınması ile Single Page Application diye adlandırabileceğimiz
uygulamalarda daha hızlı ve yönetimi kolay geliştirme yapmamıza olanak sunar.
Hello Word!
Örnek:
<!doctype html>
<html ng-app>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js”></script>
</head>
<body>
<div>
<label>Name:</label>
<input type=”text” ng-model=”yourName” placeholder=”Enter a name here”>
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>
</html>
28
Örnekte angular “ng-app” yönergesi tetikleniyor. Ve daha
sonrasında oluşturulan şablonu okuyarak çift yönlü olarak
çalışmaya başlıyor. “ng-model” yönergesi ile input içeriği
{{yourName}} ifadesine bağlanıyor. Bu şekilde angular anlık olarak
veriyi inputdan okuyup yönergeye göre hareket ederek
{{yourName}} ifadesinin olduğu yere değeri yazacaktır.
Örnek:
<!doctype html>
<html>
<head>
<script src=”https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js”></script>
<script type=”text/javascript”>
var myApp = angular.module(‘myApp’, []);
myApp.controller(‘MainCtrl’, [‘$scope’, function ($scope) {
$scope.numbers = [10, 25, 35, 45, 60, 80, 100];
$scope.lowerBound = 42;
$scope.greaterThanNum = function (item) {
return item > $scope.lowerBound;
};
}]);
</script>
</head>
<body>
<div ng-app=”myApp”>
<div ng-controller=”MainCtrl”>
<p>Fitrelemek için değer giriniz</p>
<input type=”text” ng-model=”lowerBound” />
<ul>
<li ng-repeat=”number in numbers | filter:greaterThanNum”>
{{ number }}
</li>
</ul>
</div>
</div>
</body>
</html>
Bu örnekte yapılmak istenen, inputa girilen değere göre, javascript verisi
içinde filtreleme yaparak büyük olanları ekrana anlık değişimle listelemek.
“ng-controller” yönergesi ile uygulamasını bir controllera bağlıyor ve
controller aracılığı ile veri işleniyor. “ng-repeat” yönergesi döngü ile
veriyi {{number}} ifadesinin bulunduğu yere yazıyor. Filtreleme ise filter
parametresi ile belirlenen fonksiyon tetiklenerek eşleşen veriyi geri
döndürüyor. İnputdaki değer değiştiğinde listede anlık olarak değişecektir.
Çünkü {{lowerBound}} ifadesi greaterThanNum fonksiyonunda
kullandığından listedeki değerler tekrar filtreden geçecektir. Bu işlem
otomatik olarak angular tarafından gerçekleştirilecektir.
Son Söz
Web uygulamaları geliştirirken, kullanıcı etkileşiminin yüksek olduğu ve
asenkron veri akışının sık kullanıldığı uygulamalarda arayüz geliştirme ve transfer edilen nesneler sebebiyle kod
satırları arasında boğulmanıza neden olmakta. AngularJS bu süreçte arayüz tarafını kendi yöneterek rahat nefes
almamızı sağlıyor.
Bu makale AngularJS’yi giriş seviyesinde bahsetmeye çalıştım. Sonraki makalelerimde daha kapsamlı olarak
bahsetmeye çalışacağım.
Kaynaklar
Uğur Eski
http://angularjs.org/
http://en.wikipedia.org/wiki/AngularJS
http://blog.kartaca.com/2013/09/angularjs-ve-backbonejs/
29
http://muratcorlu.com/post/angularjs-kullanmak-icin-10-neden/
[email protected]
SOCIAPlus
FİLLER GEZİYOR
İNEGÖL
İNEGÖL
İNEGÖL
İNEGÖL
İSTANBUL
30
İZMİR

Benzer belgeler