Haydi gençler, PostgreSQL stajına

PostgreSQL konusunda ülkemizin en önemli isimlerinden Devrim Gündüz, blogunda yazdığı yazıyla gençleri PostgreSQL konusunda staj yapmaya davet etti. Biz de 4Primes ailesi olarak kendisine elimizden gelen desteği vereceğimizi belirttik. Bu doğrultuda stajyerlerimizden bir tanesi Devrim Gündüz danışmanlığında Ankara ya da Trabzon konumunda PostgreSQL konusunda staj yapıyor olacak. Başvuru için 4Primes Staj API‘yi kullanabilir ya da doğrudan Devrim Gündüz ile iletişime geçebilirsiniz.

2012 yaz dönemi staj başvuruları başladı

2012 yaz dönemi için staj başvurularını almaya başladığımızı bildirmekten büyük bir mutluluk duyuyorum. Geçtiğimiz dönem gerçekleşen staj süreci ile ilgili daha ayrıntılı bilgi için daha önce yazmış olduğum şu yazıyı, geçmiş stajyerlerimizin düşünceleri hakkında fikir sahibi olmak için Merve ÇAVDAR’ın 4Primes stajının bana kazandırdıkları isimli yazısını okuyabilirsiniz.

Bu dönem staj başvuru sürecinde ufak bir değişiklik yaptık ve bir 4Primes Staj API hazırladık. Stajyer adaylarımızdan beklentimiz bu API’yı kullanarak e-posta adresi ve Github kullanıcı adı ile başvuru yapmaları. Başvuruların çok fazla olması durumunda değerlendirmeler adayların Github aktivite durumuna göre yapılacaktır. Başvurular 31 Mayıs 2012 tarihine kadar açık olacaktır.

API dokümantasyonuna buradan ulaşabilirsiniz.

Duyuruyu Merve’nin aşağıdaki sözleri ile bitirmek istiyorum.

4Primes’ta staj, ağır dersleri olan bir eğitim kampına benziyor.

4Primes stajının bana en büyük katkısı olarak; adını dahi bilmediğim
konuları öğrenmem söz konusu olduğunda korkusuzca başlayabilmek
cesareti diyebilirim.

Ofisteki herhangi bir konuşmadan bile öğrendiğim birçok şey oluyor. Kendi işini
gücünü bırakıp stajyerleriyle bu kadar yakından ilgilenen bir ofis
daha olduğunu sanmıyorum. Teşekkürler 4Primes.

DOĞAL DİL İŞLEME

Doğal dil işleme; insana özgü dilleri, çözümleme, anlama, yorumlama, işleyip kullanma, yeniden üretebilme gibi amaçları olan bilgisayar sistemlerinin gerçekleştirilmesini konu alan bir mühendislik alanıdır.

Doğal dil işleme alanındaki temel araştırmalar şunlardır:
- Doğal dillerin işlev ve yapısının daha iyi anlaşılması.
- Bilgisayar-insan iletişimi kolaylaştırmak.
- Bilgisayar ile dil çevirisi yapmak.

Doğal dilin işlenmesi, bilgisayarların ilk oluşumundan itibaren ilgi çekmiştir. Bilgisayarlar tarafından çeviri yapılmasının mümkünlüğü tartışılmaya başlandığı andan itibaren de, bu alanda çalışmaya başlanılmış ve doğal dilin işlenmesinde dilsel kısım önem kazanmıştır.
Doğal dilin işlenmesi, günümüzde de çokça kullanılmasının haricinde, gelecekte de bilgisayarla iletişimin kolaylaşması yönünde araştırmaların katlanarak artacağı öngörülmektedir.

Tarihsel olarak var olan sistemlerde genellikle, “menü”lü, anket biçimli sorgulamalı yapılar kullanılmaktadır. “Menü ” türünde; kullanıcı, sistemde önceden tutulan hazır menü bilgilerini seçmektedir. Anket biçimli sorgulamalı sistemlerde de, önceden belirlenmiş sabit soruların karşılıkları doldurulur. İki durumda da sabit yapılar söz konusu olduğu için, talimatlar; “belleğe kaydetme ve sonuçları gösterme” ile sınırlıdır.
Doğal dil işleme yardımıyla daha hızlı ve doğal iletişim gerçekleştirilebilmektedir. Bu şekilde veritabanına akıllı erişimi gösteren bir örnek şu şekildedir:
Sisteme, “Mühendis Ali beyin iş adresi nedir?” sorusu yöneltilsin. Diyalog ve kontrol birimi cümleyi algılar, doğal dil çözümleyicisi bunu; Ad: Ali, Meslek: mühendis, adres: ? şeklinde yorumlar. Veritabanından geri döndürülen cevap, doğal dil işleyicisinde, “Ali beyin iş adresi: Trabzon.” haline getirildikten sonra kullanıcıya sunulur. Kullanıcı daha sonra, “Onun doğum yeri neresi?” sorusunu yöneltirse, soru sistem tarafından önceki cümle göz önünde bulundurularak yorumlanır ve bu soruya da aynı şekilde cevap aranır. Sorgulama, yorumlayıcı blok tarafından anlaşılmadıysa, veya cevap bulunamadıysa, kullanıcıya, anlaşmazlığın nedeni bildirilir, hatalı kelime girilmişse; sistem kullanıcıya sorular yönelterek, doğru kelimeyi bulmaya çalışır.
Örnekte özeti verilen doğal dil çözümleyicisinin görevleri daha ayrıntılı olarak şu şekildedir:
Cümlelerin doğruluğunu saptar. İmla hatalarını belirler, ve düzenler. Cümle, öğelerine ayrıştırılarak uygun sözdizimsel yapı oluşturulur. Anlamsal ilişkilendirmeler yapılır. Sözdizimsel ve anlamsal sonuçlar birleştirilerek, uygun cevap oluşturulur.
Bütün bu işlevler; biçimbilim (morfoloji), sözdizimsel (sentaktik), anlamsal (semantik), problem analizi (pragmatik) aşamaları ile gerçekleştirilir.

Morfolojik Analiz
Dilin yapı özelliklerini inceler. Temel özellikleri:
Kelimelerin soylarını araştırır; kelimelerin türü belirlenir.
Kelimelerdeki ekleri araştırır; ekler tespit edildiğinde kelime grupları belirlenebilir.
Eklerin türünü araştırır; aynı ek farklı görevlerde kullanılabildiğinden cümleye farklı anlamlar katabilir.

