Berker Peksağ.

05 Mayıs 2008, Pazartesi;

Kısa kısa #1

Saat: 22:32:18, Günlük
  1. Zamanımın büyük kısmı soru çözmeye çalışmakla geçiyor.
  2. Havalar geçen yıla göre epey soğuk. Güneşten ve sıcaktan nefret eden biri olarak çok mutluyum tabii :)
  3. Blogda küçük değişiklikler yaptım. Çoğu hata düzeltmeye ek olarak twitter entegrasyonunu gerçekleştirdim. Aynı zamanda yeni temada küçük ilerlemeler kaydetti ama bitirmek için çokta hevesli değilim.
  4. Iron Maiden'ın Live After Death DVD'sine takmış durumdayım. Daha önce diğer parçalardaki performanslarını izlemiştim. Revelations yorumu mükemmel Bruce Dickinson'ın. Albüm versiyonuna göre çok çok daha hızlı çalmışlar.
  5. Müzikten devam edelim. Pinhani'nin yeni albümü Zaman Beklemez'i nihayet bulabildim Bursa'da. İlk albümle karşılaştırmak için henüz erken ama "Zaman Beklemez", "Ağlama", "Ne Güzel Güldün", "Yansın", "Bir Anda", "Yalnızlık" ve "Sevmekten Usanmam" favori parçalarım.
  6. Sırada bekleyen onca kitabım olmasına rağmen dayanamayıp Turgut Özakman'ın yeni kitabı "Diriliş Çanakkale 1915"'i alıp okumaya başladım.
  7. Fırsat buldukça Silverlight ile uğraşıyorum. Henüz çok yeni olmasına rağmen gelecekte adından epey sözettirecek bir teknoloji. Ayrıca, Türkçe kaynak bulmakta zorlanıyorsanız Daron Yöndem'ın yazılarını tavsiye ediyorum.
  8. Bir süredir planlamasıyla uğraştığım projemin ana hatlarını büyük ölçüde tamamladım. Selim ile yavaş yavaş çalışmaya başlayacağız.
  9. PR ve backlink çılgınlığına değinmiştim. Bir ara bu konuyla alakalı daha detaylı bir şeyler karalayacağım.

2 yorum yapılmış.


15 Nisan 2008, Salı;

DOM (Document Object Model/Belge Nesne Modeli)

Saat: 13:12:45, Programlama

Başlarken

DOM(Document Object Model/Belge Nesne Modeli) konusuna girmeden önce yazı boyunca sıkça kullanacağımız kelimeler hakkında birkaç tanım yapıp, İngilizce karşılıklarını da vermekte fayda görüyorum.

Düğüm(Node): Geçerli her HTML ve XML belgesindeki element, nitelik, metin düğümü(text node) hatta boşluk ve sekme karakterleri(whitespace) bile W3C DOM tarafından düğüm olarak kabul edilir.

Düğüm ağacı(Node tree): Belgedeki düğümlerin kullanım hiyerarşisine göre sıralanmasına denir.

Örnek 1: Basit bir düğüm ağacı

<html>
    <head>
        <title>Sayfa başlığımız</title>
    </head>
    <body>
        <p class="selam">
            Deneme <strong>mesajımız.</strong>
        </p>
    </body>
</html>

Yukarıdaki örneğin düğüm hiyerarşisiyse aşağıdaki gibidir:

document
- <html>
- - (whitespace)
- - <head>
- - (whitespace)
- - <title>
- - - Sayfa başlığımız
- - - (whitespace)
- - <body>
- - (whitespace)
- - - <p class="selam">
- - - (whitespace)
- - - - Deneme
- - - - - <strong>
- - - - - - mesajımız.
- - - - -
(whitespace)

Burada unutulmaması gereken ana nokta, Inrernet Explorer’ın boşluk ve sekme karakterlerini yok saymasıdır ki bu da JavaScript ile düğümlere erişirken tarayıcılar arasında yaşanan problemlerin en önemli sebeplerinden birini oluşturur.

İsterseniz, düğüm özellikleri(node properties) ve JavaScript ile işlem yapmaya geçmeden önce, DOM tarihçesine göz atalım.

Nasıl doğdu?

DOM 0

