Bu yazý Bilgisayar mühendisi ne iþ yapar? adlý çalýþmanýn ilk bölümü…

Bilgisayar mühendislerinin en bilinen çalýþma alanlarýndan birisi yazýlým sektörüdür.

Yazýlým geliþtirme iþi genelde adýna “Yazýlým yaþam döngüsü” denilen bir süreç içerisinde yürür. Bilgisayar mühendisleri planlama, analiz, tasarým, kodlama, test/kalite yönetimi ve kurulum gibi aþamalardan oluþan bu sürecin her tarafýnda yer alabilirler.

Bazen aþaðýdaki pozisyonlar için ayrý insanlar çalýþabildiði gibi, bazen de bir kiþi pozisyonlardan birkaçýnýn iþini yapar.

Planlama / Analiz

Ýþ Analisti

Müþterilerin ihtiyacýný anlamaya yönelik çalýþmalar yapan pozisyondur. Þurada anlatýldýðýna göre;

Ýþ analisti, proje yaþam döngüsünün daha çok proje imza öncesi ve proje baþlangýç aþamasýnda rol alýr. Bu kiþiler, yazýlýma özel gereksinimlerden daha çok yapýlacak iþe özel ihtiyaçlarý belirler.

Burada “ihtiyaç” dememin de özel nedeni var. Bunlar müþterinin “ihtiyaç” duyduðu ama hala gereksinime dönüþmemiþ haldedir. Þöyle örnek vereyim: Bir kiþinin arabaya ihtiyacý olur. Ýþ analisti sadece bu kiþinin araba ihtiyacýný ortaya koyar. “Adam araba istiyor” der geçer. Sonra gereksinim analisti, bu kiþinin hangi marka, ne özelliklerde, ne tip arabaya ihtiyacý olduðunu belirleyerek arabanýn “gereksinimlerini” ortaya koyar.

Sistem Analisti

Yazýlým dünyasýnda sistem analistleri, kullanýcýlardan ya da iþ analistlerinden gelen bilgileri kullanarak geliþtirilecek yazýlým veya çözümün yapýsýný belirler. Gerekli iþlem adýmlarýný ve aþamalarýný hazýrlar. Yani sadece ihtiyacý deðil, ihtiyaca göre çözümü üretir.

Sistem analisti genel olarak ise tüm bir bilgi iþlem sistemini tasarlayýp ihtiyaca göre çözümler öneren kiþidir.

Tasarým

Yazýlým Tasarým Uzmaný

Yazýlým tasarýmý, altyapý bileþenleri dahil tüm yazýlým yapýsýný planlamak demek. Büyük yazýlým þirketlerinde sadece yazýlým tasarýmý ile görevli mühendisler bulunur. Bu mühendisler kod yazacak kiþilere ihtiyaçlarý olan yapýyý hazýrlar. Yazýlým geliþtirme iþini hýzlandýran “tasarým þablonlarýný” tavsiye eder. Gerekirse yazýlýmýn bir prototipini hazýrlar.

Yazýlým Modelleme Uzmaný

UML denilen modelleme ve diyagram çizme dilini kullanarak yazýlýmýn iþleyiþini tanýmlar. Hatta programý þekiller (diyagramlar) kullanarak baþtan sona yazarlar. Modellemesi doðru yapýlmýþ bir yazýlýmýn hem geliþtirilmesi, hem bakýmý hem de dokümantasyonu daha kolay olur. Bugün Rational Rose gibi yazýlýmlar kullanýlarak UML diyagramlarý ile kod parçacýklarý kolaylýkla iliþkilendirilebiliyor.

Geliþtirme

Programcý / Geliþtirici / Yazýlým Uzmaný

Programlama dillerini ve teknolojilerini kullanarak ürün geliþtiren kiþidir. Ýþin ve firmanýn büyüklüðüne göre bazen tüm yazýlýmý geliþtirir, bazen sadece kendisine verilmiþ bölümü hazýrlar. Programýn bütününe hakim olmadýðý durumlarda, sistem analistinden ya da proje yöneticisinden destek alýr.

Yazýlým Mühendisi

Yazýlým Mühendisliði aslýnda genel bir kavram. Bir yazýlým mühendisi yazýlýmla ilgili tüm aþamalarda bulunabilecek özelliklere sahip kiþidir. Hem analiz, tasarým hem de kodlama aþamalarýnýn teorisini bilir, uygulamalarýný yapabilir. Yöneticilik pozisyonlarýna gelebilir, altýnda programcý ve analistler çalýþtýrabilir. Sektörde en çok kullanýlan ünvanlardandýr.

Yazýlým Mimarý / Yazýlým Danýþmaný

Yazýlým mimarlarýnýn sorumluluk alanlarý çok geniþ ve zordur. Þurada yazdýðý þekliyle;