Türkçe Morfolojik Analiz

Üç adımdan oluşur.

1.Kök belirleme: Türkçedeki bütün kelime köklerinin tutulduğu bir sözlük oluşturulur. Bu sözlükte aranacak olan kelimenin öncelikle uzunluğu ele alınır. Kelime sözlükteki uzunluğu aynı olan bütün kelimelerle karşılaştırılır. Kelime bulunursa, ek almamış olarak belirlenir; bulunamadıysa, kelimenin sağından itibaren her seferinde bir harf atılarak oluşan kelime tekrar aratılır. Bu işlem, kök bulununcaya kadar devam eder.

2.Morfolojik Testler: Bahsedilen algoritmayla, her zaman doğru sonuçlar bulunamayabilir. Bu yüzden; sözlükte var olan bir kök bulunduğunda kelimeden atılan kısımların oluşturdu ek, tanımlı bir ek oluşturmuyorsa, yeni kök aranmalıdır. Bunun da haricinde, Türkçenin; hece düşmesi, ünlü yumuşaması, ünlü uyumu gibi kuralları da göz önünde bulundurularak algoritma düzenlenmelidir.

3.Morfolojik Ayrıştırma: Türkçede her bir ekin; diziliş sırası, kelimeye eklenebilme durumları vardır. Bunlar göz önünde bulundurarak morfolojik ayrıştırma ile kelimenin doğruluğu kontrol edilir.

Sentaktik (Sözdizimsel) Analiz

Sentaktik analizin amacı, dilin sözdizimsel anlamdaki kurallarını göz önünde bulundurarak, cümlenin yapısal bir tanımını oluşturabilmektir. Morfolojik analizin sonucunda gelen kelime topluluğu, sentaktik analizle, bu kelimelerin ifade ettiği cümle öğelerini tanımlayan bir yapı haline gelir. Bu cümle öğelerinin (isim grubu, fiil grubu gibi gramer grupları) belirlenmesi, anlamsal analiz için gerekli olacaktır.

Genişletilmiş Geçiş Ağları (Augmented Transition Network)
Cümlelerin sözdizimsel analizinde genellikle Genişletilmiş Geçiş Ağları kullanılır.
Geçiş ağları; durumlar arası geçiş kurallarından oluşmaktadır.
Geçiş ağlarında; başlangıç durumundan başlayarak, son duruma kadar, bir durumdan diğer bir duruma geçebilmek için gerekli şarta bakılır, uygun ise diğer duruma geçilir. Bu şartlar; uygun kelimelerin birleştirilmesi ise, geçişlerdeki kelimelerin birleşmesiyle oluşan metin, ağa verilen metinle aynı olduğunda metin ağ tarafından kabul edilir.
Basit bir Türkçe sözdizimi kurallarını gösteren bir genişletilmiş geçiş ağı örneği:
“Cümle” isimli bir başlangıç durumuna sahip bir geçiş ağı olsun. “Cümle” durumundan bir sonraki duruma geçme şartı, “Özne” başlangıç durumlu başka bir geçiş ağıdır. “Özne” başlangıç durumunun bir sonraki duruma geçme şartı ise kelimenin “isim” olma şartıdır. Bu şart sağlandığında son duruma geçilir ve bu geçiş ağı sonlanır. (Özne->isim) “Özne ” şartı sağlandığında ise başka bir duruma geçilir. Bu durumdan son duruma geçiş için “Yüklem” şartının sağlanması gerekir. “Yüklem” isimli başlangıç durumuna sahip olan başka bir geçiş ağının, bir sonraki duruma geçme şartı ise kelimenin “fiil” türünde olmasıdır. (Yüklem->fiil) Bu şart sağlandığında geçilen durumdan, son duruma geçilme şartı da kelimenin “zaman-eki” almış olmasıdır. (Yüklem->fiil->zaman-eki) Böylece üç adet geçiş ağının sonlanmasıyla, Türkçedeki basit bir cümle yapısını ifade eden bir graf oluşturulmuştur. (Cümle->Özne->Yüklem)

Semantik (Anlamsal) Analiz

Cümlenin genel anlamı, kelimelerin hangi anlamda kullanıldıklarını belirler. Semantik analiz, sentaktik analizle sınıflandırılan kelimelerin anlamlandırılma sürecidir. Semantik analiz ile, birbirine bağlanmış kelimelerin oluşturduğu anlamın karşılığı olan modelleme yapıları oluşturulur.

Pragmatik Analiz
Dilde tam olmayan yapıları anlamlandırmak için yapılan analizdir.

Kaynaklar
Vasif Vagifoğlu NABİYEV – “Yapay Zekâ: Problemler, Yöntemler, Algoritmalar” kitabı
http://tr.wikipedia.org/wiki/Do%C4%9Fal_dil_i%C5%9Fleme

Tags: ,

HTML 5 CANVAS

Bu yazımda Size Canvas elementini biraz daha anlatıp,bu element ile neler yapabileceklerimiz konusunda ufkumuzu açmaya çalışacağım.

HTML5 ile Canvas elementi oluşturduğunuzda içine grafik çizilmeye uygun ortam oluşturmuş oluruz. Çizim işini için HTML 5 den faydalanamıyoruz tabiki.Çizim işleri için en uygun dil javascripttir ve bu yazıda vereceğim örneklerde javascript kodları üzerinden anlatmaya çalışacağım.

İlk önce çizim yapacağımız zemini hazırlayalım.Bunun için tanımlayacağımız kod parçası ile bir Canvas elementi tanımlayacağız.

<canvas id=”4primes” width=”300″ height=”300″></canvas>

Bu kod parçası ile 300 pixele 300 pixellik bir alan tanımlamış olduk.Id olarak “4primes” ismini verdik.Bu verdiğimiz Id bizim kullandığımız dil içinde çağırmamız için kullanılacaktır.HTML 5 bize bu kadar hizmet vermektedir.Canvas elementi içinde yapacağımız işlemler için javascript kullanacağız.

<canvas id=”4primes”></canvas>

Yukarıdaki şekilde de Canvas elementini oluşturabiliriz.Yalnız bu kodda genişlik ve yükseklik tanımlanmadığı için default olarak 300 pixele 150 pixel olarak atanır.