Nesne Modeli kavramının ilk versiyonudur. Başlarda sadece Netscape Navigator tarafından tam olarak destekleniyordu. En büyük yeniliği, JavaScript ile sayfadaki HTML elementlerine erişmeye izin vermesiydi. Daha sonra Microsoft, Internet Explorer 3’te DOM 0’ı aynen destekledi. Tabii daha sonraları bu barış havasından pek eser kalmadı :)

DOM 0+Images

En önemli değişikliği, Netscape Navigator 3.0 ile birlikte sunulan Image nesnesiydi. Başlangıçta sadece src niteliği kullanılabilir olsa da o yıllarda geliştiriciler için yeterli olsa gerek :) Ama Microsoft, Image nesnesini desteklemeyerek bugün “Tarayıcı Savaşları”* adını verdiğimiz, tarayıcılar arasındaki uyumsuzlukların temelini attı.

Tarayıcı savaşları başlıyor!

Netscape Cephesi

Netscape Navigator 4.0 sürümüyle birlikte, olay yönetimi tamamen geliştiricinin kontrolü altına girdi. Olay yönetiminin temel çalışma prensibi; olayın tetiklendiği en üst noktadan başlayarak, gerçek nedeniyle doğru yayılması şeklinde açıklanabilir(bkz. Örnek 1).

Netscape Navigator 4.0’ın bir diğer yeniliği de katman mimarisi ve <layer> HTML elementiydi. Bu yeni element, sayfayı farklı katmanlara ayırmaya ve gerektiğinde nesneleri farklı katmanlar arasına taşımayı sağlıyordu.

Microsoft Cephesi

Microsoft, Internet Explorer sürümüyle birlikte tüm HTML elementlerine erişim imkanı sağladı. Ayrıca, bana göre yeni sürümdeki en büyük yenilik CSS için eklenen style özelliğidir. Bugün gelinen noktada, en çok kullanılan özelliklerden biri olduğunu söylemek yanlış olmaz.

Tüm bu yeniliklerin yanında, Microsoft’un Netscape’in olay yönetimine getirdiği farklı bakış açısı, tarayıcılar arası uyum sorunlarını farklı noktaya taşıdı. Internet Explorer 4, olay kabarcıkları(event bubbling) denilen, gerçek olay nedeninden başlayarak window nesnesine ulaşan bir işleyişe sahipti.

Bu farklılığın ortaya çıkardığı en büyük problem, olay yakalamada yaşanan farklılıklardı. Ancak günümüzde, modern tarayıcılarda kendi nesne modellerine ek olarak, W3C DOM level 2’nin de desteklenmesiyle büyük oranda çözülmüştür.

Son yenilik ise, halen diğer modern tarayıcılar ve W3C DOM tarafından desteklenmeyen filtrelerdir. Bu filtreler, başta saydamlık olmak üzere pek çok görsel değişikliğe olanak sağlamaktaydı.

Modern tarayıcılardaki son durum

Tarayıcılar arasında halen devam eden karışıklıklara rağmen, modern tarayıcılar kendi nesne modelleri yanı sıra, W3C DOM'u da destekleyerek geliştiricilerin işini bir nebze de olsa kolaylaştırmaya başladı. Buna rağmen örneğin, Microsoft Internet Explorer ve Mozilla Firefox'ta JavaScript ile herhangi bir yazıyı kopyalamak için iki farklı kod yazmak zorunda kalıyoruz.

W3C DOM

W3C DOM, yukarıdaki paragraflarda da anlattığımız tarayıcılar arası farklılıkları ortadan kaldırmak amacıyla, önde gelen tarayıcı üreticilerinin de desteğiyle geliştirilmeye başlanmıştır. W3C DOM Level 2, tüm tarayıcılar tarafından desteklenen en güncel sürümdür. W3C DOM Level 3, halen geliştirilme aşamasındadır. Başta olay yönetimi olmak üzere birçok konuda büyük değişikler yaşanacaktır. HTML 5'in tamamlanmasıyla ortaya çıkışının fazla zaman almayacağını umuyorum :)

Düğümlere erişmek

Düğümlere erişmek ve yönetmek için kullanacağımız üç ana JavaScript metodu vardır:

  1. getElementById()
  2. getElementsByTagName()
  3. getElementsByName()