Projede kullanýlacak teknolojileri seçerler, proje metodolojisi ve süreçlerinde tavsiyelerde bulunurlar, uygulamanýn genel tasarým ve yapýsýný oluþturur ve korurlar, projenin doðru tanýmlanmasýný saðlarlar, tasarýmýn dökümante edilmesi ve kodlama standartlarýnýn belirlenmesi ile uðraþýrlar. Proje yöneticisine teknik görev tahminlerinde, proje maliyetleri ve yararlarý konusunda yardým ederler. Zor teknik görevlerde programcýlara yol gösterirler. Teknik personel seçimi ve iþe alýmýnda yönetime yardýmcý olurlar.

Her alanda olduðu gibi yazýlým alanýnda da yöneticilik pozisyonlarý var. Genelde geliþtirme ekiplerinde belli bir süre çalýþtýktan sonra yönetim kademelerine geçiþ yapýlýr ya da yeteneðe ve politikalara baðlý olarak deðiþir.

Ekip Lideri / Proje Yöneticisi

Proje Lideri/Yöneticisi yazýlým ekibini bir arada tutan ve zaman çizelgelerine uyulmasý için gerekli motivasyonu saðlayan yöneticidir. Ayrýca yönetim ile proje ekibi arasýndaki bilgi alýþveriþini de saðlar. Bütçe konularýnda düzenlemeler ve maliyet analizlari konusunda yönetim kuruluna bilgi ve tavsiye verir. Yazýlacak modüllerin ve arayüzlerin zorluk derecelerine göre zamanlarýný tayin eder ve proje planý içinde yayýnlar. Diðer proje ekipleri ile bilgi alýþveriþini saðlar ve kontrol altýnda tutar. Projedeki her türlü riski takip eder ve kaynaklarýný ona göre tahsis eder. Riskleri belgeleyerek çözümler için onaya sunar. Onay sonucu çýkan kararlarý iþleyerek sonuçlarý tekrar yönetim kuruluna bildirir. Kaynak

Program Müdürü

Türkiye’de çok fazla kullanýlmayan bu terim karþýlýðýný en fazla Microsoft’ta bulur. Program Müdürleri teknik konulardan daha çok yönetim iþleri ile sorumludur. Proje yöneticilerini koordine edip raporlar alarak projelerin saðlýklý yürümesini saðlarlar ve üst yönetimi bilgilendirirler.

Test / Kalite Güvence

Yazýlýmda kalite güvence, kýsaca yazýlým projesinin standardlara uygunluðunu ve ihtiyaçlarý karþýladýðýný denetleyen çalýþmalar demektir.
Bilgisayar mühendisleri bu alanda da çeþitli görevler alýr.

Yazýlým Kalite Uzmaný

Ýhtiyaçlarýn ve geliþtirilen çözümün doðru belirlenip belirlenmediðini, yazýlýmýn belirli standardlarda olup olmadýðýný denetleyen kiþidir.

Yazýlým tasarýmý ve/veya yazýlým testi konularýnda bilgi sahibidir. Genel kalite yönetim sistemi standartlarýný, uluslararasý yazýlým mühendisliði standartlarýný ya da süreç olgunluk modellerini (CMMI, SPICE, v.b.) bilir. Geliþtirilen yazýlýmýn bunlara uygun olarak yürümesini saðlar.

Test Uzmaný / Test Mühendisi

Test uzmaný/mühendisi yazýlýmýn test edilmesinde fiilen çalýþan kiþidir. Yazýlým hatalarýný tespit etmek, hatalarýn sebepleri ve sonuçlarý ile ilgili süreci yönetmek, test kapsamýnýn oluþturulmasý, test senaryolarýnýn hazýrlanmasý gibi iþleri yürütür.

Birim testi, sistem testi, entegrasyon testi, kullanýcý kabul testleri gibi kavramlarý bilir ve uygular. Sonuçlara göre dokümantasyon hazýrlar.

Test mühendisliði hakkýnda þurada güzel yazýlar var.

Test Yöneticisi

Test yöneticisi test ekiplerini koordine eden, gerekli kalite standartlarýnýn saðlanmasý için çalýþan, yazýlým geliþtirme ve diðer ekiplerle koordinasyonu saðlayan pozisyondadýr.
Yazýlýmýn testi geçip geçemediði, kabul edilmeye hazýr olup olmadýðý kararlarýný verir.
Test sürecini kolaylaþtýracak, otomatize edecek çözümleri uygular.

Konfigürasyon Yöneticisi

Yazýlým geliþtirme süreci boyunca üretilen bütün dokümanlarýn, kodlarýn, web uygulamasý ise web sayfalarýnýn, test scriptlerinin versiyonlarýnýn kontrol edilmesi gerekir. Yazýlým sürümleri içerisinde hangi hatalarýn düzeltildiðinin hangi deðiþikliklerin yapýldýðýnýn izlenmesi gerekir. Ürün haline gelmiþ projelerin satýþa hazýrlanan versiyonlarýnýn belirlenmesi ve yönetilmesi gerekir.