Şimdi ise bu oluşturduğumuz Canvas elementine nasıl erişip çağıracağımıza bakalım.Çağırma kısmını da javascript kodu olarak veriyoruz.

var canvas=document.getElementById(“4primes”);

Daha sonra içeriği(context) oluşturmak için şu kodu ekliyoruz.

var ctx = canvas.getContext(’2d’);

Şimdide hepsini bir araya getirip kodumuzu yazarsak;

var canvas=document.GetElementById(‘4primes’);
if canvas(get.Context){
var ctx=canvas.GetContext(’2d’);
//Çizim kodları buraya yazılır.
} else {

//Bir önceki yazımda da paylaştığım gibi her broser HTML 5 Canvas elementine destek //vermiyor o zaman kullanıcıya buradan mesaj gönderebiliriz.”Mesela Broser desteği yoktur”.
 }

Şimdi de çizim konusunda bilgi verelim.Örneklerle de pekiştirelim.

İlk önce Canvas elementimizi çağıralım.Adı 4primes olduğunu unutmayalım.

var c=document.getElementById(“4prime”);

Contexti tanımlayalım.

var cxt=c.getContext(“2d”);

Sizlere anlatmak için aldığım örnekte kırmızı renk kullanılmış.Bunun için kırmızı rengin kodunu kullanarak kırmızıya boyama yapalım.

cxt.fillStyle=”#FF0000″;

Sıra asıl çizim koduna geldi. Cxt.fillRect( ) fonksiyonunu kullancağız ve 4 tane değişken vermemiz gereklidir.İlk veri X koordinatı ikinci veri Y koordinatı son iki verimizde en ve boyudur.

cxt.fillRect(0,0,300 ,150);

Yukarıdaki koduda ekledikten sonra ilk kodumuzu yazmış olduk.Peki ne oluşturduk ?

4prime4
Bu yapıyı oluşturduktan sonra birazda hazır şekillerden kopup çizgiler üzerinde kodlama yapalım.

var c=document.getElementById(“4prime”);
var cxt=c.getContext(“2d”);

Yukarıdaki yapıyı zaten biliyoruz.4prime’ı çağırıp contextini tanımladım.Eğer çizgi çizeceksek ilk önce bir başlangıç noktamız olmalı.

cxt.moveTo(20,20);

Bu başlangıç noktasını verdikten sonra bitiş noktasını da belirtmemiz lazımki çizgimizi oluşturabilelim.

cxt.lineTo(250,200);

Eklediğimiz sadece bu iki kodla (10,10) noktasından başlayıp (150,50) noktasında sonlanan bir çizgi çizmiş olduk.
Bir de bu kısmı ekleyelim bakalım ne olacak?

cxt.lineTo(10,200);

Çizimlerin gösterilebilmesi için asağıdaki stroke fonksiyonunuda ekliyoruz.

cxt.stroke();

Şimdi Ne yaptığımzı görelim;

4primes 5

Şimdi ise bir de daire çizelim.Rengi kırmızı olsun.

var c=document.getElementById(“4prime”);
var cxt=c.getContext(“2d”);
cxt.fillStyle=”#FF0000″;

Yukarıdaki kısımlara daha önceden de değindik.

