Kategori arşivi: Programlama

NGINX’i Reverse Proxy Olarak Kullanmak

Bir önceki yazımda Heroku üzerinde Play! Framework tecrübemden bahsetmiştim. Heroku‘yu çok çok başlangıçta bir projede kullanırken bazı dezavantajları var. Bunlardan en önemlisi sistemden bir süre ücretsiz faydalanarak bir yerlere gelebileceğinizi hayal ederken, ücretsiz verilen tek işlemcinin belli bir süre uygulamanıza erişilmediği zaman idle konuma alınıyor olması. Mesela uygulamanıza 1 saat kimse erişmediyse, 1 saat sonra gelen kişi, uygulamanın baştan çalıştırılmasını beklemek zorunda kalıyor, bu da 15-20 saniye tutabiliyor. Düşününce daha da önemli olan diğer bir konu ise veritabanı kısmı. Heroku’da 10bin satıra kadar PostgreSQL yada 10MB MySQL’i ücretsiz olarak kullanmanız mümkün. Ödeme seçeneklerine gelindiğindeyse Xen yada KVM sanallaştırmasını kullanan VPS’leri tercih etmek toplamda daha ucuza geliyor yine.

Alternatif olarak Heroku’nun da sistemlerini çalıştırdığı Amazon’u direk kendiniz kullanmanız seçeneği var. Birçoğunuzun bildiği üzere Amazon micro instance’larını 1 yıl süreyle ücretsiz olarak kullanmanıza izin veriyor. Facebook uygulaması olarak geliştirdiğimiz TASK’ı şu an Amazon’un sunucularında çalıştırıyorum. Sunucularında diyorum çünkü EC2 üzerinde bir application server çalıştırırken, RDS üzerinde veritabanını ve S3 üzerinde de uygulamaya yüklenen resimleri barındırıyorum.

Konuya başlama amacından biraz fazla uzaklaştık sanırım. Konuya dönersek, Amazon üzerinde kısıtlı olan kaynaklarınızla bütün işi Play! Framework’e yıkarsanız bazı sıkıntılar yaşayabilirsiniz. Yaşadığım en büyük sıkıntıysa Facebook uygulamalarında zorunluluk haline gelen SSL sertifakası işini Play! Framework’e verirseniz, 1.2.5 sürümünde bilinen bir bug olarak zaman zaman exception fırlatabiliyor. Bundan kurtulmanın en kolay yoluysa NGINX’i reverse proxy olarak kullanmak. Eğer sunucunuzda Ubuntu kullanıyorsanız bu işlemi yapmak inanın çok kolay. Repo’dan nginx’in kurulumunu tamamladıktan sonra /etc/nginx/sites-available/default yolundaki dosyada 1-2 düzenleme yapmanız gerekiyor. Bu dosyadaki server { … } etiketlerinin arasındaki location kısmını aşağıdaki gibi düzenlemelisiniz,