Ýþte konfigürasyon yöneticisinin iþi bunlarý takip etmektir.

Yorum (2)

iPhone Java Web Server

Tarih: 18 Haziran 2008 Kategori: Programlama

iPhone üzerinde JavaYazýlýmcýlarýn bitmeyen meraký ilginç sonuçlar doðuruyor. Þurada gösterdiði ve þurada uzun uzun anlattýðýna göre, iPhone üzerine bir Java sanal makinesi ve web server kurarak, cihazý mobil bir java sunucuna dönüþtürmüþler.

JamVM çok küçük boyutlu ve açýk kaynak kodlu bir Java sanal makinesi. Ufaklýðýna raðmen, çoklu thread yapýsýný ve hatta JNI destekliyor. Jetty de tamamen Java kodlu bir web server. Bu ikisini birleþtirerek iPhone üzerinde java uygulamalar yazýlabilecek bir ortam oluþturmuþlar.

Aslýnda iPhone’un klavyesi bile yok. Ama geniþ bir ekraný ve sanal klavyesi var. Bu da bir programcýyý tetiklemeye yetiyor. :)

iPhone bazý uygulamalarýn bilgilerini SQLite veritabanýnda saklýyor. Proje ile uðraþanlar SQLite için JDBC sürücüsü kullanarak iPhone veritabanýna eriþen bir uygulama da yazmýþlar.

Yorum (1)

iPhone ve mobil Internet

Tarih: 16 Haziran 2008 Kategori: Internet, Programlama, Teknoloji

Cep telefonlarýndan Internet eriþimi yýllardýr var. Ancak ne WAP ekranlarý, ne de Internet Explorer ya da Opera’nýn cep telefonlarýnýn boyuna sýðmaya çalýþan mobil sürümleri kullanýcýlarý tatmin edemedi. Üstelik web teknolojileri almýþ baþýný giderken, hala mobil cihazlardaki yazýlýmlarýn sayfalarý render etme yeteneði yetersiz.

Daha doðrusu öyleydi. iPhone’un çýkýþý kablosuz aðlarýn yaygýnlaþmasý ve yeni web teknolojileriyle birleþince durum deðiþti. Bakýn NetApplications ve Cloud Four tarafýndan yapýlan araþtýrmalarýn istatistikleri ne diyor?
iPhone’da Google

  • iPhone’un pazar payý %1 civarýnda. Symbian iþletim sistemi kullanan telefonlarýn pazar payý ise %40.
  • Bu yýlýn ilk günlerinde iPhone’lardan yapýlan Google aramalarýnýn sayýsý tüm Symbian telefonlarýndan yapýlan aramalarý geçti.
  • iPhone kullanýcýlarýnýn %95′i düzenli olarak Internet’te sörf yapýyor. %51′i Youtube’den video izlemiþ.
  • iPhone’dan yapýlan Google aramalarýnýn sayýsý diðer herhangi bir mobil cihazdan yapýlan aramalarýn 50 katý. Bu sonuç Google’ý o kadar þaþýrtmýþ ki, doðru olduðuna emin olmak için log dosyalarýný yeniden incelemiþler.
  • Google, Yahoo, Quicken gibi büyük þirketler iPhone için özel web sayfalarý ve hizmetleri hayata geçirmiþler.

Üstelik bu sonuçlar iPhone 3G öncesinde böyle.

Mobil Internet kullanýmýnýn artýþý web sitelerinin yapýsýnda mobil kullanýma uygunluk için deðiþiklikler yapmayý gerektiriyor. Mesela Yahoo bir web sitesini hýzlandýrmak için daha az HTTP request yapýlmasýný, verilerin Gzip kullanýlarak sýkýþtýrýlmasýný, Javascript ve CSS’in gömülü deðil harici bir dosyadan çaðýrýlmasýný vb. öneriyor.

Yorum (0)

Google’da proje yönetimi

Tarih: 13 Haziran 2008 Kategori: Programlama, Teknoloji

Bir proje yönetim yazýlýmý olmadan yazýlým projelerini yürütmek çok zordur. Bu yüzden, ticari ya da ücretsiz bir çok proje yönetim yazýlýmý var.

Peki binlerce personel barýndýran Google’da proje yönetimi nasýl yapýlýyor?
Þurada yazýlan bilgilere göre Google bu iþ için bilinen bir yazýlým kullanmýyor. Aksine e-mail gibi basit bir araç kullanýyor.