cxt.beginPath();
cxt.arc(70,18,15,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();

İlk önce bir path açtık.Sonra ARC fonksiyonunu kullandık.Arc fonksiyonu ilk aldığı iki değer çizilecek çemberin X ve Y koordinatlarıdır.3.parametre ise yarıçapdır.4. ve 5. Parametre ise başlangıç ve bitiş noktalarıdır.Son parametremiz Saat yönünün tersinde çizim yapmak için true olarak seçilmiştir.
ClosePath ile çizimizi bitirdiğimizi belirttik ve fill fonksiyonu ile daha önceden belirttiğimiz kırmızı renge boyadık.
4primes6

Yazıyı çok fazla uzatmadan gradiant örneğine de değinip bitirmek istiyorum.

4primes7
Kodlanmasını aşağıda verdim.

var c=document.getElementById(“4prime”);
var cxt=c.getContext(“2d”);

createLinearGradient komutu ile (0 0) başlayıp (175,50)’de sonlanan bir yapı tanımladık.

var grd=cxt.createLinearGradient(0,0,175,50);

Başlangıç ve bitiş renklerimizi belirledik.

grd.addColorStop(0,”#FF0000″);//kırmızı
grd.addColorStop(1,”#00FF00″);//yeşil

Daha sonra bu yapının içini bu renklerle boyadık.

cxt.fillStyle=grd;
cxt.fillRect(0,0,175,50);

HTML 5 Canvas’ın nasıl kullanılması gerektiği ve temel olarak neler yapabileceğimiz konusunda bu yazımda size bilgi vermeye çalıştım.

KAYNAKLAR
http://www.libersite.com/?p=3543
http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_canvas_gradient
http://www.oktayelipek.com.tr/css3-ile-daire-nasil-cizilir
http://www.html5canvastutorials.com/tutorials/html5-canvas-arcs/
http://www.libersite.com/?p=3543
http://www.openspc2.org/HTML/en/appendix/canvas_param/canvas/createLinearGradient/index.html

Tags: ,

HTML 5

Bu yazıda HTML 5 ve HTML 5 ile gelen Canvas özelliğini sizin için inceleyeceğim.HTML 5, HTML dilinin şu andaki en son sürümüdür. İlk kez 22 Ocak 2008 de duyurulmuştu.

HTML 5 Internet Explorer, Mozilla Firefox ve Opera tarayıcılarının güncel sürümleri tarafından kısmen desteklenmektedir, Google Chrome ve Safari tarayıcılarının güncel sürümleri üzerinde, deneme aşamasında da olsa çok daha iyi bir şekilde çalışmaktadır. Günümüzde kullanılan HTML 4.1 sürümü, CSS desteğiyle ne kadar düzenli ve sağlam bir yapıda kodlarsak kodlayalım, yine de fazladan yazılan kodlar işlevselliği bozmaktadır. Bu yüzden HTML 5 bu ihtiyaçları karşılamak adına geliştirilmeye başlanmıştır.

HTML5 kullanmak aynı zamanda UI (kullanıcı arayüzü) mühendislerinin ve back end (sunucu uygulama) geliştiricilerinin sadece tek codebase kullanımından yararlanabiliyor olmaları demektir. Yapının temelleri aynı kalsa da, her platforma entegre edilmiş back end layerlar ve görüntüler olabilecekti.Bu, birbirine bağlı bir ürün tecrübesinin yaratılmasına yardım eden ürün çizgisinin karşısında, gelişimin yayılma sürecini hızlandırmaktadır.

Audio veya video etiketleri gibi bir çok spesifik yönleriyle birlikte kullanılması gereken HTML 5, sadece bir biçimleme dili olmasından ziyade web aplikasyonları yaratmakta da kullanılabilmektedir. CSS3 ve JS ile birleştirmek çok daha güçlü uyumlu ve sağlam uygulamaları mümkün kılmaktadır. Uygulamalar bu sayede binlerce cihazda bir çok ihtimale uygun şekilde kullanılabilmektedir. Özellikle de iliştirilmiş platformlar ve bağlanmış cihazlarla çok daha güçlü olacaklardır.

Peki HTML 4’den sonra gelen yenilikler nelerdi ?

HTML 5 ile birlikte pek çok yenilik göze çarpıyor. Eklenen bazı yeni etiketlere gözatmak gerekirse;

<canvas>    : Sayfada bir çizim alanı oluşturur. İlgili alana Javascript kullanarak çizim yapılabilir.(Bu etiket üzerine daha da ayrıntılı bilgi vereceğiz )
<audio>: Sayfaya ses oynatıcı bir modül ekler.
<video> : Video oynatıcı bir modül ekler.
<progress> : İşlem süreci göstergesi ekler.
<caption> : Başlık olarak düşünülen metinleri düzenler.
<header> : Sitenin başlık ve açıklama içeriğini alır.
<nav> : Menüleri ve bir takım zaruri işlevleri içine alır.
<footer> : Sitelerin en alt kısmını içine alır.
<section> : Sitelerin ana içerik kısmını içine alır.
<aside> : Ana içerikte ayrı yazılan kısımdır.
<article> : Makale, deneme tarzı yazıları kapsar.
<embed> : Dışarıdan eklenen componentler için kullanılır. (Örn : .swf uzantılı dosyalar)
<details> : Detay bilgisi içerir.
<summary> : Yazının başlığını belirler.
<time> : Tarih, saat verilerini kapsar.
<mark> : Yazı içerisinde özellikle üstünde durulan kelimeleri belirler.
<fig>
<figure>
<hgroup>

HTML 4 teki bazı etiketler ise aynı işlevleri CSS kullanılarak yapılabildiği için kaldırıldı. Bunlara örnek olarak;

<center>
<font>

etiketlerini verebiliriz.

Ayrıca HTML 5 söz dizimi artık *SGML tabanlı değil. Buna sebep olarak SGML nin programcıyı kısıtlıyor olması gösteriliyor.
*SGML:html ve xml’i içeren bir metalanguage olarak tanımlanabilir. SGML metin belgelerini ve diğer veri formlarını çeşitli ortamlarda kullanabilmek amacıyla yapılarını kodlamak için kullanılan kapsamlı bir sistemdir.

HMTL 5 CANVAS

Canvas elementi javascript ile web sayfalarında grafik çizmek için kullanılır. Canvas, her pikselini kontrol edebileceğiniz dikdörtgen bir alan ya da tuval olarak ifade edilebilir

Canvas, dinamik olarak 2D fotolar yapmamızı sağlayan HTML 5 elementidir. Daha önceki sürümlerde bulunmayan canvas, HTML 5 ile web teknolojilerine yeni bir soluk getirmiştir. Canvas’ın çalışma prensipi tam olarak olmasa bile genelde JavaScripte üzerine kuruludur. JavaScript ile birlikte çalıştıkları zaman Kaliteli işler ortaya çıkabilir.

<canvas id="myCanvas" width="200" height="100">
Tarayıcınız Canvas elementini desteklememektedir.
</canvas>

Yukarıdaki kullanım genel kullanım şeklidir
Elementin içine yazdığımız mesaj canvas elementini desteklemeyen tarayıcılar içindir. Eğer kullanılan tarayıcı bu elementi desteklemiyorsa ziyaretçiye bu mesaj gösterilecektir.
Canvas elementi ile çizim yapabilmek için javascript kullanmak gerekmektedir.

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(10,5,180,90);
</script>
var c=document.getElementById("Canvas");

Yukarıdaki javascript kodu ile, kodda id (bizim örneğimizdeki id : Canvas) kullanarak çizimin sayfadaki hangi element için üretildiğini belitmiş oluruz.

var cxt=c.getContext("2d");

Bu kod ile 2 boyutlu bir çizim alanı tanımlamış olduk.

cxt.fillStyle="#FF0000";

fillStyle metodu ile renk tanımlaması yaptık.

cxt.fillRect(10,5,180,90);

Formatı : [.fillRect(x,y,width,height)] Burada x ve y çizimin koordinatlarını, width, height ise çizimin ebatlarını ifade eder.

Genel olarak HTML 5 VE Canvas’ı bu şekilde özetleyebiliriz.

Kaynaklar
http://www.libersite.com/?p=3543
http://www.whosayin.com/y/html-5/
http://www.whosayin.com/y/html-5-ile-html-4-arasindaki-farklar/
http://www.whosayin.com/y/html-5-canvas-ornekleri/
http://tr.wikipedia.org/wiki/HTML5
http://en.wikipedia.org/wiki/Canvas_element

Tags: ,

DIV Yapısı ve Kullanımı

Bu yazıda staj projemde kullanmam gereken Div yapısından bahsetmek istedim.

Html’de tasarımlarımızı sağa, sola hizalamak, nesneleri ve yazıları dilediğimiz koordinatlara yerleştirmek için kullanılan ve az kod ihtiva etmesi ve Google tarafından tavsiye edilmesi ve sevilmesi nedeniyle son zamanlarda gündeme gelen bir kodlama biçimidir.

Css dediğimiz stil kodlamasıyla tam uyumlu olması nedeniyle de table yani hücre sistemlerinin yerini hızla almakta olan alternatif bir tag’ dir.Kullanımı eski tip table kullanımına göre daha fazla bilgi ve tecrübe gerektirmesi nedeniyle çoğu web tasarımcılara zor geldiğinden div kullanımı çok fazla yaygınlaşamamaktadır.

İlk önce divlerin özelliklerinden bahsedeceğim.Daha sonra örnekler üzerinden devam ederiz.

WIDTH (Genişlik) : Width özelliği DIV’imizin ve daha başka bir çok etiketin genişliğini belirleyen özelliktir. Genişliği biz px (pixel) ve % olarak kullanacağız.

#ust  {
        background:#CCC;
        height:100px;
        width: 700px;
      }

FLOAT : Float özelliği DIV’imizin yerleşimi konusunda yetkilidir.Yukarıda verdiğim Width örneğinde verdiğim gibi eğer Float kullanmazsak sola yaslı şekilde karşımıza çıkacaktır.Sağa yaslı ve ortalı olması durumlarını da görelim.

SAĞA YASLI

#ust  {
       float:right;
       background:#CCC;
       height:100px;
       width: 700px;
      }

ORTALI
DIV’imizi ortalamak istediğimizde FLOAT tek başına yeterli olmayacak ve MARGIN özelliğine de ihtiyaç duyacağız.

MARGIN
MARGIN aslında, DIV’imizin etrafındaki diğer nesneleri kendisinden ne kadar uzağı iteceğini gösterir. Onlarla arasında kalacak mesafeyi belirler. Bu uzaklaştırma mesafelerini margin-top, margin-right, margin-bottom, margin-left şeklinde tek tek verebileceğimiz gibi tek bir magrin özelliği içinde aralarında boşluk bırakarak her kenar için tek seferde de verebiliriz. Bu durumda değerler üsten başlayarak saat yönünde ilerler ve sırayla tüm kenarların en yakın nesneyle arasındaki mesafeyi tanımlar (üst, sağ, alt, sol). Şimdilik bu özelliklerden bahsetmekle yetinip MARGIN özelliğini DIV’imizi ortalamak için nasıl kullandığımıza bakalım.

#ust  {
       float: none;
       margin:auto;
       background:#CCC;
       height:100px;
       width: 700px;
      }