getElementById()

Sözdizimi:
document.getElementById("herhangiBirID");

getElementById() metodu, belirtilen ID'nin kapsadığı elementleri döndürür. Ancak bu metod XML'de çalışmaz. XML DOM konusuna daha sonra –umarım 2008 içinde!- ayrı bir makalede değinmeyi düşünüyorum.

Örnek 2:

<div id="paragraf"><p>Bu paragraf çok şey anlatıyor.</p></div>


<script type="text/javascript">
    var oDiv = document.getElementById("paragraf");
    document.write(oDiv.firstChild.innerHTML);

</script>

getElementsByTagName()

Sözdizimi:
document.getElementsByTagName("herhangiBirHTMLElementi");

Örnek 3:

document.getElementsByTagName("a");

Belge içerisindeki tüm <a> elementlerini verir.

document.getElementById("herhangiBirID").document.getElementsByTagName("img");

id niteliğinin değeri "herhangiBirID" olan elementin düğümleri içindeki tüm <img> elementlerini verir.

getElementsByName()

Sözdizimi:
document.getElementsByName("herhangiBirIsim");

Örnek 4:

document.getElementsByName("baslik");

name niteliğinin değeri "baslik" olan elementleri verir.

Düğümler arasında dolaşmak: firstChild, lastChild, parentNode

firstChild

Düğümün ilk çocuk düğümüne erişir.

Sözdizimi:
document.getElementById("herhangiBirID").firstChild;

Örnek 5:

<a href="#" id="deneme">Link 1</a>

<script type="text/javascript">
    var oDiv = document.getElementById("deneme");
    document.write(oDiv.firstChild.nodeValue);

</script>

lastChild

Sözdizimi:
document.getElemementById(“herhangiBirID”).lastChild;

Örnek 3:

<p id="paragraf"><a href="#">Link 1</a><a href="#">Link 2</a></p>

<script type="text/javascript">
    var oDiv = document.getElementById("paragraf");
    document.write(oDiv.lastChild.firstChild.nodeValue);

</script>

parentNode

Son örnekten yola çıkarak açıklamaya çalışırsam, <p> elementi tüm çocuk(child) elementların ana(parent) düğümüdür.

Düğümlerin değerlerini almak: nodeValue

Sözdizimi:
document.getElemementById(“herhangiBirID”).lastChild.nodeValue;

Örnek 4:

<script type="text/javascript">
    var deger = document.getElementById(“nav”).firstChild.nodeValue;
    document.write(deger);

</script>

Herhangi bir elementin ilk düğümünü silmek: removeChild

Sözdizimi:
var o = document.getElementById(“nav”);
o.parentNode.removeChild(o);

Örnek 5:

<p id="paragraf2"><a href="#">Link 1</a><a href="#">Link 2</a></p>

<script type="text/javascript">
    var oDiv = document.getElementById("paragraf2");
    document.write(oDiv.parentNode.removeChild(oDiv));

</script>

Bir çocuk düğümü başka bir çocuk düğümle değiştirmek: replaceChild

Örnek 6:

<p>
    "That is not dead<br />
    Which can eternal lie<br />
    Yet with strange aeons<br />
    Even death may die"
<br /><br />
    <strong id="yazar">H. P. Lovecraft</strong>
</p>

<button type="button" onclick="fnReplace()">Değiştir</button>

<script type="text/javascript">
    function fnReplace() {
        var o = document.createElement("strong");
        var oIcerik = document.createTextNode("Steve Harris");
        o.appendChild(oIcerik);

        var o2 = document.getElementById("yazar");
        var anneElement = o2.parentNode;
        anneElement.replaceChild(o, o2);
    }

</script>

Düğüm bilgilerini almak: nodeName, nodeType

nodeName

Geçerli düğümün adını döndürür. Geçerli  düğüm element ise, elementin tipini döndürür. Nitelik ise, nitelik adını döndürür.

nodeType

Geçerli düğümün türünü sayısal olarak döndürür.

1 – Element
2 – Attribute
3 – Text
4 – Comment
5 – Document

Çocuk düğümleri(child nodes) almak: childNodes

İşaret edilen düğümün eğer varsa, çocuk düğümlerini bir dizide depolar.