Her hafta Google çalýþanlarý geçen hafta ne yaptýklarýný ve bu haftaki planlarýný soran otomatik oluþturulmuþ bir e-mail alýyor. Þirket içinde geliþtirilmiþ bir program dönen e-maillerin içindeki bilgileri ayýklýyor ve düzenli bir þekilde saklýyor. Daha sonra, mesela bir sonraki hafta gelen e-mailde “Geçen hafta þu 6 iþi yapacaðýný söylemiþtin. Bitti mi?” gibi ifadeler yer alýyor.

Google zaten uzmanlýk alaný olarak veri ayýklama ve anlamlandýrma iþi ile uðraþtýðýndan bu e-mailleri de düzenli bir yapýda saklayabiliyor. Böylece çalýþanlar bir sürü seçenek iþaretlemeden, kolay ve düz bir þekilde rapor vermiþ oluyor.

Ayrýca bu veriler bir veritabanýnda aranabilir bir þekilde saklanýyor. Yöneticiler projelerin nasýl gittiðini aramalar yaparak görebiliyor. Yine bu veritabanýnda diðer Google çalýþanlarý da aramalar yapýp istedikleri projeye katýlmak üzere baþvurabiliyor.

Yorum (0)

  • Günümüzdeki bilgisayar mühendisliði dersleri yeterince sýký deðil, iyi düþünme ve problem çözmeyi teþvik etmiyor. Aksine derslere katýlýmý kolaylaþtýrmak için içerik daha da basitleþtiriliyor.
  • Baba mý, Java mý

  • Mesela, ilk dil olarak Java’nýn öðretilmesi bu süreci hýzlandýrýyor. Özellikle de grafik arayüzlerinin kullanýmý öðrencileri arka plandaki kaynak kodu anlamadan sürükle býrak kolaycýlýðýna itiyor.
  • “Matematik eðlenceli deðil, derslerdeki oranýný düþürelim. Algoritma zor, gerek yok. Hazýr kütüphaneler zaten var. Sonra insanlar görsel güzelliðe önem veriyor. Komut satýrýný boþverin” anlayýþý yerleþiyor.
  • Eski yazýlýmcýlardan biri yeni mezun olmuþ çalýþanýna hatayý bulmak için “call stack” a bakmasýný söylediðinde “böyle bir þey duymadým” dediðini anlatýyordu.
  • Bir Java kitabý alýyorsunuz, 1200 sayfa. Ama içinde 300 sayfa komutlar kalan 900 sayfa hazýr kütüphaneler… Bu yazýlým mühendisliði deðil, tüketici düzeyi programcýlýk…
  • Eðer öðrenciler okula gelip, Java’yý, hazýr kütüphaneleri ve web programcýlýðýný öðrenip býrakacaklarsa, bu bir iþe yaramaz. Yetenek gerektirmeyen iþleri, daha ucuza çalýþýlan ülkelere kaydýrýrsýnýz, olur biter.
  • Yani, bugünün hazýr kod programcýsý, yarýn pizzacý olur.
  • Yazýlým mühendisi olacak kiþinin zor problemlerle uðraþmaktan zevk almasý, ilginç algoritmalar üretmesi, zekice veri yapýlarý oluþturabilmesi lazým. Problem çözmekten sýkýlan adam bizim aradýðýmýz adam deðil.

Kýsaltarak çevirdiðim bu yazýda, New York Üniversitesi’nin kýdemli profesörlerinden Robert Dewar Amerikan öðrencilerinden bahsediyor. Ancak sanki yazýlanlar bize pek yabancý deðil. Ne dersiniz?

Yorum (8)

JAAS – Java ile kimlik kontrolü

Tarih: 11 Aralık 2007 Kategori: Programlama

Java ile yazdýðýnýz uygulamanýn kaynak kodlarýnda bir satýr bile deðiþtirmeden kullanýcý adý ve þifre kontrolünü, akýllý kart kullanýmýný ya da parmak izi kullanýmýný nasýl eklersiniz?

JAAS (Java Authentication and Authorization Service) paketleri Java’nýn içindeki güvenlik sistemini biraz daha geliþtiriyor ve farklý kaynaklar kullanýlarak güvenlik sistemleri oluþturmayý mümkün hale getiriyor.

Java SDK içindeki java.security.* paketleri bir uygulamanýn güvenliðinin saðlanmasý için temel metotlarý içeriyor. Bunlar arasýnda byte-code doðrulayýcýsý (byte-code verifier), sýnýf yükleyicisi (class loader), güvenlik yöneticisi (security manager), eriþim denetleyicisi (access controller), politikalar (policy) ve koruyucu alanlar (protecting domain) sayýlabilir.

Bunlara ek olarak geniþletme kütüphaneleri (extension API) sayesinde uygulamalarýn güvenliði istenilen seviyelerde arttýrýlabiliyor. JAAS bunlardan birisi…