Kodlamamızı bu şekilde yaparak Div’imizi ortalamayı başardık. Aslında CSS kodumuzdan Float özelliğini tamamen kaldırsanız da MARGIN bu haliyle ortalama için yeterli olacaktır. Ancak şu anda tek Div’le çalıştığımızı unutmayın. Bu yüzden Float özelliği önemsiz gibi görünmesin.
Şimdi bu bilgiler ile neler yapabileceğimize gelelim.

4primes1

Yukarıdaki örnekteki gibi 3 tane div panelini yanyana getirmek için yazmamız gereken css kodu;

#div1  {
        float: right;
        background: #edeaea;
        height: 100px;
        width: 150px;
       }
#div2  {
        float: right;
        margin:auto;
        background: #edeaea;
        height: 300px;
        width: 150px;
       }
#div3  {
        float: right;
        background: #edeaea;
        height: 200px;
        width: 150px;
       }

HTML kodlarımız ise;

<div>DIV1</div>
<div>DIV2</div>
<div>DIV3</div>

Yukarıdaki verdiğim kod parçası aynı zamanda sağa dayalı yazmaktadır.
Şimdi ise Sola dayalı ve altalta dizilmiş divleri kodyalalım.Aşağıda css kodunu verdik.HTML kodu için bir üstteki örneğin HTML kodunu kullanabiliriz.

#div1  {
        float: none;
        height: 100px;
        width: 300px;
       }
#div2  {
        float: none;
        height: 300px;
        width: 300px;
       }
#div3  {
        float: none;
        height: 200px;
        width: 300px;
       }

Floatları none olarak atadığımızda sola dayalı olarak yazmaya başlar ve yeni gelen divleri altalta ekler.
Yukarıdaki kodladığımız şekilde eğer yine altalta fakat ortalı bir şekilde yazmak istersek üsteki Margin özelliğinde tanımladığım gibi yukarıdaki örnekteki her Div css kod içine;

margin: auto;

eklersek ortalamış oluruz.
Bir üsteki örnekte değinmediğimiz birde sağa dayalı olma koşulu kalmıştı.Bu yapıyıda sağlamak için yukarıdaki şekilde tanımladığımız örnek içinde;

margin: auto 0 auto auto;

Bu şekilde eklersek sağa dayalı ve altalta dizilmiz div yapısını elde ederiz.
Şimdi ise karma yapıda bir örnek vermek istiyorum.Bu örnek ile pek çok noktaya değineceğiz.

4primes2

İlk önce HTML kodlamasına bakalım.

<div id="sayfa">
<div id="ustAlan">
...// kodlama yapacağımız alan
</div>
<div id="icerik">
...
</div>
<div id="anaMenu">
...
</div>
<div id="altAlan">
...
</div>
</div>

Şimdi de css kodlarını verelim.

#sayfa {
        width:768px;
       }
#ustAlan{
         width: 768px;
        }
#icerik{
    	float: right;
    	width: 568px;
       }
#anaMenu {
    	  float: left;
    	  width: 200px;
         }
#altAlan{
    	 width: 768px;
    	 clear: both;
        }

Bu kodu yazdıktan sonra sayfamız başta gördüğümüz şekildeki duruma gelmiş bulunmaktadır. Burada yazdığımız kodda “icerik” alanının sağa, “anaMenu” alanının sola yerleşmesi için genişlik değeri ve float değerleri tanınmladık. Ayrıca altAlan‘ın bu iki bölümün altında kalması için clear:both tanımlaması yapılmıştır.

Şimdide bence en güzel özelliğe deyineyim.Likit sayfalar;Likit Sayfalarda Sabit Genişlikteki Sayfalar’dan farklı olarak genişlik değerleri piksel(px) olarak değil yüzde(%) olarak verilmesidir. Bu tür sayfalarda sayfa genişliği web tarayıcısının boyutu ile bağlantılıdır. Web tarayıcısının genişliği arttırıldığında sayfa genişliği artacak, web tarayıcısının genişliği azaltıldığında sayfa genişli azalacaktır. HTML kodunda değişiklik yoktur.Css kodunu yazarsak:

#sayfa {
        width:83%;
        margin:0 auto;
       }
#ustAlan {
          width: 100%;
         }
#anaMenu {
          float: left;
          width: 30%;
         }
#icerik {
         float: right;
         width: 70%;
        }
#altAlan {
           width: 100%;
           clear: both;
         }

En son olarak bir çok sitede kullanılan 3 kolonlu yapıda gösterip bitireceğim.Buradaki kodlamadı tek farklılık son eklenen bölümü de kapsayacak bir kapsayici bir alan eklenmesidir.