Düğümler arası gezinti: nextSibling, previousSibling

nextSibling

Geçerli düğümden bir sonrakine referans verir.

previousSibling

Geçerli düğümün bir öncekine referans verir.

Yeni bir çocuk düğüm eklemek: appendChild

Söz dizimi:
document.getElementById(“birID”).appendChild(oDugum);

Örnek 7:

<input type="text" name="frmAlbum" id="idAlbum" value="" />

<button type="button" onclick="fnAlbumEkle()">Ekle</button>

<ul id="liste">
    <li>Iron Maiden</li>
    <li>Killers</li>
</ul>

<script type="text/javascript">
     function fnAlbumEkle() {
          var strAlbum = document.getElementById("idAlbum").value;
          var o = document.createElement("LI");
          o.innerHTML = strAlbum;
          document.getElementById("liste").appendChild(o);
     }

</script>

Bir düğümün niteliklerine erişmek: getAttributeNode

Sözdizimi:
element.getAttributeNode(nitelik);

Örnek 8:

<p id="nitelikAdimiz" class="uyari">
    Metallica 3. kez Türkiye'de konser verecek!
</p>

<script type="text/javascript">
    var o = document.getElementById("nitelikAdimiz");
    var nitelik = o.getAttributeNode("class");
    document.write(nitelik.value);

</script>


Bir düğüme nitelik atamak: setAttributeNode

Sözdizimi:
element.setAttributeNode(nitelik);

Örnek 9:

<p id="nitelikAdimiz3" class="uyari">
    "That is not dead<br />
    Which can eternal lie<br />
    Yet with strange aeons<br />
    Even death may die"<br /><br />
    H. P. Lovecraft

</p>

<p id="nitelikAdimiz4">
    "That is not dead<br />
    Which can eternal lie<br />
    Yet with strange aeons<br />
    Even death may die"<br /><br />
    H. P. Lovecraft

</p>

<button type="button" onclick="fnEkle()">class="uyari" ekle</button>

<script type="text/javascript">
    function fnEkle() {
        var o1 = document.getElementById("nitelikAdimiz3");
        var o2 = document.getElementById("nitelikAdimiz4");
        var nitelikAta = o1.getAttributeNode("class");
        o1.removeAttributeNode(nitelikAta);
        o2.setAttributeNode(nitelikAta);
    }

</script>


Bir nitelik düğümünü silmek: removeAttributeNode

Örnek 10:

<p id="nitelikAdimiz2" class="uyari">
    "That is not dead<br />
    Which can eternal lie<br />
    Yet with strange aeons<br />
    Even death may die"<br /><br />
    H. P. Lovecraft

</p>

<button type="button" onclick="fnNodeKaldir()">class="uyari" kaldır</button>

<script type="text/javascript">
    function fnNodeKaldir() {
        var o = document.getElementById("nitelikAdimiz2");
        var nitelik = o.getAttributeNode("class");
        o.removeAttributeNode(nitelik);
    }

</script>

Araçlar

DOM Inspector(DOMi)

Mozilla Firefox ile birlikte gelen DOM Inspector aracı başlangıç için oldukça işe yarar. Araçlar > DOM Inspector ya da CTRL + SHIFT + I kısayolunu kullanarak aracı başlatabilirsiniz. Arayüzü Firefox’a benzer olduğu için neyin ne olduğundan bahsetmiyorum.

Yazımız içerisinde Internet Explorer’ın boşluk ve sekme karakterlerini düğüm olarak yorumlamadığını söylemiştik. Arzu ederseniz View > Show Whitespace Nodes tikini kaldırarak, DOMi’ın aynı şekilde yorumlamasını sağlayabilirsiniz.

Firebug

Bir tarayıcı için yazılan eklentide bile kalitenin ne kadar yukarılara çekilebileceğinin kanıtıdır Joe Hewitt amca tarafından yazılan Firebug. Eklentiyi buradan kurabilir ve F12 tuşuyla aktive edebilirsiniz. Konsolu açtıktan sonra geriye kalan tek şey Inspect butonuna tıklamak.

Aardvark

