<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Zırvalama Tahtası</title>
	
	<link>http://selam.sonsuzdongu.com</link>
	<description>symfony, debian, PHP5, SQL ve pek çok ayrıntı</description>
	<lastBuildDate>Tue, 24 Aug 2010 17:12:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/timu/zirvalama-tahtasi" /><feedburner:info uri="timu/zirvalama-tahtasi" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Topluluk ve tasarım</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/vXncsnZvh60/topluluk-ve-tasarim</link>
		<comments>http://selam.sonsuzdongu.com/topluluk-ve-tasarim#comments</comments>
		<pubDate>Tue, 24 Aug 2010 17:10:06 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Bu ne?]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Kişisel]]></category>
		<category><![CDATA[ben]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=137</guid>
		<description><![CDATA[Aşağıdaki yazıyı 2007 Kasım'ında yazmaya başlamış ancak daha sonra ilerde devam ederim diyerek taslak halinde bırakmışım, arşivde gezerken fark ettim ve yarımda olsa yayınlamaya karar verdim. Kime, ne yardımı dokunur bilemiyorum. Katkıda bulunabilir, devamını getirebilirsiniz. Grafik ve tasarım birbirinden ayrılmaz ikili olsa da her ikise birbirinden farklı işlerdir. Grafik oranı düşük ancak temiz öğeler ile [...]]]></description>
			<content:encoded><![CDATA[<p>Aşağıdaki yazıyı 2007 Kasım'ında yazmaya başlamış ancak daha sonra ilerde devam ederim diyerek taslak halinde bırakmışım, arşivde gezerken fark ettim ve yarımda olsa yayınlamaya karar verdim. Kime, ne yardımı dokunur bilemiyorum. Katkıda bulunabilir, devamını getirebilirsiniz.</p>
<p>Grafik ve tasarım birbirinden ayrılmaz ikili olsa da her ikise birbirinden farklı işlerdir. Grafik oranı düşük ancak temiz öğeler ile hazırlanmış pek çok site dolaşıyor etrafta ve bunların pek çoğu web 2.0 kavramı ile hareket ediyor. Hayır öyle janjanlı değil sadece temiz yalın tasarımları olan ve içeriği kullanıcıların belirlediği siteler.  Peki 10 sene önceki web'te olup bitenler ve bugün'ü karşılaştırdığınızda neler görüyoruz? Yani akımları ve modaları kastediyorum. 10 sene önce arkaplanda yanıp sönen yıldızlar vardı. her taraf sadece hareketli olsun diye donatılmış gifler vardı. Ve insanlar internette bir şeyler yapmaya çalışıyordu (I kiss you). Kimileri başardı kimileri başaramadı. Başaranlar yeni akımlar oluşturmaya veya onları takip etmeye devam ettiler.  10 sene öncesinin arka planında ışıklar, yıldızlar olan siteleri hala ayakta ve bir taraftada yeni anlayışın oluşturduğu siteler var. Peki kimler hangilerini tercih ediyor ve neden?</p>
<p>Kişisel olarak izlenimim dünün genç olanları, geliştirdikleri unsurları/fikirleri kullanan siteleri tercih ettiği yönünde. Yani eğer 25 yaş üstü iseniz ve şimdiye kadar sadece chat yapmak yerine bir takım oluşumları takip etmiş bir şeyler yapmak için çaba göstermiş iseniz içeriği kendinizin belirleyebildiği siteleri tercih ediyorsunuz. </p>
<p>Oysa dünün orta yaşlıları veya interneti hatun/erkek düşürme mekanı için sınırsız bir kaynak olarak görenler hala arka planında yıldızlar parlayan siteleri tercih ediyorlar çünkü ne kendilerini ne de içinde bulundukları toplulukları geliştirmek yönünde hiç bir çaba gösterme gereği duymadılar. Zevkleri ve görüşleri aynı kaldı. İnce ve temiz tasarıma sahip toplulukların içerisinden zeki ve kültürlü insanların bulunması, hala bir şeyler yapma isteğini dürtükleyen ve bunun için çaba gösteren insanların bulunmasından ibaret. </p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/vXncsnZvh60" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/topluluk-ve-tasarim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/topluluk-ve-tasarim</feedburner:origLink></item>
		<item>
		<title>Web site istatistikleri ve collectd</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/g7AQ1mRSCD4/web-site-istatistikleri-ve-collectd</link>
		<comments>http://selam.sonsuzdongu.com/web-site-istatistikleri-ve-collectd#comments</comments>
		<pubDate>Wed, 07 Jul 2010 12:42:58 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=644</guid>
		<description><![CDATA[Bir web sitesinin büyüme istatistiklerini oluştururken ilk başlarda bir hesap tablosu yeterli olabilmektedir ancak büyüme devam ettikçe bu hesap tablosu anlamsızlaşacak ve büyümenin yavaşladığı veya düştüğü zamanlar için geriye dönük izleme yapmak zorlaşacaktır, bu durumda patronlara elimizdeki veriyi daha anlaşılır cicili bicili grafikler çıkartacak ufak tefek yazılımlar hazırlamak bizim en önemli vazifemiz haline gelir ve [...]]]></description>
			<content:encoded><![CDATA[<p>Bir web sitesinin büyüme istatistiklerini oluştururken ilk başlarda bir hesap tablosu yeterli olabilmektedir ancak büyüme devam ettikçe bu hesap tablosu anlamsızlaşacak ve büyümenin yavaşladığı veya düştüğü zamanlar için geriye dönük izleme yapmak  zorlaşacaktır, bu durumda patronlara elimizdeki veriyi daha anlaşılır cicili bicili grafikler çıkartacak ufak tefek yazılımlar hazırlamak bizim en önemli vazifemiz haline gelir ve buda takdir edersiniz ki sıkıcı bir iştir. </p>
<p>Yıllardır pek çok farklı ürün/servisde kullanılan rrd ve rrd araçları bu sıkıcı işleri bizim yerimize yapabilir ancak bu seferde rrd komutuna ait parametreleri neyi nasıl yaptığını öğrenmemiz, deneyimlememiz gerekiyor. Elbette rrd ve araçlarını kullanan farklı uygulamalar için eklentiler yazabilir ve ağ trafiği, bağlantı durumları, yük vb. sistem izleme araçlarının yanında kendi yazılımımız için grafikler oluşturulmasını sağlayabiliriz. Aşağıda collectd isimli veri toplama aracının dbi modülünü kullanarak bir web sitesinin   kullanıcıl sayılarını alan ufak bir yapılandırma mevcut. Aşağıdaki yapılandırma sayesinde günlük kullanıcı sayısındaki ivmeyi görebiliyoruz. Birde buna her gün kayıt olan kişilerin sayılarını eklersem eğer tam olacak <img src='http://selam.sonsuzdongu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Plugin</span> dbi<span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Query</span> <span style="color: #ff0000;">&quot;users&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>     
     Statement &quot;SELECT count(*) as count FROM users&quot; 
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Result<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      Type &quot;gauge&quot;
      InstancePrefix &quot;users&quot;
      #InstancesFrom &quot;count&quot;
      ValuesFrom &quot;count&quot;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Result<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Query<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Database</span> <span style="color: #ff0000;">&quot;xxxxx&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    Driver &quot;mysql&quot;
    DriverOption &quot;host&quot; &quot;xxxxxxx&quot;
    DriverOption &quot;username&quot; &quot;xxxxxxxxx&quot;
    DriverOption &quot;password&quot; &quot;xxxxxxxxx&quot;
    DriverOption &quot;dbname&quot; &quot;xxxxxxxxx&quot;
    SelectDB &quot;xxxxxxxxxx&quot;
    Query &quot;users&quot;
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Database<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>bu yapılandırmanın ürettiği grafik ise aşağıda</p>
<p><img src="http://selam.sonsuzdongu.com/wp-content/sinebot_user_count.png" alt="kullanıcı sayısı" /></p>
<p>(Yazar) Sevgili günlük<br />
(Günlük) .....<br />
(Yazar) Yeniden biçimlerdir beni.<br />
(Günlük) Mucizeler departmanı yukarda canım.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/g7AQ1mRSCD4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/web-site-istatistikleri-ve-collectd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/web-site-istatistikleri-ve-collectd</feedburner:origLink></item>
		<item>
		<title>Lucene + Zemberek + Cassandra = Lucandra</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/WgfFEf36eJw/lucene-zemberek-cassandra-lucandra</link>
		<comments>http://selam.sonsuzdongu.com/lucene-zemberek-cassandra-lucandra#comments</comments>
		<pubDate>Mon, 14 Jun 2010 10:03:41 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=632</guid>
		<description><![CDATA[Lucandra, lucene indexlerini Cassandra'ya yazarak indexlerin birden fazla makinede tutulmasını (partition ve replication) sağlıyor, böylece ölçeklenebilir lucene indexleri elde edilerek arama için tek noktada oluşacak bir hata ile arama özelliğinin devre dışı kalmasının önüne geçiliyor. Bir süredir bu proje benimde ilgimi çekiyordu ancak Türkçe için yeterli değildi, zira Türkçe için kök bulmak problemli idi ve [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/tjake/Lucandra">Lucandra</a>, lucene indexlerini Cassandra'ya yazarak indexlerin birden fazla makinede tutulmasını (partition ve replication) sağlıyor, böylece ölçeklenebilir lucene indexleri elde edilerek arama için tek noktada oluşacak bir hata ile arama özelliğinin devre dışı kalmasının önüne geçiliyor. </p>
<p>Bir süredir bu proje benimde ilgimi çekiyordu ancak Türkçe için yeterli değildi, zira Türkçe için kök bulmak problemli idi ve buna bir çare bulmak gerekiyordu, 2 sene önce açık kaynak günlerinde bu konu ile ilgili olarak yapılan çalışmalar arasında kök bulucu olarak zembereğin kullanıldığını duymuş ve kök bulmak için neden lucandra'ya zemberek eklemiyorum diye kendi kendime sormaya başlamıştım. İlk bir kaç günlük tırsıntı ve kaynak kod okuma ile geçen zaman sonrasında projenin forklanması ve toplam 3 ana commit ile (daha fazla commit'im var ama içlerinden 3'ü önemli) zemberek kök bulucu sistemi projeye eklenmiş oldu. Sadece lucene ile değil solr ile de kullanılabilinir durumda. Zembereğin eklenmesi için yaptığım değişiklikler, 1 satır silmek, 5 satır eklemek, 1 satırda değişiklik yapmak, 3 adet kütüphaneyi (zemberek-cekirdek, trlucene, zemberek-tr) lib dizinine eklemekden ibaret, tabii birde kök bulucu içerisinde yer alan "gereksiz kelime"lerin güncellenmesi var.</p>
<p>Şimdilik sadece Türkiye Türkçesi ile çalışıyor ancak Azeri Türkçesi ve Türkmence Türkçesi için de çalışmasını isterseniz tek yapmanız gereken bu iki dile ait zemberek kütüphanelerini lib dizinine eklemek ve başlangıç sırasında -Dlucene.analyzer= parametresi ile hangi dil için analiz yapılacağını belirtmenizden ibaret.</p>
<p>Henüz Türkçe desteği mainstream'de yer almıyor (pull request gönderdim, bekliyorum), eğer denemek isterseniz <a href="http://github.com/selam/Lucandra">http://github.com/selam/Lucandra</a> adresinden kaynak kodları alabilirsiniz.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/WgfFEf36eJw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/lucene-zemberek-cassandra-lucandra/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/lucene-zemberek-cassandra-lucandra</feedburner:origLink></item>
		<item>
		<title>Düşünüyorum</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/77i8JNOcvX8/dusunuyorum</link>
		<comments>http://selam.sonsuzdongu.com/dusunuyorum#comments</comments>
		<pubDate>Sun, 30 May 2010 11:47:00 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[projeler]]></category>
		<category><![CDATA[yazılım]]></category>
		<category><![CDATA[özgür yazılım]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=629</guid>
		<description><![CDATA[V8'in gayet güzel bir arabirimi var, nodejs projesinden de görülebileneceği gibi geliştirme yapmakda oldukça kolay, javascript oldukça yaygın bir dil ve geniş bir kullanıcı ağı var. Peki, acaba linux kerneli ve V8 javascript engine kullanan bir işletim sistemi olamaz mı? Linux boot sürecinde init yerine V8'i çalıştırsa ve V8 her bir terminal için javascript shell [...]]]></description>
			<content:encoded><![CDATA[<p>V8'in gayet güzel bir arabirimi var, nodejs projesinden de görülebileneceği gibi geliştirme yapmakda oldukça kolay, javascript oldukça yaygın bir dil ve geniş bir kullanıcı ağı var. </p>
<p>Peki, acaba linux kerneli ve V8 javascript engine kullanan bir işletim sistemi olamaz mı? Linux boot sürecinde init yerine V8'i çalıştırsa ve V8 her bir terminal için  javascript shell çalıştırsa? şu anda V8'in shell erişimi sadece bir kaç ufak tefek komutdan oluşuyor ancak güzel bir geliştirici katkısı ile hazır haline geçmesi pek sorun olmaz diye düşünüyorum. sistem üzerinde bulunacak tüm kütüphaneler sadece ve sadece kernel'in ve V8'in ihtiyaç duyacağı kütüphaneler olsa, bir JsOS'un prematüre hali olabilir mi?</p>
<p>(Yazar) - Sevgili günlük<br />
(Günlük) - Her istediğinde hatırlayacağın birimiyim ben?<br />
(Yazar) - ...........<br />
(Günlük) - Aleyhinde kullanacağım</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/77i8JNOcvX8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/dusunuyorum/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/dusunuyorum</feedburner:origLink></item>
		<item>
		<title>Cassandra</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/OfO7Uyp9HBM/cassandra</link>
		<comments>http://selam.sonsuzdongu.com/cassandra#comments</comments>
		<pubDate>Wed, 07 Apr 2010 23:35:23 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[yazılım]]></category>
		<category><![CDATA[cassandra]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=602</guid>
		<description><![CDATA[Cassandra, facebook tarafından geliştirilmiş ve daha önce amazon tarafından geliştirilen Dynamo ile benzer yapıya sahip yapısal key/value veri tabanıdır. Cassandra veri modeli oldukça basittir, geliştirme yapmak oldukça hızlı ve eğlencelidir. Ancak eğlenmeden önce Cassandra'nın veri modellerini anlamak gerekiyor. Cassandra veri modeli için Keyspace, ColumnFamily, Column, Key, SuperColumn tanımlarını kullanır. Keyspace Keyspace basitçe verinizin ait olduğu [...]]]></description>
			<content:encoded><![CDATA[<p>Cassandra, facebook tarafından geliştirilmiş ve daha önce amazon tarafından geliştirilen Dynamo ile benzer yapıya sahip yapısal key/value veri tabanıdır. Cassandra veri modeli oldukça basittir,  geliştirme yapmak oldukça hızlı ve eğlencelidir. Ancak eğlenmeden önce Cassandra'nın veri modellerini anlamak gerekiyor.</p>
<p>Cassandra veri modeli için Keyspace, ColumnFamily, Column, Key, SuperColumn tanımlarını kullanır.</p>
<h2>Keyspace</h2>
<p><strong>Keyspace</strong> basitçe verinizin ait olduğu veri tabanı adıdır diyebiliriz. <strong>Keyspace</strong>'ler kurulumunuzun yapılandırmasına bağlı olarak <strong>/var/lib/cassandra/data</strong>/ dizini içerisinde bulunurlar. Eğer SQL'e aşına iseniz SQL'de bulunan veri tabanı adı ile <strong>Cassandra</strong>'da bulunan <strong>Keyspace</strong>'in aynı anlama geldiğini düşünebilirsiniz. SQL'den farklı olarak istemciden Cassandra'ya açılan bağlantının hangi veri abanına ait olduğunu <strong>söyleyemezsiniz</strong>, başka bir değiş ile "<em>use dbname</em>" gibi bir deyim <strong>Cassandra</strong> üzerinde <strong>bulunamamaktadır</strong> bu nedenle verilerinizi yazarken veya okurken verinizin hangi "<strong>Keyspace</strong>" üzerinde olması gerektiğini Cassandra'ya <strong>söylemelisiniz</strong>.</p>
<h2>ColumnFamily</h2>
<p><strong>ColumnFamily</strong> ise, Keyspace içerisinde bulunan gruplanmış verileri taşıyan tablo olarak düşünülebilirsiniz. Bu tablolar verinize ait satırları tutmaktadır. SQL'den aşina olduğumuz sütünların row haline gelmiş halleri olarak düşünebilirsiniz ancak SQL'de tablo tanımı sırasında belirtilen sütünların <strong>ColumnFamily</strong> içerisinde tanımlanmasına gerek yoktur. Bir <strong>Keyspace</strong> içerisinde istediğiniz kadar <strong>ColumnFamily</strong> tanımlayabilirsiniz.</p>
<h2>Key</h2>
<p><strong>Key</strong>'ler <strong>ColumnFamily</strong> içerisinde bulunan ve SQL'deki <strong>primaryKey</strong> alanına denk gelen, verilerinize erişmek için kullanabileceğiniz alanlardır. <strong>Key</strong> içerisinde bulunan veriler <strong>Cassandra</strong> için birer "<strong>Satır</strong>"dır. Ancak bu satırların SQL'de bulunan satırlar olmadığını hatırlamalısınız. Bir <strong>ColumnFamily</strong> içerisinde istediğiniz kadar <strong>Key</strong> barındırabilirsiniz.</p>
<h2>Column</h2>
<p><strong>Column</strong> ise <strong>Key</strong>'lerin içerisinde bulunan sütunlardır. Bu sütunların yapısı SQL'de bulunan sütünlardan oldukça farklıdır. sütunlar içerisinde 3 adet alan bulunmaktadır. Bu alanlar "<strong>name</strong>", "<strong>value</strong>" ve "<strong>timestamp</strong>"'dir. Tabloların SQL'deki gibi bir yapısı olmadığını söylemiştik, işte bu nedenle <strong>Column</strong> içerisinde <strong>name</strong> ve <strong>value</strong> değerleri bulunur <strong>timestamp</strong> ise karışıklığı önlemek içindir. Tüm yapının anlaşılması için her hangi bir dilde bulunan <strong>Array</strong> veya <strong>hash dictionary</strong>'den faydalanabiliriz. Bir key içerisinde istediğiniz kadar <strong>Column</strong> tanımlayabilirsiniz.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #000088;">$Keyspace</span> <span style="color: #339933;">=</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'ColumnFamily'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'Key'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'ad'</span> <span style="color: #339933;">=&gt;</span>  <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Timu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1270663849'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'soyad'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Eren'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1270663849'</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">  Keyspace = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>
    ColumnFamily = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>
      Key = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>
          ad = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'value'</span> = <span style="color: #483d8b;">'Timu'</span>, <span style="color: #483d8b;">'timestamp'</span> = <span style="color: #483d8b;">'1270663849'</span><span style="color: black;">&#41;</span>,
          soyad = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'value'</span> = <span style="color: #483d8b;">'Eren'</span>, <span style="color: #483d8b;">'timestamp'</span> = <span style="color: #483d8b;">'1270663849'</span><span style="color: black;">&#41;</span>
      <span style="color: black;">&#41;</span>
    <span style="color: black;">&#41;</span>
  <span style="color: black;">&#41;</span></pre></div></div>

<p><strong>Column</strong> içerisinde yer alan <strong>timestamp</strong>, verinin tutarlılığını sağlamak için bulunmaktadır ve istek sırasında <strong>istemci tarafından gönderilir</strong>. Eğer Cassandra'ya aynı anda verinin güncellemesi için iki istek gönderilir ancak bu isteklerden biri network problemleri veya farklı data center'lardan gönderilmesi nedeni ile cassandra'ya geç ulaşır ise timestamp değeri mevcut verinin üzerinde bulunan timestamp değerinden küçük olacağından güncelleme işlemi <strong>yapılmayacaktır</strong>. Cassandra üzerindeki verilere "<strong>Key</strong>"'ler ile ulaşabileceğinizi söylemiştik, <strong>isterseniz bir Key içerisinde bulunan Column'lardan tümüne veya bir kısmına erişebilirsiniz.</strong></p>
<h2>SuperColumn?</h2>
<p><strong>SuperColumn</strong>'ları <strong>Key</strong>'ler içerisinde bulunan bir <strong>ColumnFamily</strong> olarak düşünebilirsiniz. <strong>ColumnFamily</strong> cassandra yapılandırma dosyasında (<strong>storage-conf.xml</strong>) tanımlanır ve SuperColumn olup olmadığı <strong>ColumnType</strong> öz niteliğinde belirtilir.<br />
<strong>ColumnType</strong> değeri "<strong>Super</strong>" verilir ise <strong>o ColumnFamily bir SuperColumn</strong> demektir. Burada dikkat etmeniz gereken <em>ColumnFamily'i SuperColumn olarak tanımladığınızda Key içerisinde Column türünden veri barındıramazsınız.</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #000088;">$Sinelist</span> <span style="color: #339933;">=</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">// Keyspace</span>
    <span style="color: #0000ff;">'Users'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">// ColumnFamily </span>
      <span style="color: #0000ff;">'timu'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">// Key</span>
        <span style="color: #0000ff;">'information'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">// SuperColumn, similar as ColumnFamily</span>
          <span style="color: #0000ff;">'ad'</span> <span style="color: #339933;">=&gt;</span>  <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Timu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1270663849'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// Column</span>
          <span style="color: #0000ff;">'soyad'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Eren'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1270663849'</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// Column</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'images'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">// another SuperColumn</span>
          <span style="color: #0000ff;">'thumbnail'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'value'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'http://static.sinelist.com/users/xxxx.jpg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1270663849'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span> 
      <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tıpkı <strong>ColumnFamily</strong> içerisinde ki <strong>Key</strong>'e ait sütunların tamamına veya bir kısmına nasıl erişiyor isek aynı şekilde <strong>SuperColumn</strong> için de erişebiliriz. SQL'de bulunan tablolar arası ilişkiler Cassandra üzerine bulunmamaktadır, dolayısı ile veriler arası ilişkileri uygulama tarafında halletmek zorundasınız.</p>
<h2>Sıralama</h2>
<p>Şu ana kadar <strong>Cassandra</strong>'nın verileri nasıl organize ettiğini anlamış olduk. Ancak dikkat etmemiz gereken bir unsur daha var ki o da<br />
<strong>sıralama</strong>. <em>Cassandra'ya verinizi insert ettiğinizde nasıl bir sıralama ile tutması gerektiğini söyleyebilirsiniz</em>, böylece veriyi her zaman sıralı olarak alabilirsiniz.</p>
<p><strong>Cassandra</strong> üzerine bulunan <strong>Column'lar</strong> her zaman <em>Column adına</em> göre sıralı olarak tutulur. Bu sıralama <strong>storage-conf.xml</strong> dosyasında ColumnFamily tanımlanırken <strong>CompareWith</strong> öz niteliğine verilen değer ile belirlenir, cassandra ön tanımlı olarak <strong>BytesType</strong>, <strong>UTF8Type</strong>, <strong>LexicalUUIDType</strong>, <strong>TimeUUIDType</strong>, <strong>AsciiType</strong>, ve <strong>LongType</strong> sıralama methodlarını kullanabilir. Bu yöntemlerden her hangi birini seçtiğinizde dikkat etmeniz gereken şey <em>Column adlarının</em> belirtilen sıralama algoritması ile uyumlu olması gerektiğidir. Eğer <strong>CompareWith</strong> parametresi <strong>LongType</strong> ise sütun adları <strong>64bit (8 byte)</strong> integer uzunluğunda olmak zorundadır. <em>Sıralama her zaman büyükten küçüğe doğrudur</em>.</p>
<p>Eğer ColumnFamily bir <strong>SuperColumn</strong> ise <strong>CompareWith</strong> parametresi <strong>Key</strong> isimlerini etkiler ve sıralama key'ler için yapılır. Sütünların sıralanması ise <strong>CompareSubcolumnsWith</strong> parametresi ile belirtilir.</p>
<h2>Sayfalama</h2>
<p><strong>Cassandra</strong> ile çalışırken sayfalama yapmak istediğinizde ortaya bir sorun çıkar, bu sorun SQL'den alışık olduğumuz <strong>offset değerinin sayısal bir değer olmamasından kaynaklanır</strong>, <em>Cassandra için offset değeri bir key</em> olmalıdır, Cassandra'ya şu kadar kayıttan sonra bana 10 tane kayıt ver diyemez ancak şu kayıt ile birlikte bana 10 tane kayıt ver diyebilirsiniz. Burada dikkat etmeniz gereken cassandra size verdiği veriler içerisinden belirtmiş olduğunuz <strong>key'e ait verilerin de bulunduğu</strong> bu yüzden sayfalama yaparken eğer başlangıç değeri verilmemiş ise 10 tane verilmiş ise 11 tane kayıt çekip başlangıç bilgisi verilen kayıdın kullanıcıya döndürülecek cevap içerisinden çıkartmanız gerekebilir.</p>
<h2>Replikasyon</h2>
<p>Cassandra içerisinde replikasyon için 3 adet yöntem bulunmaktadır, bunlar <strong>RackUnaware</strong>, <strong>RackAware</strong> ve <strong>DatacenterShard</strong>'dır. Rackaware eğer birden fazla data center ile çalışıyor ve içerisinde kendimize ait bir network kurabilmiş isek faydalıdır aksi halde bir anlamı yoktur. Bir Cassandra makinesine gelen yazma isteği replikasyona tabii tutulacak ise replikasyon methoduna göre bir node seçilir eğer data center içerisinde her hangi bir n<strong>etwork kurulumuna gitmemiş isek RackUnaware</strong> yöntemi bizim için kullanışlı olacaktır. Bu yöntem Cassandra kurulumlarından bir tanesini rastgele seçerek replikasyonu gerçekleştirecektir. Eğer kendi networkümüz var ve replikaslikasyon yöntemi olarak RackAware kulanırsak, cassandra r<strong>eplikasyon için önce farklı bir data center</strong> da bulunan bir node aramaya çalışır bulursa replikasyonu gerçekleştirir, eğer bulamaz ise bu sefer <strong>aynı data center içerisinden farklı bir rack</strong> bulmaya çalışır ve bulursa replikasyonu gerçekleştirir. Cassandra data center'ları ve Rack'leri bulabilmek için gossip (dedikodu) ile oluşturduğu node listesi içerisindeki ip adreslerine bakarak karar verir. Node listesindeki ip adresinin her birinin <strong>2 nci byte'ı kendi ip adresinin 2 nci byte'ı ile aynı ise ve 3'ü byte'ı kendi ip adresinin 3'ncü byte'ından farklı ise aynı data center</strong> içerisinde farklı bir rack,<strong> eğer 2 nci byte'ı kendi ip adresinin 2 nci byte'ından farklı ise, node'un farklı bir data center</strong> da olduğuna karar verir. <strong>RackAware de öncelik her zaman  farklı bir data center'a replikasyonun gerçekleştirilmesidir</strong>. Eğer replicationFactor 2 ve daha fazla verilirse öncelik farklı datacenter ve farklı rack'dir. </p>
<p>Data center 1 (ip aralığı 192.168.1.1 den 192.168.255.254)<br />
Rack 1: (ip aralığı 192.168.1.40 den 80)<br />
  node1:   192.168.1.40<br />
  none:2   192.168.1.44<br />
  none:3   192.168.1.48</p>
<p>Rack 2: (ip aralığı 192.168.2.40 den 80)<br />
  node1:   192.168.2.40<br />
  none:2   192.168.2.44<br />
  none:3   192.168.2.48</p>
<p>Data center 2 (ip aralığı 192.167.1.1 den 192.167.255.254)<br />
Rack 3: (ip aralığı 192.167.1.40 den 80)<br />
  node1:   192.167.1.40<br />
  none:2   192.167.1.44<br />
  none:3   192.167.1.48</p>
<p>Rack 4: (ip aralığı 192.167.2.40 den 80)<br />
  node1:   192.167.2.40<br />
  none:2   192.167.2.44<br />
  none:3   192.167.2.48</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/OfO7Uyp9HBM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/cassandra/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/cassandra</feedburner:origLink></item>
		<item>
		<title>Tekerleği yeniden keşfetmek yada mevcut olanları sormak</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/a5u3-6IB8WE/tekerlegi-yeniden-kesfetmek-yada-mevcut-olanlari-sormak</link>
		<comments>http://selam.sonsuzdongu.com/tekerlegi-yeniden-kesfetmek-yada-mevcut-olanlari-sormak#comments</comments>
		<pubDate>Tue, 23 Feb 2010 16:47:40 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[yazılım]]></category>
		<category><![CDATA[hdfs]]></category>
		<category><![CDATA[mogilefs]]></category>
		<category><![CDATA[sinefs]]></category>
		<category><![CDATA[tekerlek]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=597</guid>
		<description><![CDATA[Sinelist adına büyük dosyaların efektif biçimde kullanıcılara sunulabilmesi için bir dosya sistemine ihtiyacım var ve bu dosya sisteminin ölçeklenebilir ve hata tölaranslı olması gerekiyor. mogileFS vb. benzeri dosya sistemleri genel olarak küçük dosyalarda oldukça başarılılar ancak büyük dosyalarda talepte bulunan kullanıcı sayısı da göz ününe alındığında disk vb. fiziksel sınırlarımızıda düşünürsek aynı başarıyı gösteremiyorlar. Bu [...]]]></description>
			<content:encoded><![CDATA[<p>Sinelist adına büyük dosyaların efektif biçimde kullanıcılara sunulabilmesi için<br />
bir dosya sistemine ihtiyacım var ve bu dosya sisteminin ölçeklenebilir ve hata tölaranslı olması gerekiyor.</p>
<p><a title="mogileFS" href="http://www.mogilefs.org">mogileFS</a> vb. benzeri dosya sistemleri genel olarak küçük dosyalarda oldukça başarılılar ancak büyük dosyalarda talepte bulunan kullanıcı sayısı da göz ününe alındığında disk vb. fiziksel sınırlarımızıda düşünürsek aynı başarıyı<br />
gösteremiyorlar.</p>
<p>Bu neden ile kullanıcı düzeyinde (kernel ile iletişime direk olarak ihtiyaç duymadan) bir dosya sistemi düşünmekteyim. Temellerini mogileFS'den alan sistem, mogileFS'den biraz farklı olarak kullanıcının erişmek istediği dosyayı disk üzerinde tek bir dosya olarak değil, 10 Mb'lik parçalar halinde pek çok farklı fiziksel disk üzerine<br />
dağıtarak aynı dosyaya farklı zamanlarda erişmek isteyen kişiler için daha yüksek başarım sağlamayı hedefliyor.</p>
<p>mogileFS'in aksine dosya tek bir parçadan oluşmadığı halde dosyayı belirten işaretçin karşılığında her bir parçanın hangi fiziksel makinelerde olduğu, parça büyüklüğü mutlaka SIRALI bir şekilde dosya hakkında bilgi isteyen izleyiciye döndürülmesinin ardından, izleyici her bir parça için sıra ile ilgili node'lardan ilgili dosyayı HTTP ile istekde bulunacak ve network üzerinden edinilen dosya parçası istemciye gönderilmeye başlanacak her bir parça bittikden sonra bir diğer parça için bir başka node'a  gidilerek bu süreç ilgili dosya için tüm parçaları kullanıcıya iletilene kadar devam edecek.</p>
<p>Yukarıda tarif etmeye çalıştığım gibi bir dosya sistemi geliştirmeyi denemeden önce hali hazırda mevcut dosya sistemleri ile büyük dosyalar (1GB ve üzeri) için haşır neşir olmuş, bilgisi ve tecrübesi olanlar yol gösterebilirse sevinirim.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/a5u3-6IB8WE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/tekerlegi-yeniden-kesfetmek-yada-mevcut-olanlari-sormak/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/tekerlegi-yeniden-kesfetmek-yada-mevcut-olanlari-sormak</feedburner:origLink></item>
		<item>
		<title>Solr ile rastgele sonuçlar</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/ReiXU_5g6r8/solr-ile-rastgele-sonuclar</link>
		<comments>http://selam.sonsuzdongu.com/solr-ile-rastgele-sonuclar#comments</comments>
		<pubDate>Fri, 15 Jan 2010 15:53:45 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=592</guid>
		<description><![CDATA[Eğer arama motoru olarak solr kullanıyor ve mevcut veri index'iniz üzerinde rastgele sıralı sonuç getirmek isterseniz iki yönteminiz var, birincisi schema.xml içerisinde bir random sort field'i tanımlamak diğeri uygulamanız üzerinde bu işlemi çözmek, (her ikisinide yapabilirsiniz elbette) random sort alanı sadece verinizi index'lerken veya index'den çıkartırken oluşturulur ve iki veri güncellemesi arasında aynı sıralamayı alırsınız. [...]]]></description>
			<content:encoded><![CDATA[<p>Eğer arama motoru olarak solr kullanıyor ve mevcut veri index'iniz üzerinde rastgele sıralı sonuç getirmek isterseniz iki yönteminiz var, birincisi schema.xml içerisinde bir random sort field'i tanımlamak diğeri uygulamanız üzerinde bu işlemi çözmek, (her ikisinide yapabilirsiniz elbette) random sort alanı sadece verinizi index'lerken veya index'den çıkartırken oluşturulur ve iki veri güncellemesi arasında aynı sıralamayı alırsınız. Bu sizin için yeterli değilse izleyebileceğiniz bir diğer yol, arama kriterleriniz ile sadece 1 satır sonuç dönecek şekilde gerçekleştirmek ve arama kriterlerlerinize uygun olan sonuç sayısını öğrenip bu sayı içerisinden bir başlangıç noktasını rastgele belirledikten sonra tekrar istediğiniz satır sayısı ile aramayı gerçekleştirmek. </p>
<p>1 = Arama kriterlerine göre arama yap ve kaç sonuç olduğunu öğren  (100)<br />
2 = istediğim sonuç sayısını toplam sonuç sayısından çıkart,  (100-90)<br />
3 = geriye kalan sonuç sayısından rastgele bir başlangıç noktası seç (start = random.intchoice<br />
4 = aramayı tekrarla</p>
<p>Kolay gelsin.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/ReiXU_5g6r8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/solr-ile-rastgele-sonuclar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/solr-ile-rastgele-sonuclar</feedburner:origLink></item>
		<item>
		<title>sineapi</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/uT6Nq_KIxwQ/sineapi</link>
		<comments>http://selam.sonsuzdongu.com/sineapi#comments</comments>
		<pubDate>Mon, 04 Jan 2010 09:53:39 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=590</guid>
		<description><![CDATA[Sinelist projesini bir türlü tamamlayamamış ve henüz yapmak istediklerimin %10'nu bile yapamamış olmama rağmen bir süredir bilmemkaçıncı versiyonunu yazmaya başladım, bu sefer kullandığım teknik ise veri tabanı yapısını schemaless bir yapıya çevirmek, herşeyi json objeleri olarak saklamak ve kullanmak. Bununla birlikte daha ölçeklenebilir bir yapı için proje içerisinde yer alan işlevlerin tamamını web arabiriminden çıkartarak [...]]]></description>
			<content:encoded><![CDATA[<p>Sinelist projesini bir türlü tamamlayamamış ve henüz yapmak istediklerimin %10'nu bile yapamamış olmama rağmen bir süredir bilmemkaçıncı versiyonunu yazmaya başladım, bu sefer kullandığım teknik ise veri tabanı yapısını schemaless bir yapıya çevirmek, herşeyi json objeleri olarak saklamak ve kullanmak. Bununla birlikte daha ölçeklenebilir bir yapı için proje içerisinde yer alan işlevlerin tamamını web arabiriminden çıkartarak <a href="http://github.com/selamtux/sineapi">sineapi</a> ismini verdiğim bir api'ya geçirdim. projenin tüm ihtiyaçlarını arka tarafta bu api ile hazırlayarak web arabiriminden kullanıcılara sunmayı planlıyorum. Her ne kadar api açık kaynaklı olsada zamanla tüm ihtiyaçlar için api'ı kullanacağımdan projenin şimdilik belirsiz bir noktasında geliştirmelerin tamamını dışarıya açmayabilirim, ancak mevcut kısmı incelendiğinde schemaless bir projenin nasıl olabileceği görülebilinir.  Eğer bir servis geliştirmeyi düşünüyor, bu servisi mobil cihazlar, masaüstü ve diğer web uygulamalarının yazılabilmesi için bir api ile verinizi erişime açmak istiyorsanız mevcut halini şu an itibari ile api yetkilendirme için kullanabilirsiniz.  </p>
<p>Not: Her türlü kod gözden geçirmeyi başımın üstünde tutarım.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/uT6Nq_KIxwQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/sineapi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/sineapi</feedburner:origLink></item>
		<item>
		<title>validpie</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/DjkEPN_Azjg/validpie</link>
		<comments>http://selam.sonsuzdongu.com/validpie#comments</comments>
		<pubDate>Tue, 22 Dec 2009 20:19:05 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[özgür yazılım]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[validpie]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=585</guid>
		<description><![CDATA[ValidPie hem yeni iş yerinde, sinelist'in api kısmında kullanmak üzere geliştirdiğim bir veri doğrulama kütüphanesidir, basitçe symfony'nin validator serisinin python versiyonudur diyebiliriz ancak bir form kütüphanesi taşımamaktadır. amaç sadece input validation yapabilmekdir. elbette hali hazırda python için bir çok araç bulunmakta incelediklerim arasında formEncode vb. kütüphanelerde var ancak hiç birisi bir türlü tatmin etmedi, yazıverdim [...]]]></description>
			<content:encoded><![CDATA[<p>ValidPie hem yeni iş yerinde, sinelist'in api kısmında kullanmak üzere geliştirdiğim bir veri doğrulama kütüphanesidir, basitçe symfony'nin validator serisinin python versiyonudur diyebiliriz ancak bir form kütüphanesi taşımamaktadır. amaç sadece  input validation yapabilmekdir. elbette hali hazırda python için bir çok araç bulunmakta incelediklerim arasında formEncode vb. kütüphanelerde var ancak hiç birisi bir türlü tatmin etmedi, yazıverdim bende.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> validpie.<span style="color: black;">base</span> <span style="color: #ff7700;font-weight:bold;">import</span> ValidPieBasicSchema
<span style="color: #ff7700;font-weight:bold;">from</span> validpie.<span style="color: black;">base</span> <span style="color: #ff7700;font-weight:bold;">import</span> ValidPieString
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> UserValidatorSchema<span style="color: black;">&#40;</span>ValidPieBasicSchema<span style="color: black;">&#41;</span>:
   <span style="color: #ff7700;font-weight:bold;">def</span> setUp<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, options=<span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>, messages=<span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>:
         <span style="color: #008000;">self</span>.<span style="color: black;">setValidPies</span><span style="color: black;">&#40;</span><span style="color: black;">&#123;</span>
               <span style="color: #483d8b;">'username'</span>: ValidPieString<span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">'required'</span>: <span style="color: #008000;">True</span>, <span style="color: #483d8b;">'min_length'</span>: <span style="color: #ff4500;">7</span> <span style="color: black;">&#125;</span>, <span style="color: black;">&#123;</span><span style="color: #483d8b;">'required'</span>: <span style="color: #483d8b;">'boş bırakamazsınız'</span>, <span style="color: #483d8b;">'min_length'</span>: <span style="color: #483d8b;">'kullanıcı adınız çok kısa'</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>   
         <span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
validatorSchema = UserValidatorSchema<span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">'username'</span>: <span style="color: #483d8b;">'aaa'</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> validatorSchema.<span style="color: black;">isValid</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">for</span> error <span style="color: #ff7700;font-weight:bold;">in</span> validatorSchema.<span style="color: black;">getErrors</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
         <span style="color: #ff7700;font-weight:bold;">print</span> error.<span style="color: black;">getMessage</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Kullanmak isterseniz kendisi <a href="http://code.google.com/p/validpie">http://code.google.com/p/validpie</a> adresinde ikamet etmektedir.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/DjkEPN_Azjg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/validpie/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/validpie</feedburner:origLink></item>
		<item>
		<title>Özgür yazılım, özgür toplum</title>
		<link>http://feedproxy.google.com/~r/timu/zirvalama-tahtasi/~3/U3otNxOyMIo/ozgur-yazilim-ozgur-toplum</link>
		<comments>http://selam.sonsuzdongu.com/ozgur-yazilim-ozgur-toplum#comments</comments>
		<pubDate>Tue, 08 Dec 2009 10:47:41 +0000</pubDate>
		<dc:creator>Timu EREN</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://selam.sonsuzdongu.com/?p=581</guid>
		<description><![CDATA[Richard stallman'ın yazılarından hazırlanan bu kitabı fazlamesai'de haberini gördüğüm gün siparişini vermiştim ve bu gün elime ulaştı. mutluyum heyecanlıyım. Yazılım'ın sadece bir "iş" ve bu işin etrafındaki yönelimler olmadığını zaman zaman hatırlama ihtiyacı hissediyordum, benim gibi zaman zaman "ne yapıyoruz" diye düşünenler için göz attığım kadarı ile iyi bir kitap olduğu kanaatindeyim.]]></description>
			<content:encoded><![CDATA[<p>Richard stallman'ın yazılarından hazırlanan bu kitabı <a href="http://www.fazlamesai.net">fazlamesai'</a>de haberini gördüğüm gün siparişini vermiştim ve bu gün elime ulaştı. mutluyum heyecanlıyım. Yazılım'ın sadece bir "iş" ve bu işin etrafındaki yönelimler olmadığını zaman zaman hatırlama ihtiyacı hissediyordum, benim gibi zaman zaman "ne yapıyoruz" diye düşünenler için göz attığım kadarı ile iyi bir kitap olduğu kanaatindeyim.</p>
<img src="http://feeds.feedburner.com/~r/timu/zirvalama-tahtasi/~4/U3otNxOyMIo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://selam.sonsuzdongu.com/ozgur-yazilim-ozgur-toplum/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://selam.sonsuzdongu.com/ozgur-yazilim-ozgur-toplum</feedburner:origLink></item>
	</channel>
</rss>