JAAS temel olarak uygulamaya kimlik bilgisi döndürecek bir LoginContext ve bu kimlik bilgisinin çeþitli yollarla elde edilmesini saðlayan bir LoginModule‘den oluþuyor.

LoginModule sýnýfýndan geniþletilerek oluþturulan modüller kimlik bilgisi için bir veritabanýna baðlanan, Kerberos ya da LDAP dizininden kullanýcý bilgisi alan, akýllý kart okuyucudan veya parmak izi okuyucudan bilgi aktaran bir yapýda tasarlanabilir. Uygulamadan baðýmsýz olarak modüller tasarlamak bize eklenip çýkarýlabilir bir kimlik denetimi yapýsý saðlar.

jaas.jpg

Uygulamamýzda JAAS kullanmak için þöyle bir yol izliyoruz:

Öncelikle bir konfigürasyon dosyasý oluþturuyoruz. Daha sonra uygulamayý çalýþtýrýrken parametre olarak bu dosyayý vereceðiz.

jaas.config

Ornek
{
   DBLoginModule required
        debug="true"
        url="jdbc:mysql://localhost/jaasdb?user=root&password=pass"
        driver="org.gjt.mm.mysql.Driver";
};

Uygulamayý çalýþtýrýrken kullanýmý:

 java -Djava.security.auth.login.config=jaas.config JaasTest 

Burada kullanacaðýmýz modül, bir MySql veritabanýna baðlanarak kullanýcý adý kontrolü yapýyor.

JaasTest uygulamamýza bu modüllere eriþip kullanacak LoginContext’i tanýmlýyoruz.

JaasTest.java

...
/* JAAS sýnýflarý */
import java.security.*;
import javax.security.auth.*;
import javax.security.auth.login.*;

...

        try {
            // LoginModule ile haberleþecek olan sýnýf
            ConsoleCallbackHandler cbh = new ConsoleCallbackHandler();

            LoginContext lc = new LoginContext("Ornek", cbh);

            try {
            	// LoginModule içinde login metodunu kendimize uygun þekilde
            	// tanýmlayacaðýz.
                lc.login();

		// Subject : kimlik denetimi bilgilerini içeren nese
                subject = lc.getSubject();

		// Principal : Yetkili olan kiþiler vb.
                Iterator it = subject.getPrincipals().iterator();

		// Credential : Yetkiler, haklar vb.
                it = subject.getPublicCredentials(Properties.class).iterator();

		...
		// Programýn çalýþma rutinleri

		// Program çýkýþýnda
                lc.logout();
            } catch (LoginException lex)
	    {
              ....
            }

        } catch (Exception ex)
	{
            ...
        }

        System.exit(0);
    }

Temel anlamda kullanýlan sýnýf ve metotlar böyle…
Þimdi MySQL veritabanýna baðlanýp kontrol yapan login modülümüze bakalým.

DBLoginModule.java

...

import java.security.*;
import javax.security.auth.spi.LoginModule;
import javax.security.auth.login.LoginException;
import javax.security.auth.Subject;
import javax.security.auth.callback.*;

...

public class DBLoginModule implements LoginModule
{

    // initial state
    CallbackHandler callbackHandler;
    Subject  subject;

...

    public void initialize(Subject subject, CallbackHandler callbackHandler,
            Map sharedState, Map options)
    {
      // ön iþlemler
    }

    public boolean login() throws LoginException
    {
	// veritabanýna baðlanýp yapýlacak kontroller
	// Buraya akýllý kart, parmak izi okuyucu vb.
	// kontrolleri eklenebilir
    }

    public boolean commit() throws LoginException
    {
       // Otomatikmen çalýþýr
       // login iþlemi doðru yapýldý ise true, deðilse false döndürür
    }

    public boolean abort() throws javax.security.auth.login.LoginException
    {
      // iþlem baþarýsýz  olduðunda burasý çalýþýr
    }

    public boolean logout() throws javax.security.auth.login.LoginException
    {
      // uygulamadan çýkýþta yetkileri temizler
    }
}

Bu örnekte veritabanýna baðlandýk. Sadece LoginModule ve jaas.config dosyalarýnda deðiþiklik yapýlarak istenen kontrol yöntemi uygulanabilir. Böylelikle uygulamamýzýn kaynak koduna müdahale etmeden güvenlik kontrolü ekleyebiliriz.

JAAS konusunda bilgilenmek isteyenler için maalesef Türkçe doküman yok. Ancak Ýngilizce olarak þu bilgilendirici sunum, þu yazý, Sun sitesindeki orijinal kýlavuz faydalý olabilir. Ayrýca veritabanýna baðlanan, akýllý kart okuyucudan bilgi alan, parmak izi okuyucuya baðlanan örnekler incelenebilir.

Yorum (0)