Firebug gibi bir başka Firefox eklentisi daha. Firebug’a göre biraz daha kullanışlı olduğunu söyleyebilirim. Kurduktan sonra, kullanmak istediğiniz sayfada sağ tıklayıp Start Aardvark diyerek çalışmaya başlayabilirsiniz. Özellikle ana düğüm ve çocuk düğümlerle çalışırken işinizi epey kolaylaştırıyor.

Firebug Lite

Firebug’ın avantajlarından Internet Explorer, Opera ve Safari gibi popüler tarayıcılarda da yararlanmak için harika bir çözüm.

IE Developer Tools

Firefox’un DOM Inspector’ının Internep Explorer 8’deki karşılığı diyebiliriz kısaca. Henüz geliştirilme aşamasında olsa da benim kullandığım kısıtlı süre boyunca DOM Inspector’a göre daha kullanışlı olduğunu söyleyebilirim.

Son sözler

Her zamanki gibi işe koyulma tarihimle tamamlamam arasında epey süre geçti. Bu nedenle gözden kaçırdığım, yazım şeklinden kaynaklı düşük cümleler ve yanlış bilgiler olabilir. Eğer böyle bir sorunla karşılaşırsanız(ya da eklemek istedikleriniz varsa) lütfen bunu yazıya yorum yazarak ya da berker.peksag at gmail.com e-posta adresini kullanarak bildirmekten çekinmeyin.

Yararlanılan kaynaklar

  1. Inside JavaScript – Steven Holzner (New Riders Publishing, 2003)
  2. http://en.wikipedia.org/wiki/Document_Object_Model
  3. http://developer.mozilla.org/en/docs/Introduction_to_DOM_Inspector
  4. http://developer.mozilla.org/en/docs/DOM:element.setAttributeNode

2 yorum yapılmış.


10 Nisan 2008, Perşembe;

IPTV: Televizyon yayıncılığında devrim

Saat: 06:29:16, Günlük

Çok değil daha 5 yıl önce internet kullanıcı odaklı olmaktan uzak ve interaktiviteden anlaşılan şeyler aptal Flash animasyonları ve Java Appletlarından ibaretti. Google'ın hayatımıza adım adım girmesiyle, kontrolün kullanıcıda olduğu (bkz: Kendimi şanslı hissediyorum) servisler hayatımıza girmeye başladı. Sonra Web 2.0 dedik bu (d)evrime.

Şimdiyse aynı (d)evrim, televizyon yayıncılığında da yaşanıyor. Bir düşünün; günün belirli saatlerinde elinize kumandayı alıp, şöyle bir gezinti yaptığınızda kanalların büyük çoğunluğunda aynı tür programların karbon kopyalarıyla karşılaşırsınız. Oysa sevdiğiniz programları kategorilere ayırıp, canlı ya da banttan kaydedip istediğiniz zaman izleyebilseniz ne güzel olurdu değil mi? İşte, kabaca IPTV ile bu imkana ve çok daha fazlasına kavuşacağız.

Peki neyin nesidir bu IPTV?

IPTV(Internet Protocol Television, İnternet Protokolü Televizyonu), yaklaşık 2,5 yıldır geliştirilen[1]; şifreli, şifresiz televizyon kanallarının ve depolanan video içeriklerinin, genişbant DSL(Sayısal Abone Hattı) kullanıcıları ya da izleyicilere internet protokolü ile dağıtıldığı sistemin adıdır.[2]

IPTV'nin getirdiği yenilikler sadece bu tanımla sınırlı değil elbette. Televizyon yayınlarına ek olarak, DVD veya CD gibi medyalardaki kayıtları da aktarıp kategoriye edecek hatta dilediğiniz gibi paylaşabileceksiniz.

Reklam kuşaklarına elveda!

IPTV ile reklamlarda interaktiviteden nasiplerini alacaklar. Örneğin, izlediğiniz filmde oyuncunun kullandığı cep telefonunu ya da MP3 playerında dinlediği albümü o an üzerine tıklayıp bilgi alabilecek ve satın alabileceğiz. Teoride harika bir fikirmiş gibi gözükse de uygulamada klasik reklam kuşağını aratabilir gibi geliyor bana :)

Dünyada kullanım oranı nedir?