4primes3

HTML kodu;

<div id="sayfa">
<div id="ustAlan">
...
</div>
<div id="KapsayiciAlan">
<div id="icerik">
...
</div>
<div id="BannerAlani">
...
</div>
</div>
<div id="anaMenu">
...
</div>
<div id="altAlan">
...
</div>
</div>

Css kod ise;

#sayfa {
        width:768px;
         margin:0 auto;
       }
#ustAlan {
          width:768px;
         }
#anaMenu {
           float: left;
           width: 200px;
         }
#KapsayiciAlan {
                float: right;
                width: 568px;
               }
#icerik {
         float: left;
         width: 368px;
        }
#BannerAlani {
              float: right;
              width: 200px;
             }
#altAlan {
           width:768px;
           clear:both;
         }

Yukarıdaki kodlama ben pixel değerlerini kullandım.İstenirse % şeklinde de kodlanabilir.

KAYNAKLAR;
http://www.alicinki.com/?p=6
http://www.fatihhayrioglu.com/css-ile-web-sayfasi-olusturma/

Tags: , ,

Yazılımın Tarihçesi 2

1980-2000 tarihleri arasında, yazılımın tarihi ve ilkleri:

1981 : Microsoft DOS’u (Disk Operating System) satın alarak, MS-DOS olarak yenilendi.
1982 : Sun Microsystems bilgisayar şirketi kuruldu.
1982 : Simple Mail Transfer Protocol (SMTP), e-posta için Internet standardı geliştirildi.
1982 : Scott Fahlman ilk gülücük ifadesini kullandı: “ : -)”
1983 : Alan adı sistemi (DNS: Domain Name System) yaratıldı.
1983 : Richard Stallman, GNU (GNU’s Not Unix) özgür işletim sistemini duyurdu.
1984 : Cisco Systems bilgisayar şirketi kuruldu.
1984 : Apple, ilk Macintosh 1.0’ı duyurdu.
1984 : Fred Cohen, ilk bilgisayar virüsünü yaptı.
1985 : C++; şimdiki zamanın en popüler dillerinden biri olan, nesne yönelimli yüksek seviye programlama dili geliştirildi.
1985 : Symbolics.com, ilk .com alan adı olarak kaydedildi.
1988 : IRC(Internet Relay Chat), ilk sohbet programı geliştirildi.
1989 : İsviçre CERN laboratuarında www (World Wide Web), internet üzerinden bağlanılan, birbirine bağlı sayfaları adreslemeye yarayan bu sistem geliştirildi.
1990 : ARPAnet kapandı.
1991 : Linux Kernel; özgür ve açık kaynak kodlu yazılımın en önemlilerinden olan bu işletim sistemi, Linus Torvalds tarafından geliştirildi.
1993 : Mosaic, web tarayıcısı yayınlandı.
1993 : The Virtual Journal, ilk web dergisi yayınlandı.
1993 : MP3 ses formatı yayınlandı.
1993 : Richard Stallman’ın kurucusu olduğu, The FreeBSD(Berkeley Systems Distribution) Project, ilk özgür ve açık kaynak kodlu işletim sistemi FreeBSD 1’i çıkardı.
1995 : Java nesne yönelimli programlama dili, Sun Microsystems’ın Java Software Platform’unun bir bileşeni olarak yayınlandı. Şuanda kullanımda olan en popüler programlama dillerinden biridir.
1995 : Internet Explorer, web tarayıcısı yayınlandı.
1995 : Windows 95, işletim sistemi yayınlandı.
1995 : JavaScript, nesne yönelimli betik dili Brendon Eich tarafından geliştirildi. Şimdi, web üzerinde çalışan en popüler programlama dillerinden biri haline gelmiştir.
1996 : ICQ (“I Seek You” cümlesinin söylenişini ve aynı zamanda; Mors alfabesinde de “Calling any Station” anlamındaki CQ’yu ifade eder.) sohbet programı geliştirildi.
1996 : Hotmail, web e-posta servisi kuruldu.
1998 : CIH, sistem sürücülerine etki eden, en çok zararı verebilmiş virüslerden biri olan bu bilgisayar virüsü, Chen Ing Hau tarafından yazıldı.
1999 : Melissa, internet e-posta sistemlerine saldıran bu virüs David L. Smith tarafından yazıldı.

Kaynaklar:
http://www.computerhistory.org/timeline/?category=sl
http://en.wikipedia.org/wiki/Timeline_of_computing_1980%E2%80%931989
http://en.wikipedia.org/wiki/Timeline_of_computing_1990%E2%80%931999

Tags: ,

Yazılımın Tarihçesi 1

1950-1980 tarihleri arasında, yazılımın tarihi ve ilkleri:

1954 : FORTRAN (FORmula TRANslation) ilk yüksek seviye programlama dili, John Backus tarafından IBM’de geliştirilmeye başlandı. (1957’de bitirildi.) Hala bilimsel programlama için kullanılır.
1958 : LISP (LISt Processing),yorumlanabilir programlama dili, John McCarthy tarafından Massachusetts Institute of Technology (MIT)’de geliştirilmeye başlandı. Yapay zeka programları yazmak için geliştirilmiş ilk dildir. (1960’da bitirildi.)
1959 : COBOL (COmmon Business-Orientated Language), mümkün olduğunca; makineden bağımsız, okunabilirliği kolay olması hedeflenen, iş uygulamaları için yapılması amaçlanan bu programlama dili geliştirilmeye başlandı.
1960 : ALGOL (ALGOrithmic Language), ilk yordamsal ve yapısal programlama dili, Amerika ve Avrupa’nın evrensel programlama dilini oluşturmak amacıyla geliştirilmeye başlandı.
1960 : QuickSort algoritması, Charles Antony Richard Hoare tarafından geliştirildi. Bu algoritma hala en çok kullanılan sıralama algoritmalarından biridir.
1961 : APL (A Programming Language), matematiksel gösterime dayalı programlama dili, Kenneth Iverson tarafından IBM’de geliştirildi.
1962 : Spacewar!, ilk bilgisayar oyunu, MIT öğrencilerinden Steve Russell tarafından yazıldı.
1963 : ASCII ( American Standard Code for Information Interchange) karakter kodlama tablosu, bilgisayarların diğer bilgisayar ve programlarla veri değiş tokuşu yapması amacıyla oluşturuldu.
1965 : BASIC (Beginners All Purpose Symbolic Instruction Code), Thomas Kurtz ve John Kemeny tarafından, eğitim amaçlı bu öğretici programlama dili oluşturuldu.
1965 : Fuzzy Logic (Bulanık Mantık), Lofti Zadeh tarafından oluşturuldu.
1967 : PASCAL programlama dili, Niklaus Wirth tarafından geliştirilmeye başlandı. (1971’de bitirildi.) ALGOL’u temel alarak, kolay öğrenmek amacıyla birçok özellik içerecek şekilde geliştirildi.
1968 : Intel, Robert Noyce ve birkaç arkadaşı tarafından kuruldu.
1968 : LOGO, programlama dili Seymour Papert tarafından MIT’te geliştirildi.
1969 : B, programlama dili Bell laboratuarlarında geliştirildi.
1969 : ARPAnet (Advanced Research Project Agency: ARPA), birçok üniversiteyi birbirine bağlayan yüksek hızlı bu ağ geliştirilmeye başlandı. (1972’de kuruldu.)
1969 : UNIX, çok kullanıcılı, çok görevli yapıyı destekleyen işletim sistemi, Ken Thompson ve Dennis Ritchie tarafından Bell Laboratuarlarında geliştirilmeye başlandı. (1971’de yayınlandı.)
1970 : Forth, programlama dili geliştirildi.
1971 : Email (Elektronik Posta), göndermek için ilk program Ray Tomlinson tarafından ARPAnet’te geliştirildi. Aynı zamanda; Ray Tomlinson, e-posta adresleri için, ilk “@” işaretini kullandı.
1972 : C programlama dili, Dennis Ritchie tarafından, Bell Laboratuarlarında geliştirildi. Hala en çok kullanılan dillerden biridir. (B programlama dilinden sonra daha gelişmiş olarak çıkan bu yeni dil; ‘C’ olarak adlandırıldı.)
1972 : Dennis Ritchie ve Brian Kernighan, C’yi kullanarak UNIX’i tekrar yazdılar.
1973 : Progol, programlama dili, Alain Colmerauer tarafından Fransa’da geliştirildi.
1973 : FTP (File Transfer Protocol); bir veri yığınının, bir uç aygıttan diğerine iletimi için kullanılan bu protokol geliştirildi.
1974 : Stephen Bourne, ilk UNIX komut yorumlayıcı yazılım; Bourne Shell’i geliştirdi.
1975 : Bill Gates ve Paul Allen tarafından Microsoft oluşturuldu.
1976 : Apple Bilgisayar, Steve Wozniak ve Steve Jobs tarafından kuruldu.
1979 : Ada (Adı, Lady Ada Lovelace; dünyanın ilk bilgisayar programcısına atfen verilmiştir.); nesne yönelimli yüksek seviye programlama dili, Jean Ichbiah ve onun ekibi tarafından tanıtıldı.

Kaynaklar:
http://trillian.randomstuff.org.uk/~stephen/history/timeline-LANG.html
http://en.wikipedia.org/wiki/Timeline_of_computing_1950%E2%80%931979
http://www.computerhistory.org/timeline/?category=sl

Tags: ,

C Tarihçesi

C temelde iki eski dile dayanır: BCPL ve B. BCPL, 1967 yılında Martin Richards tarafından işletim sistemleri ve derleyiciler yazmak için geliştirilmiştir. Ken Thompson, BCPL çalışmalarının ardından kendi yarattığı dil olan B’yi geliştirmiştir ve B ile UNIX’in ilk sürümleri üzerinde, Bell laboratuvarlarında, DEC PDP-7 bilgisayarı ile çalışmıştır. Bu iki dilde de, her veri hafızada bir “word”(16 bit) alan kaplamaktaydı ve değişkenlerin yazımı programcıya ağır bir yük getiriyordu.
C dili, 1972’de bu çalışmaların izinde yine Bell Laboratuarlarında Dennis Ritchie tarafından DEC PDP-11 bilgisayarında geliştirilmiştir. C, BCPL ve B dillerinin önemli birçok kavramını kullanırken veri yazımı ve daha bir çok güçlü özellikleri de içerir. C, UNIX’in geliştirilmesinde kullanılmasıyla ün kazanmıştır. C dilinin adı B dilinden türemesinden gelir.(B dilinin isminin nereden geldiği hakkında kesin bir bilgi olmamakla çeşitli söylentiler vardır.)
C’nin asıl yaygınlaşması 1978 yılında Kernighan ve Ritchie tarafından yazılan “The C Programming Language” adlı kitabın yayınlanmasından sonra olur. Bu kitap, ”How to Program C” kitabının yazarlarına göre gelmiş geçmiş en iyi bilgisayar kitabıdır.(DEITEL & DEITEL)
C’nin değişik tipte bilgisayarlarda(donanım platformlarında) yayılması, birbirine benzer ama genellikle uyumsuz birçok çeşidinin ortaya çıkmasına sebep olmuştur. Bu değişik platformlarda çalışacak kodlar yazan program geliştiricileri için ciddi bir problem haline gelmişti. Bu sebeplerden dolayı, C ‘nin standart bir sürümüne ihtiyaç duyulduğu anlaşıldı. 1983 yılında American National Standarts Committee’nin bilgisayar ve bilgi işlem komitesinde (X3), X3J11 adı altında teknik bir komite oluşturuldu ve C’nin sistem bağımsız tanımı yapıldı. 1989 yılında bu standart onaylandı ve 1999 yılında da tekrar gözden geçirildi.
Gayri resmi Kernighan ve Ritchie Standartının değişiklikleri:
1- struct veri tipi eklendi
2- long int veri tipi eklendi
3- unsigned int veri tipi eklendi
4- =+ operatörü += olarak değiştirildi (çünkü =+ C’nin leksikal ayrıştırıcısının kafasını karıştırıyordu)
C99′un yeni özellikleri şöyle özetlenebilir:
1- for ve bu gibi yineleme ifadelerinde parantez içi ilk deklarasyonlara izin verilmesi.
(Örneğin for(int i=0; i<10; ++i) deyimi c99 da geçerli iken c89 da geçerli değildir…)
2- inline fonksiyonlar.
3- C++’da olduğu gibi artık değişkenler programın herhangi bir yerinde tanımlanabilirler.
4- long long int, boolean, complex gibi yeni veri tipleri.
5- değişken uzunluğa sahip diziler.
6- C++’dan alınan, // ile başlayan tek satırlık program içi açıklamalar.
7- snprintf() gibi yeni kütüphane fonksiyonları.
Kaynakça:
How to Program C