Facebook, -þöhreti, getirdikleri ve hakkýndaki iddialar bir yana- sonuçta bir yazýlým… Bu kadar çok kullanýlan bir uygulamanýn arkaplanýnda ve teknik altyapýsýnda neler var?

Önce birkaç istatistik… (Facebook sayfasýndan)

  • Siteye ortalama her gün 250 bin yeni kayýt oluyor.
  • Ayda ortalama 65 milyar sayfa gösterimi var.
  • Kullanýcýlarýn en az yarýsý her gün giriyor.
  • Dünya’nýn en çok kullanýlan fotoðraf paylaþým uygulamasý… En yakýn üç rakibinin toplamýndan daha fazla resim gösterimi yapýlýyor.
  • Facebook platformunu kullanan 7 binden fazla uygulama yazýlmýþ. Her gün yüzden fazla yeni uygulama ekleniyor.

Teknik altyapýya gelince…

  • Neredeyse tamamen açýk kaynaklý uygulamalar kullanýlmýþ.
  • Yazým dili PHP. Arka planda çalýþan bazý uygulamalar Java, Python ve Perl kullanýyor. Ayrýca C++ uyumlu uygulamalar için gcc ve Boost kütüphaneleri kullanýlmýþ. Yine, c++ uygulamalarýnýn daha saðlýklý çalýþmasý için kendileri phpembed adlý bir kütüphane yazmýþlar.
  • Sunucularda Linux yüklü. Web server olarak Apache kullanýlýyor. Dünyanýn her yerinde hýzlý çalýþmasý için içeriðin çoðunu Akamai sunucularýnda tutuyorlar.
  • Sistemde 2 milyardan fazla fotoðraf dosyasý yüklü. Bunlar diskte yaklaþýk 200 terabyte yer tutuyor. Kullanýcýlar her hafta 80 milyon civarýnda resim yüklüyor. Her fotoðraf için 4 ayrý boy tutulduðundan, bu 300 milyondan fazla resim dosyasý demek. Oluþan yoðunluðu karþýlayabilmek için, yüklenen fotoðraflarý iþleyen bir çok sunucu var. Ayrýca bir grup sunucu, iþlenmiþ fotoðraflarý Akamai’ye gönderiyor. Bazý fotoðraflarý tutmak üzere kendi dosya sunucularý da var.
  • Veritabaný olarak MySQL kullanýlýyor. Birbirine baðlý binlerce MySQL veritabanlarý var.
  • Veritabanýndan bilgi çekmek çok yavaþ olduðu için cache (önbellek) mekanizmasý kullanýlýyor. memcached isimli açýk kaynaklý uygulamayý kendi yazdýklarý kodlarla geliþtirmiþler. (detaylý bilgi)
    • Sitenin neredeyse belkemiði bu uygulama. Kullanýcý profillerini, arkadaþ bilgilerini, uygulamalarý hep önbellekte (RAM’de) tutuyor ve çok hýzlý gelmesini saðlýyorlar.
    • 400′den fazla memcached sunucusu var.
    • 5 Terabyte’dan fazla RAM önbellekleme için kullanýlýyor.
    • memcached sorgularýnýn daha hýzlý çalýþmasý için TCP yerine UDP portunu kullanmýþlar.
    • Ayrýca APC kütüphanesini kullanarak sayfa görüntülemeyi 30 kat hýzlandýrmýþlar.
  • Kendi yazdýklarý site içi arama motorunu kullanýyorlar. Ayda 1 milyara yakýn arama yapýlýyor. Önbellek için 2 terabyte civarýnda RAM ayrýlmýþ. Ortalama sonuç süresi 100 milisaniye civarýnda imiþ.
  • Yazdýklarý kodu yerinde debug etmek için phpsh adlý bir komut satýrý kütüphanesi yazmýþlar. Ana bilgisayara yükleyip baðlandýðýnýzda komut satýrýndan php kodlarý yazýp çýktýsýný görüyorsunuz.
  • Versiyon yönetimi için Subversion ve git kullanýyorlar.

Yani, Facebook olmak istiyorsanýz altyapýnýzý da ona göre kuracaksýnýz.

Yorum (7)

Aslýnda sanallaþtýrmadan bahsederken geleceðin teknolojisi olarak anlatmak yanlýþ. Çünkü neredeyse 40 yýldýr varolan bir terim ve kullaným… Ancak, son dönemde yeni geliþtirilen özellikler ve donaným teknolojileri sayesinde yeniden popüler oldu. Gelecekte özellikle iþ uygulamalarýnda yýldýzý parlak olacak.

Sanallaþtýrma (Virtualization), en basit haliyle, bir bilgisayar üzerinde birden çok iþletim sistemini ayný anda çalýþtýrmak olarak tanýmlanabilir. Örneðin Windows XP yüklü bilgisayarýmýzda, bir pencere içinde Linux çalýþtýrabilir ve tüm donaným özelliklerini Linux içinden de kullanabiliriz.