Tabii ki en yoğun kullanım oranı Avrupa Kıtası'nda görülüyor ancak Japonya ve Amerika'da da değişik isim ve kullanım şekillerinde kullanılıyor. Resmi rakam ise, Genişbant Dünya Forumu'nun 2007 sonunda yayımladığı raporda dünya çapında 7,5 milyon kişi tarafından kullanıldığını gösteriyor.[3]

Türkiye kaç yıl sonra IPTV ile tanışacak?

Matbaa ya da televizyon kadar uzun süre beklemeyeceğiz :) Türk Telekom'un açıklamalarına göre, 2007 yılı içinde altyapı çalışmaları başlamış.[4] Tabii halihazırda 4 mbit olan en yüksek bağlantı hızını bile vermekte zorlanan Türk Telekom'un yaptığı bu çalışmalar IPTV için gerekli olan minimum 8 mbit hızı karşılamaya yetecek mi merak ediyorum.

Sponsor faktörü

"Sponsorluk", Türk firmaları tarafından pek rağbet edilen bir alan değil ama firmalar kütüphanenizdeki bir filme ya da bir aktörün tüm filmlerine sponsor olabilecek. Bu sayede filmi daha düşük ücretle ve belirli alanlardaki entegre reklamlarla ya da tamamen ücretsiz olarak izleyebileceksiniz. Hatta firmalar izleyiciler arasında çekilişler düzenleyip çeşitli hediyeler verme imkanı bile bulabilecek.

Efenim, IPTV'nin orta ve uzun vadede hayatımızda en az internet kadar önemli hale geleceği su götürmez bir gerçek. Ben de bildiklerimi dilim döndüğünce anlatmaya çalıştım. Eğer konu ilginizi çektiyse daha detaylı bilgiyi Bilim ve Teknik Dergisi'nin Nisan 2008 sayısında bulabilirsiniz. Ayrıca, faydalı bulduğunuz farklı kaynaklar varsa paylaşmaktan çekinmeyin.

Yararlanılan kaynaklar
[1], [2] Bilim ve Teknik, Nisan 2008, sayfa 51.
[3], [4] Bilim ve Teknik, Nisan 2008, sayfa 52.

Yorum yapılmamış.


09 Nisan 2008, Çarşamba;

Liverpool FC 4 - 2 Arsenal

Saat: 00:26:20, Futbol

Daha önce Liverpool'un Şampiyonlar Ligi'nde finale kalmasının zor olduğunu söylemiştim. Lafımı her zamanki gibi yedim. Star TV sağolsun, internetten izleyebildiğim kadarıyla maçın son 15 dakikası mükemmeldi. Açıkçası 2-2'den sonra "bitti bu iş" dedim ama bizimkiler ufak çaplı bir mucize daha yaşattılar bana.

Üç maçlık Liverpool - Arsenal serisi öncesi Emmanuel Adebayor "3 maçı da alırız" demişti, neyi alıp almadığını size bırakıyorum. Arsenal, bu transfer politikasıyla bir şey yapamaz. Tabii Arsene Wenger'e sorarsanız sakatlıkları bahane edecektir.

Bundan sonra finali Liverpool ve manu oynar, Rafa ikinci Şampiyonlar Ligi kupasını alıp Amerikalıların önüne koyar diyorum.

Yorum yapılmamış.


03 Nisan 2008, Perşembe;

Yüksek Sadakat - Katil & Maktül

Saat: 13:02:50, Müzik

Yüksek Sadakat - Katil & MaktülHarika bir ilk albümden sonra, Cemil Demirbakan ve Deniz Alemdar'ın ayrılmasına epey üzülmüştüm ve açıkçası ikinci albüm Katil & Maktül'den pek bir beklentim yoktu.

Tabii söylediği her lafı yiyen biri olarak, Yüksek Sadakat'in yine mükemmel bir albüm ortaya çıkardığını söylemekten büyük memnuniyet duyuyorum :) Yapımcılar "korsan muhabbeti" yapacaklarına böyle gruplara şans verseler eminim ki satışlar büyük ölçüde artacaktır.