location / {
proxy_pass http://127.0.0.1:8080;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Buradaki proxy_pass kısmına sunucunuzdaki app-container’ınızın çalıştığı adresi vermelisiniz. Eğer uygulamanızda SSL kullanıyorsanız aynı ayarlarla bir de 443 portunu dinleyen sunucu tanımlamalısınız, hepsi bu kadar.

NGINX’i reverse proxy olarak kullanarak statik dosyaların cache’lenmesinden de faydalanabilirsiniz. Emin olun sunucunuzdan her megabyte’ına kadar faydalanmanızı sağlayacak bir iyilik yapmış olacaksınız kendinize.

Heroku’da Play! Framework Tecrübesi

Günümüzde PHP sunucusu bulmak artık işten bile sayılmaz, her yerde PHP koşturabilecek çok makul fiyatlarda sunucular bulmanız mümkün. Ama konu Java, Python, Ruby gibi dillere gelince hele bir de farklı framework’lerine gelince her sunucu istekleri karşılayamayabiliyor. Daha doğrusu bu dillerle yazılan uygulamaların başlangıçtaki tüketimi PHP’ye oranla biraz daha masraflı olduğu için bu dillere verilecek sunucularda fazladan satışlar (over-use) mümkün olmuyor. Doğal olarak taban fiyatlarda yüksek oluyor.

Dünyada cloud computing’in gerçek anlamda yaygınlaşmasıyla ekonomik sunucular bulmak mümkünleşti. Hatta bazıları uygunluğu abartarak geliştirme aşamasında ve az miktarda ziyaretçisi olan uygulamalara hizmetlerini ücretsiz sunuyorlar. Bunlardan en önemlisi tabi ki de Amazon.

Amazon üzerinde kendi sunucunuzu yapılandırabiliyorsunuz. Bunun yanında hazır veritabanı sistemleri ve CDN hizmetleri gibi birçok servis yapılandırılmış durumda, size sadece bunları kullanmak kalıyor. Üstelik yeni üyelik açtığınız zaman 1 yıl boyunca bu hizmetlerin hepsinden belli miktarlara kadar ücretsiz yararlanabiliyorsunuz. Şimdi gelelim yazının başlığında geçen Heroku‘ya.

Heroku sunucu yapılandırmalarının tamamını kendi üstüne almış ve scalability denen kavramın sorumluluğunu da kendisi yüklenmiş. Yani bugün tek çekirdek işinizi görürken yarın 3 çekirdek ihtiyacınız olursa bunu sadece 1-2 tık ile çözebiliyorsunuz.  Ücretlendirmesi de kullandığınız işlemci saati üzerinden yapılıyor. Eğer uygulamanızı o anda kullanan yoksa otomatik olarak boştaki işlem gücü kapatılıyor ve sizin fazladan ücret ödemeniz önlenmiş oluyor. Bütün bunların yanında uygulamanızda tek işlem birimi kullandığınız sürece sizden bir bedel talep etmiyorlar.

Deployment konusuna gelirsek, işin o kısmınında çok kolaylaştırıldığını söylemek isterim. Ben Play! Framework uygulamamı deploy ederken hiç sıkıntı yaşamadım desem yalan olmaz. Sitelerinde anlatılan basamakları sırayla uyguladığınızda normal bir git sunucusuna uygulama yükler gibi yüklemiş oluyorsunuz. Sizin adınıza onlar uygulamayı derleyip çalıştırıyorlar. Veritabanı olarak PostgreSQL kullanırsanız 10bin satırlık veriyi tutmanız ücretsiz, bunun yerine MySQL’u seçerseniz, add-on’lar kısmında ClearDB var bu seferde 5MB’lık verinizi ücretsiz olarak tutuyorlar. Uygulama belli bir kullanıcıya ulaştığı anda bedel ödemeniz gerekiyor ki başlangıç bence yüksek bedeller. Development sürecinden sonra alternatiflere göz atılmalı diye düşünüyorum.

Jetpack 1.4 Yorum Alanını Nasıl Kullanacağız?

WordPress’in 3.4 sürümüne geçmesinin yanı sıra Jetpack’te artık 1.4 sürümüne geldi ve güzel tarafı WordPress’in yorum alanına facebook gibi hesaplarınızla yorum yapabilmeniz eklenmiş oldu. Ancak ne yazık ki kullandığımız temalarda bu eklentiyi etkinleştirmemize rağmen bir türlü değişikliği göremeyenlerdenseniz, temanızda bir ufak değişikliğe gitmeniz gerekiyor.

Temanızın single.php dosyasının için yorum formunu oluşturan kodunuzu bulun ve tamamen kaldırın. Yerine
php etiketleri arasında comment_form(); kodunu çağırınız. single.php’yi kaydettikten sonra sayfanızı yenilediğinizde, yeni yorum alanının sitenize dahil olduğunu göreceksiniz.

WordPress.Org’a İlk Eklenti

WordPress için yarı yıl tatili süresinde birkaç eklenti yazmam gerekmişti. Bunlardan bazılarını genele yönelik olarak düzenleyip yayınlama kararını vermem yarı yıl tatilinin son bulmasıyla başlamıştı ve ilk eklentimi okul açıldıktan birkaç hafta sonra yayınlamıştım. Ancak hakkında birşeyler yazmak ancak şimdiye kendisinin birkaç ufak hatasını gideren ikinci sürümünü yayınladığım bugüne kısmet oldu.

Eklenti temel olarak içerik türlerine bir de yemek tariflerinizi ekleyebileceğiniz bir tür ekliyor ve şimdilik ayarları ingilizce olarak yer alıyor. Önümüzdeki günlerde içerisinde kendi sayfa görünümünü de içeren Türkçe sürümünü de yayınlamayı düşünüyorum ancak ben o sürümü geliştirecek vakit bulana kadar şu anki sürümüne buradan ulaşabilirsiniz. Karşılaştığınız hataları ve geliştirilmesi gerektiğini düşündüğünüz yerlerini yorum yazarak bana iletirseniz çok sevinirim. Ancak dikkat etmeniz gereken bir nokta var eklentiyi kullanabilmek için sitenizi barındırdığınız sunucuda PHP 5.3 veya yukarısı bir sürüm bulunması gerekiyor.

C# ‘ta App.Config Kullanımı

Benim gibi açık kaynakçı bir adamın gün gelip C# kullanacağına kim inanırdı ama gün geldi bir süreliğine kendisiyle haşır neşir olmam gerekiyor. İlerleyen günlerde sebeplerini de açıklarım ama şimdilik tecrübelerimi paylaşayım. Eskiden exe uygulamarının yanında bazen .ini dosyaları olurdur, C# ile Microsoft onları kullanmaktan vazgeçti. Hazırlamam gereken uygulamada da dışarıdan parametre okumam gerekiyor, hoş ini dosyasıda nasıl kullanılır C# ile bilmediğim için benim için çok birşey fark etmedi ama yine de araştırırken net ve kolay bir kaynak bulamadım. Halbuki benim istediğim sadece 3 tane string okumaktı.

Sadede gelirsek

<configuration>

<appSettings>
<add key="Plant" value="Fab1" />
<add key="Line" value="B1" />
<add key="Section" value="T1" />
</appSettings>

</configuration>

şeklinde hazırlanmış bir app.config dosyasından data çekmek için

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace _ak_res
{
class ReadConf
{
public String getPlant(){
return ConfigurationSettings.AppSettings["Plant"].ToString();
}

public String getLine()
{
return ConfigurationSettings.AppSettings["Line"].ToString();
}

public String getSection()
{
return ConfigurationSettings.AppSettings["Section"].ToString();
}
}
}

şeklinde yazacağınız bir class işinizi görecektir. İşinizi göreceğini umuyorum, anlamadığınız yerler olursa, yorum kısmından sorabilirsiniz.

PHP 5.4 Web Server ile Geliyor

PHP geliştiricilerine güzel bir haberimiz var. Şimdiye kadar geliştiriciler kodlarını test etmek için makinalarına Apache tarzı bir sunucu yazılımı kurmaları ve bütün eklentileriyle düzenlemeleri gerekiyordu. Şimdiyse artık php içerisinde bu özellikleri içeren bir yapıyla geliyor.

Uygulama geliştiriciler artık daha önceden Pyhton kullandılarsa alışkın oldukları gibi direk projenin bulunduğu klasörden çalıştırarak deneme imkanına kavuşuyorlar. Php’yi aşağıdaki gibi çalıştırmanız yeterli oluyor. Port numarası boştaki herhangi bir port numarası olarak belirlenebilir.

$ php -S localhost:1301 -t /projenin/bulundugu/yer

Bu şekilde uygulama çalıştırmanın tek dezavantajı https şeklindeki secure bağlantıları deneyemiyorsunuz. Bu durumdan en çok facebook uygulaması geliştirenler şikayetçi olacaklardır.

Rus Çarpması

Rus kelimesi geçince hemen aklınıza Rus kızları gelmesin, konumuzun hiç alakası yok. 🙂 Rusların başarılı oldukları bir alan olan matematikten bahsediyoruz. Yememiş içmemiş çarpma için ilginç bir algoritma bulmuşlar, adına da Russian Peasant Algorithm demişler. Adamların köylüsünün bile matematiği kuvvetli, yapacak birşey yok… 🙂 Bu dönem nümerik dersini aldığım içinde kendileri karşıma çıktılar. Algoritma karmaşık değil sonuç olarak yazdığım kodda karmaşık değil ancak yine de benden sonrakilerin elinde örnek kod bulunsun diyerek kendi yazdıklarımı paylaşmak istedim. Hem C hemde Fortran dilinde yazdığım kodun algoritması basit. Program verilen 2 sayıdan birincisini 2 ile çarparken ikincisini 2’ye bölüyor. İkincisinin tek olduğu satırlardaki birinci sayıları toplayarak sonuca ulaşıyor. Buyrun kodlarımız;

#include 

main(){

int i=0,j=0,result=0;

printf("Please write two number for multiplication. (Please leave a space between numbers)\n");

scanf("%d %d", &i,&j);

printf("First number is %d\nSecond number is %d\n", i,j);

while(j>=1){

	if(j%2 != 0)
		result = result + i;

	i = i*2;
	j = j/2;

	printf("Now First number is %d Second number is %d\n", i,j);
}

printf("Result is %d\n", result);
}

Bu da Fortran 90 ile yazılmış şekli;

PROGRAM peasant

	implicit none

! Here, i is the first number and j is the second number for multiplication
! And k will hold result

	integer i, j, k
! We initialized k to 0.
	k=0

	print *, ' This program multiply 2 integer numbers'
	print *, ' Type them in now separated by a comma or space'
! We read i and j from console
	READ *,i,j
! In this while loop, we aplied Russian Peasent Algorithm
	DO WHILE(j>=1)

		IF (mod(j,2)/=0) k = k + i

		i = i*2;
		j = j/2;
! End of While loop
	END DO
! Prints the result to screen
	print *, 'The multiplication is ', k
END

Fortran olanı ödev olarak teslim edildiği için yorumlarada sahip, yukarıda fazlasıyla açıklama yazdığım ve kod basit olduğu için yorumları eklemedim, sormak istediğiniz birşey olursa bu yazıya yorum yaparak sorabilirsiniz. Umarım işinizi görür…