Sanallaþtýrma iþlemi bir çok amaçla kullanýlýyor. Örnek vermek gerekirse;

  • MS-DOS için yazýlmýþ bir programý yeni bir bilgisayarda program üzerinde deðiþiklik yapmadan çalýþtýrabiliriz.
  • Güçlü bir bilgisayara birden çok iþletim sistemi kurarak donaným maliyetlerinden tasarruf edebiliriz. Bir firmanýn sayfasýnda %70′e kadar maliyet düþüþünden bahsediliyor.
  • Bir uygulamayý sanal iþletim sistemine kurup, daha sonra fiziksel bir deðiþiklik gerektiðinde, örneðin yeni bir ana bilgisayara geçilirken sanal iþletim sistemini durdurup, iþletim sistemi dosyasýný yeni bilgisayara taþýdýkta sonra tekrar çalýþtýrarak kaldýðýmýz yerden devam edebiliriz.

SanallaþtýrmaSanallaþtýrma iþlemi deðiþik seviyelerde yapýlýyor. Mesela platform sanallaþtýrmasý bir bilgisayarda birbirinden baðýmsýz iþletim sistemlerini kaynaklarý paylaþtýrarak çalýþtýrmayý saðlýyor. Çok detaylý bir konu ama þöyle bir örnek verebiliriz: 8 iþlemcili bir bilgisayara 8 ayrý sanal iþletim sistemi kurup her birine ayrý iþlemciler ve RAM kaynaklarý tahsis edilebiliyor.

Son dönemde hosting þirketleri bu yöntemi kullanarak isteyenlere sanal özel sunucu denilen (VPS) bir hizmet sunmaya baþladýlar.

Bu konuda pazarýn güçlü oyuncusu VMvare hakkýnda bir teknik doküman þurada yer alýyor.

Ayrýca Microsoft’un stratejileri ve diðer bir oyuncu Xen hakkýndaki bu sunum teknik anlamda faydalanýlabilecek kaynaklar…

Sektördeki bir çok firma, sanallaþtýrma alanýnda çalýþmalar yapýyor. Neler olup bittiðini anlamak için bu ve bu yazýlarý okuyun. Amerika’daki bir araþtýrma þu anda En büyük 1000 firmada %29 oranýnda sanallaþtýrmaya ilgi duyulduðunu gösteriyor.

Yazý içindeki baðlantýlardan bu konu ile ilgili bir çok detay öðrenilebilir. Gelelim, bir biliþim öðrencisi için gelecekte bu konuda ne gibi fýrsatlar olduðuna…

Donaným, að ve iþletim sistemleri konusunda kariyer yapmak isteyen öðrenciler sanallaþtýrma üzerine geleceklerini kurabilirler. Bu noktada öðrenilecek çok þey var. Öncelikle þu harika makale okunmalý. Daha sonra, makalede geçen ürün ve kavramlar (hypervisor gibi) hakkýnda detaylý bilgiler edinilmeli. Uygulamalý çalýþmalar yapýlmalý. Teknolojik geliþmeler ve etkinlikler yakýndan takip edilmeli.

Yazýlým üzerinde kendini geliþtirecek öðrenciler için de sanallaþtýrma büyük fýrsat… Sanal makineleri yönetecek uygulamalar, sanal makineler arasý haberleþme ve transfer yapacak uygulamalar, yedek alma, web üzerinden sanal makinelere ulaþým uygulamalarý geliþtirilebilecek yazýlýmlardan birkaçý… Bunlarýn bir kýsmý zaten yazýlmýþ durumda ama genelde üst düzey uygulamalar…

Bir diðer alternatif, kendi sanal sisteminde çalýþacak uygulamalar geliþtirmek… Programý tüm özellikleri ile geliþtirip, müþterilere olduðu gibi sanal sistemiyle veriyorsunuz. Dosyayý sanal sunucusunda çalýþtýrdýðýnda hazýr kurulu uygulama olarak kullanabiliyor.

Bunlar þu anki vizyonla üretilmiþ fikirler… Konu ile ilgili teknik bilgiler derinleþtikçe çok uç noktalara ve çözümlere ulaþýlabilir. Bu da size kalmýþ.

Bu makalenin çýkýþ noktasý aslýnda Microsoft’un yeni iþletim sistemi Windows 7′nin çekirdeðini tanýtmasýydý. Windows 7 çekirdek düzeyinde sanallaþtýrma destekleyecek. Bu noktada rakip taraftan RedHat Linux ekibinin teknik þefi gelecek vizyonu özetliyor:
“Varolan modeli deðiþtirmeye çalýþýyoruz. Normalde, iþletim sistemini alýrsýnýz, sanal sunucu programýný alýrsýnýz ve sistemi kurarsýnýz. Halbuki daha entegre sistemler kurulmalý”.
Yani, sanallaþtýrma yeteneklerini içinde barýndýran ve iþlemcilerle en alt düzeyde haberleþerek maksimum performansý saðlayan iþletim sistemleri…
Önümüzdeki yýllar masaüstü sistemlerde sanallaþtýrmanýn parladýðý yýllar olacak. Donaným ve sistem yazýlýmý alanýnda geleceðini kurmak isteyen öðrenciler için sanallaþtýrma uzmanlýðý iyi bir fýrsat…