Dinledikçe tüm albümü çok seveceksiniz ama ben dört parçayı diğerlerinden ayrı tutuyorum: "Aşk Durdukça", "Ben Seni Arayamam", -bence albümün en iyisi- "Katil & Maktül" ve "İçimde Yağmur". Tabii "İçimde Yağmur"'da Zeynep Casalini'nin etkisini de gözardı etmek olmaz. İlk fırsatta O'nun da albümünü edinmeyi düşünüyorum.

Yeni solist Kenan Vural, Cemil Demirbakan'ı hiç aratmıyor. Özellikle "Katil & Maktül" ve "Aşk Durdukça"'daki performansı mükemmel.

Albüm D&R'da oldukça uygun fiyatla satılıyor. 10,40 YTL bu kalitede bir albüm için hiçbir şey değil. Ayıptır söylemesi, gaza gelip birde Live After Death'ı kapıverdim :)

Bu arada, uzun süredir bitirmeye çalıştığım DOM(Document Object Model) yazımı da bu haftasonu yayımlamayı planlıyorum. Türkçe özürlü biri olduğum için anlaşılabilir cümleler kurmakta epey zorlandım ama umuyorum ki ortaya işe yarar bir şeyler çıkacak.

 

Yorum yapılmamış.


26 Mart 2008, Çarşamba;

Uçup giden hedefler: Bölüm 3

Saat: 07:52:45, Günlük

Hedefinize ulaşmak için en gerekli şeyin zeka ve yetenekten ziyade disiplinli çalışmak olduğuna inanırım. Ki pek çok başarılı insanın başarısının altında yatan ana nedende budur.

Bende "disiplin şart!" diyerek yaklaşık iki ay önce ÖğğSS'ye hazırlanmak için işimden ayrıldım. Başlangıçta plan basitti: Bilgisayarımı sadece e-postalarımı kontrol etmek, RSS okuyucuma bakmak ve film/dizi izlemek için kullanacak, kalan zamanımı ise çok sevdiğim Matematik konularına ayıracaktım.

Tabii planın uygulanışı kağıt üzerindeki gibi kolay olmadı. Birkaç serbest projeye ek olarak kendimi tutamayıp başta Symfony ve Illustrator olmak üzere pek çok frameworke, programlama diline ve programa merak saldım. Ve böylece ÖğğSS hedefimden uzaklaşmaya başladım.

Efenim bu psikiyat-vari giriş ve gelişme bölümünden sonra kısa kesip sadede gelirsem; zararın ve manyaklığın neresinden dönersek kârdır diyerek, çalıştığım projeleri, blogun eksiklerini ve üzerinde çalıştığım iki yazıyı mümkün olan en kısa sürede tamamlayıp Matematik testlerime gömüleceğim.

4 yorum yapılmış.


25 Mart 2008, Salı;

PEAR versiyonunu güncellemek

Saat: 01:40:40, Programlama

Bundan böyle bulmak için çok zaman harcadığım -evet, unutkan biriyim- küçük detayları burada yayımlayacağım.

İlk olarak, bulmak için son 20 dakikamı harcadığım -tamam, henüz Google'ı kullanmayı bilmiyor olabilirim- bir problemin çözümünü yazacağım.

pear upgrade PEAR

Evet, 20 dakika harcamaya değmeyecek kadar kısa bir çözüm :) Yukarıdaki komutu, komut satırında(Win + R | cmd) çalıştırınca PEAR versiyonumuzu güncellemeye başlıyorsunuz.

Bir şekilde bu yazıyı okuyor ve PEAR ile ilgileniyorsanız, benim gibi kurulu paketlerinizin örümcek ağı tutma ihtimali mevcut :) Ki bu da zaman zaman paketler arasında uyumsuzluk yaratabiliyor (bkz: ben bugün bunu gördüm). Bunun içinde tüm paketlerimizi aşağıdaki komut yardımıyla güncelleyebiliyoruz:

pear upgrade-all

Bu arada, son olarak içimi dökmek istediğim bir konu var: Resmi PEAR ve Smarty dökümantasyonundan nefret ediyorum!

Yorum yapılmamış.


19 Mart 2008, Çarşamba;

jQuery ile autocomplete niteliğini web standartlarına uygun olarak kullanmak

Saat: 23:57:11, Programlama

Bildiğiniz gibi autocomplete niteliği tıpkı target gibi web standartlarına uygun değil. Bu günlük kullanımda pek bir sorun teşkil etmese de benim gibi web standartlarına takıntılı geliştiriciler için epey büyük bir sorun :)