Tags: ,

Haskell ile Programlama 3

Higher-Order Fonksiyonlar
Eğer bir fonksiyon argüman olarak fonksiyon alıyorsa o fonksiyona higher-order fonksiyon denir.
Örnek olarak geçen yazıda bahsettiğim map fonksiyonunu verebiliriz.

Hugs> Map (\x->x^2+2) [1,3..7]
[3, 6, 11, 27, 51]
twice f x = f ( f x )
Hugs> twice tail [2..5]
[4,5]

Fitler Fonksiyonu
Bool değer döndüren fonksiyonları alır ve true değerine sahip elemanları alır.

Fitler f xs = [ x | x<-xs, f x ]

şeklinde çalışır.
Even : çift sayılar true değer döndürür.
Odd: tek sayılar için true değer döndürür.

 Hugs> filter even [1..10]
[2,4,6,8,10]
Hugs> map even [1..5]
[False,True,False,True,False]

Foldr Fonksiyonu
Kendisine verilen diziye, verilen elemanla başlayarak verilen fonksiyonu uygular. Geriye bir dizi değil bir değer döndürür. Fonksiyonun ismindeki “r” right’ın r’sidir. Bu yüzden verilen tek eleman sağa yazılır ve işlemler sağdan başlanır. Bu yüzden dizi döndürecek bir fonksiyonla kullanılamaz. (Buradaki örnekte (\x->x^2) kullanmaya çalışmak olur.)Bir örnekle açıklamak gerekirse;

Hugs> foldr (\x y->x^2+y ) 0 [1..5]
55

Çalışma şekli;

    1        2       3        4        5       0
I-                                     x       y
II-                           x        y
III-                 x        y
IV-         x        y
V-  x       y
Sonuç =y

Burada x’ler sadece altında olan sayıyı alırken y toplama işleminden dolayı kendisini miras alır ve x’ten çıkan sonuçla toplanır.

y=x^2+y
I-y=0,x=5
y=5^2+0
y=25
II-Y=4^2+25
y=41
III-y=3^2+41
y=50
IV-y=2^2+50
y=54
V-y=1^2+54
y=55
Foldr (\x y->x^2) 0 [1..3]

Burada y kendisiyle toplanmadığından gördüğümüz üzere sonuç;
y=1^1 yani 1 olacaktır.
Foldl Fonksiyonu
Verilen değer en sola yazılır ve işlemlere soldan başlanır. “l” left’in l’sini simgeler.

Hugs> foldl (\x y->x^2+y) 0 [1..5]
21909

Çalışma şekli;

     0     1     2     3     4    5
I-   x     y
II-        x     y
III-             x     y
IV-                    x     y
V-                           x    y

Burada da yine değişkenler altlarında bulundukları sayıları alırlar. Dikkat ederseniz bu sefer x y’nin altında olduğundan y’nin sahip olduğu değeri alacaktır.

y=x^2+y
I-y=0^2+1
y=1,x=y
II-y=1^2+2
y=3,x=y
III-y=3^2+3
y=12,x=y
IV-y=12^2+4
y=148,x=y
V-Y=48^2+5
Y=21909

Diğer Fonksiyonlar
All: Listenin tamamı verilen koşulu sağlıyorsa True, sağlamıyorsa False döndürür.

Hugs> all even [2,4..10]
True
Hugs> all even [2,4..11]
True

Burada neden 11 değeri varken True döndürdü sorusunun cevabı artış miktarı 2 olduğundan ve 11’e ulaşmak mümkün olmadığından kendisinden önceki elemanda liste son bulur. listeye.[2,4..11]=[2,4..10]
Any:Listenin tek elemanı bile koşulu sağlıyorsa True değerini üretir.

Hugs> any odd [1,2,4,6,8]
True

takeWhile: Koşulu sağlamayan ilk elemandan öncesini seçer.

Hugs> takeWhile even [2,4,6,7,8,10,12]
[2,4,6]
Hugs> takeWhile (/=6) [2,4,6,7,8,10,12]
[2,4]
Hugs> takeWhile (==6) [2,4,6,7,8,10,12]
[]

dropWhile: Koşulu sağlamayan ilk elemandan sonrasını seçer.

Hugs> dropWhile even [2,4,6,7,8,10,12]
[7,8,10,12]
Hugs> dropWhile (/=6) [2,4,6,7,8,10,12]
[6,7,8,10,12]
Hugs> dropWhile (==6) [2,4,6,7,8,10,12]
[2,4,6,7,8,10,12]

ProjectEuler 22. Sorunun Çözümü
Soru bizden verilen text dosyasının içindeki ismlerin alfabetik olarak sıralanıp, A=1 olmak üzere her harfe sayısal karşılık verilip, kelimenin harf toplamının, kelimenin dosyadaki sırasıyla çarpılıp, çıkan sonuçların toplanmasını istiyor.

import List (sort)
import Char (ord)
isimler = ["MARY",..--Buraya sorudaki text dosyasının içeriğini yapıştırınız--..]
klmTop = sum . (map (\c -> (ord c) - (ord 'A') + 1))
soru22 = sum (zipWith (*) [1..] (map klmTop (sort isimler)))

Özellikle bu soruyu seçtim çünkü şu ana kadar anlatmış olduğumdan çok farklı yapılar içeriyor.
Öncelikle List ve Char classını import ediyoruz. Böylece ord ve sort fonksiyonlarını kullanıyoruz.
(.) operatörü fonksiyonları birleştirmeye yarar. map fonksiyonunun yerine bir list comprehension kullanırsak nokta operatörünü kullanmaya gerek kalmazdı.
sum . (map (\c -> (ord c) – (ord ‘A’) + 1)) = sum [ (ord c) - (ord 'A') + 1 | c <-x]
sort verilen diziyi artan sırada sıralıyor. Burada alfabetik olarak sıralıyor.
ord gelen char’ı ascii karşılığına dönüştürüyor.
Buradaki bu özelliklerin tamamını gelecek yazıda anlatmayı planlıyorum.

Tags: ,