Yorum (0)

Pownce bir tür web tabanlý paylaþým platformu.

Dosya, link, etkinlik ve mesaj gönderim imkaný sunan servis, oluþturduðunuz sosyal aðýnýz dahilindeki kullanýcýlarla web üzerinden ya da masaüstü uygulamasý ile paylaþým gerçekleþtirebilmenizi saðlýyor.

Pownce’nin programcýsý, programý yazarken yaþadýðý uygulama geliþtirme tecrübelerini paylaþmýþ.

Özetle þöyle diyor:

  1. Teknolojiyi doðru seç. Biz Python üzerinde Djangoyu seçtik. Amazon’un S3 servisini kullandýk. Adobe AIR’i kullandýk. Avantajlarý …..(detaylarý orada okuyun)
  2. Az adamla çok iþ yap. Kýsa bitiþ hedef süreleri koy. Herkes birden fazla rol üstlensin.
  3. Açýk kaynak kodlu uygulamalarý kullan. Baþkalarý bu uygulamalarýn sorunlarýný çözmüþlerdir. Büyük ihtimalle de senden daha akýllýdýrlar.
  4. Tüm bilgi kaynaklarýný kullan. Arkadaþlar, IRC, forum siteleri ne varsa… Toplululuklara üye ol.
  5. Veritabanýna önem ver. Önbellekleme (cache) kullan. Sorgularý kuyruða al, sýrasý geldikçe iþle. Kayýtlarý lazým olduðu sayýda çek, limit koy. Ýndeks kullan. Basitleþtir. Gereksiz sorgularý ele.
  6. Sorunlara hazýr ol. Çabuk cevap ver. Yedek al. Versiyon kontrol sistemleri kullan.
  7. Yazdýðýn uygulamayý kullananlarla iletiþim içinde ol. Kodun durumunu bilsinler. Hata bildirimine açýk ol. Hatalarý düzelt. Verdiðin bitiþ hedeflerine uy.
  8. Büyümeye hazýr ol. Uygulamanýn tasarýmýný buna göre yap. Gerektiðinde büyük deðiþiklikler yap.

Yorum (1)

Tecrübeli bir .Net programcýsýsýnýz.
ASP.Net kullanarak bir sürü uygulama geliþtirdiniz.
ASP.Net’in çalýþma mantýðýný anlamak ve programýnýzý yazabilmek için uykusuz geceler geçirdiniz.
Deðiþik tasarým modelleri öðrendiniz. Programýnýzýn daha anlaþýlýr ve bakýmý kolay olmasý için envai çeþit model denediniz.
Bu iþten para da kazandýnýz.

Neden Ruby On Rails öðrenmek isteyesiniz ki?

Yazý böyle baþlýyor. Senelerini .Net üzerinde program yazarak geçiren bir yazýlýmcýnýn Ruby on Rails öðrenmeye kalkmasý ve sonrasýnda yaþadýklarýný anlatýyor.

Yazýnýn kendisini okuyun. Ýngilizce ama akýcý ve anlaþýlýr.

Okuyamayacaklar için ben baþlýklarý özetleyeyim:

  • Derlemek yok, her þey runtime olarak çalýþýyor.
  • Classlarý geniþletmek çok kolay.
  • Tip tanýmlama zorunluluðu yok.
  • Ajax içine gömülü geliyor.
  • Veritabanýndan bilgi çekmek ya da veritabanýna yazmak için bir sürü model oluþturmaya gerek yok.
  • Transaction yönetimi çok kolay. Veritabanýnýn istediðiniz haline rollback yapabiliyorsunuz.
  • Wrapper class oluþturmak gibi bir dert yok.
  • Her þey nesne, classlarýn kendileri bile…

Yazýnýn sonunda ilginç bir yorum var:

“Being a 5 year .Net guy married (was) to the MS way… I’ve been using Rails extensively for the last 3 months… It’s now incredibly painful to return to c#. I’ve going to begin using IronPython for all my .Net requirements now.”
“5 yýldýr .Net ile neredeyse evli olan ben, 3 aydýr Ruby on Rails kullanýyorum. Þimdi c#’a geri dönmek ne kadar zor geliyor. .Net ile ilgili ihtiyaçlarým için de IronPython kullanacaðým.”

Yorum (1)