Bunu aşabilmek için imdadımıza JavaScript yetişiyor. Biz jQuery kütüphanesini kullanacağız:

$("input[@class='autocomplete']").each(function(){
$(this).attr("autocomplete", "off");
});

Kullanımı:

<input type="text" class="autocomplete" name="frmAra" />

Bu şekilde niteliği class ve değeri autocomplete olan tüm input elementlerine autocomplete = "off" niteliği eklenir.

Tabii kullanım şekline göre gerekli değişiklikler yapılarak -örneğin tüm input elementlerine uygulanabilir- kullanılabilir.

Yorum yapılmamış.


18 Mart 2008, Salı;

3 Mart 1945 Tokyo Soykırımı

Saat: 23:05:51, Tarih

Savaşta her zaman kazanan haklıdır. Bu yüzden 60 yılı aşkın bir süredir her türlü ortamda sadece Almanya'nın Yahudi soykırımından bahsedilir. Oysa tarihte kamuoyunun bilmesi gereken ama gizlenmiş pek çok soykırım vardır. Bunlardan biri olan Sovyetler Birliği'nin Beketovka'da yaptıklarından daha önce bahsetmiştim. Şimdi de Amerika'nın -bilinen- soykırımlardan sadece biri olan Büyük Tokyo Bombardımanı hakkında mutlaka okunması gereken bu yazıyı paylaşıyorum.

Kaynak: ek$i sozluk

Yorum yapılmamış.


17 Mart 2008, Pazartesi;

strftime() fonksiyonuyla tarih formatlamak

Saat: 10:45:26, Programlama

Bazen farklı bir formatta aldığımız tarih bilgisini, farklı bir formata çevirmemiz gerekir. Bunun için ya PHP'nin list() fonksiyonunu ya da data_parse() fonksiyonunu kullanıp çeşitli işlemler yapmışızdır(ki daha pek çok yöntemi de vardır).

Bu yazıda, strftime() fonksiyonunu kullanıp tarihimizi nasıl istediğimiz formata çevireceğimizi anlatmaya çalışacağım.

Sözdizimi

string strftime(string tarih_formatiniz [, int tarih ])

Sözdiziminde de görüldüğü gibi fonksiyonun ikinci parametresi kullanmak zorunda değiliz. Şayet kullanmazsak, belirtilen formata uyacak şekilde o anki tarihi döndürür. Ayrıca, opsiyonel olarak setlocale() fonksiyonunu kullanarak yerel ayarlara göre sonuç döndürmesini sağlayabilirsiniz(Örneğin ay ve/veya günü Türkçe olarak yazdırabiliriz). Ancak setlocale() fonksiyonu, IIS veya Windows işletim sistemi üzerinde Apache kullanıyorsanız çalışmayacaktır. setlocale() fonksiyonu bu yazının konusu olmadığından, PHP'nin çevrimiçi dökümantasyonundan konu hakkında ayrıntılı bilgi alabilirsiniz.

Kullanımı

Bu kadar konuştuktan sonra örneğimize geçelim :) Aşağıdaki örneğimizde, "Mon Mar 17 08:18:01 2008" formatındaki tarihimizi "2008-03-17 08:18:01" şeklinde yazdıracağız.


<?php

$formatlanacak_tarih = "Mon Mar 17 08:18:01 2008";

$yeni_tarih = strftime("%Y-%m-%d %H:%M:%S", strtotime($formatlanacak_tarih));

echo $yeni_tarih
;

?>

strtotime() fonksiyonu, karakter katarı(string) tipindeki değeri, UNIX Timestamp* tarih biçimine çevirir.

Yorum yapılmamış.


Etiket bulutu;

blog dom ikinci dünya savaşı ipucu javascript jquery php


Kategoriler;

Ne yapıyorum? (twitter)


Sık kullanılanlar


Projeler


Takip ettiklerim


En son dinlediklerim (last.fm)

(c) Berker PEKSAĞ. 2004-2007

Yayımlanan yazılar, kaynak gösterildiği müddetçe kullanılabilir.
Eklenen yorumların sorumluluğu yazarına aittir.